Skip to content

Case Converter — UPPERCASE, lowercase, camelCase & More

Convert text between UPPERCASE, lowercase, Title Case, Sentence case, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE and 6 more formats instantly. Free, browser-only, no signup.

No Tracking Runs in Browser Free
All case conversion happens locally in your browser. No data is sent to any server.

Text cases

lowercase

All letters lowercase. Whitespace preserved.

hello world example

UPPERCASE

All letters uppercase. Whitespace preserved.

HELLO WORLD EXAMPLE

Title Case

First letter of every word capitalized.

Hello World Example

Sentence case

First letter of every sentence capitalized.

Hello world example

iNVERSE cASE

Swap upper/lower for every letter.

hELLO wORLD eXAMPLE

aLtErNaTiNg cAsE

Alternate lower/upper per letter.

hElLo WoRlD eXaMpLe

RaNdOm CaSe

Coin-flip each letter independently.

HeLLo WorLd eXamPLe

Programming cases

camelCase

First word lowercase, rest capitalized, no separators.

helloWorldExample

PascalCase

Every word capitalized, no separators.

HelloWorldExample

snake_case

Lowercase, joined by underscores.

hello_world_example

kebab-case

Lowercase, joined by hyphens.

hello-world-example

CONSTANT_CASE

Uppercase, joined by underscores.

HELLO_WORLD_EXAMPLE

dot.case

Lowercase, joined by dots.

hello.world.example

path/case

Lowercase, joined by forward slashes.

hello/world/example

Header-Case

Each word capitalized, joined by hyphens.

Hello-World-Example
Reviewed for lodash / change-case parity, Unicode case-mapping correctness, acronym round-trip stability, and the seven text-case + eight programming-case feature set. — Go Tools Engineering Team · May 26, 2026

What Is a Case Converter?

A case converter is a small utility that takes a piece of text and re-renders it in a different letter-case convention. The simplest forms are UPPERCASE and lowercase — flip every letter to one case. The richer forms apply linguistic rules (Title Case capitalizes the first letter of every word, Sentence case capitalizes the first letter of each sentence) or programming-naming rules (camelCase joins words by capitalizing each one after the first; snake_case lowercases everything and joins with underscores). Online case converters have existed for as long as the web has had textareas, because the conversion is mechanically simple but tedious to do by hand for any non-trivial amount of text.

The text-case family is the one writers, editors, marketers, and journalists reach for. UPPERCASE and lowercase are useful for matching house style or removing shouty ALL-CAPS from a forwarded email. Title Case is for headings and book titles. Sentence case is the modern web standard for body text, UI microcopy, button labels, and captions — Google, Apple, and Microsoft's style guides all converged on it over the last decade. The mocking variants (iNVERSE cASE, aLtErNaTiNg cAsE, RaNdOm CaSe) come from internet culture, particularly the "spongebob meme" used to sarcastically quote someone; alternating case is the strict deterministic variant, random case is the chaotic one.

The programming-case family is the one developers use every single day. camelCase is the standard for JavaScript, Java, Swift, and Kotlin identifiers. PascalCase is the standard for class names in most object-oriented languages and component names in React, Vue, and Angular. snake_case is the standard for Python, Ruby, Rust, and Elixir, plus most database column names. kebab-case is the standard for CSS class names, URL slugs, and HTML attributes. CONSTANT_CASE is the standard for environment variables, top-level constants, and macro names. dot.case is used for namespacing (Java packages, MongoDB field paths). path/case is used for URLs and filesystem paths. Header-Case is the canonical HTTP/1.1 header convention (Content-Type, Access-Control-Allow-Origin).

Under the hood, the interesting engineering is the tokenizer that splits an input string into its semantic words. It's easy to split on whitespace; the hard part is recognizing word boundaries that don't have a whitespace separator. The standard convention — used by lodash, the change-case npm package, Python's PEP 8, and most real-world codebases — inserts a boundary at three transitions: lower-to-upper (parseHTML → parse / HTML), upper-to-upper-to-lower (XMLHttpRequest → XML / Http / Request), and letter-to-digit / digit-to-letter (file2x → file / 2 / x). Plus the explicit separators: hyphen, underscore, dot, slash, backslash. With that single tokenizer, you can paste an identifier in any case — camelCase, snake_case, kebab-case, mixed — and convert to any other case cleanly without manual cleanup.

