frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Show HN: Safe-NPM – only install packages that are +90 days old

https://github.com/kevinslin/safe-npm
45•kevinslin•3d ago•29 comments

Show HN: I turned algae into a bio-altimeter and put it on a weather balloon

https://radi8.dev/blog/stratospore/
99•radeeyate•4d ago•9 comments

Show HN: Yolodex – real-time customer enrichment API

https://api.yolodex.ai
27•hazzadous•2d ago•10 comments

Show HN: KiDoom – Running DOOM on PCB Traces

https://www.mikeayles.com/#kidoom
323•mikeayles•1d ago•44 comments

Show HN: We built an open source, zero webhooks payment processor

https://github.com/flowglad/flowglad
376•agreeahmed•1d ago•209 comments

Show HN: I built an interactive HN Simulator

https://news.ysimulator.run/news
516•johnsillings•2d ago•213 comments

Show HN: Infinite scroll AI logo generator built with Nano Banana

https://durable.co/ai-logo-generator
2•rookhack•6h ago•0 comments

Show HN: Anthony Bourdain's Lost Li.st's

https://bourdain.greg.technology/
13•gregsadetsky•18h ago•4 comments

Show HN: Aigit – AI-powered Git CLI for commit messages, branch names, and PRs

https://github.com/hardiksondagar/aigit
3•hardiksondagar•8h ago•0 comments

Show HN: Wozz – Agentless Kubernetes cost auditor (open source)

https://github.com/WozzHQ/wozz
4•rokumar510•10h ago•6 comments

Show HN: Fixing Google Nano Banana Pixel Art with Rust

https://github.com/Hugo-Dz/spritefusion-pixel-snapper
4•HugoDz•10h ago•0 comments

Show HN: I built an open source, code-first Intercom alternative

https://github.com/cossistantcom/cossistant
2•frenchriera•10h ago•3 comments

Show HN: OCR Arena – A playground for OCR models

https://www.ocrarena.ai/battle
211•kbyatnal•5d ago•62 comments

Show HN: I wrote a minimal memory allocator in C

https://github.com/t9nzin/memory
135•t9nzin•3d ago•32 comments

Show HN: LLM-models – a CLI tool to list available LLM models across providers

https://github.com/ljbuturovic/llm-models
3•ljubomir•12h ago•0 comments

Show HN: ChatIndex – A Lossless Memory System for AI Agents

12•LoMoGan•12h ago•3 comments

Show HN: Stun LLMs with thousands of invisible Unicode characters

https://gibberifier.com
197•wdpatti•2d ago•109 comments

Show HN: Cynthia – Reliably play MIDI music files – MIT / Portable / Windows

https://www.blaizenterprises.com/cynthia.html
86•blaiz2025•2d ago•31 comments

Show HN: Wolfrominoes

https://demos.samgentle.com/wolfrominoes/
9•sgentle•3d ago•2 comments

Show HN: Datamorph – A clean JSON ⇄ CSV converter with auto-detect

https://datamorphio.vercel.app
23•sumit_entr42•5d ago•8 comments

Show HN: A WordPress plugin that rewrites image URLs for near-zero-cost delivery

https://wordpress.org/plugins/bandwidth-saver/
65•cr1st1an•23h ago•60 comments

Show HN: Parm – Install GitHub releases just like your favorite package manager

https://github.com/yhoundz/parm
5•houndz•1d ago•2 comments

Show HN: We cut RAG latency ~2× by switching embedding model

https://www.myclone.is/blog/voyage-embedding-migration/
24•vira28•1d ago•3 comments

Show HN: Build the habit of writing meaningful commit messages

https://github.com/arpxspace/smartcommit
109•Aplikethewatch•4d ago•131 comments

Show HN: I built directory of fashion brands because I didn't know how to dress

https://brandlist.it.com
2•EthanSeo•17h ago•5 comments

Show HN: Constitutional AI Agent OS (governance enforced at kernel level)

https://github.com/kimeisele/steward-protocol
3•harekrishna108•18h ago•1 comments

Show HN: Wealthfolio 2.0- Open source investment tracker. Now Mobile and Docker

https://wealthfolio.app/?v=2.0
672•a-fadil•5d ago•213 comments

Show HN: Forty.News – Daily news, but on a 40-year delay

https://forty.news
438•foxbarrington•4d ago•179 comments

Show HN: Deft-Intruder – Real-time malware detection daemon for Linux

https://github.com/539hex/deft-intruder
5•539hex•1d ago•0 comments

Show HN: MightyGrep

