Uh. I'd really prefer if people experimented with new technology a bit more cautiously and not directly jump to "the biggest release [...] ever done".
post
It looks like that tool is more or less built by a single developer (you already trust their judgment anyways!), and even though the code came through in a single PR it was a merge from a branch that had 79 separate commits: https://github.com/binwiederhier/ntfy/pull/1619
Also glancing through it a bit, huge portions of that are straightforward refactors or even just formatting changes caused by adding a new backend option.
I'm not going to say it's fine, but they didn't just throw Claude at a problem and let it rewrite 25k lines of code unnecessarily.
Yeah, I mean, with or without AI, I've always only had a big pull request for releases, from a stable release branch into the main branch, the release branch would be a merge of various branches or just be worked on directly on various stages.
One big pull request doesn't really mean anything.
Something like https://graphite.com/ to create stacked PRs that are reviewable probably would have helped. Can be replicated with local LLMs or remote AI providers with locally configured agentic workflows. Never used graphite personally, but I've seen some open source maintainers use it to split up large PRs.
Any AI usage immediately discredits the software for me, because it calls into question all of their past and future work.
Oh boy, do I have bad news about 90% of the internet for you...
Linus sent an email recently to the Kernel Mailing List trashing AI slop and rejecting AI generated patches. The fact that he used it to play around with a script doesn't invalidate the fact that he distrusts code written by LLMs when it actually matters.
you mean this statement? https://www.theregister.com/2026/01/08/linus_versus_llms_ai_slop_docs/?td=rt-3a
If yes, your statement does not really match what Linus said.
@ueiqkkwhuwjw just this quote at the start of the release notes> 14,997 added lines of code, and 10,202 lines removed, all from one pull requestThis is already a major red flag even without the ai stuff right? Can't believe anyone would flaunt that like this.
The "single pull request" is a merge release from 79 separate commits. It's the sum of all work, it doesn't mean all of it was changed in one go.
Doesn't matter, it's entirely too much for one PR
Why? What difference does it make if he packages these commits in 1 or 10 PRs?
Keep in mind this is a single maintainer project, there are no PR reviews. He could be just pushing straight to the branch anyway with no PR at all.
I mean, yeah, he could also not use git and just write some random bullshit directly on prod while blindfolded and blackout drunk.
However if you want a good product and good code you need to follow best practices, and those include meaningful and small PRs that you can easily review, check, debug, and revert if necessary.
You should tell that to Linus Torvalds, he's developing the Linux kernel without using GitHub at all. I'm sure he will appreciate being told git is insuffient to develop a good product and write good code, the best practice is to use a Microsoft service in a particular way and nothing else can work.
Tell me, when I work on a project alone, who am I exactly requesting to pull my code and why do I need to use a feature of some git hosting website instead of reviewing, checking, debugging, merging, and reverting if necessary my change locally and using my CI/CD?
If you use ntfy mainly as a Unified Push distributor on Android, then I highly recommend switching to a XMPP client that can do the same.
I was also using it for notifications but I'll probably switch to E-Mail for that and find an alternative UP distributor.
Do you recommend an app?
The first three on this list can do it: https://joinjabber.org/docs/apps/android/
Explanation here: https://joinjabber.org/tutorials/service/unifiedpush/
Fuck, I love ntfy, it's one of the best self hosted push notification systems I've used. It has been flawless so far.
Don't like this.
That's concerning. If it was "I generated a function with an LLM and reviewed it myself" I'd be much less concerned, but 14k added lines and 10k removed lines is crazy. We already know that LLMs don't generate up to scratch code quality...
I won't use PostgreSQL with ntfy, and keep an eye on it to see if they continue down this path for other parts of ntfy. If so I'll have to switch to another UP provider.
Yeah, this is now inherently untrustworthy. Better to switch to an alternative.
Do you know any? I've never really looked beyond ntfy.sh until now
Gotify is supposedly a good alternative. Looking into it myself now.
I only know NextPush (Nextcloud App), but there is also something called Autopush I think?
There's SunUp on F-droid, but I don't know anything about them.
That's from Mozilla, another AI company...
Ugh, seriously? Great...
(Edit) I don't think this is true? They use Mozilla's push services, but nothing about their Codeberg repo (yes, it's on Codeberg, not Github) indicates they're part of Mozilla.
The app itself might be fine, but you are either using the Mozilla services or the backend written by Mozilla. Sadly Mozilla has lost all the good will it had and is just another silicon valley AI company these days, and seems to prefer it that way.
Sure. All I said was that it doesn't actually seem to be run by Mozilla, like you implied it was.
The push service is run by Mozilla. Master of reading comprehension, I bow to you.
Then why is Sunup and only Sunup on Codeberg, not Github where the rest of Mozilla's code is kept? And why is it not under any sort of official Mozilla branding?
Read the README
How about you tell me what you see that I missed?
Self-host
It is possible to host your own Autopush server. Autopush is designed to work with Google BigTable but it is also possible to use it with redis.
For this:
- Clone Autopush
# mozilla-services/autopush-rs
Autopush-rs
Mozilla Push server built with Rust.
By using Sunup, your are going to have to trust Mozilla.
I recently switched to gotify. Push notifications to iOS aren’t as good but I’m happy with it.
ntfy never really had good push to iOS, in my experience. The only way I could keep my private channels consistently working was to use the PWA and specifically not sign into it (otherwise, my login token would expire and break things).
I gave up and switched to pushover and as long as I’m somewhat cognizant about what i’m including in the notifications, I’ve been pretty happy.
I’d love for something self hostable to get as good as pushover on iOS
If you use ntfy for UnifiedPush: https://unifiedpush.org/users/distributors/
Oh goddamn it, I'm using this and don't have an alternative lined up
If using ntfy for UnifiedPush: https://unifiedpush.org/users/distributors/
What is your concern? If it’s a generic “AI”, then I can assure you tha pretty much every software has AI code in it already. Heck, Linus is accepting PRs where AI has been used.
AI is useful. It produces useful code.
Like creative writing, it won’t produce something novel. But man, 75% of code is just boiler plate. AI can do a lot for boilerplate.
That does not absolve anyone of committing crap code. Put your name to it. Own it. Take the consequence of delivering shit code or great code, no matter how it was written. Don’t let AI be a crutch. But you’d be god damn fool not to use it, where it’s right (boilerplate, test writing, tedious changes etc.)
Massive changes made by robit in what has been a pretty stable utility for years is (obviously?) my main concern. It's absolutely a crutch, and seeing a dev lean on it like this gives me the same feeling Coach must've got seeing his star player limping into the big game on a real one. If dude wants to check out and let the machine run his project fine, but I'll be looking for something someone still cares about and works on.
I think you'd be a fool to use it. At this point it's subsidized by their need for training data/desire to manufacture dependency, but that won't be the case for long. It's expensive, detrimental to your skills, and damaging to both our planet and society. It centralizes and gatekeeps access to information, the most powerful resource of all. "Treat it like an inexperienced dev" managers say, while it replaces their opportunities to gain experience. How are they supposed to even tell great code from shit when everything they're exposed to has been run through the averaging machine?
There’s a big difference between “AI was used in some capacity” and “Entirely vibe coded”
Of course. And when I hear “vibe coded”, I hear someone starting with “make me a cool app” and going from there, with zero understanding of the technical architecture.
If you have a thorough, deeply thought through technical spec, then AI can write a great amount of tests up against that spec, say, and you’ve got a fantastic base for TDD.
I honestly feel like a lot of the downvotes are people thinking AI means “clueless programmer having an AI do its work for you”. Many highly productive, deeply technical developers use it every day.
Idk man by the sounds of it, the AI implemented the entire back end change, adding 14k lines of generated code. The dev doesn’t even seem confident with his own testing. Sounds like it’s closer to the vibe-coded end of the scale to me.
I’ve been meaning to give Ntfy a shot but now I likely won’t. If I wanted a vibe coded project I’d just do it myself.
Look, if he wanted to introduce AI code, whatever, but doing it all at once in a 14k line change is crazy.
Surely it would be better to introduce AI by letting it handle misc changes here and there instead of starting with the "biggest release ever done" (his words), no?
Definitely share your initial concern. Without strong review processes to ensure that every line of code follows the intent of the human developer, there’s no way of knowing what exactly is in there and the implications for the human users. And I’m not just talking about bugs.
They say it’s reviewed, but the temptation to blindly trust is there. In this case, developer appears to have taken some care.
The code was written by Cursor and Claude, but reviewed and heavily tested over 2-3 weeks by me. I created comparison documents, went through all queries multiple times and reviewed the logic over and over again. I also did load tests and manual regression tests, which took lots of evenings.
Let us hope so. Handle with care to ensure responsibility is not offloaded to a machine instead of a person.
The size of that changeset means that it’s inherently unreviewable.
The commit history is something I’ve seen only in the PRs that even the most dysfunctional companies would demand a rewrite for.
Also, 2-3 weeks review? PostgreSQL support could be added in that time without the need for a damn „vibe check”. Hell, it would probably take less time than that.
To be fair they would have needed to spend time testing the manual implementation as well.
The problem I see mainly is that even if this rolls out perfectly, the erratic and changing nature if llms still make it pointless as a proof of concept. Next time Claude might fuck up in a fringe way that's not covered by unit tests and is missed by manual tests.
On the other hand I guess I've been guilty myself on numerous occasions to implement fringe bugs into production code, but at least I learn from it.
I made my statement as a BDD/TDD practitioner.
The code goal of software engineering is not to deliver said code, but to deliver it in a framework that lets others—and consequently me in a week’s time—to contribute easily. This makes both future improvements and bug fixes easier.
Dumping a ~25000 lines changeset with a git history that’s almost designed to confuse is antithetical to both engineering and open source.
Yeah, it could easily have added a couple of lines of code that sends everything to Northern Korean hackers because it found that in a bunch of repositories or just logging passwords to public logs or other things an experienced developer would never do. "AI" only replicates what it sees most often and as more spam and junk repos are added to its training data because "AI" companies are too concerned with profit to teach it properly, it could do tons of random stuff. It's like training a developer by giving them random examples from the internet rather than specific ones. Of course they pick up bad habits. Even if it "works" it is almost never efficient or secure.
I just set up a ntfy server for Unified Push earlier this week to use with Matrix. Now I have to turn around and immediately replace it...
Same here. Literally just set it up and now this.
I hope the author will roll this back or someone else makes a fork. I don't want to immediately switch technology to XMPP/Matrix/... and have to do it all over again.
You could, in the meantime, simply not upgrade to the version that uses AI.
Since, from what I'm seeing around, people are having issues looking for an alternative.
Time for a fork?
I switched to Gotify when I ran into an issue where ntfy would delete old api tokens when creating more than 20. Only thing missing in Gotify is UniversalPush, other than that it feels actually more solid than ntfy to me.
I've been meaning to put something like this in my setup for a while, but definitely not this now! List of alternatives in the Custom Communication section at awesome selfhosted
I'm assuming this is some sort of canary message to indicate that the code base has been compromised, the author can't talk about it, and everyone should immediately stop using the service. Surely no-one would be unwise enough to commit this otherwise?
Even ignoring the huge red LLM flag, a 25kLOC delta in a single PR should be cause for instant rejection as there's no way to fully understand or test it, let alone in 2-3 weeks.
25kLOC delta in a single PR should be cause for instant rejection
Not to pick at nits, but it would be VERY different if it was 1k lines added and 24k lines removed. There's something extremely satisfying about removing 10k+ lines of unnecessary code.
Sure, that would be a little different, but unless you could make a convincing argument, backed up with a solid set of unit tests, at the least, as to why and how you were able to remove that much code whilst only adding a comparatively small amount, I'd still be inclined to reject it and ask for it to be broken down into smaller units.
Now, that explaination might be something along the lines of it being dead code that is not called from anywhere, or even that it was a patched version of an upstream library, and the patch is now included in that upstream, in which case, fair enough, good work, and thanks very much. As a rewrite or refactor though, it's too big to sensibly review and needs breaking down into separate features.
Absolutely, the author needs to be able to reason about their changes, no matter what. However, the reason why I think the two situations are fundamentally different, though, is that it's a lot easier to validate the existence of features than it is the non-existence of bugs or malicious behavior. The biggest risk to removing code is breaking preexisting features, whereas the biggest risk to adding code is introducing malicious behavior.
I'm a developer
I sometimes sometimes use AI for an answer to a complicated problem because normally I'd open up 20 pages , have to go through them all to find the right answer
AI gets me the answer right away, though it likely is completely wrong or at least partially wrong. Either way, it gives me a general direction and with that I only have to search through one or two pages to confirm, so the same process is just a little faster.
I laso have used AI on a couple of occasions to ask it to write code for a complicated problem. Again, you don't copy the code, god no, it's always the worst, and it is in 80% of the cases still at least riddled with bugs, or just complete bullshit. However, it might give me an alternative idea or a direction to take to implement or fix this complicated feature problem.
That's the extent to which I've used AI and for the foreseeable future that won't change because AI still can't code. It's still wildly flailing around and it might produce something that implements a certain functionality, but it's a guarantee that that functionality will have more bugs and security holes than features
I am also a developer and agree entirely.
Asking for advice, examples or the occasional boilerplate is at most how I use AI and certainly not integrated directly into my IDE.
I understand this comment. AI sometimes saves a ton of mental power and time when I’m stuck on an issue. It can give some really good suggestions. Also, AI is a godsend for frontend shit. I don’t care what y’all say, I’m never touching CSS and HTML ever again. lmao.
Nah, wouldn't do that. CSS needs to be well designed to function properly, you need actual developers for that or you'll screw over your users.
But yeah, to give quick pointers and ideas to flesh out, it's reasonably useful
If that is enough to warrant it's extreme energy use, the spread of AI slop everywhere, the pollution, the uncontrolled datacenter expansions, the explosion in hardware costs it created, the countless death and suffering it caused through AI psychosis, the AI childporn bots (hello grok, are you still the world's biggest child porn producer or did Elmo finally reign you in to again be mecha Hitler?), the....
Long story short, AI will likely end this world in a long list of fucked up ways, I don't think it's worth it
Until then, I'll use it as a suggestion tool, not much more
Bro, what the hell. Lmao. “Hey AI is horrible in all ways and is doing harm to the planet and people and kids, but I’ll use it regardless. Hear me I’m a good guy. I hate AI, but I’ll use it”. That’s virtu signaling, isn’t it?
It's not virtue signalling, I know very well what I'm doing is hypocritical at best, but it's also unavoidable for me. For one, I'm using it like this at work where they'd love nothing better than for me to start vibe coding. This is the compromise I've been able to make so far.
been using EMQX plus an MQTT client on my phone for a few months now, I like it better than gotify since the app was chewing through my battery like a vampire.
it might be better now since my issues happened three-ish years ago.
This EMQX?
Seems it's no longer FOSS?
I've been using Gotify for a few notifications from Home Assistant and it doesn't appear to be eating my battery.
It's a little more responsive than ntfy - sometimes ntfy doesn't alert for ages after the trigger (could be phone power saving the wifi...), but then I also get realerts from yesterday.... not had that with Gotify.
I can see the pragmatic appeal. Maintaining a lot of code for an open source project is thankless. Go is designed for idiots like me so it makes sense that an llm should be able to emit code that mostly works. There are classes of errors that are less likely in Go and the compiler and linting will prevent some foot guns and then it would have been tested.
Ethically I hate anything to do with the llm industry and all it represents. I hate the environmental impacts. The social impacts. The disregard for intellectual property. The devaluing of human effort. The scam economics. I won't use anything touched by it on principle and if that means walking away from a dead Internet so be it. There is enough pre-2020s books, audiobooks, movies, music and code to keep me interested for the rest of my life.
I'm so tired of that.
I'm using it for scripts notifications + unifiedpush. I don't know where to start to find the fitting alternative.
The maintainer you and said that they tirelessly tested, reviewed and verified changes over the course of 3 weeks to make sure that things were running and operating correctly.
This is how it should be done. It's not like they're vibe coding this.
And the lead dev for Huntarr said they were following best practices, and had a heavy background in cybersecurity. And we’ve all seen how that turned out.
This change 100% smells like vibe code. They refactored nearly 15k lines of code in a single push. That’s not something you just do on a whim without a team of full time devs or vibe coding. And we know they don’t have the former, so it is almost certainly the latter.
Wait.. what happened to Huntarr?
Long story short? You should kill the container and change your related passwords/API keys. The dev tried censoring it for a while, but couldn’t keep up with the posts. They eventually nuked the entire sub and deleted their Reddit account. They also privated their GitHub and changed their username.
top 95 comments