Case Converter
Max 1 MB · Converts automatically as you type · Multi-line input keeps its line breaks
Every programming language and style guide has its own convention for separating the words inside a multi-word name — and they disagree with each other constantly. JavaScript and Java variables are camelCase. Python variables and functions are snake_case. A class name in almost any language is PascalCase. A URL path or a CSS class is kebab-case. An environment variable or a constant is CONSTANT_CASE. A heading is Title Case. This tool converts freely between all of them (plus plain Sentence case, lowercase, and UPPERCASE), so moving an identifier or a phrase from one convention to another is a paste, not a manual re-typing exercise.
How it works: every conversion goes through the same shared tokenizer first — the actual hard part of this tool, and the one piece that has to be right for every style to be right. It recognizes word boundaries from three sources at once: explicit delimiters already in your text (spaces, hyphens, underscores, dots — any run of them collapses to a single boundary), a camelCase/PascalCase transition (a lowercase letter or digit immediately followed by an uppercase letter), and a run of consecutive capital letters immediately followed by a capitalized word, which is what lets XMLHttpRequest split into XML, Http, and Request rather than X, M, L, Http, Request. Once the words are identified, each of the nine styles is just a different rule for how to case and rejoin them — lowercase and join with nothing for camelCase (after lowercasing the first word only), capitalize every word and join with nothing for PascalCase, lowercase and join with an underscore for snake_case, and so on.
Acronyms get one honest, explicit rule, not a different guess per style: Title Case is the only style that preserves a genuine acronym — parseXMLDocument becomes Parse XML Document. Every other style normalizes it, since XMLHttpRequest-style all-caps runs aren’t a valid convention inside camelCase, snake_case, or any of the others to begin with (parseXMLDocument → camelCase gives parseXmlDocument, not parseXMLDocument). Diacritics are preserved, never stripped — École converts to école in lowercase, not ecole — since this tool changes case and delimiters, not the alphabet; if you need ASCII-only output specifically for a URL or filename, Slug Generator is the tool built for that trade-off instead. Multi-line input converts one line at a time, with every line break preserved in the output.
Examples
- Renaming a JavaScript variable for a Python port — paste a camelCase identifier like <code>userAccountBalance</code> and read off the snake_case equivalent (<code>user_account_balance</code>) Python's own style guide expects, without manually re-typing every word boundary.
- Turning a heading into a URL-friendly slug — paste "10 Tips for Better Code Review" and convert to kebab-case for a URL path or CSS class name; for a fully URL-safe result with diacritics stripped rather than preserved, <a href="/tools/slug-generator">Slug Generator</a> is the more direct tool for that specific job.
- Generating an environment variable name from a config key — paste <code>databaseConnectionTimeout</code> and convert to CONSTANT_CASE (<code>DATABASE_CONNECTION_TIMEOUT</code>), the convention nearly every <code>.env</code> file and CI secrets panel expects.
Frequently asked questions
How does this tool handle acronyms, like XML or IO?
parseXMLDocument becomes Parse XML Document, not Parse Xml Document. Every other style normalizes it like any other word: the same input becomes parseXmlDocument in camelCase, ParseXmlDocument in PascalCase, parse_xml_document in snake_case. This isn't a limitation so much as a fact about the conventions themselves — XMLHttpRequest-style all-caps acronyms are a prose/display convention, not a rule any real camelCase or snake_case style guide actually follows for identifiers.Why does this tool keep accented letters (École, café) instead of stripping them, like a slug generator would?
École converts to école in lowercase and ÉCOLE in UPPERCASE, diacritics intact and correctly cased. If you specifically need ASCII-only output for a URL slug, filename, or similar — where diacritics genuinely need to go — use Slug Generator instead; it strips them on purpose, for a different reason than this tool preserves them.Is my text sent anywhere?
What counts as a word boundary?
helloWorld or base64Encode), and a run of consecutive capital letters followed by a capitalized word (as in XMLHttp splitting into XML and Http). All three combine on the same pass, so a real-world identifier like parseXMLDocument splits into exactly the three words you'd expect: parse, XML, Document.