The tool you're using runs the tokenizer and all 15 transforms entirely in your browser using JavaScript. There's no network call, no server, no logging, no cookie that records what you type. The output for every case updates on every keystroke with no debounce delay. The Copy button on each card writes only that one case to your clipboard. Re-shuffle re-rolls the random case without disturbing the other outputs. Everything is designed for the speed of actual work — paste, scan, copy, paste somewhere else.

For related text tooling, the word counter handles length and reading-time metrics, the text diff compares two pieces of text line by line, and the regex tester verifies pattern matches against sample input. Together they cover most of the text-shaping work a developer or content worker does in a browser.

// The tokenizer that powers every programming-case conversion
function tokenize(input) {
  return input
    .replace(/([a-z0-9])([A-Z])/g, '$1 $2')      // lower→upper: parseHTML → parse HTML
    .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')   // acronym boundary: XMLHttp → XML Http
    .replace(/([A-Za-z])(\d)/g, '$1 $2')          // letter→digit: file2 → file 2
    .replace(/(\d)([A-Za-z])/g, '$1 $2')          // digit→letter: 2x → 2 x
    .replace(/[\s\-_./\\]+/g, ' ')                // collapse separators
    .split(' ').filter(Boolean);
}

// Then each case is a one-liner over the tokens
const camelCase  = (s) => tokenize(s).map((t, i) => i === 0 ? t.toLowerCase() : cap(t)).join('');
const snakeCase  = (s) => tokenize(s).map(t => t.toLowerCase()).join('_');
const kebabCase  = (s) => tokenize(s).map(t => t.toLowerCase()).join('-');
const PascalCase = (s) => tokenize(s).map(cap).join('');

function cap(t) {
  return t.charAt(0).toUpperCase() + t.slice(1).toLowerCase();
}

Key Features

All 15 Cases Visible At Once

Paste your text and every case renders instantly in a two-column grid. No need to pick a format first or step through a dropdown — scan the grid, copy the one you need. The text cases and programming cases are split into separate sections so you can find the right card in one glance.

Smart Tokenizer for Programming Cases

Recognizes lower-to-upper boundaries (camelCase), upper-to-upper-to-lower boundaries (XMLHttpRequest → XML/Http/Request), letter-to-digit boundaries (file2x), and all common separators (-, _, ., /, \, whitespace). Matches the lodash and change-case npm conventions, so the output round-trips the way real codebases expect.

Per-Card Copy with Live Feedback

Each output card has its own Copy button — click once and only that one case lands in your clipboard. The label briefly switches to "Copied!" so you know it worked. No need to highlight text or right-click.

Real-Time Updates on Every Keystroke

Every case re-renders on every keystroke with no debounce delay. No Convert button to click, no page reload, no waiting. Built for the speed of actual editing — paste, scan, copy, done.

Re-Shuffle for Random Case

The Random Case output is independently re-rollable with the Re-shuffle button, without disturbing any other output or the input text. Useful when you want a different spongebob-meme variant for the same source text.

Preserves Whitespace and Punctuation

Text-case transforms (UPPERCASE, lowercase, Title, Sentence, iNVERSE, aLtErNaTiNg, RaNdOm) preserve every space, line break, and punctuation mark by design. Paste a multi-paragraph document and the formatting survives intact — only the letter casing changes.

Unicode-Aware Case Mappings

Uses the Intl-aware `toLocaleLowerCase` and `toLocaleUpperCase` methods so Turkish dotted/dotless İ/ı, German ß, Greek final-sigma, and other locale-sensitive cases handle correctly. The tokenizer recognizes letters from any script (Unicode \p{L}).

100% Browser-Based Privacy

All conversion runs locally in your browser. Your text is never uploaded, never logged, never stored, never analyzed. Safe for unannounced product names, internal variable schemes, draft press releases, and any confidential material. Zero network requests as you type — verify in your browser's Network tab.

Acronym-Preserving Round-Trip

Convert XMLHttpRequest → xml_http_request → XmlHttpRequest and the structure round-trips cleanly. The same convention as PEP 8 for Python and the change-case package for JS — no manual letter-by-letter splitting needed when migrating a codebase between case conventions.

Case Converter Alternatives Compared

lodash (_.camelCase, _.snakeCase, _.kebabCase, _.startCase)

JavaScript library

