Private-first image conversion within browsers, powered by WASM ✨
Many image conversion websites require users to upload images to a server, which then converts it and send to the user. The problem is that images might get stored for an indefinite amount of time in these servers, which is not great for privacy. ImageWand does all the image conversion on the client-side, leveraging WebAssembly.
This project was part of my experiments with Golang & WebAssembly. It obviously have space for improvements, so please do open issues if you find that something can be improved. It can be compiled using Golang or TinyGo, although the deployed version uses Golang for now due to Vercel limitations.
More details about the project's implementation at ImageWand: privacy-first image conversion experiment with Golang & WASM.
- Install NodeJS, Golang and TinyGo
- Run
make watch-html
- Run
make watch-wasm
(only works forstandard
mode) - Run
make watch-css
: required for UI changes due to Tailwind - The content will be served at localhost:3000
When loading the application, it will try to run using tinygo
. If you wish to use go
, add ?t=go
. See all supported ones at ./app/js/imagewand.js.
- Go, WebAssembly, HTTP requests and Promises
- MDN: Transferable objects
- Running Go in the Browser with WASM and Web Workers
- Using WebAssembly with Web Workers
- Shrink Your TinyGo WebAssembly Modules by 60%
- Are We Wasm Yet ? - Part 1
- Are We Wasm Yet ? - Part 2
- Standardizing WASI: A system interface to run WebAssembly outside the web
- WASI
- WebAssembly Linear Memory example
- How can I use GitHub Actions with Vercel?