I work on OnePassApps. We build browser studios that do their work in the tab instead of uploading your files, and Text Studio is the one for plain text: eight tools on one tab bar - Clean, Case, Duplicate lines, Sort lines, Find & replace, Diff, Markdown and Base64.
The tab introduces itself in one line: "Count, clean, compare and convert text locally. Your content stays in this browser tab." It looks like the least interesting of the eight until you feed it something that is not a plain sentence. There is one dropdown with eight styles in it, and the whole job is a string transform - but the punctuation handling is where it gets interesting. The same input produces eight different outputs, and none of them is what a naive regex would give you.
What the tab shows
Three numbered panels, the same shape as the other Text Studio tools.
01 Input text - a 2,000,000 character counter and a live stats row underneath: Words, Characters, Sentences, Lines and UTF-8 bytes. The placeholder reads "Paste or type text here. Nothing is uploaded."
02 Options - one control, "Case style". It is a combobox whose button label is the style you currently have, so the trigger reads "UPPERCASE" until you change it. The listbox it opens holds eight options: UPPERCASE, lowercase, Title Case, Sentence case, camelCase, PascalCase, snake_case and kebab-case. The keyboard works as well - from the trigger, two ArrowDown presses and Enter moved the selection from UPPERCASE to lowercase.
03 Result - "Converted text shows on the stage, ready to copy, download or use as the new input."
The action button is labelled "Convert case" and it becomes "Convert again" after a run. The finished text sits under the heading "Text result" with the note "Text transformed locally." Under the stage the page says "Nothing leaves this tab." and further down "Processing stays in this browser." You can drop a file in instead of pasting - the drop hint reads ".txt, .md, .csv and other text up to 8 MiB - or paste it in Input text - nothing is uploaded".
Eight styles, one sample
I put this 37-character line in the box:
onepass apps: 7 studios, 1 membership
and ran it through every style in the dropdown. These are the outputs, verbatim, with the character count the result panel reported:
| Style | Output | Characters |
|---|---|---|
| UPPERCASE | ONEPASS APPS: 7 STUDIOS, 1 MEMBERSHIP | 37 |
| lowercase | onepass apps: 7 studios, 1 membership | 37 |
| Title Case | Onepass Apps: 7 Studios, 1 Membership | 37 |
| Sentence case | Onepass apps: 7 studios, 1 membership | 37 |
| camelCase | onepassApps7Studios1Membership | 30 |
| PascalCase | OnepassApps7Studios1Membership | 30 |
| snake_case | onepass_apps_7_studios_1_membership | 35 |
| kebab-case | onepass-apps-7-studios-1-membership | 35 |
Every run came back "Ready" with "Converted in 0.1 s", and the result line counted the output - "37 characters · 1 line" for the first four styles, "30 characters · 1 line" for the camelCase pair, "35 characters · 1 line" for the two separator styles.
Three things the table hides
camelCase and PascalCase delete the punctuation. The colon and the comma do not become separators - they are removed. That is where the seven missing characters go: 37 in, 30 out. A digit is not a word boundary either, so "7 studios" becomes "7Studios" glued to the word before it. If you are generating a JavaScript identifier from a human sentence, this is the style that will quietly merge two of your fields.
snake_case and kebab-case keep punctuation as a boundary. The same colon and comma become word breaks, so the output is longer than the camelCase pair (35 against 30) and every token is cleanly separable. The digit keeps its own token in these two styles: "7_studios", not "7studios".
Title Case does not know about your brand names. "onepass" came back as "Onepass", not "OnePass". Title Case capitalises the first letter of each word and leaves the rest of the word exactly as it found it, so any internal capital you typed survives only in the styles that do not touch it. Sentence case behaved the same way on the first word - "Onepass apps: 7 studios, 1 membership" - while lowercasing the rest of the line.
The apostrophe is the sharp edge
The second sample was a 30-character string with an apostrophe, a hyphen and a bracketed year:
the user's guide-part 2 (2026)
Title Case left it as "The User's Guide-Part 2 (2026)" - the hyphen capitalises the word after it, the digits and the brackets are untouched. Sentence case gave "The user's guide-part 2 (2026)".
The identifier styles disagreed with each other. camelCase produced "theUserSGuidePart22026" and PascalCase produced "TheUserSGuidePart22026" - in both, the apostrophe split "user's" into two tokens, so the "s" ended up standing on its own as "S" with a capital of its own. snake_case turned the same input into "the_user_s_guide_part_2_2026" and kebab-case into "the-user-s-guide-part-2-2026", where the same split shows up as a separate "s" segment.
So the possessive in "user's" becomes a real segment in the output. If the string came from a name, a title or a URL slug, that is the difference between "user_s" and "user" in your database.
Both of those identifier styles also dropped the length: 30 characters in, 22 out for camelCase and PascalCase, 28 out for snake_case and kebab-case.
The bit that saves you re-pasting
The result stage gives you three buttons: Copy, Download .txt and Use as input. "Use as input" pushes the converted text back into the input box so you can convert again without re-typing. I used it after the kebab-case run and the input field then read "the-user-s-guide-part-2-2026" - the input box took the previous output, ready for the next transform. There is also a "Clear all" button that empties the input.
What it costs
The plan block on the page reads: FREE PROMOTIONAL PERIOD, Standard is free right now, $0 / month, 100,000 credits every 30 days, No end date set, No card required. It also says "No automatic paid subscription. Existing paid subscriptions keep their terms."
Try it
The Case tab is here: Text Studio. Every conversion above happened in the tab, on your machine, and nothing was uploaded to do it.
If you want the shorter version of the same job for a different job - a table, a file, a colour, an icon - the other studios are listed here: OnePassApps guides.
Top comments (0)