
I pasted a headline into a converter. It capitalised every word. Through came back Through. That is the Associated Press rule from 2019. Chicago Manual of Style 17 still leaves through small. The page I was using did not say which one it had picked.
I built a tab that shows UPPER, lower, Sentence, and title case by AP, Chicago, or APA, plus camelCase, PascalCase, snake_case, kebab-case and CONSTANT_CASE, from one paste. Turkish i and German ß stay honest. The paste stays in this tab. Mixpanel still loads with Softery.io, so I will not claim the whole site never talks to a server.
The new page is Text Case Converter.
Capitalising every word is easy
A lot of converters have one button. You press Title. Every word gets a capital. The Journey Through The Looking Glass. That is fast. It is also a style nobody named.
AP 2019 capitalises prepositions of four letters or more. Through is four letters, so it is a capital. Chicago 17 leaves prepositions small at any length. through stays small. APA 7 uses the four letter cutoff, close to AP. The first word and the last word are capitals in all three. A word after a colon starts again.
I wanted those three on one paste. Not a second click. Not a guess dressed up as the only right answer.
The sample on the page is this:
the NASA API journey through the looking glass in istanbul
get_user_id
AP title is The NASA API Journey Through the Looking Glass in Istanbul. Chicago is the same line with through small. APA matches AP on that word. I picked that paste because the split sits in the middle of a real sentence, and because English locale drops the dot on the i in istanbul.
Through is the split
Switch AP to Chicago on the same paste. Through flips. The rest of the line stays put. NASA stays NASA. API stays API. in stays small. Istanbul stays a capital because it is a content word.
| Style | through | in | last word |
|---|---|---|---|
| AP 2019 | Through | in | Istanbul |
| Chicago 17 | through | in | Istanbul |
| APA 7 | Through | in | Istanbul |
in is three letters. All three guides leave it small unless it is the first or last word. through is the one that moves.
If your editor said Chicago, pick Chicago. If they said AP, pick AP. If nobody said anything, say so. This page will not pick a house style for a paper it has not read.
None of them is the only right one.
That line is on the page. I wrote it because the usual converter pretends there is one Title button.
NASA stays NASA
Keep acronyms is on by default. The known list includes NASA, API, HTML, HTTP, JSON, SQL, URL, UUID, PDF, UI, UX, and a few more. A token you already typed in caps, like OECD, stays caps too, unless the whole block is already shouting.
Turn the toggle off and NASA becomes Nasa. That is a different product. Some people want it. The default is the one I use when I clean a heading I already wrote.
THE NASA API IS READY. with the toggle on becomes The NASA API is ready. in Sentence. Title is The NASA API Is Ready. Is is a content word, so it gets a capital in title case. Sentence leaves it small.
A block of caps is a sentence
HELLO WORLD. HOW ARE YOU? FINE! is not a pile of acronyms. If I treated every all-caps token as NASA, that paste would stay HELLO WORLD. I do not want that.
When 80 percent or more of the letters are already upper, the page stops inferring acronyms from shape. Known names still hold. HELLO WORLD becomes Hello world. How are you? Fine! in Sentence. That is the 80 percent cut in isMostlyUpper.
A short heading like NASA API READY still keeps NASA and API, because those sit on the known list, and the block is not a wall of caps in the same way. The 80 percent rule is for the shout, not for three tokens you meant.
Turkish i is not English I
English locale uppercases istanbul to ISTANBUL. The dot drops. In Turkish, i and I are not a pair. i becomes İ. I becomes ı. Switch the locale to Turkish and the sample upper line is THE NASA API JOURNEY THROUGH THE LOOKİNG GLASS İN İSTANBUL. LOOKING picked up a dotted İ because of the i. IN became İN.
Title on Turkish is The NASA API Journey Through the Looking Glass in İstanbul. The city keeps the dot. That is toLocaleUpperCase('tr') and toLocaleLowerCase('tr'). I did not write a letter table.
Programmer cases follow the same locale. get_user_id on Turkish camel is getUserİd. API in the long line becomes Apı when it is folded to lower first, because I in Turkish lowercases to ı. If you needed English identifiers from a Turkish headline, leave locale on English. The page will not guess which job you are doing.
The note under the result says it when the locale is Turkish and the paste has i, I, ı, or İ: "Turkish i and I are not the same letter. English locale would drop the dot."
German ß becomes SS
straße on German locale uppercases to STRASSE. ẞ lowercases to ß. Lowercasing STRASSE cannot bring ß back. That is Unicode, not a bug I can patch with a guess.
The note under the result says it when ß or ẞ was in the paste and SS landed in UPPER: "German ß became SS. Lowercasing STRASSE cannot bring ß back."
I am not going to pretend a round trip exists. If you need the sharp s back, keep the original line. Undo is there for that.
Writer and programmer are different jobs
A headline wants style-guide title case. A database column wants snake_case. Those are not the same button.
Writer mode leads with UPPER, lower, Sentence and Title. Programmer mode leads with camel, Pascal, snake, kebab and CONSTANT. The other set stays on the page. You do not lose it when you switch.
Programmer cases always run per line. The sample has a sentence on line one and get_user_id on line two. camelCase is:
theNasaApiJourneyThroughTheLookingGlassInIstanbul
getUserId
If I had fed the whole paste to the identifier splitter as one block, the second name would glue onto the first. I did that once in a test. The test failed. Per line is the rule now, even when writer mode is one block.
splitIdentifier cuts on Unicode camel boundaries, then on anything that is not a letter or a number. getUserID becomes get, User, ID. snake is get_user_id. CONSTANT is GET_USER_ID. kebab is get-user-id. Pascal is GetUserId.
XMLHttpRequest splits as XML, Http, Request. I am not going to invent a second dictionary of library names. The cut is the letter-case change the identifier already has. If you pasted xmlhttprequest as one token, you get one token. The page will not guess that you meant three.
Line by line
Line by line treats each row as its own writer job. A list of field names should not become one long sentence. A blank line stays blank.
One block is the default. A paragraph is usually one paragraph. Turn the checkbox on when you pasted a column of titles, or a column of function names you also want in Sentence.
Writer one-block still leaves programmer on a per-line split. That is why the sample can show a real headline and a real identifier at the same time.
The cap is 100,000 characters. MAX_CHARS is 100_000. Past that the tab clips and says so. A chapter fits. A novel is the wrong job.
Undo walks forty steps
Use this puts a result back into Before, so you can stack a change. Sentence, then Title, then camel. Undo walks that stack. The cap is 40. pushUndo drops the oldest when you go past 40.
Clear empties the box. It does not wipe the knobs. Clear settings puts writer, AP, English, one block, and acronyms on, and removes softery.case-converter.settings from this browser.
The paste is not stored. Close the tab and the text is gone. I do not want a headline you were still editing sitting in localStorage next week.
Copy all writes every case plus the source into case-converter.txt. The file lists UPPER, lower, Sentence, Title, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, then Source. Download writes the same bytes. Open the file. If Through is wrong for the guide you picked, the export is wrong.
I stacked the sample once: Use this on Sentence, then Title. Before became the sentence line. Title then ran on that, not on the original lowercase paste. Undo put the NASA line back. That is the whole point of the stack. A converter that only goes forward leaves you retyping.
The paste is not on the URL
Copy settings link puts knobs on the query: mode, style, locale, batch, acro. Writer, AP, English, one block, acronyms on looks like mode=writer&style=ap&locale=en&batch=0&acro=1.
A cache buster like v= is not a knob. queryHasKnobs looks for one of those five keys. If the URL only has v=, the page does not hydrate from the query. That trap already ate a calendar year on this site. I am not repeating it.
The preview sits above the copy button. It shows the knobs. It does not show the paste. NASA does not belong on a shared URL. If you need someone else to see the headline, send the text yourself. The link is for the setup.
Mixpanel sees the slug case-converter, a size bucket, and the names of knobs. It does not see the paste. A 12 character line and a 12,000 character chapter both leave as a bucket, not as the words.
What this page will not do
It will not call one title style the only right one. It will not restore ß from STRASSE. It will not treat a wall of caps as a list of acronyms. It will not put the paste on the share URL. It will not make a landing for title-case-converter and another for snake-case-to-camel-case. One URL.
It will not count the words. That is Word and Character Counter. It will not strip an em dash you pasted in from a model. That is Em Dash Remover.
After the page has loaded you can unplug the cable and still change a headline. Mixpanel and Google Analytics still load with Softery.io. They see that someone opened the tool, which knob moved, and whether a copy happened. They get a size bucket. They do not get the paste.
Nearby after a result
The sibling cards show once there is a draft. Count the same paste on the counter if you also need a platform limit. Clean the punctuation if the paste still has model dashes. Both routes are live. I checked them before I put the links on the page.
I am not going to invent a punctuation-cleaner URL that does not exist.
Paste once, copy the one you need
- Open Text Case Converter.
- Use the sample, or paste your own line.
- Pick AP, Chicago, or APA if you are on a headline.
- Switch locale to Turkish if the paste is Turkish. Leave English if it is not.
- Turn Line by line on if you pasted a list.
- Copy the box you need, or Download .txt and open the file.
If the sample is still in the box, look at Through. AP should capitalise it. Chicago should leave it small. Then look at getUserId on the second line. If those two disagree with what you see, the page is wrong.
Last updated: September 19, 2026 | Reading time: 10 minutes
Written by Softery.io, after a converter capitalised every word and called that title case.