Skip to main content

Case Converter

Convert text between UPPER, lower, Title, Sentence, camelCase, snake_case and more.

Reviewed by · Last reviewed

How to Use the Case Converter

  1. Paste or type your source text into the large input field at the top. The tool accepts anything from a single word to an entire article.
  2. Pick a target case by clicking one of the labelled buttons: UPPER CASE, lower case, Title Case, Sentence case, camelCase, snake_case, or kebab-case.
  3. Read the converted output in the result panel directly below the buttons. Each click recomputes the result in place, so you can rapidly try several styles against the same input.
  4. Copy the output with the one-click Copy button. The raw string is placed on the system clipboard ready to paste into a spreadsheet column, a code editor, or a CMS headline field.
  5. Reset and iterate by clearing the input and pasting the next batch. The result panel stays synchronized with whatever is currently typed.

What This Tool Does and How It Works

The Case Converter is a pure string-transform utility built on the JavaScript String.prototype surface. UPPER and lower cases use toLocaleUpperCase() and toLocaleLowerCase(), which respect the current browser locale for edge cases like Turkish dotted-I (where uppercase i becomes I only in non-Turkish locales). Title Case splits on whitespace and capitalizes the first grapheme of each token, while Sentence case walks the string to find terminators (., ?, !) and re-capitalizes the next non-space character.

Programmer cases are more interesting. camelCase, snake_case, and kebab-case all start from a normalization pass that collapses punctuation, joins tokens, and reshapes them: camelCase capitalizes the first letter of every word except the first and then concatenates; snake_case lowercases everything and joins with underscores; kebab-case does the same but joins with hyphens. Because everything runs as a synchronous function in the V8, SpiderMonkey, or JavaScriptCore engine inside your tab, there is no request, no worker round-trip, and no analytics beacon tied to the text itself.

When You Would Reach for Case Conversion

  • Cleaning up a spreadsheet column of names where half the rows came in as ALL CAPS and half as all lowercase after a CSV export.
  • Reshaping a feature flag name typed as "new-checkout flow" into newCheckoutFlow for a TypeScript constant without hand-toggling the Shift key.
  • Turning an article headline typed in Sentence case into Title Case before pasting into a newsroom CMS that does not auto-format.
  • Converting an existing URL slug back into human-readable prose for a breadcrumb label, going from best-budget-laptops-2026 to Best Budget Laptops 2026.
  • Preparing Python variable names from snake_case to camelCase for a cross-team API bridge.
  • Normalizing tag lists in a content database so that "Travel", "TRAVEL", and "travel" all become the same lowercase key.

Pitfalls and Edge Cases

Case conversion looks trivial until Unicode enters the picture. German ß uppercases to SS, which makes the output one character longer than the input. Turkish locales invert the dotted-I and dotless-I rules, so a naive toUpperCase() can corrupt Turkish words. Title Case libraries also disagree about "small words": some leave articles like "of", "and", and "the" lowercase in the middle of a title (AP style) while others capitalize every token (Chicago style). This tool uses the simpler every-token rule, so you may still need a manual pass for AP-style headlines.

Another subtle trap is that camelCase and snake_case cannot round-trip perfectly if the source string already has ambiguous word boundaries. XMLHttpRequest, for example, can legitimately become xml_http_request or x_m_l_http_request depending on how acronyms are detected. The converter uses a word-boundary heuristic based on runs of uppercase letters, which handles most real code but is not guaranteed to be reversible.

Case Styles and Where They Come From

Most of these cases are conventions rather than formal specifications. camelCase was popularized by Smalltalk and spread to Java, JavaScript, and Swift through API style guides like the Google JavaScript Style Guide. snake_case is the canonical style of PEP 8 for Python, and it is also the default for Ruby and PHP variable names. kebab-case shows up in CSS (per the W3C CSS specifications), HTML data attributes, and filesystem paths for the web. Title Case has competing dialects documented by the Chicago Manual of Style, AP Stylebook, and the MLA Handbook. SCREAMING_SNAKE_CASE, which the tool can approximate by combining UPPER and snake transforms, is the common form for constants in C and JavaScript. Understanding which case a target environment expects is usually more important than the raw transformation.

Comparison to Other Tools

