Case conversion sounds trivial until you hit the edge cases: acronyms, numbers, already-cased input, mixed separators. A good converter handles all of these correctly the first time, so you can paste whatever shape of text you have and get every common case as output.
This tool is multi-output: you paste once, and all eleven cases are shown at the same time with a copy button next to each. No need to toggle between modes or re-run the conversion.
How the splitting works
The hard part of case conversion is breaking the input into words. The tool recognizes these separator patterns:
- Whitespace — spaces, tabs, newlines
- Underscores, hyphens, dots, slashes — the common programming separators
- camelCase boundaries — a lowercase letter followed by an uppercase letter (
abcDef→abc Def) - Acronym boundaries — an uppercase run followed by a capitalized word (
HTMLParser→HTML Parser)
Once the input is tokenized into lowercase words, each case is a simple join or transformation: snake_case joins with underscores, camelCase lowercases the first word and capitalizes the rest, CONSTANT_CASE is uppercase snake_case, and so on.
The eleven cases
| Case | Example | Typical use |
|---|---|---|
| lowercase | hello world | Plain prose, email addresses |
| UPPERCASE | HELLO WORLD | Headings, emphasis |
| Title Case | Hello World | Article titles, headings |
| Sentence case | Hello world. | Body prose, captions |
| camelCase | helloWorld | JavaScript, TypeScript, Java variables |
| PascalCase | HelloWorld | Class names, type names |
| snake_case | hello_world | Python, Ruby, Rust identifiers |
| kebab-case | hello-world | URL slugs, CSS class names |
| CONSTANT_CASE | HELLO_WORLD | Constants in many languages |
| dot.case | hello.world | Config keys, file extensions |
| path/case | hello/world | File paths, URL segments |
Example: converting a feature name
You are starting a new feature branch and need the same name in several forms: the Git branch, the code identifier, the environment variable, the CSS class, and the file path. You type the human-readable name once:
My New Feature Flag
And the converter produces every form at once:
- camelCase:
myNewFeatureFlag→ for the JavaScript variable - PascalCase:
MyNewFeatureFlag→ for the TypeScript type - snake_case:
my_new_feature_flag→ for the Python config - kebab-case:
my-new-feature-flag→ for the Git branch and URL slug - CONSTANT_CASE:
MY_NEW_FEATURE_FLAG→ for the environment variable - path/case:
my/new/feature/flag→ for the nested config path
Copy whichever you need with the button next to each row.
What this tool does not do
It does not handle internationalization edge cases: Turkish dotted/undotted i, German ß, or locale-dependent lowercasing. For code identifiers this is rarely an issue (programming languages almost always restrict identifiers to ASCII), but for proper prose in non-English languages, a locale-aware library is the right tool.
It also does not try to preserve original capitalization of proper nouns. If you paste “paris is in france”, Sentence case will give you “Paris is in france” — capitalizing only after sentence boundaries. Manual follow-up is needed for named entities. For the URL-slug variant of kebab-case (with diacritic stripping and punctuation removal), the slugify tool does the full normalisation.