# antonmedv/textarea: a text editor that stores the document in the URL hash

> This is not the HTML element. It is a browser-only editor that compresses the whole document with deflate and puts it in the URL hash, so the link is the file. Here is how it works, how to start, and where it stops being the right tool.

**antonmedv/textarea** — A minimalist text editor that lives in URL

- Repository: https://github.com/antonmedv/textarea
- Website: https://textarea.my
- Stars: 2,529 · Forks: 194
- Language: HTML
- License: not declared
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/antonmedv-textarea

## What problem a URL-hash editor actually solves

Most note tools answer the question "where do I keep this?" with an account, a database and a sync client. textarea.my answers it with the address bar. The README describes a minimalistic text editor that lives entirely in the browser and stores everything in the URL hash, and the repository layout backs that up: the top level is index.html, 404.html, sw.js, manifest.json and icons. There is no server-side application directory, no database migration folder, no API layer.

The person this is for is someone who wants to send a document to another person, right now, without either side creating an account. Paste a URL, get the text. That is the whole transaction. It is also a reasonable fit for a scratchpad you keep as a browser bookmark, because the bookmark and the document are the same object.

It is a poor fit for a knowledge base. There is no list of your documents anywhere, because the application has no place to keep one. If you lose the URL, the text is gone. That is not a bug in the design; it is the design.

## Deflate, the hash fragment, and why nothing is uploaded

The mechanism has three parts. You type into a textarea element in the page. The text is compressed with deflate. The compressed bytes are encoded and written into the fragment identifier of the URL, the part after the # character.

That last detail matters more than it looks. Browsers do not send the fragment to the server. So when you load a textarea.my link, the request that reaches the host contains only the path, and the document arrives in the response and is decoded locally. The README states the text is compressed with deflate and that you share notes by copying a URL. Both statements are consistent with a client-side only pipeline, and the repository has no backend entry point that would suggest otherwise.

The consequence is that the URL is not a pointer to the document. The URL is the document. Every edit rewrites the whole payload. That gives you an unusual property: the link works as long as the textarea.my page is served, and it works offline once loaded, since sw.js is a service worker registered from the same origin. It also gives you the central constraint, which is that the document competes with every other part of the URL for the same length budget.

One documented extra: starting a document with `# Title` sets a custom page title. The README lists this under pro tips, which implies the title is derived from the first heading rather than stored separately.

## Opening textarea.my and producing your first shareable link

There is no install step in the usual sense. The README points at textarea.my, and the repository is a static site whose entry point is index.html. Open the site in a browser and you should see the editor from the screenshot. The service worker registered from sw.js is scoped to the origin, so a self-hosted copy behaves the same way.

Then write something and take the link. The README gives this pro tip: start your document with `# Title` to set a custom page title. So a document that begins with a level-one heading takes that heading as its page title.

As you type, the fragment in the address bar changes. Copy the full URL including everything after #. Paste that URL into a new tab and the same text should come back. If it does not, the fragment was truncated somewhere in transit, which is the failure mode to watch for. The README's examples section links to a Markdown example and to an Ode to Comic Sans, both as textarea.my URLs, which is what a finished shareable link looks like.

The README also documents a styling trick. You can add a style attribute to the `<article>` tag through DevTools, and the README says it will be saved in the URL too. That means presentation travels with the document, and it also means the payload grows.

## The URL length ceiling is the real limitation

Deflate helps, but it does not remove the ceiling. A URL has a practical maximum length, and once the encoded document exceeds it, the link stops working in some browsers, or in chat clients, or in the email system that wraps it. The README does not state a size limit, and no guidance is given on how much text fits. That silence is the thing to test before you rely on it.

Compression ratios vary with the content. Prose compresses well. Base64-encoded images, long random identifiers and already-compressed data do not. A document that is mostly a pasted block of hex will produce a much longer fragment than the same character count of English sentences. So the useful limit is not a character count you can memorize; it is a character count that depends on what you wrote.

The second limitation is privacy. The fragment is not sent to the server, which is good. But the URL is the secret. Anyone who sees the link, in a chat log, a browser history, a screenshot of an address bar, or a referrer header on a page you link to from it, has the document. There is no password, no expiry and no revocation. The README describes no access control of any kind.

