One paste, ten outputs, and a decision to make
Take the sentence "A better way to work with words" and imagine you need every version of it at once: a headline, a CSS class, a JavaScript property, a Python variable, a database column, a constant, and something for a URL. The converter above produces all ten from a single paste. Producing them is the easy part. The interesting part is knowing which of the ten versions is a sentence and which is an identifier, because that distinction decides where each one belongs.
Mix the two families up and the failure is quiet but real. A camelCase variable in an editorial headline looks like a typo. A Title Case string used as a CSS class is a handshake with a bug, because class names travel through HTML and JavaScript where capitalization can be handled differently.
Two families that do not mix
The ten options split cleanly. Four of them work on prose, where words are meant to be read. Five build identifiers, where words are meant to be addressed by a machine. The tenth is a repair tool.
| Case | "a better way to work" becomes | Belongs in |
|---|---|---|
| lowercase | a better way to work | Body copy, URLs, data normalisation |
| UPPERCASE | A BETTER WAY TO WORK | Warnings, short labels, legacy protocols |
| Title Case | A Better Way To Work | Headlines and headings, after review |
| Sentence case | A better way to work | Body copy, captions, UI labels |
| camelCase | aBetterWayToWork | JavaScript variables and object keys |
| PascalCase | ABetterWayToWork | Class names, React components |
| snake_case | a_better_way_to_work | Python, Ruby, SQL column names |
| kebab-case | a-better-way-to-work | URLs, CSS class names, HTML attributes |
| CONSTANT_CASE | A_BETTER_WAY_TO_WORK | Constants and environment variables |
| tOGGLE cASE | A BETTER WAY TO WORK | Undoing a caps lock accident |
That table is why "convert my text to Title Case" is an ambiguous request. Two people asking for it may want the headline version or the identifier version, and the tool cannot know which.
The four prose cases, and their collateral damage
Lowercase and UPPERCASE are pure character mappings. Every character is swapped individually, which is what you want and also the source of one surprise: in some languages a single character maps to two. German ß uppercases to SS, so the character count changes along with the case.
Title Case here capitalizes every word without exception, including "Of", "And", "The", and "A". It is honest, predictable, and not what any major style guide does. The debate over which small words stay lowercase is genuinely unsettled, which is why the title case versus sentence case comparison exists: a converter can apply a rule, but only you know which guide your publisher follows.
Sentence case is the one that needs a sentence splitter, and that is where it earns its keep or causes trouble. It lowercases the entire string first, then capitalizes the first letter of the text and the first letter after a period, question mark, or exclamation mark followed by whitespace.
One further limit: the capitalizer fires after terminal punctuation, not after a line break. Paste a list where each item starts on a new line with no closing period and only the first letter of the whole block is capitalized.
The five identifier cases rebuild your words
The identifier modes take a different route. Before any case is applied, the text is split into words: a space is inserted at every lowercase-to-uppercase boundary, hyphens are treated as word breaks, and punctuation and emoji are dropped. Then the words are rejoined according to the convention you picked.
This recovers what you expect from messy input. my_variable and myVariable becomes myVariableAndMyVariable, because the underscore, the space, and the internal capital are all recognised as boundaries. Accented letters survive, so café résumé becomes CaféRésumé in PascalCase.
It also guesses wrong in ways worth seeing before you ship the output.
| Input token | snake_case gives | Why |
|---|---|---|
XMLHttpRequest | xmlhttp_request | Only the lowercase-to-uppercase boundary splits |
iPhone | i_phone | "i" then a capital "P" reads as two words |
don't | don't | Apostrophes hold a word together, so the quote stays |
That second row is the acronym problem in its purest form, and it is not a bug the tool can fix, because iPhone genuinely looks like two words by the only rule available. The same rule wrecks camelCase if you send it through a prose mode: Title Case on myVariableName here returns Myvariablename Here.
Handle acronyms by hand, always
Every convention has a different answer for acronyms, and none of it can be inferred from the source text. Generate the identifier, then fix the two or three acronym tokens yourself.
| Convention | Result for "HTTP response code" | Convention for acronyms |
|---|---|---|
| camelCase | httpResponseCode | Usually lowercase the whole acronym |
| PascalCase | HttpResponseCode | Treat as a normal word, capital first letter |
| snake_case | http_response_code | Lowercase everything, no exceptions |
| kebab-case | http-response-code | Same as snake_case with hyphens |
| CONSTANT_CASE | HTTP_RESPONSE_CODE | Uppercase, indistinguishable from normal use |
Note how CONSTANT_CASE hides the problem entirely: every letter is capital, so an acronym and a regular word look identical afterwards.
Consistency matters more than the choice itself. A codebase where one file writes MAX_RETRY_COUNT and another writes MaxRetryCount costs every reader a small decoding step, and the style sheet habit that settles editorial decisions works just as well for naming rules. Decide the convention once, write it down, and let the converter enforce it.
Frequently Asked Questions
Why does Title Case capitalize "of" and "the"?
Because the rule capitalizes every word without checking its part of speech. A converter can apply a mechanical rule reliably; deciding that "with" deserves a capital but "of" does not needs a dictionary and a style guide, and style guides disagree.
Why did Sentence case lowercase my surname?
Sentence case lowercases the entire string before capitalizing anything, so it cannot know that "Marie" was a proper noun. Add the capitals back by hand, or keep the original text beside the output and compare.
Why is there an apostrophe inside my camelCase output?
Apostrophes are treated as part of a word, so don't survives as one token and is capitalized as a unit, giving something like wellKnownDon'tStop. Rewrite the contraction out before converting, or fix the token manually.
Which case should I use for a web address?
kebab-case, all lowercase. URL paths are conventionally case-sensitive on the server even when a browser is forgiving, so My-Page and my-page can resolve differently. For the accent stripping and separator collapsing a URL also needs, use the slug generator.
Why did UPPERCASE change my character count?
Because a few characters map to two when uppercased. The German ß becomes SS, and ligatures such as fi become FI. Run any downstream length or column-width check against the converted text, never the original.
Convert, then read the first line out loud
The conversion is instant and the review is not, so build the habit around the output. After converting a headline or a name-bearing sentence, read the first and last lines aloud. Those positions are where proper nouns and sentence-initial words cluster, and where a case change is most visible. If a name has been flattened, fix it now rather than after publication.