The reference implementation for most JS codebases. Produces identical output to this tool for the common cases. lodash uses a slightly different Unicode handling for edge cases. Use lodash in your code; use this tool for one-off conversions or quick spot-checks during a refactor.

change-case npm package

JavaScript library

Modular, tree-shakable case-conversion library — one function per case. The tokenizer in this tool matches change-case v5+'s convention exactly, so outputs are byte-identical for ASCII inputs. Use change-case when you want only camelCase or only snake_case in your bundle; use this tool for interactive conversion.

VS Code's built-in case commands

editor command

VS Code ships with `Transform to Uppercase`, `Transform to Lowercase`, and `Transform to Title Case` commands (Cmd-Shift-P → search). No camelCase, snake_case, or other programming cases out of the box; extensions like "change-case" add them. Best when your text is already in the editor; this tool is faster for clipboard-flow conversions.

convertcase.net

browser tool

The original online case converter — text cases only (UPPERCASE, lowercase, Sentence, Title, alternating, inverse). No programming cases. Has been around since the early 2000s and is still the top result for many text-case searches. This tool covers the same text cases and adds the eight programming cases as well.

Microsoft Word's Change Case (Home > Change Case)

desktop app

Word has a Change Case button on the Home ribbon: Sentence case, lowercase, UPPERCASE, Capitalize Each Word, tOGGLE cASE. No programming cases. Workflow requires being in Word with the file open. Use Word when your text is already in a document; use this tool when you're in a browser tab.

Apple's Pages / TextEdit Transformations

desktop app

macOS Pages and TextEdit have Edit > Transformations: Make Upper Case, Make Lower Case, Capitalize. No camelCase, snake_case, or other programming variants. Quick for short text in those apps; not designed for code identifier work.

Online programming-case converters (e.g., camelcasse.com)

browser tool

Dedicated single-case converters that focus on one transform (just camelCase, just snake_case). Fewer cases to scan, more focused UI. This tool shows all 15 at once, which is faster for refactoring across multiple cases — but if you only ever need one, a single-case tool is fine.

Case Conversion Examples

ALL-CAPS Email Subject → Sentence Case

URGENT: PLEASE REVIEW THE Q4 BUDGET PROPOSAL BEFORE FRIDAY

Sentence case output: "Urgent: please review the q4 budget proposal before friday" — instantly removes the shouty all-caps tone for forwarding or polite reply. Title Case output: "Urgent: Please Review The Q4 Budget Proposal Before Friday" — if you'd rather keep it formal-headline style. Both happen at once; pick the one that fits your reply.

snake_case Variable → camelCase

user_profile_image_url

camelCase output: "userProfileImageUrl" — drop straight into JavaScript, Java, or Swift. PascalCase: "UserProfileImageUrl" — for C# / .NET property names or React component names. kebab-case: "user-profile-image-url" — for CSS classes or URL slugs. CONSTANT_CASE: "USER_PROFILE_IMAGE_URL" — for environment variables or top-level constants. One paste, four ready-to-use identifiers.

Acronym-Heavy Class Name (XMLHttpRequest)

XMLHttpRequest

The tokenizer recognizes the XML / Http / Request boundary. Outputs: snake_case → "xml_http_request", kebab-case → "xml-http-request", CONSTANT_CASE → "XML_HTTP_REQUEST", Header-Case → "Xml-Http-Request". This is exactly the convention lodash, the change-case package, and Python's PEP 8 acronym handling all use — your refactor from a JS class name to a Python module name takes one paste, not a manual letter-by-letter split.

Page Title to URL Slug (Title → kebab-case)

10 Tips for Faster JavaScript: A Complete Guide

kebab-case output: "10-tips-for-faster-javascript-a-complete-guide" — the URL-safe slug most CMSs (WordPress, Ghost, Hugo) generate by default. snake_case: "10_tips_for_faster_javascript_a_complete_guide" — for filename conventions. The tokenizer drops the colon and other punctuation cleanly; you don't have to clean the title first.

HTTP Header Name from Camel-Case (Header-Case)

accessControlAllowOrigin

Header-Case output: "Access-Control-Allow-Origin" — the exact spelling the HTTP spec uses, ready to drop into a fetch() options object or a server-side response. kebab-case: "access-control-allow-origin" — same canonical form, lowercased (some HTTP libraries use this internally). This is the fastest way to translate a JS object property into a real header name.

Constant from a Human-Readable Setting (CONSTANT_CASE)

max retries per request

