Leet speak converter
Turn plain text into 1337 speak with one fixed table: Hello World becomes #3110 W0r1d and elite becomes 31173. Spaces, punctuation and emoji stay put, so the phrase keeps its shape. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Text
- Hello World
- Result
- #3110 W0r1d
- Length
- 11
- Substituted
- 7
- Alphabet
- a4 b8 c( e3 g9 h# i1 l1 o0 s5 t7 z2
Leet speak, often written 1337 speak, is the letter-to-digit substitution style that turns ordinary English into a look-alike string such as a 1337 greeting for Hello and 31173 for elite. This leet speak converter applies a fixed basic table in one direction only: it reads a plain-text string, replaces mapped Latin letters with digits and symbols, and returns the converted string. Letters that have no entry in the table keep their original character and case; spaces, punctuation, emoji, and digits already in the input pass through unchanged so phrases keep their shape. The input must be a string. There is no decode path, no random glyph pack, and no network call: the same text always yields the same 1337 output.
How the basic leet speak table replaces letters
Classic leet speak is a letter-to-digit substitution, not a cryptographic cipher and not a keyed encoding. People have used look-alike glyphs in gamer handles, bulletin-board nicknames, and puzzle copy for decades: the letter a looks a bit like the digit four, e looks like three, o looks like zero, and so on. This leet speak converter implements one documented basic table and applies it in a single direction.
Each character of the input is inspected once. If the character, compared case-insensitively, is a mapped Latin letter, it is replaced by the corresponding digit or symbol from the table: a becomes four, b becomes eight, c becomes an opening parenthesis, e becomes three, g becomes nine, h becomes a hash mark, i and l both become one, o becomes zero, s becomes five, t becomes seven, and z becomes two.
Letters that do not appear in the table keep their original glyph and case, so a capital W stays W and a lowercase r stays r. Spaces, punctuation, emoji, and digits that already sit in the input pass through unchanged, which is why a phrase such as Hello World remains a readable phrase after conversion rather than collapsing into a packed blob. There is no random seed, no wall-clock timestamp, and no network lookup in the path: every step is a table lookup.
Where a leet speak converter earns its keep
Introductory internet-culture and programming courses often ask students to implement a letter-to-digit table; a single trusted leet speak converter speeds homework demos and auto-graders that need a stable oracle. Capture-the-flag warm-ups and puzzle hunts still hide 1337-style messages, and setters want a fast, predictable transform rather than a general cryptanalysis suite. Product and community teams stylize handles, quiz labels, spoiler tags, and event names in leet form for a playful tone without installing a language-specific library.
If you need a bidirectional translator that also decodes leet glyphs back toward English, a rotation cipher, Base64, Braille, or strong authenticated encryption, treat those as separate search intents and landings rather than overloading this one-way converter. Keep requests inside the documented length limit, pin the result string in tests, and you get reproducible 1337 output for nicknames, puzzles, and edge workers without standing up extra infrastructure of your own.
What you can do with it
Classroom substitution demos
Give students a ground-truth letter-to-digit oracle for homework and auto-graders that only need plain text converted into 1337.
Puzzle and CTF 1337 copy
Encode challenge phrases into classic leet speak without writing a one-off substitution script for every problem set.
FAQ
What is leet speak?
Leet speak (1337 speak) substitutes Latin letters with look-alike digits and symbols—for example a→4, e→3, i→1, o→0, s→5, t→7. It is stylistic obfuscation, not cryptographic security.
How do I convert text into leet speak?
Send your string in the text field. Letters in the basic table are replaced with digits and symbols; other characters pass through unchanged. The converted string is returned in result.
What happens if the input is not a string?
Numbers, objects, arrays, booleans, and missing text are rejected. Failed validation is not billed.
Does this converter decode 1337 back to English?
No. This page is a one-way converter from plain text to leet speak. Bidirectional translation is a different search intent and a different landing.
What does the leet speak converter cost?
The browser tool is free and runs locally.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/conv/leet-speak \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello World"}'const res = await fetch("https://api.kit.forhosting.com/conv/leet-speak", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello World"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/conv/leet-speak",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello World"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/conv/leet-speak", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello World"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello World"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/conv/leet-speak", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "Hello World"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "conv.leet_speak",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_chars | 65536 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Numbers, objects, arrays, and missing text fail with invalid_input instead of a guessed conversion. Successful API calls cost $0.002 per item; validation failures are not billed.
What you send and what you get back
Send a required string field named text that contains the plain message you want converted. Missing text fails with a message that names the field. Classic checks include converting Hello World into a 1337-style greeting and converting elite into 31173. Aliases such as input, value, message, content, and s are accepted for the same field so scripts can reuse an existing payload shape. The value must be a JSON string. Numbers, booleans, objects, arrays, and null are rejected with invalid_input rather than coerced, matching the contract that this converter only accepts text. Strings longer than the published maximum of sixty-five thousand five hundred thirty-six characters are also rejected so a Worker isolate cannot be flooded with an unbounded buffer. Empty strings are valid input: they convert to an empty result with zero substitutions. On success the response echoes the original text, returns result as the converted leet speak string, length as the number of characters in that result, substituted as the count of characters that hit the table, and alphabet as a compact label of the basic mapping so a client can assert which profile it hit. Failed validation does not consume prepaid balance. Pricing for successful API calls is the published base of $0.002 per item.
Where a leet speak converter earns its keep
API pricing is the published base of $0.002 per successful item, and failed validation does not consume balance.
Integration use cases
Nickname and handle styling
Turn a plain username or quiz label into basic leet speak in the browser, with the same table the API will use later in scripts.