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, TypeScriptconst enumvalues. - 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,
XMLParserround-trips through this tool asxmlParser(lower-casesXML). 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 WORLDinto camelCase yieldshelloWorld, nothELLOWORLD. The splitter sees one word; per-word lower-casing happens before per-word re-casing. - Numbers, digits stay where they are.
version2Beta→version_2_betain 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.