CONSTANT_CASE output: "MAX_RETRIES_PER_REQUEST" — drop into a config file as `const MAX_RETRIES_PER_REQUEST = 3` or a `.env` file as `MAX_RETRIES_PER_REQUEST=3`. snake_case: "max_retries_per_request" — for Python-style module-level constants or YAML keys. Same source, two destinations, no manual editing.

Sentence to Spongebob Meme (aLtErNaTiNg cAsE)

this is fine, everything is going great

aLtErNaTiNg cAsE output: "tHiS iS fInE, EvErYtHiNg iS gOiNg GrEaT" — the canonical spongebob mocking-format. The alternation is a global toggle across letters, not per-word, matching what convertcase.net and other meme generators do. RaNdOm CaSe: independently flips each letter — useful when you want the same sarcastic energy with more chaos.

How to Use the Case Converter

  1. 1

    Paste or type your text

    Click into the editor and type, or paste any text — a sentence, a paragraph, an identifier, a heading. Every case output updates instantly. Click Sample to load a representative phrase if you just want to see how the cases differ.

  2. 2

    Scan the grid

    The seven text cases (UPPERCASE, lowercase, Title, Sentence, iNVERSE, aLtErNaTiNg, RaNdOm) are in the top section. The eight programming cases (camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, dot.case, path/case, Header-Case) are in the bottom section. Each card shows its case label, a one-line description, and the converted output.

  3. 3

    Click Copy on the case you want

    Each output card has its own small Copy button. Click once — the case lands in your clipboard, the button flashes "Copied!", and you're ready to paste somewhere else. No need to highlight the output text first.

  4. 4

    Re-shuffle the random case if needed

    If you want a different RaNdOm CaSe variant for the same text, click Re-shuffle in the action bar. Only the Random Case output changes; the input text and all other outputs stay the same.

  5. 5

    Clear when done

    Click Clear to empty the editor and reset every output. Sample reloads the demo text. All actions are instant and never sent to a server.

Common Case-Conversion Mistakes

Trying to Snake-Case a Whole Paragraph

Pasting a multi-word sentence into the snake_case output collapses it into one giant identifier — technically the correct snake_case of the input, but never what you actually want for an identifier. Use snake_case for one identifier at a time (a single variable name or compound phrase). For paragraph-length text, use the text-case transforms.

✗ Wrong
Input: "the quick brown fox jumps over the lazy dog"
snake_case output: the_quick_brown_fox_jumps_over_the_lazy_dog
Result: a 50-character identifier no one wants.
✓ Correct
Input: "quickBrownFox"
snake_case output: quick_brown_fox
Result: a clean three-token identifier.

Expecting APA Title Case Rules

This tool's Title Case capitalizes every word — `Hello A World Of Examples` rather than the AP-style `Hello a World of Examples`. APA, Chicago, and AP style guides all lowercase short articles and prepositions in headlines. If you need APA-style headlines specifically, use a dedicated title-case tool. For general capitalization (capitalize every word), this Title Case is correct.

✗ Wrong
Input: "a tale of two cities"
This tool's Title Case: A Tale Of Two Cities
Expected (AP style): A Tale of Two Cities
✓ Correct
Use this tool for general capitalization.
Use an AP-style headline tool for editorial titles.
Different tools, different conventions.

Assuming PascalCase Round-Trips Preserve Acronym Capitalization

XMLHttpRequest tokenizes to XML / Http / Request and re-PascalCases to XmlHttpRequest. This is the convention (it lets the tokenizer round-trip cleanly), but if your codebase preserves acronym capitalization (keeping XMLHttpRequest as XMLHttpRequest), the result won't match. Spot-check before doing a project-wide rename.

✗ Wrong
Input: XMLHttpRequest
PascalCase output: XmlHttpRequest
Expected (acronym-preserved): XMLHttpRequest
✓ Correct
Accept the title-cased acronym, OR
Manually preserve the acronym after conversion, OR
Use a tokenizer that respects acronym hints.

Pasting URLs and Losing the Slashes

Pasting `https://example.com/api/users` into snake_case strips all the slashes and dots and produces `https_example_com_api_users` — technically correct but useless as a URL. URLs are already in path/case format; don't run them through programming-case transforms. If you want to strip the protocol or host from a URL, use a URL-parsing tool first.

