A fast, modern web app for optimizing SVG files. Powered by SVGO v4, running entirely in the browser.
- Upload via drag & drop, file picker, or paste (Ctrl+V / Cmd+V)
- 43 optimization options with individual toggles, grouped by category
- Live preview with split view: code and visual side by side, resizable panels
- Size comparison showing original vs. optimized file size with percentage savings
- Multiple export formats: SVG download, SVG code, Data URL, CSS
background-image, CSSmask-image, CSSlist-style-image - Theme support: system preference, light, and dark mode
- Client-side only: no server, no uploads - everything runs in a Web Worker in your browser
- Vite + React + TypeScript
- Tailwind CSS v4 + shadcn/ui
- SVGO v4 in a Web Worker
npm install
npm run devnpm run buildThe production build is output to dist/.
Deployed on Railway, which builds and deploys every push to main.
-
.railway/railway.ts: Infrastructure as Code for the Railway service (GitHub source,/healthhealth check, EU West region, custom domain). Railway does not read it on deploy. After changing it, apply it from a directory linked to the "SVG Studio" project:railway link # once: select the "SVG Studio" project, production environment railway config plan # review: must only list the svg-studio service railway config apply
New custom domains can't be created this way: add them in the Railway dashboard (service → Settings → Networking) first, then list them in
domainssorailway config planreports no changes. -
Builder: Railpack, Railway's default for new services.
-
Caddyfile: Railpack servesdist/with Caddy. This replaces Railpack's default config with the same setup, plus long-lived cache headers for the content-hashed files in/assets.{{.DIST_DIR}}and{{.IndexFallback}}are filled in by Railpack at build time. -
Node version: taken from
engines.nodeinpackage.json.
No environment variables are needed.
MIT