Case study · 2026 to present
ByteMorph
The problem
Every online file converter asks you to upload the file first. That is a bad trade for anything you would rather not hand to a stranger: a scanned document, a photo with GPS coordinates in its EXIF, an export of your own data. The file is only being converted, but it ends up on someone else’s disk to get there.
ByteMorph does the conversion in process. Images go through a pure-Dart codec, so there is no native dependency and no server leg. It reads a wider set of formats than it writes, including WebP, PSD and the PNM family, and writes PNG, JPEG, GIF, BMP, TIFF, TGA and ICO. Audio and video conversion runs on a bundled ffmpeg.wasm engine in the browser, or a local ffmpeg binary on desktop, and those targets only appear when the engine is actually there.
The web build bundles CanvasKit locally and registers a service worker rather than reaching for a Google CDN, so it installs to a home screen and keeps working with no network at all. Beyond conversion it can inspect and strip the metadata a photo carries, wrap an image into a one-page PDF, and compress a JPEG down to a size budget by lowering quality and then resolution until it fits.
Stack and tooling
| Language | Dart 3.12, Flutter 3.44 |
| Conversion | Pure-Dart image codec, bundled ffmpeg.wasm for media |
| Targets | Web, Windows, macOS, Linux, Android, iOS |
| Delivery | Installable PWA with a local CanvasKit bundle, no CDN |
7
Image formats out