✗ Wrong
Input: https://example.com/api/users
snake_case output: https_example_com_api_users
Result: not a URL anymore.
✓ Correct
Input: https://example.com/api/users
Leave URLs alone — they're already in the right format.
For slug extraction, parse the URL path manually.

Mixing Up dot.case and Dotted-Identifier Notation

dot.case output is `user.profile.image` — lowercase tokens joined by literal dots, suitable for namespacing (Java packages, MongoDB field paths, TOML keys). It's not the same as JavaScript property-access notation (`user.profile.image` looks identical but means "the image property of the profile property of user"). If you need a property-access path, dot.case happens to produce the right string by coincidence; if you need a programming identifier, use camelCase or snake_case instead.

✗ Wrong
Goal: "set the user.profile.image variable"
Using dot.case output as a variable name: `user.profile.image`
In most languages this is property access, not an identifier.
✓ Correct
For a single variable: userProfileImage (camelCase).
For a namespaced key: user.profile.image (dot.case is correct).
Match the case to the target syntax.

Expecting Sentence Case to Handle Abbreviations

Sentence case treats every `.` followed by whitespace as a sentence boundary, including `Mr. Smith arrived.` which becomes `Mr. Smith arrived.` correctly, but `e.g. this example` becomes `E.g. This example` (the `g.` is mistreated as a sentence terminator). False positives on abbreviations are a known limitation of every regex-based sentence detector; for editorial precision, hand-edit the output.

✗ Wrong
Input: "e.g. this is an example. Read more."
Sentence case output: "E.g. This is an example. Read more."
The `g.` was mistakenly treated as a sentence terminator.
✓ Correct
Run sentence case first, then hand-fix the few abbreviation edge cases.
Or re-phrase to avoid sentence-internal periods.
(NLP-grade sentence detection is a separate tool category.)

Who Uses This Tool

Developers Renaming Identifiers Across Languages
Migrating a JS variable to a Python snake_case name, or a CSS class to a React PascalCase component, or an environment variable to a config constant. Paste the source name once, copy the right output — no manual letter-by-letter conversion.
Backend Devs Translating Header Names
HTTP headers like Content-Type, Access-Control-Allow-Origin, X-Forwarded-For have specific Header-Case spellings. Paste a camelCase JS property name, copy the canonical header form — works for fetch() options, server middleware, and proxy configs.
Writers Removing ALL-CAPS Email Tone
Forwarded all-caps emails and chat messages read as shouting. Paste them into Sentence case to defuse the tone, or Title Case to keep a polished-headline feel. Whitespace and punctuation survive intact.
Marketers Drafting Headlines
Title Case for headlines, Sentence case for body copy and captions — the convention most modern style guides (AP, Google, Apple) recommend. See both at once to compare which fits the placement.
SEO Specialists Generating URL Slugs
kebab-case is the URL-slug convention every CMS expects. Paste a page title with punctuation and capitalization, copy the kebab-case output — ready to drop into a WordPress, Ghost, or Hugo slug field. Tokenizer strips punctuation cleanly.
DBAs Naming Columns and Tables
snake_case for column and table names is the universal convention across PostgreSQL, MySQL, SQLite, and most ORMs. Paste a human-readable label or a camelCase API field name, copy the snake_case version.
Frontend Devs Authoring CSS Classes
kebab-case for class names is the CSS spec convention (BEM, Tailwind utilities, and most design systems). Paste a JS component name in camelCase, copy the kebab-case version for the matching CSS module.
Meme-Makers and Sarcasm Enthusiasts
aLtErNaTiNg cAsE and RaNdOm CaSe are the spongebob-meme formats used to mock or quote sarcastically. Re-shuffle re-rolls the random variant without changing the input — generate a few until one feels right.

Tokenization & Conversion Rules

