{"slug": "bundler", "name": "Bundler", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 4, "commenters": 9, "warners": 0, "score": 4.561, "rising": 0.02, "first": "2025-11-07", "latest": "2026-08-14", "why": "In Ruby, there is inline bundler which makes sharing a single Ruby script very portable.", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 4, "neutral": 4, "compare": 1, "warn": 0}, "spark": [1, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "In Ruby, there is inline bundler which makes sharing a single Ruby script very portable.", "kind": "", "icon": true, "domain": "bundler.io", "github_repo": null, "official_url": "https://bundler.io", "pricing": "", "aliases": ["Bundler"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 788747408, "item_id": 49296713, "url": "https://news.ycombinator.com/item?id=49296713", "by": "_joel", "date": "2026-08-14", "version": null, "stance": "recommend", "quote": "Checksumming the dependencies in the Gemfile may help.", "excerpt": "Checksumming the dependencies in the Gemfile may help. https://blog.rubygems.org/2024/12/19/bundler-v2-6.html", "context": "", "use_case": "Ruby dependency management", "switched_from": "", "story": "Ruby 4.0 Universal RCE Deserialization Gadget Chain"}, {"id": 740136336, "item_id": 46258521, "url": "https://news.ycombinator.com/item?id=46258521", "by": "Alifatisk", "date": "2025-12-13", "version": null, "stance": "recommend", "quote": "In Ruby, there is inline bundler which makes sharing a single Ruby script very portable.", "excerpt": "I like the message the article is trying to convey, Python is good alternative to complicated shell scripts in my opinion. I do wonder, let's say the scripting file is using lots of libraries, do you have to include some kind of requirements.txt file with it aswell when you want to share it with other people? In Ruby, there is inline bundler which makes sharing a single Ruby script very portable. https://bundler.io/g", "context": "", "use_case": "sharing single-file Ruby scripts", "switched_from": "", "story": "Using Python for Scripting"}, {"id": 739256193, "item_id": 46203512, "url": "https://news.ycombinator.com/item?id=46203512", "by": "sdwolfz", "date": "2025-12-09", "version": null, "stance": "recommend", "quote": "\"Bundler includes checksums in new lockfiles by default\" is the thing I'm most excited about.", "excerpt": "Related link to the version 4.0.0 release/upgrade notes: https://blog.rubygems.org/2025/12/03/upgrade-to-rubygems-bundler-4.html \"Bundler includes checksums in new lockfiles by default\" is the thing I'm most excited about. You still need to enable them manually in existing ones though with \"bundle lock --add-checksums\"", "context": "", "use_case": "", "switched_from": "", "story": "RubyGems 4.0.1 and Bundler 4.0.1 Released"}]}], "caveats": [], "who": [], "tags": [], "use_cases": ["ruby dependency management", "sharing single-file ruby scripts", "dependency resolution"], "compared": [{"slug": "uv", "name": "uv", "co": 3, "switched_from": 0, "switched_to": 0}, {"slug": "rubygems", "name": "RubyGems", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=46458302", "title": "Can Bundler Be as Fast as Uv?", "mentions": 4}, {"url": "https://news.ycombinator.com/item?id=49295238", "title": "Ruby 4.0 Universal RCE Deserialization Gadget Chain", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=48490024", "title": "Homebrew 6.0.0", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46189962", "title": "Using Python for Scripting", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46202746", "title": "RubyGems 4.0.1 and Bundler 4.0.1 Released", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=45849528", "title": "Ruby already solved my problem", "mentions": 1}], "sentiment_by_month": {"2025-11": {"recommend": 1}, "2025-12": {"recommend": 2}, "2026-01": {"neutral": 3, "compare": 1}, "2026-02": {}, "2026-03": {}, "2026-04": {}, "2026-05": {}, "2026-06": {"neutral": 1}, "2026-07": {}, "2026-08": {"recommend": 1}, "2026-09": {}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 788747408, "item_id": 49296713, "url": "https://news.ycombinator.com/item?id=49296713", "by": "_joel", "date": "2026-08-14", "version": null, "stance": "recommend", "quote": "Checksumming the dependencies in the Gemfile may help.", "excerpt": "Checksumming the dependencies in the Gemfile may help. https://blog.rubygems.org/2024/12/19/bundler-v2-6.html", "context": "", "use_case": "Ruby dependency management", "switched_from": "", "story": "Ruby 4.0 Universal RCE Deserialization Gadget Chain"}, {"id": 775971744, "item_id": 48498234, "url": "https://news.ycombinator.com/item?id=48498234", "by": "alwillis", "date": "2026-06-11", "version": null, "stance": "neutral", "quote": "Bundler now supports cooldown", "excerpt": "Just a FYI: Bundler now supports cooldown [1]. [1]: \"Cool down before you install: give new gems a few days to be vetted\" - https://blog.rubygems.org/2026/06/03/cooldown-let-new-gems-be-vetted.html", "context": "", "use_case": "", "switched_from": "", "story": "Homebrew 6.0.0"}, {"id": 743431249, "item_id": 46464453, "url": "https://news.ycombinator.com/item?id=46464453", "by": "charliermarsh", "date": "2026-01-02", "version": null, "stance": "compare", "quote": "I'm not super familiar with Bundler's architecture", "excerpt": "I'm not super familiar with Bundler's architecture but I think the most impactful thing would be adopting uv's cache design, which is a big part of what makes uv so fast and should be replicable in other languages and ecosystems. > Ignoring requires-python upper bounds. When a package says it requires python<4.0, uv ignores the upper bound and only checks the lower. This reduces resolver backtracking dramatically sin", "context": "", "use_case": "", "switched_from": "", "story": "Can Bundler Be as Fast as Uv?"}, {"id": 743364592, "item_id": 46460287, "url": "https://news.ycombinator.com/item?id=46460287", "by": "pmahoney", "date": "2026-01-01", "version": null, "stance": "neutral", "quote": "", "excerpt": "I wrote some code to do almost this many years ago (if I recall correctly, it doesn\u2019t cache anything to disk, but builds the hash fresh each time, which can still result in massive speed up). Probably obsolete and broken by now, but one of my favorite mini projects. (And I just realized the svg graph is all but impossible to read in dark mode) https://github.com/pmahoney/fastup", "context": "", "use_case": "", "switched_from": "", "story": "Can Bundler Be as Fast as Uv?"}, {"id": 743353232, "item_id": 46459577, "url": "https://news.ycombinator.com/item?id=46459577", "by": "raggi", "date": "2026-01-01", "version": null, "stance": "neutral", "quote": "", "excerpt": "What I would do to really squeeze the rest out in pure ruby (bear in mind I\u2019ve been away about a decade so there _might be_ new bits but nothing meaningful as far as I know): Use a cheaper to parse index format (the gists I wrote years ago cover this: https://gist.github.com/raggi/4957402) Use threads for the initial archive downloads (this is just io, and you want to reuse some caches like the index) Use a few forks", "context": "", "use_case": "", "switched_from": "", "story": "Can Bundler Be as Fast as Uv?"}, {"id": 743346240, "item_id": 46459140, "url": "https://news.ycombinator.com/item?id=46459140", "by": "kimos", "date": "2026-01-01", "version": null, "stance": "neutral", "quote": "global cache for all bundler instances", "excerpt": "I\u2019ve been squinting at the \u201cglobal cache for all bundler instances\u201d issue[1] and I\u2019m trying to figure out if it\u2019s a minefield of hidden complication or if it\u2019s actually relatively straight forward. It\u2019s interesting as a target because it pays off more the longer it has been implemented as it only would be shared from versions going forward. [1] https://github.com/ruby/rubygems/issues/7249", "context": "", "use_case": "", "switched_from": "", "story": "Can Bundler Be as Fast as Uv?"}, {"id": 740136336, "item_id": 46258521, "url": "https://news.ycombinator.com/item?id=46258521", "by": "Alifatisk", "date": "2025-12-13", "version": null, "stance": "recommend", "quote": "In Ruby, there is inline bundler which makes sharing a single Ruby script very portable.", "excerpt": "I like the message the article is trying to convey, Python is good alternative to complicated shell scripts in my opinion. I do wonder, let's say the scripting file is using lots of libraries, do you have to include some kind of requirements.txt file with it aswell when you want to share it with other people? In Ruby, there is inline bundler which makes sharing a single Ruby script very portable. https://bundler.io/g", "context": "", "use_case": "sharing single-file Ruby scripts", "switched_from": "", "story": "Using Python for Scripting"}, {"id": 739256193, "item_id": 46203512, "url": "https://news.ycombinator.com/item?id=46203512", "by": "sdwolfz", "date": "2025-12-09", "version": null, "stance": "recommend", "quote": "\"Bundler includes checksums in new lockfiles by default\" is the thing I'm most excited about.", "excerpt": "Related link to the version 4.0.0 release/upgrade notes: https://blog.rubygems.org/2025/12/03/upgrade-to-rubygems-bundler-4.html \"Bundler includes checksums in new lockfiles by default\" is the thing I'm most excited about. You still need to enable them manually in existing ones though with \"bundle lock --add-checksums\"", "context": "", "use_case": "", "switched_from": "", "story": "RubyGems 4.0.1 and Bundler 4.0.1 Released"}, {"id": 733622784, "item_id": 45851424, "url": "https://news.ycombinator.com/item?id=45851424", "by": "psadauskas", "date": "2025-11-07", "version": null, "stance": "recommend", "quote": "", "excerpt": "I use it quite a bit when I have to monkeypatch a gem to backport a fix while I wait for a release: raise \"check if monkeypatch in #{__FILE__} is still needed\" if Gem::Version.new(Rails.version) >= Gem::Version.new(\"8.0.0\") This will blow up immediately when the gem gets upgraded, so we can see if we still need it, instead of it laying around in wait to cause a subtle bug in the future.", "context": "", "use_case": "Dependency resolution", "switched_from": "", "story": "Ruby already solved my problem"}]}