Skip to content

🪄 Private-first image conversion within browsers, powered by WASM & Golang

Notifications You must be signed in to change notification settings

brunoluiz/imagewand

Repository files navigation

ImageWand

Private-first image conversion within browsers, powered by WASM ✨

Photo by Mark Tegethoff

Summary

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.

How to run locally

  • Install NodeJS, Golang and TinyGo
  • Run make watch-html
  • Run make watch-wasm (only works for standard mode)
  • Run make watch-css: required for UI changes due to Tailwind
  • The content will be served at localhost:3000

Select custom binary on load (TinyGo or Golang)

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.

References