Base36 encoder.
Type text or drop a file and read its Base36 as you type: digits and letters, the same in either case. Everything runs in your browser.
Base36 encoder.
Need the UI around it? With Pro, your AI agent builds the form, the result card and the rest of the page from a prompt.
Get ProHow it works
3 steps, no account. It runs in your browser and nothing is uploaded.
Enter text or a file
Type or paste anything, or drop a file onto the input; the Base36 updates with every keystroke.
Choose the form
Lowercase or uppercase: pick in the bar and the result is rewritten in place.
Copy, download or swap
Copy the Base36, download it as a text file, or press Swap to decode it back.
Where Base36 is used
Alphanumeric and case-insensitive: the alphabet of short ids and `toString(36)`. Where Base36 does its work.
JavaScript numbers
`(123456789).toString(36)` is `21i3v9`, and `parseInt("21i3v9", 36)` brings it back: Base36 is built into the language.
URL shorteners
A shortener turns the row id of a link into a few Base36 characters: the slug in `example.com/2x9ka`.
Reddit ids
Reddit's `t3_1a2b3c` ids are Base36 counters behind a type prefix.
Licence and tracking codes
A code that will be typed from paper or read over the phone wants letters and digits that case can't break.
Everywhere numbers are
Ruby's `Integer#to_s(36)`, Python's `int(s, 36)`, PostgreSQL extensions: most stacks convert without a library.
Short keys
A hash's first bytes as Base36 make a short, case-insensitive cache key or file name.
Related tools
More encoders and decoders. Every one free, in the browser.
Pricing
Build it with Pro
The tool is free. Pro adds 6,000+ blocks, premium templates and the MCP server, so your AI editor builds the product around it.
4.9/5 out of 5 · 150+ reviewsfrom 150+ founders and developers.
- Secure checkout via Stripe
- Code lives in your repo
- Keep what you've shipped if you cancel
- License terms
Questions and answers
Before you trust the result: what to know about the format, the limits, your data and the tools next to it.
Base36 writes a number with the ten digits and the 26 letters, 0 to 9 then a to z, the same in either case. It is the biggest alphabet that is both alphanumeric and case-insensitive, which is why JavaScript's `toString(36)` and so many short ids use it. The tool treats the input bytes as one big number and writes that.
The bytes are read as one integer, big end first, and that integer is written in base 36 by repeated division. Each character carries about 5.17 bits, so the output is about 55% larger than the input. Leading zero bytes are kept as leading 0 characters. There is no padding.
URL shorteners, Reddit's post and comment ids, tracking and licence codes, database keys shown to people, and any place a counter has to become a short, case-insensitive string.
Yes: letters and digits only, nothing to escape, and the same string in either case.
It is for numbers and short ids. For arbitrary data it is slower than Base32 or Base64, because the whole input has to be divided as one number, and its 55% overhead sits between them. Base62 is shorter but case-sensitive; Base32 is streamable and padded.
No. Base36 is an encoding, not encryption: it changes how bytes are written, not who can read them, and anyone can decode it with no key. Encrypt first (AES, age, a library's sealed box) when the content needs protecting, then encode the ciphertext if it has to travel as text.
Type or paste into the input and the Base36 appears as you type: "Hi" becomes eax. Text is encoded as UTF-8 bytes, so accents and emoji come out the same as in every language's standard library. Copy the result, download it as a text file, or press Swap to decode it back.
Drop a file onto the input or choose one with the button, and its bytes are encoded directly, not as text. Base36 treats the whole input as one number, so the tool takes up to 512 KB at once; past that the conversion would stall the page.
The same value either way: Base36 is case-insensitive, and the decoder reads both. Lowercase is what `toString(36)` and most ids use; uppercase reads better on a printed code. Pick the one the receiving system writes.
Nothing leaves your browser. The text or file is read into memory on your machine and the encoding is computed there, in plain JavaScript; the page makes no request with it. Load the page, go offline and it keeps working.
No. The Base36 encoder is free and opens without a sign-in, an account or an install.
Nothing. The Base36 encoder holds your input in the page's memory, so closing or reloading the tab clears it, and it saves nothing in this browser.
The bar has one choice: Case, lowercase or uppercase.
Base36 output is about 1.55 characters per byte, and the status line under the result shows the bytes in, the characters out and the percentage. Base36 treats the input as one number, so the tool takes up to 512 KB at once.
The text is encoded as UTF-8 bytes first, so accented letters, other scripts and emoji round-trip through the decoder unchanged. Each of those characters takes more than one byte, which makes the output longer than the character count suggests.
Press Swap once there is a result and the same tool becomes the Base36 decoder, with the output moved into the input. The decoder shows the original text again.
Closest to the Base36 encoder: Base36 decoder, File to Base36, Base36 to file, Base62 encoder. Each opens on its own page, free and in the browser.
The Base36 encoder is one of 32 in its group. The group's page, /tools/encoding, lists them all.
The tool is free. Its interface is built from shadcn.io's own components (Button, Input, Slider and the rest of the registry under /ui), which come in React, Vue, Svelte and Solid. Pro adds the blocks and templates for the product around it.
4.9 out of 5 from 150+ developers
Build the product around it
Every block, template and icon, installed by your AI agent in your theme. The tools stay free.
Get Pro




