The problem with 90% of "online dev tools"
You paste a JWT into a random site to decode it. You paste JSON into another one to format it. You paste a private key into a third to extract the public half.
Every one of those pastes is a leak. Your token, your JSON, your key — they hit someone else's server, get logged, and sometimes get sold.
For sensitive stuff, most of us just skip online tools and open a REPL. But you don't want to python -c "import base64; ..." for the 40th time this week either.
I got tired of the tradeoff. So I built devkits.vip — a set of 162 developer tools, all running entirely in the browser. Nothing is uploaded. No crypto-js dependency. No jsrsasign. No node-forge. Just the browser's native Web Crypto API doing the heavy lifting.
The whole point:
curl -sD - https://devkits.vip/tools/jwt-verifier > /dev/nullfollowed by network-panel-verification shows zero outbound requests when you actually use it. Try it.
The numbers
| Total tools | 162 |
| Categories | 11 |
| Interactive visualizers | 4 |
| Reference pages (MIME / HTTP / regex / ASCII / status codes …) | ~495 |
| Data uploaded during typical use | 0 bytes |
Uses of crypto-js / jsrsasign / node-forge in package.json |
0 |
| JWT algorithms supported | 12 (HS/RS/PS/ES × 256/384/512) |
| PBKDF2 iterations for AES | 200,000 |
That last point is the whole thesis: everything is done with the browser's own primitives. If your browser can't do it, we don't ship it.
Five things that ended up being interesting to build
1. A JWT tool that supports every algorithm in RFC 7518
Most "JWT decoder" sites just base64-decode and hand-wave the signature. We do the actual verification, for the entire RFC 7518 algorithm family:
- HS256 / HS384 / HS512 — HMAC with a shared secret
- RS256 / RS384 / RS512 — RSASSA-PKCS1-v1_5 with an RSA public key
- PS256 / PS384 / PS512 — RSA-PSS (modern padding) with an RSA public key
- ES256 / ES384 / ES512 — ECDSA with a P-256, P-384, or P-521 public key
Paste a JWT and a public key (PEM or JWK), and you get a real signature check. The tool also flags time claims (exp / nbf / iat) and explicitly rejects alg: "none" — that classic JWT vulnerability where an attacker strips the signature and hopes the verifier accepts it.
All twelve algorithms are wired straight into crypto.subtle.sign / crypto.subtle.verify. Zero JWT libraries in package.json.
2. RSA & ECDSA key generation, without a single crypto library
The whole asymmetric-keys.ts module is 150 lines. It generates a key pair via crypto.subtle.generateKey, exports the private key as PKCS#8, the public key as SPKI, and both as JWK — all through browser APIs.
Output formats I actually needed:
-
PEM (PKCS#8 for private, SPKI for public) — for OpenSSL, Node, Go, Java, Python
cryptography - JWK — for JWT libraries, browser Web Crypto import, JWKS endpoints
- DER — hex or base64, for low-level inspection
There's also a companion "Public Key Extractor": paste a private key, get the matching public key. Useful when you inherit a .pem file with no matching .pub, or when you're about to publish a JWKS endpoint and only have the signing key on hand.
3. Regex Visualizer — the tool I wish I had in college
Regex is dense. When someone shows me ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ I want to see it decomposed, not stare at a wall of characters.
The Regex Visualizer at /visualize/regex breaks any pattern into colored tokens with plain-English explanations, and shows live match highlighting against your test string. It's less "tool," more "textbook you can play with."
4. A fake-data generator that ships as ~5KB of word lists
Every dev needs 10 fake users as CSV at some point. The usual workflow is npm install faker, write a script, run it, delete. That's fine — but if you've already got a browser tab open, an online generator wins.
The problem: most online generators are backend calls (privacy leak) or bundle faker.js (~500KB gzipped).
I inlined ~50 items per category as plain string arrays. Total: about 5KB. That's enough entropy to look real for 100 rows of users. Combined with a seeded PRNG (mulberry32), you get reproducible output — same seed = same rows, byte for byte.
25+ field types, 5 output formats:
- JSON array
- JSONL / JSON Lines
- CSV (proper quoting for commas & newlines)
- SQL INSERT statements with configurable table name
- TypeScript
type Row = { ... }+ a typed array literal
5. Password strength check that never uploads the password
Every "how strong is my password" site is a security joke: you paste your actual password into their form. Even if they don't log it, they could.
We do the entropy math locally — character-class analysis, keyboard-sequence detection, repeated-pattern detection, dictionary check — and estimate crack time under four realistic attack scenarios:
- Online, throttled (10 tries/sec)
- Online, no throttling (100 tries/sec)
- Offline fast hash — GPU cluster on SHA-1 (10 billion tries/sec)
- Offline slow hash — bcrypt cost 10 (10k tries/sec)
There's also an optional breach check against Have I Been Pwned, using their k-anonymity API. Only the first 5 hex characters of the SHA-1 hash are sent (matches ~450 hashes on average). Your actual password never touches the network, even for the breach lookup.
The rest of the toolkit (in ~10 seconds)
Rather than list all 162, here's the vibe per category:
- JSON (12) — formatter, diff, repair (fixes LLM output — trailing commas, unquoted keys, python-style True/False), JSONPath tester, schema generator (Draft 2020-12 + OpenAI function-calling + Anthropic tool_use schemas), to-TS / to-Go / to-Rust / to-Python / to-C# / to-PHP / to-Java, flatten, minifier, escape, validator, sort, XML↔JSON, YAML↔JSON, CSV↔JSON
- Encoding (9) — base64 / base32 / base58 (Bitcoin + Solana + IPFS CID v0) / URL / HTML / hex / punycode / rot13 / unicode escape
- Security (20) — everything above + AES (GCM/CBC, 128/192/256, PBKDF2 200k iterations, self-describing ciphertext), bcrypt, HMAC, hash generator (MD5/SHA-1/SHA-256/SHA-512 with streaming for multi-GB files), JWKS generator (RFC 7517, auto SHA-256 thumbprint kid per RFC 7638)
- AI & LLM (4) — cost calculator (live pricing for GPT / Claude / Gemini / DeepSeek — refreshed daily by cron), token counter, RAG text chunker (recursive / paragraph / sentence / fixed strategies), cosine similarity (pair mode + N×N matrix)
- Converters (21) — cURL to Python/Node/Go/PHP/Java, number bases (BigInt-backed), unit converters (data size, bandwidth, Bitcoin, Ethereum, dates)
- Web (17) — CIDR calculator, CSS visual generators (Grid, Flexbox, Box Shadow, Border Radius, cubic-bezier, text-shadow, glassmorphism, gradient), regex tester + replace, user-agent parser, meta tag preview (Google + Facebook + Twitter + LinkedIn cards), QR generator + reader
- PDF (10) — extract text (with CJK support — proper cmaps + geometric reading order, not pdf.js's hasEOL guesswork), merge, split, remove pages, rotate, password remover, metadata viewer, images↔PDF
- Image (19) — compressor (with target-KB binary-search mode — kills the "just under 2MB please" pain), EXIF viewer + lossless remover, format converters, resizer, cropper, favicon generator (one image → full ZIP with .ico + PNGs + apple-touch + manifest + HTML snippet), SVG optimizer (full SVGO in browser), image diff (pixelmatch)
- Text (28) — diff (with syntax highlighting for 14 languages, zero external highlight libs — I wrote a 150-line tokenizer), case converter, sort, dedup, word/char/line counter, markdown-to-HTML with the works
- Generators (14) — password, UUID v4 + v7, NanoID, ULID, KSUID, CUID2, Snowflake ID, fake data, lorem, random number / string / picker / shuffler
- Time & Date (8) — timestamp converter, timezone converter with DST, cron generator + parser, age calculator, date diff, working days with holiday support, ISO 8601 duration
The 495 reference pages nobody asked for (but Google loves)
Some of my favorite dev-time browser habits:
- "quick, what's the MIME type for
.mjs?" - "what does HTTP
Strict-Transport-Securityactually do?" - "give me a regex that matches an ISO 8601 date"
The answer to each is curl or Wikipedia away, but that's 3 tabs and 20 seconds. I inlined all of it as static pages, one URL per entity:
-
51 MIME type pages at
/mime-types/* -
46 HTTP status code pages at
/tools/http-status-codes/* -
48 HTTP header pages at
/http-headers/* -
30 regex cookbook patterns at
/regex-cookbook/*— each with runnable JS, Python, Go, and Java snippets -
256 ASCII/Latin-1 character pages at
/ascii/*— every character 0–255 gets its own page with hex, binary, HTML entity, URL encoding, and UTF-8 bytes -
22 seasonal "days until X" pages at
/tools/days-until/*
They're all static-rendered at build time by Next.js and served from the edge. This started as an SEO experiment but it also became my personal quick-reference — I use /http-headers/strict-transport-security more than the MDN version because it's faster.
The tech stack
Deliberately boring. Nothing to justify.
- Next.js 15.1.6 on the App Router
- React 19
- TypeScript 5.7 in strict mode
- Tailwind CSS 3.4
- Deployed on Vercel (SSG + edge CDN + analytics + speed insights)
-
Neon Postgres — used only for the comment board (
/messages), because that one thing does need persistence. Every other tool is 100% client-side. -
Web Crypto API for all crypto — JWT signing, AES, RSA, ECDSA, HMAC, hashing, PBKDF2. No
crypto-js, nojsrsasign, nonode-forge. Not a single crypto package inpackage.json. -
pdf-lib+pdfjs-distfor PDF read/write -
Canvas API +
exifr+piexifjs+pixelmatch+svgo+jsqr+qrcodefor imaging
Static-rendered pages share ~103 KB of JS. Every tool page loads its heavy deps (svgo, pdf-lib, pdfjs, jszip, exifr, pixelmatch) via await import() inside the operation handler, not at module top — so opening the JSON formatter doesn't pull down PDF rendering code.
How it grew: 16 releases in a few weeks
The project is open in the sense that every release is public and documented. There's a Changelog with 16 releases so far, and an RSS feed if you want the drip.
Recent shipments:
- Image toolkit — 19 privacy-first image tools in one drop
- PDF toolkit — 8 tools with CJK support, geometric reading order (not pdf.js's line-based guessing)
- Security wave — RSA + ECDSA key generators, encrypt/decrypt, sign/verify, JWKS, public-key extractor, JWT verifier — all Web Crypto, no libraries
- AI toolkit — cost calculator with live pricing, token counter, RAG chunker, cosine similarity
- CSS layout wave — Flexbox + Grid + Box Shadow + Border Radius + cubic-bezier + text-shadow + glassmorphism generators, all with Tailwind output
Try it
- Site: devkits.vip
- Any tool page has a comment box at the bottom for feedback / bug reports
- Feature requests: community board
I'd genuinely love to know what your paste-into-random-site-anyway workflow is — that's the next tool I want to build.
If you want to hear about new tools, subscribe to the changelog RSS: https://devkits.vip/changelog/feed.xml.
Cover image is auto-generated by the site's /api/og endpoint. All screenshots in this post are real screenshots of the live site — no mockups.
Top comments (0)