9 free everyday tools that run entirely in your browser.
No ads. No tracking. No accounts. Nothing you type is ever uploaded.
Open PlainKit · See all tools · Self-host
Every tool has to produce something worth sharing — a card, a chart, an image, a line of text you can send to someone. If nobody would ever share the result, the tool does not get built. That single rule decides what is in the collection and what is not.
| Tool | What it does |
|---|---|
| Final grade calculator | What you need on the final to hit your target grade |
| Countdown card | Turn a date into a shareable countdown or anniversary card |
| Date duration calculator | Days, weeks and weekdays between two dates, with milestones |
| Random group & name picker | Split a list into groups, draw names, spin a wheel, or build balanced teams |
| Image to ASCII art | Turn a picture into ASCII art — copy the text or download a PNG |
| QR code generator | Turn a link, Wi-Fi password or contact into a QR code you can print |
| Chart maker | Paste numbers, get a bar, line or pie chart you can download |
| Typing speed test | Type for 60 seconds, get your speed and a result card you can share |
| Compress images | Shrink and convert pictures in batches, right on your device |
The whole thing is a static folder of files. There is no server, no database and no account system — which is not a compromise, it is the design:
- Zero runtime dependencies. Everything in
package.jsonis a dev dependency; nothing ships to the visitor. - No UI framework, no animation library. A few kilobytes of CSS do the styling, checked by a performance budget gate.
- Deterministic results. No tool sends your input to an AI. Same input, same output, every time.
- Readable without JavaScript. The form and the result are in the static HTML; the homepage ships 0 bytes of JavaScript.
- Served under a strict content security policy — no inline styles, no inline scripts, no third-party requests.
There is no server for your data to reach. Images are decoded in your browser; text never leaves the page; lists are kept in that one browser only so you do not have to paste them again.
You can verify this yourself: open the network tab, load a tool, and you will see the page load nothing but itself. There is no analytics script, no cookie and no beacon to block, because there is nothing to block.
The build produces a plain folder of static files, so it can be served from anywhere — a CDN, an object store, or your own machine.
With Docker:
docker compose upThe site runs at http://localhost:8080.
Without Docker:
npm install
npm run build
# then serve the contents of dist/ with any static file serverRequires Node.js 24 (see .nvmrc).
npm install
npm run devThe site runs at http://localhost:4321.
| Command | What it does |
|---|---|
npm run dev |
Start the development server |
npm run build |
Build the static site into dist/ |
npm run preview |
Preview the built site locally |
npm run typecheck |
Type-check .astro and .ts files |
npm test |
Run the unit tests |
npm run format |
Format the code |
npm run format:check |
Check formatting without writing |
npm run budget |
Run the performance budget gate against dist/ |
Issues and pull requests are welcome. Two rules for a new tool: it must produce something worth sharing, and it must add no runtime dependency, no tracker and no network request. A tool that cannot meet both does not go in.
Before opening a pull request, run:
npm run format && npm run typecheck && npm test && npm run build && npm run budgetApache-2.0. See LICENSE.
The Apache-2.0 license does not grant permission to use the name "PlainKit".









