Deploy Omni-Tools | (Just Updated) Self-Hosted Online Tools: PDF, Image, Video, JSON and Text Utilities in the Browser
Omni-Tools self-hosted online tools: PDF, image, video, JSON, text
omni-tools
Just deployed
Deploy and Host Omni-Tools on Railway
Built for an LLM agent to deploy and use. The deploy form has no fields and nothing to configure. Omni-Tools is a self-hosted collection of everyday online utilities: PDF tools (merge, split, compress), image and video tools (resize, convert, compress, trim), audio, text, JSON, CSV, list, time and number tools, with no ads and no tracking (MIT). Files are processed in the visitor's browser, so a deploy gives a team a private, always-on toolbox at its own URL with no account and no database.
This template runs Omni-Tools from a wrapper image over the official iib0011/omni-tools image (built from main after v0.7.0), pinned by digest. People use it as a self-hosted alternative to ad-supported online converters and to IT-Tools for compressing a PDF, converting an image, formatting JSON or trimming a video without uploading the file anywhere.
About Hosting Omni-Tools
Omni-Tools is a static web app: the server only delivers files, and the tools run in the browser (WebAssembly for the PDF and video engines), so the files a person works on never reach the server. That is why the template has no volume and no variables: there is no server-side state to lose on a redeploy. The upstream image serves from stock nginx on a fixed port 80, which cannot follow Railway's injected PORT. The wrapper copies the built site into nginx instead, which listens on PORT over IPv4 and IPv6, compresses the JavaScript and WebAssembly bundles (the PDF engine goes from 5 MB to 2.1 MB on the wire), caches content-hashed assets for a year, answers /healthz and falls back to the app shell for client-side routes such as /string/reverse.
There is no login. Anyone who has the URL can use the tools, so keep the domain private or put an authenticating proxy in front of it if the instance should not be public.
Agent contract
- Public URL:
https://RAILWAY_PUBLIC_DOMAIN(the generated domain of theomni-toolsservice) - Private URL:
http://omni-tools.railway.internal:8080 - Credentials: none; the service has no accounts and no variables
- Auth: none. Files are processed in the user's browser, never on the server, so no request to this service changes server state.
- Health:
GET /healthzreturns 200 with the bodyok
# needs: SITE_URL, the public https URL of the omni-tools service
curl -s -o /dev/null -w "health: %{http_code}\n" "$SITE_URL/healthz"
curl -s "$SITE_URL/healthz"
curl -s -o /dev/null -w "app shell: %{http_code} %{content_type}\n" "$SITE_URL/"
curl -s "$SITE_URL/" | grep -c "OmniTools"
ASSET=$(curl -s "$SITE_URL/" | grep -o '/assets/index-[^"]*\.js' | head -1)
curl -s -H 'Accept-Encoding: gzip' -o /dev/null -w "bundle: %{http_code} %{content_type} gzip-bytes=%{size_download}\n" "$SITE_URL$ASSET"
curl -s -o /dev/null -w "tool route: %{http_code}\n" "$SITE_URL/string/reverse"
curl -s -o /dev/null -w "translations: %{http_code} %{content_type}\n" "$SITE_URL/locales/en/audio.json"
# write-auth: none - static site, no write endpoint; files are processed in the browser, not on the server
A fresh deploy prints health: 200, ok, app shell: 200 text/html, a count of lines mentioning OmniTools (1 or more), a bundle: 200 application/javascript line with a gzip byte count, tool route: 200 (the app shell answers client-side routes, as a single-page app should) and translations: 200 application/json.
Why Deploy Omni-Tools on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying Omni-Tools on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
- Agent-ready - no deployer fields, a contract block and one script an agent can run to confirm the app is up.
- Private by design - files are processed in the browser and never uploaded to the server.
- Nothing to lose - no database and no volume; a redeploy cannot damage anything.
- Light - one nginx container, measured about 3 MiB idle.
- Fast first load - gzip on the JavaScript and WebAssembly bundles and a one-year cache on hashed assets.
- Health-checked - Railway restarts the service if it stops answering
/healthz.
Common Use Cases
- Team utility toolbox - one internal URL for PDF, image, video, JSON and text chores.
- Ad-free converter - replace ad-supported online converters with a tool you host.
- Sensitive files - compress or convert documents without sending them to a third party.
- Developer helpers - format JSON, convert CSV, reverse or transform text and lists.
Dependencies for Omni-Tools Hosting
- None. A custom domain is optional.
Deployment Dependencies
Template Content
omni-tools
ghcr.io/bon5co/omni-tools-railway:latest