Case
Case Converter
Convert text between camelCase, snake_case, kebab-case and more.
About case conversion
Every language community settled on its own naming style, so the same idea appears as userName, user_name, or user-name depending on where you are. This tool splits your text into words — handling existing camelCase humps, underscores, hyphens and spaces alike — then rebuilds it in each style. Accented and non-Latin letters are kept intact rather than stripped.
Digits attach to whichever word they're adjacent to rather than becoming a token of their own: address2Line splits into "address2" and "Line", not "address", "2", and "Line", which matches how most style guides treat numbered identifiers like address2 or v2Config. This word-splitting logic — not a fixed dictionary — is also what lets it handle names it has never seen before; anything that looks like a compound identifier, in any of the input styles, converts correctly.
Where you'll run into it
- Renaming variables when porting code between languages
- Turning a column heading into a database field or JSON key
- Building URL slugs and CSS class names from a title
- Fixing inconsistent naming before a code review
Frequently asked
How are words detected?
Text is split on spaces, underscores, hyphens and punctuation, and also at the point where a lowercase letter meets an uppercase one. Runs of capitals stay together, so HTTPServer becomes "HTTP Server" rather than "H T T P Server".
Why do UPPERCASE and Title Case keep my punctuation?
Those are prose styles, so they only change letter casing and leave your text otherwise untouched. The identifier styles — camelCase, snake_case and the rest — drop punctuation because it is not legal in most identifiers.
Is my text sent to the server?
No. This tool runs entirely in your browser; the text never leaves your device.
How are numbers in an identifier like address2Line or v2Config handled?
A digit stays attached to the word immediately before it rather than becoming a separate word on its own — address2Line splits into "address2" and "Line", and v2Config splits into "v2" and "Config". This mirrors how most style guides already treat numbered fields and versioned names, so converting address2Line to snake_case gives address2_line, not the arguably stranger address_2_line.