A jar of small tools, and no server.
What's in it, why it exists, and the one rule anything new has to meet.
ToolJar is the kind of tool you reach for a dozen times a week and then close again. Nothing in it asks you to sign up, and nothing in it sends your data anywhere.
Why it exists
Most of the utilities a search turns up will happily take whatever you paste and send it off to a server. That's a bad deal when the thing on your clipboard is a production response with someone's personal details in it. None of this work needs a server, so ToolJar doesn't have one — open your network tab and you won't find what you pasted in any request, or go offline entirely and keep using it.
What’s in it
The jar opens with JSON, because that’s what I spend the most time squinting at:
- Format and minify, with 2-space, 4-space, or tab indentation
- Validate against the strict RFC 8259 grammar, with the exact line and column
- Browse a document as a collapsible, searchable tree
- Get the JSONPath for any value, or resolve a path you already have
- Compare two documents by structure rather than by line
- Convert to CSV and back, without a spreadsheet eating your leading zeros
- See size, nesting depth, and what a document is actually made of
The second shelf is JWTs, because tokens are the other thing I paste into websites I shouldn’t:
- Decode a token’s header, payload and claims
- Verify an HS256/384/512 signature with WebCrypto, secret kept in the tab
- Read iat, nbf and exp as real dates, with a live countdown
- Generate signed test tokens, and encode or decode Base64URL
More go in as I need them. The rule for anything that gets added is the same: it has to work without a server, and it has to be genuinely better than the first search result for the same job.
About this build
A static React and TypeScript app, built as a personal tool and deliberately kept small. The JSON engine underneath — the parser, formatter, diff, and statistics — is written from scratch with no dependencies, mostly so the error messages could be genuinely useful instead of whatever JSON.parse feels like telling you.