IT-Tools
Everyone has a bookmark folder of single-purpose websites: a JSON formatter, a base64 decoder, a JWT inspector, a UUID generator, a crontab explainer. They are all covered in ads, several are abandoned, and at least one of them is quietly logging what you paste into it.
IT-Tools is all of them, in one container, on your own network.
IT-Tools is a collection of handy tools for developers, with a genuinely good interface.
- 80+ tools — converters, generators, encoders, parsers, network calculators
- Runs client-side, so what you paste stays in your browser
- Searchable with a keyboard-first palette
- Favourites pinned to the top, stored per browser
- Dark mode, and a layout that works on a phone
- One container, no state — nothing to configure, nothing to back up
What is actually in it
Enough to replace most of that bookmark folder:
| Category | Examples |
|---|---|
| Crypto | Hashes, bcrypt, HMAC, RSA key pairs, password generator |
| Converters | Base64, JSON ↔ YAML ↔ TOML, timestamps, number bases, colours |
| Web | JWT parser, URL encode/decode, MIME types, Basic auth generator |
| Network | Subnet calculator, IPv4/IPv6 tools, MAC lookup |
| Text | Diff, case conversion, regex tester, Lorem ipsum |
| Dev | Crontab generator, chmod calculator, Docker run ↔ Compose converter, SQL formatter |
| Media | QR codes, SVG placeholders |
The Docker run to Compose converter is worth knowing about on its own — most upstream projects document docker run, and half the work in writing the guides in this documentation is translating those into Compose files.
Prerequisites
- Docker and the Compose plugin — see the Docker guide
1. The Compose file
Upstream documents docker run:
docker run -d --name it-tools --restart unless-stopped -p 8080:80 ghcr.io/corentinth/it-tools:latest
As Compose:
services:
it-tools:
image: ghcr.io/corentinth/it-tools:latest
container_name: it-tools
restart: unless-stopped
ports:
- 8084:80
That is the entire deployment. No volumes, no environment variables, no database — it is a static site served by nginx, and every tool runs in your browser.
Port 8080 is contested by Glance, qBittorrent and cAdvisor, so this uses 8084 on the host.
The image is also on Docker Hub as corentinth/it-tools:latest if you prefer.
Browse to http://<host-ip>:8084.
2. Verify it runs locally
The same check as BentoPDF, and worth doing once: open developer tools, go to the Network tab, and hash a string or decode a JWT.
No requests should leave the page. That is the entire reason to self-host this rather than use the public instance — a JWT pasted into a random website is a credential handed to a stranger, and people do it constantly.
Disconnect the machine from the network and the tools keep working.
3. Pin your favourites
Click the star on any tool and it moves to a favourites section at the top.
Stored in browser local storage, not on the server — so favourites are per-browser, not per-user, and clearing site data resets them. With no accounts and no database, that is the trade.
4. Put it behind Traefik
services:
it-tools:
image: ghcr.io/corentinth/it-tools:latest
container_name: it-tools
restart: unless-stopped
networks:
- traefik-net
labels:
- "traefik.enable=true"
- "traefik.http.routers.it-tools.rule=Host(`tools.home.lan`)"
- "traefik.http.routers.it-tools.entrypoints=https"
- "traefik.http.routers.it-tools.tls.certresolver=letsencrypt"
- "traefik.http.services.it-tools.loadbalancer.server.port=80"
- "traefik.docker.network=traefik-net"
networks:
traefik-net:
external: true
Serve it over HTTPS — some browser crypto APIs require a secure context, and a few tools will misbehave on plain HTTP.
Nothing to protect with Tinyauth: no accounts, no stored data, no state. A login here would be friction with no security benefit. A short hostname matters more, since the whole point is reaching it faster than searching for an online equivalent.
Updating
About as safe as updating gets — no database, no migrations, no config. New releases mostly add tools.
Hard-refresh the browser afterwards (Ctrl+Shift+R); the static assets cache aggressively.
Backup
Nothing to back up. Keep the six-line Compose file in Git and the service is fully reproducible.
Troubleshooting
Port 8080 already allocated. Something else has it. ss -tlnp | grep 8080, then remap the host side as above.
A crypto tool fails or does nothing. Serve over HTTPS. crypto.subtle is unavailable in insecure contexts.
Favourites disappeared. Local storage was cleared, or you are in a different browser or a private window. Expected behaviour.
New tools missing after an update. Cached assets. Hard refresh.
Blank page behind the reverse proxy. Check you are proxying to port 80, the container's port, not the host mapping.
Where this sits in my lab
IT-Tools runs on the Docker VM on my first Proxmox node at tools.home.lan, LAN-only, alongside BentoPDF — the two "stop using a random website for this" services.
Both exist for the same reason. The online versions are free because the input is the product, and the input is frequently a token, a hash, or a config file you should not be pasting into someone else's server. Two containers, no state between them, and the habit goes away.