camelCase converter — and the five other identifier cases.

Paste a phrase or an existing identifier and convert between camelCase, PascalCase, snake_case, SCREAMING_SNAKE, kebab-case and dot.case. One line in, one identifier out — paste a whole column and it does all of them.

63 characters61 without spaces3 words3 lines

Everyday cases

Developer cases

Everything runs in this tab. Your text is never uploaded, stored or logged.

Six cases, one phrase

All six conversions share the same first step. The input is broken into words — on spaces, on punctuation, and on the internal capitals of an existing identifier — and then rejoined with a different separator and capitalisation. That shared splitter is what lets you convert between conventions, and not only out of prose.

get user ID from API response in all six programmer cases, generated by this page's converter.
CaseOutputTypical home
camelCasegetUserIdFromApiResponseJavaScript, Java and C# members; local variables
PascalCaseGetUserIdFromApiResponseClasses and types nearly everywhere; exported Go names
snake_caseget_user_id_from_api_responsePython, Rust and Ruby functions and variables
SCREAMING_SNAKEGET_USER_ID_FROM_API_RESPONSEConstants and environment variables
kebab-caseget-user-id-from-api-responseCSS classes and custom properties, URL slugs, CLI flags
dot.caseget.user.id.from.api.responseConfig keys, property files, logger names, i18n keys

Note what happened to ID and API: both folded to Id and Api. That is deliberate and it follows the Google Java Style Guide, which spells the procedure out — divide the phrase into words, then “lowercase everything (including acronyms), then uppercase only the first character” of each word. The guide spells its own examples XmlHttpRequest and newCustomerId; the forms it turns away from are XMLHTTPRequest and newCustomerID. Keeping acronyms in full caps produces runs like parseHTTPURLResponse where the eye cannot find the word boundaries.

Every spelling normalises to the same identifier

The splitter treats an existing identifier and a plain English phrase identically, which means converting between conventions needs no special mode. Here are five spellings of one name, each run through the tool:

Five input forms, one result. All five produce the same camelCase and the same snake_case output.
InputWords detectedcamelCasesnake_case
get user name get · user · name getUserName get_user_name
getUserName get · user · name getUserName get_user_name
get_user_name get · user · name getUserName get_user_name
GET-USER-NAME get · user · name getUserName get_user_name
Get User Name get · user · name getUserName get_user_name

That is the everyday use: rename a database column to a JavaScript property, turn a class name into a URL slug, or convert a spreadsheet of headings into constants. Paste the whole column and every line is converted independently.

How the splitter handles the awkward cases

Word-splitting behaviour, generated by calling the tool's own splitter.
InputWords detectedcamelCaseWhy
parse HTTP response body parse · http · response · body parseHttpResponseBody A standalone acronym folds to one word.
XMLHttpRequest xml · http · request xmlHttpRequest A capital run followed by a capitalised word splits at the seam.
get user ID from API response get · user · id · from · api · response getUserIdFromApiResponse Two acronyms, both folded — matching Google Java Style.
utf8 encoder utf8 · encoder utf8Encoder Digits stay attached to the word they follow.
user ID 42 user · id · 42 userId42 A standalone number becomes its own word.
user's name users · name usersName An apostrophe stays inside the word and is dropped from the identifier — not treated as a word boundary.
IPv6 address i · pv6 · address iPv6Address Known limit: a real word with an internal capital splits. Type ipv6 instead.

The last row is a real limitation, printed here in full. IPv6 is one word that happens to contain an internal capital, and nothing distinguishes that from the genuine word boundary in getUser without a dictionary. The same applies to iOS and eBay. Type them in lowercase — ipv6 — and they come through as a single word.

Which convention belongs where

Identifier casing is not a matter of taste in most ecosystems; it is written down, and linters enforce it. Every row below names the document behind it, and the last column says how far that document goes: spec where a first-party specification, style guide or documentation page states the rule, convention where the practice is near-universal but no first-party document actually mandates it. 3 of the 17 rows carry the weaker label, and the column shows which ones.

