jamuny.editor

Local-firstYour text never leaves your browser. No upload, no account, no server.

What does "local-first" mean?

Most online text tools send whatever you paste to a server, run the work there, and send a result back. Your words sit in someone else's logs, backups and databases, and you have to trust a privacy policy.

Local-first means the opposite: the whole tool is downloaded to your browser and runs on your own device. Nothing you type is transmitted anywhere: not to us, not to anyone. There is no server that could receive it, which is a stronger guarantee than a promise not to look.

Three consequences worth knowing:

  • It keeps working offline. Once the page has loaded, losing your connection changes nothing.
  • Your notes are saved on this device only. They come back when you return, but they do not follow you to your phone, and clearing your browser data for this site erases them for good. Export anything you need to keep.
  • Nothing to sign up for or delete. There is no account, because there is no server holding anything of yours.

URL Slug Generator

Paste a title, or a whole column of them, and get URL-safe slugs back, one per line. Accented characters are converted to their readable Latin equivalents rather than stripped, so "Crème brûlée" becomes creme-brulee instead of the unsearchable crme-brle that naive tools produce. Length limits truncate on a word boundary rather than mid-word, and you can switch between hyphens and underscores depending on what your platform expects.

How to use it

  1. Paste a title, or a list of them. One per line. Each converts independently.
  2. Choose a separator. Hyphens for web URLs, underscores where a framework or filename convention expects them.
  3. Set a length limit if you need one. Truncation falls on a word boundary, never mid-word.

Worked example

Accents become readable rather than disappearing

Input
Crème brûlée & other French Desserts
Output
creme-brulee-and-other-french-desserts

How accented characters survive

The text is Unicode-normalised first. Normalisation decomposes an accented character into two codepoints: the plain base letter, and a separate combining mark that draws the accent. Removing only the marks leaves ordinary Latin letters behind.

The naive alternative, deleting everything outside ASCII, turns "brûlée" into "brle". That is unreadable, unsearchable, and produces different slugs for titles a reader would consider nearly identical.

A few letters are not accented forms of anything and cannot be decomposed: ß, æ, ø, ł and their relatives are distinct letters. Those are mapped explicitly, so Straße becomes strasse rather than losing a character.

Hyphens or underscores

Hyphens, for anything that will be a public URL. Google has said for many years that it reads a hyphen as a word separator and an underscore as a word joiner, so my_great_post can be treated as a single token while my-great-post reads as three words.

Underscores remain the right choice in places where the convention is set by something other than search: certain frameworks, filenames destined for systems that dislike hyphens, and identifiers that will be used in code. Both are available for that reason.

Length, truncation, and what gets dropped

Roughly 40 to 60 characters is a common target: long enough to describe the page, short enough to survive being displayed in a search result. Truncation here always falls on a word boundary, because a slug cut mid-word looks broken and can invert the meaning of the last word it kept.

Apostrophes are removed rather than turned into separators, so "Don't Stop" becomes dont-stop instead of don-t-stop. Ampersands expand to the word "and", which reads correctly and avoids a URL-escaping problem later.

Text in a script with no Latin equivalent produces an empty slug rather than mangled output. There is no faithful transliteration available, and inventing one would produce a URL that misrepresents the title it came from.

Questions

Why do accented characters survive here?

Because the text is Unicode-normalised first, which splits an accented letter into its base letter plus a separate combining mark. Removing only the marks leaves a readable Latin letter. Tools that simply delete non-ASCII characters turn "brûlée" into "brle", which is neither readable nor findable.

Should slugs use hyphens or underscores?

Hyphens. Google has stated for years that it treats hyphens as word separators and underscores as word joiners, so my_great_post can be read as one token while my-great-post reads as three words. Underscores remain the convention in some frameworks and filenames, which is why both are offered.

How long should a slug be?

Short enough to read in a search result and long enough to describe the page: roughly 40 to 60 characters is a common target. Truncation here always falls on a word boundary, because a slug cut mid-word looks broken and can change the meaning of the last word entirely.

What happens to non-Latin scripts?

Characters with no Latin equivalent, such as Japanese or Arabic, produce an empty slug rather than mangled output. That is the honest result: there is no faithful transliteration this tool could perform, and inventing one would produce a slug that misrepresents the title.