██░ ██ ▒█████ █ ██ ██████ ▓█████ ▒█████ █████▒ ██████ ▄▄▄ ▄████▄ ██░ ██ ▄▄▄
▓██░ ██▒▒██▒ ██▒ ██ ▓██▒▒██ ▒ ▓█ ▀ ▒██▒ ██▒▓██ ▒ ▒██ ▒ ▒████▄ ▒██▀ ▀█ ▓██░ ██▒▒████▄
▒██▀▀██░▒██░ ██▒▓██ ▒██░░ ▓██▄ ▒███ ▒██░ ██▒▒████ ░ ░ ▓██▄ ▒██ ▀█▄ ▒▓█ ▄ ▒██▀▀██░▒██ ▀█▄
░▓█ ░██ ▒██ ██░▓▓█ ░██░ ▒ ██▒▒▓█ ▄ ▒██ ██░░▓█▒ ░ ▒ ██▒░██▄▄▄▄██ ▒▓▓▄ ▄██▒░▓█ ░██ ░██▄▄▄▄██
░▓█▒░██▓░ ████▓▒░▒▒█████▓ ▒██████▒▒░▒████▒ ░ ████▓▒░░▒█░ ▒██████▒▒ ▓█ ▓██▒▒ ▓███▀ ░░▓█▒░██▓ ▓█ ▓██▒
▒ ░░▒░▒░ ▒░▒░▒░ ░▒▓▒ ▒ ▒ ▒ ▒▓▒ ▒ ░░░ ▒░ ░ ░ ▒░▒░▒░ ▒ ░ ▒ ▒▓▒ ▒ ░ ▒▒ ▓▒█░░ ░▒ ▒ ░ ▒ ░░▒░▒ ▒▒ ▓▒█░
▒ ░▒░ ░ ░ ▒ ▒░ ░░▒░ ░ ░ ░ ░▒ ░ ░ ░ ░ ░ ░ ▒ ▒░ ░ ░ ░▒ ░ ░ ▒ ▒▒ ░ ░ ▒ ▒ ░▒░ ░ ▒ ▒▒ ░
░ ░░ ░░ ░ ░ ▒ ░░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░░ ░ ░ ▒
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░
░hi, i'm sacha
I'm a software engineer in France. At work I take on the foundational jobs: framework migrations, faster tests and CI, performance, design systems. I measure before acting.
At home I build my own tools, from a web browser to a GUI toolkit, and I run them on my own homelab.

now building

wren
A small Windows browser where WebAssembly runs everything.
papier
A fast clipboard manager for Linux, on gui_toolkit
gui_toolkit
A fast, native, immediate-mode GUI toolkit.
opencode_native
A native desktop client for the opencode server, for Windows and Linux. Independent: not built by the OpenCode team, not affiliated with them.
latest writing
- The same dog with a nicer coat: why I left YAML for a key=value file
Why I replaced a five-field YAML file with key=value lines: what generic formats like YAML, JSON and XML cost in code, bugs and attack surface.
- A wrong abstraction is worse than none: fork, files and the myth of the resource
fork, "everything is a file" and the idea of a resource: how a cheap mechanism becomes a universal abstraction, and what it costs.
- The Unix Philosophy: Making a duck, a mouse and an elephant bark like a dog
Where the Unix text stream comes from, and why one untyped interface for every program makes a duck, a mouse and an elephant bark like a dog.