Naming conventions by ecosystem, each with the document behind it and how far it goes.
WhereWhatConventionStated inBasis
Python functions, variables, modules snake_case PEP 8, “Naming Conventions” spec
Python classes PascalCase (PEP 8 calls it CapWords) PEP 8, “Naming Conventions” spec
Python module-level constants SCREAMING_SNAKE PEP 8, “Constants” spec
Java methods and non-constant fields camelCase Google Java Style Guide §5.2 spec
Java classes PascalCase Google Java Style Guide §5.2 spec
Java constants SCREAMING_SNAKE Google Java Style Guide §5.2 spec
Go everything — exported vs unexported is the initial capital PascalCase / camelCase, never underscores Effective Go, “MixedCaps” spec
Rust functions, variables, modules snake_case Rust API Guidelines / RFC 430 spec
Rust types, traits, enum variants PascalCase (UpperCamelCase) Rust API Guidelines / RFC 430 spec
C# methods, properties, types PascalCase .NET naming guidelines, Microsoft Learn spec
C# parameters and local variables camelCase .NET naming guidelines, Microsoft Learn spec
CSS custom properties and class names kebab-case No spec: CSS mandates only the leading “--” on a custom property (<dashed-ident>) and is case-sensitive; kebab-case is near-universal practice convention
HTML data-* attributes kebab-case (exposed to JS as camelCase via dataset) HTML Living Standard, “dataset” spec
URLs path slugs kebab-case Google Search Central: use hyphens, not underscores, in URLs spec
Shell / CI environment variables SCREAMING_SNAKE POSIX reserves all-uppercase names for the standard’s own variables and suggests lowercase for application-private ones; SCREAMING_SNAKE for project config is practice convention
Kubernetes object names kebab-case (RFC 1123 label: lowercase, digits, hyphen) Kubernetes docs, “Object Names and IDs” spec
Java properties / logging config keys and logger names dot.case java.util.logging documents dot-separated hierarchical logger names; java.util.Properties documents no key convention, so config keys are practice convention

Two rows deserve a second look. Go is unusual in having no separate convention for public and private names: the initial capital is the visibility marker, so UserName is exported and userName is not, and underscores are ruled out entirely. URLs are kebab-case for a documented reason and not a stylistic one: Google's guidance is to use hyphens rather than underscores in URLs, because a hyphen reads as a word separator and an underscore does not.

Practical notes

One identifier per line. The converter treats each line separately, so a paragraph of prose becomes one very long identifier — which is almost never what you want. Split your input into lines first and it does the right thing for every one of them.

Accents and non-Latin letters are kept. The splitter works on Unicode letters, not ASCII, so día laboral becomes díaLaboral. Most languages accept that in an identifier; if your target does not, strip the accents before converting.

Undo is per conversion. Try camelCase, decide you wanted kebab-case, and just press the other button — the splitter re-derives the same words either way. Undo is there for when you want the original phrase back, punctuation and all.

Developer case questions

What is camelCase?

camelCase joins words with no separator and marks each boundary with a capital, leaving the first word lowercase: getUserName. The variant that also capitalises the first word — GetUserName — is PascalCase, sometimes called UpperCamelCase. Both buttons are on this page.

Why does “ID” become “Id”?

Because that is what the Google Java Style Guide prescribes: split the phrase into words, then “lowercase everything (including acronyms), then uppercase only the first character” of each. The reason is legibility: a run of capitals swallows the boundary between words. The section below quotes the guide’s own examples.

Can I paste an existing identifier instead of a phrase?

Yes — that is the point of the splitter. All 5 spellings in the table on this page produce the same identifier, so you can paste get_user_name and get getUserName out, or paste camelCase and get a kebab-case slug. Converting between conventions is a single click in either direction.

What separates snake_case from kebab-case?

Only the joining character: an underscore versus a hyphen. Which one you need is decided by the surrounding system, not by taste — a hyphen is not a legal character in an identifier in most languages, so kebab-case belongs to CSS, URLs and config files, while snake_case belongs to Python, Rust and Ruby code.

What is SCREAMING_SNAKE for?

Constants and environment variables. Python, Java, Rust, C and JavaScript all use it for values that must not change, and shell environments use it by convention, which is why DATABASE_URL looks the way it does. The table on this page lists the document that states each convention.

Does it handle multiple identifiers at once?

Yes. Each line is converted independently into its own identifier and blank lines are preserved, so you can paste a column of forty names out of a spreadsheet and get forty identifiers back in one press.

Keep going

  • All twelve case converters on one page — the full tool, with the four title-case style guides and the six programmer cases side by side.
  • Lowercase Converter — for normalising values before comparison, and for URL and filename safety.
  • Title Case Converter — the prose equivalent of this page — four style guides, one headline.
  • Uppercase Converter — for constants and environment variables, where only the letters need to go up.
  • Word Counter — our sister tool for the other half of the job: word, character and reading-time counts when you are writing to a limit instead of fixing capitalisation.