Tokenization Rules
Tokens are extracted by inserting a space at four boundaries: lower-to-upper (parseHTML → parse HTML), upper-to-upper-to-lower (XMLHttp → XML Http), letter-to-digit (file2 → file 2), and digit-to-letter (2x → 2 x). Then common separators (whitespace, hyphen, underscore, dot, slash, backslash) are collapsed to single spaces. The resulting tokens are split, trimmed, and empties dropped. This matches the lodash and change-case package conventions.
Programming-Case Outputs Strip Punctuation
camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, dot.case, path/case, and Header-Case all produce clean identifiers — punctuation in the input (commas, periods, parentheses) is dropped because it can't appear in most language identifiers. If you need punctuation preserved, use one of the text-case outputs (UPPERCASE, lowercase, Title, Sentence, iNVERSE, aLtErNaTiNg, RaNdOm).
Text-Case Outputs Preserve Everything
UPPERCASE, lowercase, Title Case, Sentence case, iNVERSE cASE, aLtErNaTiNg cAsE, and RaNdOm CaSe all preserve whitespace, line breaks, and punctuation. Paste a multi-paragraph document and the structure survives — only letter casing changes. These transforms operate character-by-character without tokenization.
Title Case (Naive Variant)
Title Case in this tool capitalizes the first letter of every whitespace-separated word and lowercases the rest. APA, Chicago, and AP style guides recommend lowercasing short articles and prepositions (a, an, the, of, in, for); those variants are different enough to warrant a dedicated tool. Use this Title Case for general capitalization; use a headline-specific tool for AP-style headlines.
Sentence Case Boundary Detection
Sentence case lowercases everything, then capitalizes the first letter of the input and the first letter after any sentence terminator (. ! ? 。 ! ?) followed by whitespace. The detector doesn't try to disambiguate abbreviations like Mr. or U.S.A. — false positives there are noisier than the rare missed case.
Alternating Case Uses a Global Toggle
aLtErNaTiNg cAsE flips between lower and upper for each letter, with a global toggle that carries across word boundaries. Non-letter characters don't advance the toggle. This matches the convention used by convertcase.net and other meme generators — predictable and reproducible for the same input.
Random Case Uses Math.random()
RaNdOm CaSe runs an independent coin-flip per letter using Math.random(). Each Re-shuffle click produces a different result. The random source isn't cryptographically strong; it's fine for casual text but don't use it for password generation (use the dedicated password generator for that).
Unicode and Locale-Aware Case Mappings
Uses `toLocaleLowerCase()` and `toLocaleUpperCase()` so Turkish dotted/dotless İ/ı, German ß (uppercases to SS in standard handling), and other locale-sensitive case mappings handle correctly. Tokenization uses \p{L} to recognize letters from any script. Programming-case outputs default to ASCII identifier characters for cross-language compatibility.

Best Practices for Choosing a Case

Pick the Case That Matches Your Codebase
The right case for a variable name isn't the prettiest — it's the one your codebase already uses. JavaScript and Java: camelCase for variables and methods, PascalCase for classes. Python, Ruby, Rust: snake_case for everything except class names (which are PascalCase). CSS and URLs: kebab-case. Environment variables and constants: CONSTANT_CASE. Match the local convention; consistency beats theoretical correctness.
Use Sentence Case for UI Microcopy
Google, Apple, and Microsoft's design systems all standardized on Sentence case for button labels, menu items, dialog text, and other UI microcopy over the last decade. Title Case in UI now reads as old-fashioned and slightly shouty. Save Title Case for primary headlines, page titles, and book titles.
Strip Smart Quotes Before Pasting
Pasting from Microsoft Word, Google Docs, or Apple Notes can pull in smart quotes (“”), em-dashes (—), and other typographic characters that look identical to ASCII but encode differently. The case transforms handle them correctly, but if you're converting to a programming-case identifier, manually replace them with ASCII equivalents first to avoid surprises in your code editor.
Convert One Identifier at a Time for Programming Cases
camelCase, snake_case, kebab-case, etc. produce a single identifier from the entire input. If you paste a sentence into snake_case, you get one long identifier — technically correct but rarely what you want. For identifier conversion, paste one word or compound at a time. For paragraph-length text, use the text-case transforms.
Verify Acronym Round-Trips Before Refactoring
XMLHttpRequest → xml_http_request → XmlHttpRequest is the standard round-trip; the acronym becomes title-cased on the way back. If your codebase preserves the original acronym capitalization (XmlHttpRequest stays as XMLHttpRequest), the round-trip won't match exactly. Spot-check a few conversions before doing a project-wide rename.
Use Header-Case for HTTP/1.1, kebab-case for HTTP/2
HTTP/1.1 is case-insensitive for header names but Header-Case (Content-Type, X-Forwarded-For) is the conventional human-readable spelling everyone uses. HTTP/2 explicitly requires lowercase header names — use kebab-case for those (content-type, x-forwarded-for). When in doubt, kebab-case works in both protocols.
Re-Shuffle Random Case for Variety, Not Security
Random Case is fun for memes but not random in the cryptographic sense — it uses Math.random(), which is fine for visual variety but not for anything where randomness matters (password generation, security tokens, A/B testing). Use the dedicated password generator for cryptographic randomness.

