What this tool does

A case converter takes a string and reformats its capitalisation and word boundaries, helloWorld becomes hello_world becomes HELLO-WORLD becomes Hello World. The conversion is mechanical: split the input into words, then rejoin them with the casing and separator that the target style demands.

This tool covers the 11 cases that show up day-to-day in code and writing: UPPERCASE, lowercase, Title Case, Sentence case, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, dot.case, and tOGGLE cASE. Pick a case from the toolbar select; output updates on every keystroke after a short debounce.

When you actually need each one

Programming language conventions are not arbitrary, most ecosystems have settled on one style and treating it as a hard rule keeps diffs clean.

  • camelCase, JavaScript variables and function names, JSON keys, Java method names. Starts lower, capitalises every subsequent word.
  • PascalCase, JavaScript classes, React components, TypeScript types, C# types. Same as camelCase but the first letter is capitalised too.
  • snake_case, Python variables and functions, Ruby identifiers, SQL column names, Rust functions. All lowercase, words joined by underscore.
  • kebab-case, CSS class names and custom properties, URL slugs, npm package names, command-line flags. All lowercase, words joined by hyphen.
  • CONSTANT_CASE (also called SCREAMING_SNAKE_CASE), environment variables, language constants in Python and C, TypeScript const enum values.
  • dot.case, config-file namespacing (server.port, app.name), JSON Pointer path segments, some logging tag conventions.
  • Title Case / Sentence case, headings, button labels, prose. Title Case capitalises every word; Sentence case capitalises only the first word and proper nouns.

tOGGLE cASE is the joke option, it inverts every character's case. Useful approximately once a year.

How the splitter works

To convert between cases the tool first has to identify word boundaries in the input. It looks for three signals:

1. Whitespace, a run of one or more spaces, tabs, or newlines. 2. Existing separators, _, -, ., /. 3. Camel-hump transitions, a lowercase letter followed by an uppercase letter, e.g. userIDValue → user, I, D, Value. (Yes, runs of capitals end up split per-letter; that's a known limitation in the simple algorithm.)

Each detected word is then lower-cased and recombined according to the target case. Punctuation that isn't a separator (commas, periods inside sentences, parentheses) is preserved by the upper/lower/title/sentence cases but stripped by the programming-style cases, that's the right behaviour for variable-name conversion.

Common gotchas

  • Acronyms inside camelCase, XMLParser round-trips through this tool as xmlParser (lower-cases XML). That matches Google's JavaScript style guide and most TypeScript codebases. If your team treats acronyms as single uppercased units, manually re-capitalise after conversion.
  • Already-capitalised input, feeding HELLO WORLD into camelCase yields helloWorld, not hELLOWORLD. The splitter sees one word; per-word lower-casing happens before per-word re-casing.
  • Numbers, digits stay where they are. version2Beta → version_2_beta in snake_case, which is what you want for filenames.
  • Sentence case and ellipses, only ., !, ? followed by whitespace are treated as sentence boundaries. Ellipses ... count as one boundary, not three.
  • Empty input, produces empty output, not an error.

Performance and limits

The conversion is a single pass over the string, so even a 1-megabyte input runs in well under 50 ms on a modern laptop. There's no upper bound enforced, but pasting a novel-sized input into a browser textarea is the bottleneck, the conversion itself is essentially free.

Privacy

Your text is processed entirely in your browser. Nothing is uploaded to any server, no analytics on the content, no logs. Recent inputs are saved to your browser's local storage so the "Recent" card can repopulate them, you can remove individual entries or clear the whole list.

Frequently asked

Which case should I use for my JavaScript variables?

camelCase for variables and functions ('userId', 'fetchPosts'), PascalCase for classes and React components ('UserCard', 'AuthProvider'), CONSTANT_CASE for module-level constants ('MAX_RETRIES'). This matches the conventions used by most major JavaScript style guides (Google, Airbnb, the standard library).

Why does 'XMLParser' become 'xmlParser' in camelCase?

The splitter treats every uppercase-after-lowercase transition as a word boundary, then lowercases each word before re-casing. That matches how most JavaScript and TypeScript codebases handle acronyms (e.g. Google's style guide says 'XmlHttpRequest', not 'XMLHttpRequest'). If your team prefers all-caps acronyms, manually re-capitalise after conversion.

What's the difference between Title Case and Sentence case?

Title Case capitalises the first letter of every word: 'The Quick Brown Fox'. Sentence case only capitalises the first word of each sentence and proper nouns: 'The quick brown fox'. Use Title Case for headings and button labels in some style guides; use Sentence case for body copy and most modern UI labels.

Does the tool preserve punctuation and numbers?

Numbers stay in place — 'version 2 beta' becomes 'version_2_beta' in snake_case. Punctuation is preserved by the prose cases (UPPER / lower / Title / Sentence) but stripped by the programmer cases (camel / Pascal / snake / kebab / constant / dot), because those are designed for identifiers that can't contain commas or periods.

What is dot.case actually for?

Namespaced configuration keys ('server.port', 'app.database.url'), JSON Pointer path segments, and some logging frameworks' tag conventions (Python's logging hierarchy, log4j logger names). It's also occasionally used for filenames where dots separate semantic sections.

Why is there a 'tOGGLE cASE' option?

It inverts the case of every character — uppercase becomes lowercase and vice versa. It's a novelty/troubleshooting option, occasionally useful when you've accidentally pasted text with caps lock on and want a quick fix. Not something you'll reach for often.

Are there any size limits on the input?

No hard cap. The conversion is a single pass over the string, so a one-megabyte input completes in well under 50 ms. The browser's textarea is the practical bottleneck — paste reasonably sized text and the conversion itself is essentially free.

Is my text sent to a server?

No. The conversion runs entirely in your browser via native string methods — no network calls, no analytics on the content. Recent inputs are saved only to your browser's localStorage so you can replay them; clear them from the Recent card whenever you want.