https://ksylvestre.itch.io/mightygrep
7•zeeeeeebo•8h ago•0 comments
Open in hackernews

Show HN: Safe-NPM – only install packages that are +90 days old

https://github.com/kevinslin/safe-npm
45•kevinslin•3d ago
This past quarter has been awash with sophisticated npm supply chain attacks like [Shai-Hulud](https://www.cisa.gov/news-events/alerts/2025/09/23/widesprea...() and the [Chalk/debug Compromise](https://www.wiz.io/blog/widespread-npm-supply-chain-attack-b...). This CLI helps protect users from recently compromised packages by only downloading packages that have been public for a while (default is 90 days or older).

Install: npm install -g @dendronhq/safe-npm Usage: safe-npm install react@^18 lodash

How it works: - Queries npm registry for all versions matching your semver range - Filters out anything published in the last 90 days - Installs the newest "aged" version

Limitations: - Won't protect against packages malicious from day one - Doesn't control transitive dependencies (yet - looking into overrides) - Delays access to legitimate new features

This is meant as a 80/20 measure against recently compromised NPM packages and is not a silver bullet. Please give it a try and let me know if you have feedback.

Comments

pr0xyb0i•4h ago
How does it differ from: https://docs.npmjs.com/cli/v11/commands/npm-install#before
silverwind•4h ago
Seems like a worse version of `before` because `before` also handles indirect dependencies, whil this module does not seem to.
asdkkthrowaway•4h ago
Doesn't this just mean you're 90 days late on any patches?
beepbooptheory•4h ago
This article was on the front page recently that discusses the idea behind this:

https://blog.yossarian.net/2025/11/21/We-should-all-be-using...

Most of the time, you need quick patches because of fairly recent dependency changes, so if you just wait and kind of "debounce" you dependency updates, you can cover a lot of supply chain vulnerabilities etc.

ntonozzi•4h ago
It's not debouncing, it's delaying. Ideally you can still update a specific dependency to a more up to date version if it turns out an old version has a vulnerability.
moritzwarhier•3h ago
auto-updating is bad.

Scheduled, audited updates are good.

Installing random npm packages as suggested here is also bad. Especially with "--global", although I'm not sure if that makes any difference because Node by default of course can access all of your file system.

someothherguyy•4h ago
https://pnpm.io/supply-chain-security
tkzed49•4h ago
Not controlling transitive deps makes this vastly less useful because direct deps can specify version ranges (e.g. latest minor version). Personally I'd stick with pnpm's feature.
zelphirkalt•2h ago
This is why one should pin all direct and transitive dependencies with their checksums and not upgrade everyday willy-nilly. There is no need to specify the specific version numbers of transitive dependencies, if one keeps a lock file that pins those exact versions and checksums of transitive dependencies, and one doesn't upgrade willy-nilly all the time. Make upgrading dependencies a conscious choice, and perhaps have a policy of at most upgrading every X days.
moritzwarhier•4h ago
As someotherguyy already mentioned, this is a default feature in pnpm.

And as far as cat-and-mouse-games go in other package managers, I'd say that pinning dependencies and disabling postinstall scripts is a much better option. Sure, not a foolproof one either, but as good as it gets.

edit: misspelled someotherguyy's user name

2muchcoffeeman•2h ago
Why is the community persisting with such poor solutions?
moritzwarhier•2h ago
What would be a better solution? Do other package managers reliably restrict access to the host system beyond the scope of the project folder?

Many quirks come from abilities that were once deemed useful, such as compiling code in other languages after package install.

Sure, today, I can disable install scripts if I want but it doesn't change much when I eventually run code from the package anyway.

But even restricting access to the file system to the project's root folder would leave many doors open, with or without foreign languages: Node is designed as a general purpose JS runtime, including server-side and build-time usage.

The utility of node.js was initially to provide a JS API that, unlike the web platform, is not sandboxed. And npm is the default package manager.

This not only allows server-side usage, but also is essential to many early dev scenarios. Back in the days, it might have been SCSS builds using node-gyp (wouldn't recommend). Today it's things like Golang TypeScript or SSGs.

So, long story short: as many people before me already said, it's an ecosystem/cultural problem.

One thing against npm in this regard was/is its broken lock-file handling until I think version 12 or 16. That led to unintended transitive dependency version changes, breaking any reproducibility.

Same for compiling foreign languages.

These problems are solved today / not different from other package managers and -registries, as far as I know.

The culture of taking breaking changes and dependency bloat lightly has not changed as much, I think, although it's improved.

This most important point seems to be related to 3 reasons IMO:

- junior developers without experience in library development reaching large audiences

- specs, languages, runtime, and the package managers itself going through disruptions and evolutions

- rapidly releasing breaking majors, often caused by the above factors

The combination of these plus the role of the project lead/team who actually decides about the dependencies.

There are probably also many projects with unclear roles and many people who can push manifest changes, coupled with habitual access to CI/CD pipelines.

buu700•1h ago
I recently learned that this is (for all intents and purposes) a feature in npm as well, specifically the `--before` flag to `npm install`: https://docs.npmjs.com/cli/v11/commands/npm-install#before. That was harder than it should've been to figure out; it really needs better marketing.

Related to that is the proposal for `stabilityDays`, which seems way more practical: https://github.com/npm/cli/issues/8570#issuecomment-33004136.... So rather than merely saying "I only want package versions more than N days old", you'd be adding the requirement that "...and also they should have gone at least N days without a subsequent patch release". e.g. if mylib@6.0.0 is released, only to be quickly followed by 6.0.1 and 6.0.2, you ideally wouldn't want to risk ever installing the probably-broken 6.0.0 or 6.0.1 based on luck of the draw; the better behavior would be to stick with the last 5.x release until 6.0.2 has aged past the threshold.

mrconter11•3h ago
But safe-npm is not 90 days old yet.. :/
jagged-chisel•2h ago
Consider this a 3-month lead on the ability to utilize it
robkop•3h ago
You could dual brand as vibe-npm, only install packages that are in your models training dataset
cheesekunator•3h ago
Why does elapsed time mean a library is safe? This is so ridiculous. It doesn't protect you against anything. I'm sure there are 1000s of old libraries out there with hidden vulnerabilities or malicious code.
femiagbabiaka•3h ago
Most supply chain attacks have a very limited window in which they’re exploitable. This is not a panacea, but it is a good idea.
Waterluvian•3h ago
Literally nothing can mean a “library is safe.”

The idea of “safe” in terms of risk and security has misled a lot of people into this wrong idea that there’s a binary state of safe and unsafe.

It’s all about risk management. You want to reduce risk as inexpensively as possible. One of many inexpensive approaches is “don’t install dependencies that are new.” Along with “don’t install dependencies that nobody else uses.” You might also apply the rule, “don’t install dependencies that aren't shipped with the OS.” Or “don’t use dependencies that haven’t been formally proven.” Etc.

Indeed, calling it “Safe-NPM” can be misleading. As if using it achieves some binary state of safety.

ttoinou•3h ago
If everybody does that, won't we take 90 days more to detect problems / hacks of npm packages ?
lelandbatey•3h ago
No, cause the folks detecting the problems typically do so by actively scanning new releases (usually security companies do this). Few such problems are detected by people who do a "normal" update and receive compromised code, investigate, and then report the problem. It does happen, but it's not the "usual" way these supply chain attacks are discovered, especially not the really big ones.
codezero•3h ago
Does anyone have any statistics on how long a compromised package has been in the wild on average?
sebmellen•3h ago
"Here, install my new 1-day old NPM package that doesn't let you install packages younger than 90 days."

Pardon me, I couldn’t help myself :D

arrty88•2h ago
With the help of AI, i see no reason to install most deps nowadays besides types and react and mui framework. Everything can be built from scratch quickly.
zelphirkalt•2h ago
You still will have to maintain it then though.
actionfromafar•2h ago
I think this is a pretty common approach nowadays, and one of the reasons why I believe my job is safe for now. I expect to be called up to fix some of the resulting mess. It's a two-edged sword, for sure.
zelphirkalt•2h ago
This works only if there are some other people, who will use a dependency "too early" to fall victim to some exploit and then notice it, within those 90 days. Imagine, if everyone only used packages older than 90 days. Then we would have no frontrunner to run into the issues before us.

A cooldown time alone is not actually a sufficient solution. What people really need to stop doing, is not properly pinning their versions and checksums, and installing whatever newer version is available. That would cause a problem even, if the date line is moved 90 days into the future for all packages. If however, one only updates versions of dependencies when one consciously makes that choice, there are far fewer points in time, when versions change, and therefore the chance of catching something is also much lower. Combine that with a cooldown time/minimum age for versions, and you got an approach.

waterTanuki•2h ago
Just use pnpm. I've never once had compatibility issues with it on linux/mac/windows over the past 6 years.
aussieguy1234•1h ago
This does mean that security patches released yesterday won't get installed.

Its the opposite of "keep your software up to date"