Case converter rewrites text in ten capitalization styles, from UPPER CASE headings to camelCase identifiers. Paste a title, a variable name, or a whole document, then click a format to transform it. It saves writers from retyping headings and developers from hand-editing identifier conventions.
How to Use
Type or paste text into the input box, then click any of the ten format buttons. The output appears immediately in the read-only box below, and the copy button sends it to the clipboard. The Clear button empties both boxes. There is no submit step and no live conversion as you type; the transformation runs when you choose a format, and you can stack formats by copying the result back into the input.
Multi-line content is accepted, and the format buttons preserve, collapse, or replace line breaks depending on the style, as described below.
The Ten Formats and When to Use Them
| Format | Example | Typical use |
|---|---|---|
| UPPER CASE | HELLO WORLD | Headings, emphasis, constants in prose |
| lower case | hello world | Normalizing noisy input |
| Title Case | Hello World | Article and section headings |
| Sentence case | Hello world | Modern style guides and running text |
| camelCase | helloWorld | JavaScript variables and functions |
| PascalCase | HelloWorld | Classes and React components |
| snake_case | hello_world | Python, SQL tables and columns |
| kebab-case | hello-world | URLs, CSS classes, npm packages |
| CONSTANT_CASE | HELLO_WORLD | Environment variables and constants |
| dot.case | hello.world | Some configuration and property files |
Worked Example: One Phrase, Ten Outputs
Input: Hello World
- UPPER CASE:
HELLO WORLD - lower case:
hello world - Title Case:
Hello World - Sentence case:
Hello world - camelCase:
helloWorld - PascalCase:
HelloWorld - snake_case:
hello_world - kebab-case:
hello-world - CONSTANT_CASE:
HELLO_WORLD - dot.case:
hello.world
Input: userName shows the asymmetric behavior. camelCase yields username, PascalCase yields Username, while snake_case yields user_name, kebab-case user-name, CONSTANT_CASE USER_NAME, and dot.case user.name. The first two discard the hump; the last four read it.
Prose Formats: Title vs Sentence Case
Sentence case lowercases the whole string, then capitalizes the first letter at the start and after a sentence-ending mark. That makes it predictable for running text but destructive to acronyms and proper nouns. Title Case uses a word-boundary rule that capitalizes the first letter of each word while leaving the rest of each word as typed.
Because Title Case does not normalize the remainder of a word, mixed-case input carries through. the QUICK brown Fox becomes The QUICK Brown Fox. If you want every word in clean title form, run lower case first, then Title Case.
Sentence case has a related limitation. It treats only the first word of the whole input and words following a period, exclamation mark, or question mark as sentence starts. A newline is not a sentence boundary, so the first word of a second line stays lowercase unless it follows a terminator. Paste a list of sentences and you may need to capitalize the first word on each new line by hand.
Multi-line Text and Lists
The separator-based formats treat line breaks as delimiters. Converting two lines to snake_case produces one line with an underscore between them, and the same happens for kebab-case, CONSTANT_CASE, and dot.case. camelCase and PascalCase also join lines, since whitespace and newlines are boundaries that become capitalization on the next word. If preserving the list structure matters, convert one line at a time or use Title and Sentence case, which leave the breaks alone.
Building Identifiers Step by Step
Suppose a UI label reads User profile settings and you need several naming conventions from the same words.
- snake_case:
user_profile_settingsfor a database column or Python variable. - kebab-case:
user-profile-settingsfor a route such as/settings/user-profile-settings. - camelCase:
userProfileSettingsfor a JavaScript property. - CONSTANT_CASE:
USER_PROFILE_SETTINGSfor an environment variable. - PascalCase:
UserProfileSettingsfor a class or component name.
A reliable routine is to paste the label, click lower case first to flatten existing capitalization, click the target format, and copy the result. If the phrase contains punctuation or possessives, check the output, because every non-alphanumeric character becomes a separator and can merge or split pieces unexpectedly.
One caution: lowering first also removes acronym case, so API URL v2 becomes api_url_v2 rather than API_URL_V2. Restore acronyms by hand when they matter.
Common Mistakes
Expecting camelCase to split an existing hump, which it cannot. Assuming Title Case also lowercases the rest of each word. Forgetting that Sentence case will flatten acronyms and product names. Converting a multi-line list to snake_case and being surprised that the lines merged. And treating punctuation as meaningful: the separator styles replace every non-alphanumeric character, so foo.bar and foo-bar both become foo_bar under snake_case. Another trap is expecting acronyms to be restored; the tool has no dictionary, so an all-lowercase api gateway becomes Api Gateway, not API Gateway. Keep a short list of terms you always capitalize and fix them after conversion.
Related Tools
Frequently Asked Questions
Why did converting userName to camelCase give me username?
camelCase and PascalCase first lowercase the entire input and then treat non-alphanumeric characters as word boundaries. An existing camelCase hump is not split, so userName has no separators to preserve and collapses to username. Use snake_case, kebab-case, CONSTANT_CASE, or dot.case if you need to dismantle an existing hump.
Does Title Case lowercase the rest of each word?
No. Title Case only capitalizes the first letter of each word and leaves the remaining letters untouched, so hELLO wORLD becomes HELLO WORLD rather than Hello World.
What happens to line breaks when I convert to snake_case?
Line breaks are non-alphanumeric, so they are replaced by the delimiter and disappear. A two-line input becomes a single snake_case string joined by an underscore. Title Case and Sentence case leave line breaks intact because they only change letters.
How does the tool handle numbers in identifiers?
Digits are treated as ordinary word characters. user2name stays user2name after camelCase and snake_case conversion because a digit does not create a word boundary. If you need a separator before a number, add one yourself or use a different source formatting.
Which formats split an existing camelCase word correctly?
snake_case, kebab-case, CONSTANT_CASE, and dot.case all detect a lowercase letter followed by an uppercase letter and insert a separator. So userName becomes user_name, user-name, USER_NAME, or user.name. camelCase and PascalCase do not do this.
Does Sentence case handle acronyms and multiple sentences?
Sentence case lowercases everything first, then capitalizes the first letter of the string and the first letter after a period, exclamation mark, or question mark. Acronyms are lowercased in the process, so HTTP server becomes Http server unless you fix it afterward.
Reviewed by the HandyTools Hub team · Last updated