[HN Gopher] Show HN: Minimalist editor that lives in browser, st...
___________________________________________________________________
Show HN: Minimalist editor that lives in browser, stores everything
in the URL
I wanted to see how far I could go building a notes app using only
what modern browsers already provide - no frameworks, no storage
APIs, no build step. What it does: Single HTML file, no deps, 111
loc Notes live in the URL hash (shareable links!) Auto-compressed
with CompressionStream Plain-text editor (contenteditable)
History support Page title from first # heading Respects
light/dark mode No storage, cookies, or tracking The entire app
is the page source. https://textarea.my/
Author : medv
Score : 176 points
Date : 2025-12-24 19:42 UTC (3 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| nvahalik wrote:
| Love your other tools, btw!
| medv wrote:
| Thanks!
| deafpolygon wrote:
| Can you save anything?
| thomascgalvin wrote:
| Not OP: sure, just bookmark it
| tony_cannistra wrote:
| kinda -- but then you have to re-bookmark it every time you
| update it...
| medv wrote:
| It also saves to localStorage
| rorylawless wrote:
| https://textarea.my/#i0wtBgA=
| sltkr wrote:
| No that should be: https://textarea.my/#c8yrLMnIzEsHAA==
| samcollins wrote:
| Nice! I made a similar thing but the html for the text editor
| fits in a data uri, so it can be a bookmark or new tab page for
| taking quick notes
|
| https://gist.github.com/smcllns/8b727361ce4cf55cbc017faaefbb...
| qbane wrote:
| Just started making my own recently with CodeMirror 6 during
| holidays. No saving function for now: https://qbane.github.io/cgm
| wwarren wrote:
| Amazing. The crime and punishment example crashed my iPhone's
| Google Chrome when I tap the URL haha
| mzelling wrote:
| Love it!
| maxloh wrote:
| Per the spec [0], a URL can hold at least 8,000 characters.
|
| > It is RECOMMENDED that all senders and recipients support, at a
| minimum, URIs with lengths of 8000 octets in protocol elements.
| Note that this implies some structures and on-wire
| representations (for example, the request line in HTTP/1.1) will
| necessarily be larger in some cases.
|
| Mainstream browsers support at least 64,000 characters [1], and
| Chrome supports up to 2MB [2].
|
| [0]: https://www.rfc-editor.org/rfc/rfc9110#section-4.1-5
|
| [1]: https://stackoverflow.com/a/417184/
|
| [2]:
| https://chromium.googlesource.com/chromium/src/+/HEAD/docs/s...
| medv wrote:
| Chrome limit is 2MB, Firefox is 1MB, WebKit is no limit.
|
| Here is the Crime and Punishment by Fyodor Dostoevsky:
|
| - https://medv.io/goto/crime-and-punishment-by-fyodor-
| dostoevs...
| hallole wrote:
| LOL Tapping the address bar crashed my Chrome on mobile.
| lurking_swe wrote:
| loaded OK for me on mobile safari.
| kylecazar wrote:
| Loaded fine for me too -- but like parent, tapping the
| address bar to share afterwards crashed it on Android
| here :)
| maxloh wrote:
| For what it's worth, there might be a 2GB limit on the iOS
| side.
|
| https://github.com/swiftlang/swift-corelibs-
| foundation/blob/...
| scotty79 wrote:
| Works fine on Win11 Edge
| dspillett wrote:
| _> Per the spec [0], a URL can hold at least 8,000 characters._
|
| _> It is RECOMMENDED that all senders and recipients support,
| at a minimum, URIs with lengths of 8000 octets in protocol
| elements._
|
| It is always worth remembering that, unless you have already
| ensured that the content has been rendered into a URI-safe
| subset of ASCII, a character and an octet are not the same
| thing.
| ghurtado wrote:
| Very good point indeed. In the worst case scenario, you would
| only have 1/5th of that capacity
| berkes wrote:
| I guess the surveillance industry has enough incentives to make
| this ever larger, so they can fit more utm-trackers, campaign-
| ids, referal trackers and whatnot in URLs.
|
| It's truly insane how large typical share-URLS for content on
| instagram, youtube or any other large platforms are. URLs that
| could've been example.com/t/some-large-enough-id?time=13337 are
| stuffed with hundreds of characters, just to gather more data
| on people using these links.
| marcuskaz wrote:
| I have a similar one using localStorage
| https://github.com/mkaz/browser-pad
| ctenb wrote:
| I made something similar once, specifically targetted for guitar
| tablature https://tabviewer.app/ To make links shorter for
| sharing with others, I use a shortlink service. Pasting URLs of
| thousands of characters long can be problematic
| planb wrote:
| Wow funny I'm just seeing this after posting my tab editor in
| another comment. I have the same use case as you :)
|
| https://github.com/planbnet/guitartabs
| xeonmc wrote:
| Can you make it monospace by default, so that this can be used as
| a code snippet bin?
| adamschwartz wrote:
| Try https://a10z.co/note
| medv wrote:
| Sure! textarea.my support custom style attr:
| https://textarea.my/#Ky4tSlVUyCotLlEoLUhJLElVKC6pzElVSCwpKWJ...
| throwaway150 wrote:
| How do you share after that? I can open devtools and change
| the attribute but the URL doesn't update after that.
| edgars_xx wrote:
| love it, funny enough, I had similar idea pop into my head some
| weeks ago, just to be able to store quick notes and favorite them
| in my browser for later
| medv wrote:
| In case you missed it: it is possible to style textarea via CSS
| and share it.
|
| - https://textarea.my/#TYuxDcIwEEWpmeKUCiSIJQoKU0KFRBUWOGwnWDi...
| growt wrote:
| I recently build a small framework to create JavaScript apps that
| use this kind of URL sharing and therefore don't require a
| backend: https://github.com/grothkopp/lost.js
| ThrowawayTestr wrote:
| https://textarea.my/#Cy4tsAcA
| teach wrote:
| https://textarea.my/#Cy4tsOfi8ssvUcgtTc7QU_DIz0stLsmpVPBUSK0...
| medv wrote:
| https://textarea.my/#ZY_NTgMhFIVd9ylYNZpMuQwDmZ9m4qM0SG9ncCg.
| ..
| sublinear wrote:
| I like these kinds of projects, but adding a file export/import
| is inevitable. It's less about the limits of a URL and more about
| practicality.
|
| I also have no way to confirm that URLs aren't logged server
| side, so I'd never trust the claim about "no tracking". That's
| why these projects also end up self-hosted.
| denisinvader wrote:
| hash part of url only available in the browser, as far as I
| know, server doesn't have access to # value
| sublinear wrote:
| Typos and URL mangles are common though, and I'd still have
| no way to confirm if it got logged in that case. It's out of
| scope for anything in the github source, and instead depends
| on the server hosting the page. I know this isn't meant to be
| super secure, but it's still worth a mention.
| throwaway150 wrote:
| Typos aren't making the hash part turn into something else.
| Like your parent comment explained to you, the hash part is
| not sent to the server. If you go out of your way to mangle
| the URL then of course a mangled URL without hash will
| likely get logged to the server. But I'm not sure how one
| would manage to go so much out of the way that they mangle
| the URL in a way that removes the hash.
| jamesdwilson wrote:
| very easy for the server to intentionally (or by compromise)
| add a one liner to send the hash text up.
| billforsternz wrote:
| This is very interesting, very refreshing, very simple and
| clever, very well done, very everything good. Bravo and thank
| you.
| desireco42 wrote:
| The only thing missing is markdown and few themes. I think this
| is awesome idea for sharing. Love what you did with it.
| jaysonelliot wrote:
| 546,229 character-length URL for the Crime and Punishment
| example.
|
| Half a megabyte for a URL. That certainly is a thing.
| ljlolel wrote:
| I love this.
|
| Now if you bootstrap the app code into the url too then you can
| have a minimal kernel to run any machine in url.
|
| Then you can also make a Quine somehow.
| nickweb wrote:
| Think you've inadvertently found a way to provide extra tests for
| mobile devices.
|
| The Crime and Punishment one consistently crashes Brave mobile
| for me. I assume it's the length of the URL - and seen another
| commentator say the same for chrome mobile (sure they both use
| the same codebase so likely an upstream issue).
| codazoda wrote:
| Nice! I love this.
|
| I built Ponder in the same vein. It, however, has 10 files. I did
| not use the URL, did not have double the fun, and now I'm sad.
|
| https://github.com/codazoda/ponder
| pglevy wrote:
| Thanks for sharing! I tried a similar content-in-url approach for
| a family grocery list app but I couldn't get the url that short.
| (It worked but it was a bit cumbersome sharing over Whatsapp.)
| Will see what I can learn from this!
| gisho wrote:
| I created a similar app just 2 days ago targeting Whatsapp
| (https://linqshare.com) . Context: In my locality, EA, we
| normally have Whatsapp groups raising funds for whatever
| reason; for every content edit, the admin has to copy-edit-
| paste updated content(which contains name and amount) to the
| group. This small app intends to provide a table that's easy to
| convey this info. App stores content in the url but a preview
| image (needed for Whatsapp share) is stored at R2. Let me know
| if you want the source code running at Cloudflare.
|
| --edit-- test link: https://linqshare.com/#eJxtkM9KxDAQxl-
| lzLmHrv8Ova3IHlz04BY8F...
| planb wrote:
| A few weeks ago I vibe coded a guitar tab editor just because I
| wanted to share a quick tab in a chat group with my band. When
| the first prototype already worked great, I just couldn't stop to
| add features so that it now even has mouseover chord diagrams and
| copy and paste.
|
| The sharing works just like here, by encoding the tab itself in
| the url.
|
| https://github.com/planbnet/guitartabs
| LordDragonfang wrote:
| It would be neat if ctrl+s offered to download the textarea to a
| .txt file.
| roxolotl wrote:
| Was just working on something similar this morning. As an fyi you
| can avoid the string replacing in the base64 string by using
| `.toBase64({ alphabet: "base64url" })` and `fromBase64({
| alphabet: "base64url"})`.
|
| https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
| huhtenberg wrote:
| In Firefox, https://textarea.my shows up as as a completely
| static non-actionable white page. Just white, with default
| cursor. No errors on the console.
| levmiseri wrote:
| I really like this from a privacy point of view. So much so that
| I'm thinking about adding a purely URL-storage solution as an
| option in my https://kraa.io editor.
| WD-42 wrote:
| From a privacy point of view how is it any better than just
| using a local, native text editor?
| omoikane wrote:
| From a privacy point of view, you might not want to use
| textarea.my since it includes some tracking bits at the end:
| <script defer src="https://static.cloudflareinsights.com/beacon
| .min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integri
| ty="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPU
| qr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version
| ":"2024.11.0","token":"6a22b097a2b44fa4af0a95817ce96ab5","r":1,
| "server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cf
| ExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"
| location_startswith":null}}' crossorigin="anonymous"></script>
| gnyman wrote:
| Funny how I made almost exactly the same but for maps.
|
| I needed a way to share a link to a map, with drawings and the
| ability for the receiver to see their own location on the map.
|
| Annotated screenshots solves the first but not the second.
|
| Vibe engineered this, with many of the same ideas as OP.
|
| Took an evening. Just in time apps for one specific use case is a
| thing.
|
| And because it's so cheap to make and can be hosted cheaply with
| no backend, it can be given away for free.
|
| https://nyman.re/mapdraw/#l=60.172108%2C24.941458&z=16&d=LU8...
| mathgeek wrote:
| > Vibe engineered
|
| While I'm all for vibe coding as appropriate, there's a lot of
| humor to be found it calling it engineering. :D
| block_dagger wrote:
| Fair. Though it seems that half of engineering is just giving
| a respectable name to whatever actually works.
| RandomDistort wrote:
| Is this open source?
| surrTurr wrote:
| shameless plug: i built something very similar but nobody cared:
| https://github.com/AlexW00/Buffertab
| WhyIsItAlwaysHN wrote:
| My own plug, translate between SQL dialects, state stored in URL
| so you can share it:
|
| https://sqlscope.netlify.app/
| reconnecting wrote:
| Are _< head>, <body>, and </html>_ missing intentionally?
|
| Safari 15.6.1: _Unhandled Promise Rejection: ReferenceError: Can
| 't find variable: CompressionStream_
| wdporter wrote:
| I probably shouldn't presume to speak for the OP, but given
| that they're optional, I would think so, yes.
| rane wrote:
| Now what if it didn't pollute browser history
| mixedmath wrote:
| I wrote a similar app when mathbin was shutting down. It allows
| about 1500 characters of mathjax-displayed notes. [1]
|
| [1]: https://davidlowryduda.com/mathshare/
| sltkr wrote:
| Something similar by Eric Wastl (of Advent of Code fame):
| https://topaz.github.io/paste/
___________________________________________________________________
(page generated 2025-12-24 23:00 UTC)