The third is durability. The document exists in exactly as many places as the URL exists. Clearing browser history on a machine where the bookmark lived removes that copy. There is no sync, no backup and no export path beyond selecting the text and copying it out.

## How it differs from a paste service or a self-hosted notes app

The obvious comparison is a pastebin such as a self-hosted instance of something like PrivateBin or Haste. Those store the document on the server and give you a short key. The difference in approach is where the bytes live. A paste service keeps the payload in a database and the URL is a lookup key, which is why the link is short and why the link breaks when the database is wiped or the retention window closes. textarea.my keeps the payload in the link, which is why the link is long and why it keeps working as long as the static page is served.

That trade flips the operational burden. A paste service needs a running server, storage, and a retention policy. textarea.my needs a static file host and nothing else, which is consistent with the repository contents. On the other side, a paste service can revoke a link, enforce expiry, and handle documents far larger than a URL.

Against a self-hosted notes application with a database, the difference is starker. Those give you a document list, search, version history and multi-device sync. textarea.my gives you one document per URL and no index. If you find yourself wanting a list of your documents, that is the signal that you have picked the wrong category of tool, not that the tool is missing a feature.

The README also points at numbr.dev, described as another site by the same author that works the same way but only supports calculations such as `1 USD in EUR =`. Same storage idea, narrower input.

## Release history, licence and what maintenance costs you

The repository has one release, v1.0.0, dated 2026-01-01. The last push to the default branch was on 2026-07-18, which is recent enough that the project is not dormant, but a single tagged release and a small static site mean there is no upgrade treadmill to speak of. There is no dependency manifest at the top level, so there is no lockfile to audit and no transitive package risk from the repository itself.

Upgrading, in practice, means reloading the page. The application is served from the origin, and sw.js caches it, so a stale service worker is the one upgrade hazard worth knowing about: if the cached copy is old, a hard reload is what clears it. The README does not document rollback or cache invalidation, so treat that as an open question rather than a documented procedure.

The licence is not stated in the repository metadata, which lists it as unknown. That is a real gap, not a formality. Without a licence file, the default position is that the author retains rights, and you have no explicit grant to redistribute or modify the code. If you intend to self-host a modified copy inside a company, resolve the licence question with the author first. This is a factual observation about the repository, not legal advice.

Ongoing cost is close to zero for a static host. The cost that does not go away is the one you carry: every document is a secret you have to keep, and every link is a thing that can be truncated by whatever system you paste it into.

## Conclusion

Use it if you want to hand someone a document as a link without running a server, and you accept that the link is the whole document. Do not use it for private material, for files larger than a URL can hold, or for anything you need to version. Before you commit, open textarea.my, type a few paragraphs, copy the address bar, and paste it into a plain text editor to see the encoded payload and judge its length yourself.

## FAQ

### Is antonmedv/textarea the same as the HTML textarea element?

No. The HTML element is a form control, while antonmedv/textarea is a standalone minimalist text editor served as a static page at textarea.my. The name is shared, the subject is not.

### How does antonmedv/textarea store my document?

The README states that the text is compressed with deflate and that everything is stored in the URL hash. That means the document travels inside the link itself rather than being saved on a server.

### Can I self-host antonmedv/textarea?

The repository is a static site with index.html at the top level, so serving that directory over HTTP is enough to run it. The README does not give hosting instructions, and the licence is not stated in the repository metadata.

### How do I set the page title in antonmedv/textarea?

The README lists this as a pro tip: start your document with `# Title` and that heading sets a custom page title.

### Can I change the styling of a shared antonmedv/textarea document?

According to the README, you can add a style attribute to the `<article>` tag through DevTools, and it will be saved in the URL along with the text. The styling therefore travels with the link.

## Sources

- [antonmedv/textarea on GitHub](https://github.com/antonmedv/textarea)
- [Issues](https://github.com/antonmedv/textarea/issues)
- [Project website](https://textarea.my)
- [README](https://github.com/antonmedv/textarea/blob/master/README.md)
- [Releases](https://github.com/antonmedv/textarea/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/antonmedv-textarea
