[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)