A terminal pipeline like tr '[:upper:]' '[:lower:]' handles lower/UPPER but cannot do Title, camel, snake, or kebab; that requires sed, awk, or a scripting language, which is overkill for a two-line headline. IDE plugins such as the VS Code "Change Case" extension are excellent if you are already inside the editor, but they cannot help you convert a bullet list inside a Google Doc or a Notion page. Large text editors like Sublime Text ship with case menus, yet each IDE implements programmer cases slightly differently. For mobile users on phones, a web-based case converter is often the only practical option because mobile keyboards cannot easily press Shift on every character. Where a CLI wins is scripting: if you need to rename 400 filenames from Title Case to kebab-case, rename with a Perl regex is more appropriate than pasting 400 lines into a browser.

Frequently Asked Questions

Does Title Case here match AP Stylebook rules for headlines?

Not exactly. This tool capitalizes every whitespace-separated token, which matches the simpler every-word rule also used by MLA. AP Stylebook leaves articles, prepositions under four letters, and coordinating conjunctions lowercase unless they are the first or last word. For a true AP headline you will need a manual pass after running the converter.

How does this tool handle acronyms inside camelCase?

The word-boundary detector treats a run of uppercase letters as a single word, so <code>XMLParser</code> is kept as one token rather than being split into <code>X</code>, <code>M</code>, <code>L</code>, and <code>Parser</code>. When converting back to natural text, the output becomes "XML Parser". This matches the Google Java Style Guide but conflicts with Microsoft .NET guidelines, which recommend <code>XmlParser</code>.

Will non-English characters be preserved?

Yes. The converter uses <code>toLocaleUpperCase()</code> and <code>toLocaleLowerCase()</code>, which are Unicode-aware. Accented Latin letters, Cyrillic, Greek, and other alphabets all round-trip correctly. The programmer cases are lossier because they strip punctuation and collapse whitespace, but the core letters are preserved.

Does the text I paste ever leave my browser?

No. The conversion is a synchronous call into the JavaScript engine embedded in your browser (V8 on Chrome, SpiderMonkey on Firefox, JavaScriptCore on Safari). There is no fetch, no WebSocket, no service worker interception. You can open the Network tab in DevTools and watch the tool process a 10,000-word document without a single outbound request.

Why does German ß become SS when I uppercase my text?

Historically, German had no uppercase version of <code>ß</code> (Eszett), so the convention was to expand it to <code>SS</code> when casing a word. The Council for German Orthography introduced a capital form <code>ẞ</code> (U+1E9E) in 2017. Chrome and Firefox both still produce <code>SS</code> by default; if you need the capital eszett, post-process with find-and-replace.

What happens to trailing spaces and blank lines when I convert to snake_case?

They are collapsed. The programmer-case transforms treat any run of whitespace, hyphens, and punctuation as a single word boundary, so <code>" hello world "</code> becomes <code>hello_world</code>. UPPER, lower, Title, and Sentence cases preserve whitespace exactly so that paragraph structure survives the conversion.

Is there a length limit on how much text I can convert?

The converter does not set an explicit cap. A typical blog post converts in under 50 milliseconds on a 2020-era laptop. Performance becomes noticeable around a megabyte of text because the entire string is walked character-by-character. For a very large corpus, a Node.js script using the same String.prototype methods will be faster because it can stream files.

Can I combine two cases, like UPPER plus snake, to make CONSTANT_CASE?

Not in a single click, but you can chain them. Convert to snake_case first, then click UPPER CASE on the result to get <code>CONSTANT_SNAKE_CASE</code>, which is the typical style for module-level constants and environment variable names. The reverse also works: lower case first, then camelCase.

How does the converter decide where words begin inside camelCase input?

Two rules. First, a lowercase-to-uppercase transition marks a boundary (so <code>helloWorld</code> splits between <code>hello</code> and <code>World</code>). Second, an uppercase-to-lowercase transition preceded by another uppercase marks a boundary (so <code>HTMLParser</code> splits between <code>HTML</code> and <code>Parser</code>). This matches Lodash kebabCase.

Why is Sentence case sometimes wrong after abbreviations like "Dr." or "Inc."?

Sentence case looks for <code>.</code>, <code>?</code>, and <code>!</code> followed by whitespace, then capitalizes the next letter. It cannot distinguish a true sentence end from an abbreviation period, so "Dr. Smith met Ms. Jones." ends up with extra capitalization. This is a known limitation of rule-based sentence casers; review the result after applying Sentence case.

More Text Tools