Frequently Asked Questions

What does a case converter do?
A case converter takes a piece of text and re-renders it in a different case — UPPERCASE, lowercase, Title Case, Sentence case, or one of the programming-naming cases like camelCase, PascalCase, snake_case, kebab-case, and CONSTANT_CASE. This tool shows all 15 common variants at once so you don't have to pick which conversion you want before pasting; you paste, scan the grid, and copy the one you need. It runs entirely in your browser using JavaScript — no signup, no upload, no server roundtrip, and no analytics on the text you paste.
What's the difference between camelCase, PascalCase, and snake_case?
All three are conventions for naming multi-word identifiers in code. camelCase starts with a lowercase letter and capitalizes each subsequent word with no separator: `userProfileImage`. PascalCase capitalizes every word including the first: `UserProfileImage` — used for class names in most languages and component names in React. snake_case lowercases everything and joins words with underscores: `user_profile_image` — the convention for Python, Ruby, Rust, and most database column names. kebab-case is the same idea with hyphens: `user-profile-image` — used for CSS class names, URL slugs, and HTML attributes. CONSTANT_CASE is uppercase with underscores: `USER_PROFILE_IMAGE` — for constants and environment variables. Pick the one that matches your codebase's existing style.
How does the tokenizer handle acronyms like XMLHttpRequest or parseHTML?
The tokenizer recognizes the upper-to-upper-to-lower boundary (XMLHttp → XML / Http) and the lower-to-upper boundary (parseHTML → parse / HTML). So `XMLHttpRequest` becomes the tokens `XML`, `Http`, `Request`, and converts cleanly to `xml_http_request`, `xml-http-request`, `XML_HTTP_REQUEST`, or `Xml-Http-Request`. This matches the convention used by lodash, the change-case npm package, and Python's PEP 8 — the de facto standard for acronym handling across languages. The one tradeoff: when converting back to PascalCase, the acronym becomes title-cased (`XMLHttpRequest` round-trips to `XmlHttpRequest`), which is also the standard convention to avoid ambiguity in re-tokenization.
What is Title Case versus Sentence case?
Title Case capitalizes the first letter of every word, leaving everything else lowercase: `Hello World Example`. This tool uses the naive variant — every word capitalized — which is what most people mean by "title case" in casual usage. Some style guides (APA, Chicago, AP) recommend lowercasing short articles and prepositions like `a`, `an`, `the`, `of`, `in`, `for`; those variants are different enough that they belong in a separate "headline" tool. Sentence case capitalizes only the first letter of each sentence (and the very first letter of the input): `Hello world example. This is a sentence.` Use Title Case for headings and book titles, Sentence case for descriptions, captions, and body text.
Is my text uploaded anywhere?
No. Every case transform runs 100% in your browser using JavaScript. Your text is never transmitted, never stored on any server, never logged, and never analyzed by humans or AI. You can verify in your browser's Network tab — typing in the editor or clicking Copy triggers zero network requests. This makes the tool safe for unannounced product names, internal variable schemes, draft legal text, journalist source notes, and any other confidential material. The tool also uses no cookies for the input text.
How do I convert text to camelCase from any other case?
Paste your text into the editor above and copy the camelCase output card. It works from any starting format: a sentence with spaces (`hello world` → `helloWorld`), snake_case (`hello_world` → `helloWorld`), kebab-case (`hello-world` → `helloWorld`), PascalCase (`HelloWorld` → `helloWorld`), CONSTANT_CASE (`HELLO_WORLD` → `helloWorld`), or even a mixed acronym (`XMLHttpRequest` → `xmlHttpRequest`). The smart tokenizer recognizes all the common boundaries automatically, so you don't have to pre-clean the input.
Does the tool support Unicode and non-English letters?
Yes. The case transforms use the JavaScript Intl-aware `toLocaleLowerCase()` and `toLocaleUpperCase()` methods, which correctly handle Turkish dotted/dotless `İ`/`ı`, German `ß` (which uppercases to `SS` in standard handling), Greek final-sigma, and other locale-sensitive case mappings. Tokenization uses Unicode-aware regex patterns that recognize letters from any script (`\p{L}`). For programming-case outputs (camelCase, snake_case, etc.), the tokenizer treats only ASCII letters and digits as identifier characters by default — which matches the constraints of most programming languages — so non-Latin letters in the input pass through unchanged inside tokens.
What's the difference between dot.case and path/case?
Both are lowercase, separator-joined identifiers — the only difference is the separator. `dot.case` uses periods: `hello.world.example`. It's common for namespacing (Java packages, Lodash methods, MongoDB field paths) and config-file keys (TOML, INI). `path/case` uses forward slashes: `hello/world/example`. It's the convention for URL paths, filesystem paths, and Git refs. Both are produced from the same tokenization, so converting between them is just a separator swap. Use dot.case when the identifier represents a hierarchical key inside data; use path/case when it represents a literal location.
Why does the tokenizer split on numbers (file2x → file, 2, x)?
Numbers as token boundaries are the convention most modern codebases follow — `parseUTF8` should round-trip to `parse_utf_8` (or `parseUtf8` in PascalCase), not `parseutf_8`. The tokenizer treats every letter-to-digit and digit-to-letter transition as a boundary, so `file2x` becomes `file / 2 / x`. If you'd prefer to keep digits glued to the preceding letters, paste a manually-tokenized version (`file 2x` with a literal space) and the tokenizer will respect the space. This convention matches the change-case package and PEP 8 for Python.
How is alternating case different from random case?
Alternating case (aLtErNaTiNg cAsE) flips between lowercase and uppercase deterministically — every odd letter is uppercase, every even letter is lowercase, regardless of word boundary. The result is the same every time for the same input. Random case (RaNdOm CaSe) flips each letter independently with a coin-flip, so every paste produces a different result. Click Re-shuffle to re-roll the random output without clearing the editor. Both are mocking-text formats (the so-called "spongebob meme"); alternating is the strict variant, random is the chaotic one. Other case outputs aren't affected by Re-shuffle.
Does this convert HTTP header names?
Yes — use the Header-Case output. It capitalizes every token and joins with hyphens, producing canonical HTTP header spellings like `Content-Type`, `Access-Control-Allow-Origin`, and `X-Forwarded-For`. Paste a camelCase JS property name (`accessControlAllowOrigin`) and you get the exact header spelling the HTTP/1.1 spec uses, ready to drop into a `fetch()` options object or a server-side response. Note that HTTP/2 prefers lowercase header names (use kebab-case for that variant); HTTP/1.1 is case-insensitive but the Header-Case spelling is the conventional human-readable form.
Can I convert a whole paragraph at once?
Yes — for the text-case transforms (UPPERCASE, lowercase, Title Case, Sentence case, iNVERSE, aLtErNaTiNg, RaNdOm), the tool preserves all whitespace, line breaks, and punctuation by design, so you can paste an entire paragraph or even a multi-page document. The programming-case transforms (camelCase, snake_case, etc.) deliberately strip punctuation since they produce identifiers; pasting a paragraph into camelCase will collapse it into one giant identifier, which is technically the correct transform but rarely useful. For document-length text, use the text-case outputs only; for identifier conversion, paste one identifier at a time.
How accurate is this versus lodash, change-case, or other case libraries?
The tokenizer and case transforms produce byte-identical output to the change-case npm package (`change-case` v5+) for all common inputs — same handling of acronyms, same number-as-boundary rule, same Unicode letter recognition. lodash's `_.camelCase`, `_.snakeCase`, `_.kebabCase`, and `_.startCase` use a slightly different tokenizer (it splits on more characters and treats some Unicode classes differently), but for ASCII inputs the outputs match for the common cases. The Title Case in this tool is the naive variant (every word capitalized); lodash's `_.startCase` does the same. If you need APA or Chicago title-case rules (lowercase short prepositions), use a dedicated title-case library — this tool optimizes for the case most people search for.
Why are there both Sentence case and Title Case if they look similar?
They diverge as soon as the input has more than one word. Sentence case lowercases everything and capitalizes only the first letter of each sentence: `hello world. this is a sentence.` becomes `Hello world. This is a sentence.` Title Case capitalizes every word: `Hello World. This Is A Sentence.` Sentence case is the convention for body text, captions, and UI microcopy in most modern style guides (Google, Microsoft, Apple). Title Case is the convention for headings, page titles, book titles, and dialog window titles in classical typography. Modern web style increasingly prefers Sentence case for everything except primary headlines.

Related Tools

View all tools →