Text Case Converter
Type or paste text on the left and get it live in eleven cases on the right — UPPERCASE, Title Case, camelCase, snake_case, kebab-case and more. Copy any one with a click. Nothing is uploaded.
Runs entirely in your browser — your text never leaves your device. Every case is computed on your own machine with JavaScript's built-in toLocaleUpperCase/toLocaleLowerCase and a small script you can read; there are no network requests and no analytics on this tool.
Every common case, computed as you type
Paste any text — a heading, a variable name, a whole paragraph — and this tool rewrites it into eleven casing styles at once, updating on every keystroke with no button to press. Each result has its own Copy button so you grab exactly the one you need. The word and character count above the box updates live too, counting by Unicode code point, so an emoji or an accented letter counts as one character rather than the two or four bytes it occupies.
Worked example: one phrase, every case
Feed the tool the developer-flavoured phrase parse HTML string and here is exactly what comes back:
Notice how the all-caps acronym HTML becomes Html or html everywhere except UPPERCASE — the tool treats it as one ordinary word and normalises its capitals, matching the Google and Microsoft naming guides. That is deliberate, not a bug; see the limits below if you need acronyms kept intact.
The two families of case
Case-only transforms — UPPERCASE, lowercase, Title Case, Sentence case and aLtErNaTiNg cAsE — keep your spaces and punctuation and only change which letters are capital. Identifier transforms — camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE and dot.case — first break the text into words, discard the original separators, and rejoin the words with a single fixed one. That is why UPPERCASE preserves your sentence intact while snake_case collapses Hello World! into hello_world, dropping the space and the exclamation mark.
How words are detected
For the identifier cases the text is split on whitespace, hyphens, underscores and other punctuation, and on camelCase boundaries — the point where a lower-case letter or digit meets a capital, and where an ACRONYM run meets a following Word. So getHTTPResponse is read as the three words get, HTTP, Response: the acronym is kept whole rather than shattered letter by letter, then normalised to give getHttpResponse or get_http_response. Because it understands existing boundaries, you can feed the tool text that is already camelCase or kebab-case and convert cleanly from one identifier style to another.
Naming convention by language
Which style a target expects depends on the language and on what you are naming. This table is the quick reference; copy whichever row matches:
| Style | Example | Where it is the norm |
|---|---|---|
| camelCase | userProfileName | JS/Java/Kotlin/Swift variables & methods |
| PascalCase | UserProfileName | Classes & types; Go exported names; React components |
| snake_case | user_profile_name | Python, Ruby, Rust functions; SQL columns |
| kebab-case | user-profile-name | CSS classes, URLs, npm packages, filenames |
| CONSTANT_CASE | USER_PROFILE_NAME | Constants, enum members, env variables |
| dot.case | user.profile.name | Config keys, namespaced properties |
Unicode is handled properly
Casing uses toLocaleUpperCase and toLocaleLowerCase, so accented and non-Latin letters fold as your locale expects: café uppercases to CAFÉ, German ß expands to SS, and Greek or Cyrillic converts correctly instead of being left untouched. Word splitting iterates by code point, so letters built from surrogate pairs (astral scripts, some emoji) are never cut in half.
Honest limits
Title Case here is mechanical: it capitalises every word, so it does not follow the editorial rule of leaving short words like "of", "a" and "the" lowercase — run the lord of the rings and you get The Lord Of The Rings; fix the small words by hand for AP or Chicago style. Sentence case capitalises only after ., ! and ?, so it will not re-capitalise proper nouns (the CEO met Dana lowercases CEO and Dana) and it wrongly treats the period in "e.g." as a sentence end. Casing is also locale-sensitive: in a Turkish locale a lowercase i uppercases to a dotted İ, which is correct Turkish but surprising if you expected ASCII I. The identifier cases intentionally drop punctuation, so don't becomes dont — they turn a phrase into one valid name, not round-trip prose.
Common mistakes
Expecting editorial Title Case. This is word-by-word capitalisation, not a style guide — it will not lowercase articles and prepositions for you. Feeding prose to an identifier case. snake_case and friends strip apostrophes and punctuation, so a sentence turns into one long underscore-joined blob; they are for names, not paragraphs. Assuming acronyms survive. HTML becomes Html in camel/Pascal — check any code that relies on all-caps initialisms. Relying on Sentence case for proper nouns. It only knows sentence boundaries, so re-capitalise names yourself. Ignoring locale. If output must be ASCII-only, verify the Turkish-I and German-ß cases rather than assuming a plain uppercase.