Case Converter: Change Text Capitalization
Convert text to uppercase, lowercase, title case, or another available style. Paste the text and copy the version that fits your document.
Case Converter & Text Formatter workspace
Convert all letters to uppercase
Features
Multiple Case Types
13+ case conversion options including camelCase, snake_case, and more
Instant Conversion
Convert text in real-time as you type or paste
No Registration
100% free - no signup or account required
Developer Friendly
Perfect for variable naming, code formatting, and more
Copy & Download
One-click copy and download functionality
Privacy First
All processing happens locally in your browser
Case Converter: change text between camelCase, snake_case, and 11 more styles
Convert text to uppercase, lowercase, title case, or another available style. Paste the text and copy the version that fits your document. Capitalization rules are not the same as grammar or editorial style. Review acronyms, names, brand spellings, and punctuation after conversion. Applying case changes to code or identifiers can also change meaning; convert only the text you intend to edit.
How to use the case converter
- Paste or type your text into the Input box, or hit the paste icon to pull from your clipboard.
- Open the Convert to dropdown and pick one of the 13 styles — a short description shows what each one does.
- Press Convert. The recased text appears in the Result panel instantly, with a live character count.
- Click Copy to send it to your clipboard, or Download to save it as a
.txtfile. - Need a different style? Change the dropdown and convert again — the original input stays put.
How case conversion actually works
Most styles are not a simple toUpperCase() call. The converter first tokenizes your text into words, then rejoins them with the right separator and capitalization. It splits on spaces, hyphens, underscores, dots, and slashes, and — critically — on internal camelCase boundaries. So getUserID is read as the words get, User, ID before being recast, which is why snake_case gives get_user_id rather than mangled output.
UPPERCASE and lowercase use JavaScript's built-in String.prototype.toUpperCase() and toLowerCase(), which apply the Unicode default case mappings. Those mappings are not always one letter in, one letter out. Per MDN's String.prototype.toLocaleUpperCase docs, some locales — Turkish especially — do not follow the default mappings, so the plain method can return the wrong letter for that language.
"For some locales, such as Turkish, whose case mappings do not follow the default case mappings in Unicode, there may be a different result."— MDN Web Docs, String.prototype.toLocaleUpperCase()
Worked examples: input → output
"user profile image" · camelCase
userProfileImage
"Max Retry Count" · CONSTANT_CASE
MAX_RETRY_COUNT
"My Blog Post Title" · kebab-case (URL slug)
my-blog-post-title
Edge case · acronym handling
Convert XMLHttpRequest to snake_case and you get xml_http_request, not x_m_l_http_request. The tokenizer keeps runs of capitals together as an acronym (XML) and only breaks before the next capitalized word (Http). This is the same rule that lets iOSDevice become i_os_device predictably.
Case style reference: where each one is used
Every input below is the phrase user profile name. Pick the convention your language or platform expects — mixing them in one codebase is a common source of lookup bugs and broken imports.
| Style | Output | Used for |
|---|---|---|
| camelCase | userProfileName | JavaScript / TypeScript variables, JSON keys, Java methods |
| PascalCase | UserProfileName | Classes, interfaces, React / Vue components, C# types |
| snake_case | user_profile_name | Python & Ruby (PEP 8), SQL columns, file names |
| kebab-case | user-profile-name | CSS classes, URL slugs, npm packages, HTML attributes |
| CONSTANT_CASE | USER_PROFILE_NAME | Constants, .env variables, C/C++ macros |
| Title Case | User Profile Name | Headings, button labels, document titles |
| Sentence case | User profile name | Body copy, UI microcopy, form field labels |
| dot.case | user.profile.name | Config keys, namespaces, object paths |
The casing trap that quietly breaks code
Uppercasing is not always reversible, and it can change the length of your string. The German ß (eszett) has no single uppercase letter, so "straße".toUpperCase() returns "STRASSE" — seven characters from six. Lowercasing that result gives strasse, not straße. If you uppercase a value to compare or store it, that round-trip loss can silently fail lookups.
Title Case here is also smarter than a space-only split: it capitalizes after hyphens, quotes, and brackets too, so mother-in-law becomes Mother-In-Law. For locale-correct casing in production (Turkish dotless ı vs dotted İ), use toLocaleUpperCase("tr") in your own code — the browser default mapping cannot infer language from text alone.
Related text & markdown tools
Turn a title into a clean kebab-case slug
Find & ReplaceSwap terms across recased text
Text SorterAlphabetize or dedupe lines of text
Word CounterCount words, characters & lines
Lorem Ipsum GeneratorCreate placeholder filler text
Markdown EditorWrite and preview Markdown live
Markdown to HTMLConvert Markdown to clean HTML
Markdown Table GeneratorBuild Markdown tables visually
Markdown TOCGenerate a table of contents
All ToolsBrowse the full Toolk hub
Guide: Markdown SyntaxRead the full Markdown syntax guide
Guide: Text Tools for CreatorsRead the text-processing workflow guide
Last updated: September 15, 2026 · Runs 100% in your browser — no uploads, tool input is not sent to Toolk.
Frequently asked questions
What is the difference between camelCase and PascalCase?
camelCase lowercases the first word and capitalizes every word after it (getUserName) — the convention for JavaScript variables and JSON keys. PascalCase capitalizes every word including the first (GetUserName), which languages reserve for classes, types, and React components.
When should I use snake_case instead of kebab-case?
snake_case (user_name) is the Python and SQL convention per PEP 8; kebab-case (user-name) belongs to CSS classes, URL slugs, and npm packages because hyphens are valid in those contexts while underscores often are not. For pure web slugs, the URL Slug Generator at /tools/url-slug-generator applies extra cleanup rules.
Why does XMLHttpRequest become xml_http_request and not x_m_l_...?
The tokenizer keeps runs of capitals together as one acronym — XML — and only breaks before a new capitalized word like Http. That same rule turns iOSDevice into i_os_device predictably instead of shredding every capital into its own letter.
Does uppercasing change my text in ways I cannot undo?
Sometimes, yes. The German eszett has no single uppercase letter, so straße.toUpperCase() returns STRASSE — seven characters from six — and lowercasing it back gives strasse without the ß. Avoid casing round-trips on values you need corresponding later.
Is my text uploaded when I convert it?
No. Tokenizing and recasing are processed locally in your browser, and Toolk's page analytics do not receive the text you paste. Tool input is not sent to Toolk, and the page keeps working offline once loaded.