Small caps converter
Hello World becomes Hᴇʟʟᴏ Wᴏʀʟᴅ: the 8 lowercase letters turn into small capitals while H and W stay full size. Because the style lives in the characters themselves, it survives profile bios and plain-text titles. 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
- Hᴇʟʟᴏ Wᴏʀʟᴅ
- Length
- 11
- Original length
- 11
- Mapped
- 8
Creators paste that mix into bios, chapter titles, product labels, and comment replies because the style travels with the code points themselves rather than with a stylesheet or OpenType feature that a social field will strip. This converter walks every character of your string, replaces a through z with the conventional LATIN LETTER SMALL CAPITAL look-alikes, and leaves digits, punctuation, spaces, emoji, other scripts, and already-uppercase letters exactly as they arrived. There is no dedicated Unicode small capital X, so the letter x is kept as Latin small letter x and reported in the mapping counts.
How lowercase letters become Unicode small capitals
True typographic small caps are not the same as shouting in uppercase. In a well-set heading, the first letter of a proper name stays a full capital while the remaining letters take capital shapes at roughly x-height. Fonts usually do that with an OpenType small-caps feature, but that feature never survives a plain-text bio, a marketplace title, or a spreadsheet cell.
Unicode instead ships a scattered set of letter-like characters whose official names are LATIN LETTER SMALL CAPITAL, collected mainly in Phonetic Extensions, IPA Extensions, and Latin Extended-D. Lowercase a maps to U+1D00, b to U+0299, c to U+1D04, and so on through z at U+1D22, with f and s living at U+A730 and U+A731 and q at the modern U+A7AF small capital. This converter applies that table only to lowercase Latin letters, so Hello becomes a full H followed by small-cap ello rather than a flattened all-small-cap string.
Uppercase letters, digits, punctuation, emoji, and other scripts pass through unchanged. Because a few of these glyphs sit in planes that need surrogate pairs in UTF-16, the implementation iterates by Unicode scalar value rather than by code unit, so a single emoji is never split. Unicode has never defined LATIN LETTER SMALL CAPITAL X; the letter x is left as Latin small letter x, which is the common generator convention and is visible in the mapped counts of every successful response.
Where small-caps conversion shows up in real work
Editorial designers still reach for small capitals when a running header, chapter kicker, or brand lockup must look typeset without shipping a webfont that every downstream app will ignore. Social managers paste the same glyphs into profile bios and story stickers because those fields strip CSS font-variant and leave only the characters you actually sent. Brand and fashion teams generate product-title variants for marketplaces that accept plain text only but still render small-capital look-alikes in customer feeds.
Teachers assigning Unicode code-point labs need a deterministic map from Hello to a mixed capital-plus-small-cap string, not a one-off paste from a generator that changes tables overnight. Support desks receive styled Unicode from customers and want a documented alphabet so they can reverse a glyph back to the Latin letter that produced it.
If you need CSS font-variant small-caps, OpenType smcp, Mathematical Bold, Fraktur blackletter, superscript characters, or ordinary uppercase conversion, treat those as separate search intents and landings rather than overloading this page, which exists specifically for copy-pasteable Unicode small capitals built from lowercase Latin letters.
What you can do with it
Headings that keep a capital contrast
Turn Hello World into a full H plus small-cap ello so titles and kickers look typeset in plain-text fields.
Social bios and stickers
Paste Unicode small capitals into profile bios and story stickers that strip CSS small-caps and webfonts.
FAQ
Which letters become small capitals?
Latin lowercase a–z. Uppercase letters stay full size. Digits, spaces, punctuation, emoji, and other scripts pass through and are listed in unmapped.
Is this the same as CSS font-variant: small-caps?
No. This emits Unicode small-capital code points that travel inside the text. CSS and OpenType small caps depend on fonts and stylesheets that many fields strip.
Why does x look like a normal x?
Unicode does not define LATIN LETTER SMALL CAPITAL X. This converter keeps Latin small letter x and still counts it among mapped lowercase letters.
What happens to uppercase letters?
They stay as ordinary capitals so you keep a true small-caps contrast (Hello rather than an all-small-cap string).
What does it 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/str/small-caps \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello World"}'const res = await fetch("https://api.kit.forhosting.com/str/small-caps", {
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/str/small-caps",
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/str/small-caps", 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/str/small-caps", 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": "str.small_caps",
"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
Unicode small capitals let you keep a true small-caps contrast in places that only accept plain text: full-size capitals stay large, and lowercase letters become compact capital-shaped glyphs from the Phonetic Extensions, IPA Extensions, and Latin Extended blocks.
What you send and what you get back
Send a required string field named text containing the heading, caption, label, or sentence you want styled as small capitals. Classic checks include converting Hello World into a mixed full-capital H and small-cap ello, confirming that already-uppercase CASE stays large beside converted lowercase letters, and verifying that a numeric or empty text field is rejected rather than silently coerced. Aliases such as input, string, value, content, message, data, and s are accepted for the same field so scripts and spreadsheets can reuse existing payload shapes without renaming columns. On success the response echoes the original text, returns result as the transformed string, length as the Unicode scalar length of that result, original_length as the scalar length of the input, mapped as the count of lowercase Latin letters that hit the table, unmapped_count and unmapped as the unique characters that passed through, and method as the fixed tag to_small_caps for logs. Missing text, null, empty strings, numbers, objects, arrays, booleans, and strings longer than the documented maximum fail with invalid_input and a clear English message that names the problem. Validation failures do not consume prepaid balance.
Where small-caps conversion shows up in real work
Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Integration use cases
Deterministic fixtures for content pipelines
Generate golden small-caps strings so scheduled-post tools and CI checks always apply the same alphabet.