6 ms·
Macaroni – a single HTML file messenger
- deleted 4mo ago[deleted]
- ventana 4mo agoIt just looks like a funny slop project if you read the English readme, but reading the Russian PHILOSOPHY.md [1] (auto-translated [2] if you don't read Russian) makes you realize that there's probably something more than "let's implement a messenger using git remote as a storage", knowing how popular messenger apps are getting blocked in Russia. [1]: https://github.com/vanyapr/makaroshki/blob/main/PHILOSOPHY.md https://github.com/vanyapr/makaroshki/blob/main/PHILOSOPHY.m... [2]: https://github-com.translate.goog/vanyapr/makaroshki/blob/main/PHILOSOPHY.md?_x_tr_sl=ru&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp https://github-com.translate.goog/vanyapr/makaroshki/blob/ma... (Google Translate)
- snowflaxxx 4mo agoThe paradox is that Macaroni Messenger is absolutely a joke project. But once you reduce everything to Git + JSON, adding things like PGP, age, signatures, encrypted attachments, or end-to-end encryption becomes surprisingly easy. Which makes it even funnier. At first glance it looks like a toy. After a few minutes you start asking: “Wait… why does this actually make sense?” I think the protocol is a bit underestimated. People see the joke before they see the architecture. There are some surprisingly interesting properties hiding behind the absurdity. Maybe it’s a hidden gem. Or maybe I’m just rationalizing a messenger implemented as a single HTML file.
- notpushkin 4mo agoIt does kinda make sense... until it doesn’t. It is a cool project from a tech standpoint, but it’s not practical when we have, well, email? (This is discussed elsewhere in the comments already, of course.)
- snowflaxxx 4mo agoThat’s exactly what I thought after posting — so now it supports end‑to‑end encryption without a handshake. Still a single HTML file. Still no backend.
- ivvve 4mo agoHere's the translated version I got (GH translate didn't work for me for some reason). https://pastebin.com/raw/EPtJM5Dp https://pastebin.com/raw/EPtJM5Dp
- andai 4mo agoSlightly better translation: https://markdownpastebin.com/?id=fb9680965f42433fb3a4c6bf7a013414 https://markdownpastebin.com/?id=fb9680965f42433fb3a4c6bf7a0...
- Klaster_1 4mo ago>Macaroni Messenger is not a political statement. >We are not trying to circumvent restrictions. >We are not trying to circumvent restrictions. >We are not trying to fight the laws. This is talking politics without talking politics. The project literally attempts to circumvent russian censorship restrictions and their spirit. This is either a joke the file talks about or naive CYA. Cool project nevertheless, I like idea of an utility SPA distributed as bare HTML file that doesn't even require a web server.
- ventana 4mo agoThere is a popular view in Russia, including within the software developers communities, that "politics" is something bad and dirty; people often ban "politics" in group chats and forums. As a result, a highly technical person might work on a very complex solution to circumvent the restrictions but will declare (and probably even truly believe) that they are not making a political statement – as opposed to, for example, attending a protest, which is definitely considered a political action, or supporting a politician.
- Klaster_1 4mo agoThanks for clarifying, that's a pretty good summary. Russian developers experienced the same "HN is not for politics" kinds of reaction on Habr (russian HN, more or less) a decade ago, until politics came for them and Habr died. Before that, "being outside of politics" was a stance some people identified with because back then Putins regime didn't repress as much and the situation was "stable". Seeing a take like that still having its followers after our autocracy matured even more is disheartening and sad.
- notpushkin 4mo ago> Seeing a take like that still having its followers after our autocracy matured even more is disheartening and sad. I suppose it’s more of a CYA nowadays than that. (Well, at least one can hope.)
- snowflaxxx 4mo agodocumentation was updated in the last few days. You might want to read the section about the funny legal collision this architecture creates — not sure, but it might apply to other jurisdictions too, not just Russia. Either way, it's an interesting side effect of using generic git hosting as a message transport.
- BrenBarn 4mo ago"Single file" is a bit misleading when it requires Github to do anything.
- snowflaxxx 4mo ago[flagged]
- alhadrad 4mo agoAnd its why we cannot have nice things. This is likely a TOS violation of github.
- snowflaxxx 4mo agoThat’s fair, although GitHub is just the default transport because it requires zero setup. The protocol itself isn’t tied to GitHub and works with any Git remote. If GitHub ever decided this wasn’t an acceptable use case, swapping the remote would be trivial.
- jogu 4mo agoLooking at the source I don't think that's true -- it's using GitHub specific APIs to read/write files. It's not standard git so any remote wouldn't work, and the mechanics are more akin to a key-value store than git really. Not to say you couldn't add a generic git protocol to this, just that that's not being done here.
- brazzy 4mo ago> The protocol itself isn’t tied to GitHub and works with any Git remote. > If GitHub ever decided this wasn’t an acceptable use case, swapping the remote would be trivial. Nope. From the README: "GitHub is the only working write provider right now. GitLab, GitVerse, Gitea, Forgejo, and other git hosts are protocol targets for future adapters. Today they are not finished write adapters."
- jogu 4mo agoI think it's pretty clear from the readme that this is a humorous proof of concept more so than anything someone should seriously use.
- kristopolous 4mo agoI made an interesting chat system as well: A way to sneak messages in through images for places where they otherwise wouldn't exist... pretty different. https://github.com/kristopolous/image-chat https://github.com/kristopolous/image-chat
- torginus 4mo agoI wonder why this type of deployment is not more popular - pushing all resources inside a single HTML file, with a script tag, and inline resources as blobs.
- snowflaxxx 4mo agoYou just described the Macaroni plugin system — plugins are literally appended as <script> tags before the closing </html> tag.
- account42 4mo agoNote that you don't actually need a closing </html> tag.
- snowflaxxx 4mo agoThe closing </html> tag is mandatory because Macaroni Messenger plugins are inserted immediately before it. This is the convention defined by the plugin system.
- andai 4mo agoI do this whenever possible. As a separate issue, I also aim for <50KB whenever possible, e.g. I made a multiplayer browser game in 32KB and a LLM UI in 20KB. That might just be an aesthetic choice on my part, but I often find that I am able to implement all the features I need in surprisingly few lines of code. e.g. the first version of my LLM UI was 200 lines and quite usable for my purposes. And my OpenClaw clone was 50 lines. Just a Telegram wrapper around Claude, but turns out that's all I needed.[0] Also no dependencies, frameworks, libaries etc. Not a hard rule, but I find that they add negative value about 90% of the time, at least at my scale. There are dozens of us! :) [0] Of course, "Claude Code" isn't 50 lines. Except, it turns out you can replace it in about 50 lines. From the SWE-bench folks: https://minimal-agent.com/ https://minimal-agent.com/ To this I added the missing outer loop (so it's actually an agent a human can use) and vendored in a microscopic llm lib (yay no deps). https://gist.github.com/a-n-d-a-i/bd50aaa4bdb15f9a4cc8176ee387b212#file-agent-py-L110 https://gist.github.com/a-n-d-a-i/bd50aaa4bdb15f9a4cc8176ee3...
- andai 4mo agoI'm a fan of the license. https://www.wtfpl.net/about/ https://www.wtfpl.net/about/
- johanbcn 4mo ago> changing it [the license] is allowed as long as the name is changed. But what if that's exactly what I want to do?
- recursive 4mo agoThen it's allowed.
- ventana 4mo agoBesides other fun things about this license, using it effectively forbids Google employees to send patches to your projects. [1] [1]: https://opensource.google/documentation/reference/patching#forbidden https://opensource.google/documentation/reference/patching#f...
- wvbdmp 4mo agoThe paragraph doesn’t really explain the rationale for forbidding WTFPL and even Public Domain and CC0? They’re all fine for commercial use, aren’t they?
- jareklupinski 4mo agoTIL > The Hippocratic License is an ethical software license created to ensure that open source software is not used for harmful purposes, aligning with human rights principles
- triyambakam 4mo ago> so the first screen does not burn unauthenticated GitHub API rate limit. Claude loves this dumb word "burn". Recently it even said "burn a TOTP" as if they are finite.
- boomlinde 4mo ago"Sending a message to your mother should not require infrastructure comparable to a small bank." To that end, requiring the use of GitHub for your application to work is a dead end. "Macaroni Messenger is a distributed messaging system" No. "The backend does not exist." Unless by "backend" you mean the underlying infrastructure and server logic you've made the clients depend on for the exchange of messages to happen.
- snowflaxxx 4mo agoThat’s fair criticism of the current implementation. The idea isn’t that transport magically disappears. The idea is that users don’t have to deploy, operate, pay for, or even think about transport. GitHub happens to provide one out of the box, which makes the proof of concept extremely easy to try. If I need to run databases, message brokers, servers and monitoring just to send my mom “please cook macaroni”, I’ve already lost interest.
- boomlinde 4mo ago> The idea isn’t that transport magically disappears. The idea is that users don’t have to deploy, operate, pay for, or even think about transport. It's sharing this advantage with every other free, third party managed communication service I can choose to depend on. It's also sharing the weakness that it puts me at the mercy of whatever third party I am relying on. It introduces a new weakness in that the third party being relied on here never intended for their infrastructure to be used in this way. > If I need to run databases, message brokers, servers and monitoring just to send my mom “please cook macaroni”, I’ve already lost interest. So don't. To that end, what specific problem does this address that other free third party communication service providers don't? My mother will have seen my email or SMS before you have instructed your mother on how to join GitHub and get an API token. We don't even need to agree on or stick to a provider.
- Hugsbox 4mo agoI don't think this was meant to be taken as seriously as you seem to be taking it
- msyea 4mo agoNice idea. I recently published an article with a different twist. Static Vite+React site but all the backends are via OAuth PKCE and your customers bring their own. https://type2fun.net/infinitely-scalable-personal-apps https://type2fun.net/infinitely-scalable-personal-apps I like the idea of building apps but skipping the infra burden/costs.
- utilize1808 4mo agoSo, browser = Java Runtime; uber HTML = applet?
- littlecranky67 4mo agoNice idea. I would have expected it would use WebRTC for p2p client-to-client connection. A noted related project is Trystero [0] that uses all sort of external services to allow client-to-client discovery (such as Nostr, BitTorrent, Supabase etc.) - maybe a future project to combine the two. [0]: https://github.com/dmotz/trystero?tab=readme-ov-file#how-it-works https://github.com/dmotz/trystero?tab=readme-ov-file#how-it-...
- vincnetas 4mo agoWhen docs say "no backend", but git (GitHub) is actually your backend :/
- deleted 4mo ago[deleted]
- snowflaxxx 4mo agoNot mine lol
- _def 4mo agoReminds me of a time when it was possible to "deploy" single HTML files via shorturl services by using base64 URI scheme
- antran22 4mo ago<critique> OP keep saying the backend implementation doesn't matter, it can be trivially switched to something other than Github. It's not. The whole app you write revolves around Github's HTTP endpoints. There's no actual provider-agnostic Git operation in the code (for that you need to use isomorphic-git [1]). So a much more apt title for this should be: "Macaroni - a chat UI in a single HTML file that stores messages data in a Github repo" </critique> I'm sorry to say this, but this whole thing reeks of vibeslop, and not just the code. The docs, the readme, even the replies of OP are at least Claude-assisted, if not fully Claude-generated. And I'm trying not to be derisive about LLM generated output anyway. LLM generated output can be sane and meaningful and to the point. This is just a questionably-cool tech demo dressed up under a sensationalistic title.
- snowflaxxx 4mo agoFixed last night. The GitHub-specific adapter is now one of several.
- rcfox 4mo agoSeems kind of similar (at least in purpose) to giscus, a commenting system powered by GitHub Discussions. https://github.com/giscus/giscus https://github.com/giscus/giscus
- fibo 4mo agoplease do not propagate errors ... it is "Maccheroni"
- tgv 4mo agoYou might have heard of other languages. They tend to import words but adapt spelling and pronunciation. Sometimes even meaning. Your own language has them too. I also bet you spell quite a few place names and countries according to tradition, not by any official spelling.
- Hugsbox 4mo agoThat README got a few solid chuckles out of me. :) Really cool project imo
- filup 4mo agoYes! Now we need to build a messenger that uses pastebin exclusively as the backend.
- sbinnee 4mo agoI laughed at the 1000% vibecoded badge
- giancarlostoro 4mo agoSo now I have something to slap on my experimental vibe coded projects readme documents.
- phcreery 4mo agoThis is not a bad idea ... for public team communication. This pretty much solves the "Discord is not documentation" and the dataloss in forum problems. If the communication was stored in the same place as the repostory, you are guaranteed to have saved and searchable messages. As a side-effect, AI can read all the past discussions for better "1000% vibecoding"
- snowflaxxx 4mo agoYou might find this branch interesting: https://github.com/vanyapr/makaroshki/tree/macaroni https://github.com/vanyapr/makaroshki/tree/macaroni Turns out the messenger wasn’t enough, so now it also stores its own lore.
- Jotalea 4mo agoto paraphrase what he said, "instead of K9s, PostgreSQL, Redis, Oauth, WebSocket Gateway, Service Discovert; we're going to use git, html and json", I had a panic attack as soon as I read that.
- magaflaca 4mo agosaludos desde cuba
- magaflaca 4mo agohi