{"slug": "libvips", "name": "libvips", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 4, "commenters": 5, "warners": 0, "score": 3.881, "rising": 1.35, "first": "2025-12-20", "latest": "2026-10-06", "why": "We use the golang wrapper at work and love the simplicity and speed", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 4, "neutral": 1, "compare": 0, "warn": 0}, "spark": [0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "We use the golang wrapper at work and love the simplicity and speed", "icon": true, "domain": null, "github_repo": "github.com/libvips/libvips", "official_url": "https://www.libvips.org", "pricing": "", "aliases": ["libvips"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 796029633, "item_id": 49751852, "url": "https://news.ycombinator.com/item?id=49751852", "by": "kawsper", "date": "2026-09-18", "stance": "recommend", "quote": "I can recommend setting VIPS_BLOCK_UNTRUSTED=1 when you switch to vips", "excerpt": "I use ruby-landlock as well for image processing. I can recommend setting VIPS_BLOCK_UNTRUSTED=1 when you switch to vips, it blocks untrusted image decoders. Not setting that value caught the rails team off guard just recently, maybe it should be the default.", "context": "", "use_case": "image processing", "switched_from": "", "story": "A heap overflow and SSO misconfiguration to compromise OpenAI internal repos"}, {"id": 796009633, "item_id": 49750602, "url": "https://news.ycombinator.com/item?id=49750602", "by": "sams99", "date": "2026-09-18", "stance": "recommend", "quote": "We are also in the process of moving away from Magick to Vips", "excerpt": "Update on the Discourse side, we now run all external binaries, including magick via a landlock sandbox. The gem we use is here: https://github.com/discourse/ruby-landlock highly recommend all Rubyists out there consider this. We are also in the process of moving away from Magick to Vips (which also runs in a sandbox, not in process) HEIF is patched, but I doubt this is the last buffer overflow in HEIF, I will not be", "context": "Discourse developer", "use_case": "image processing", "switched_from": "ImageMagick", "story": "A heap overflow and SSO misconfiguration to compromise OpenAI internal repos"}, {"id": 741653392, "item_id": 46353337, "url": "https://news.ycombinator.com/item?id=46353337", "by": "gethly", "date": "2025-12-22", "stance": "recommend", "quote": "I use VIPS cli https://www.libvips.org", "excerpt": "I use VIPS cli https://www.libvips.org I think converting HEIC into jpg would be simple vips copy -i src.hif out.jpg Although I have not used it for a while so not sure it is exactly that. It also does not support batches, you must run one image at a time, but that can be scripted. It also does not support multiple operations, so you might need to use the .v extensions as intermediary between multiple presets(for exa", "context": "", "use_case": "converting HEIC to JPG", "switched_from": "", "story": "Ask HN: How are most people converting HEIC to jpg?"}, {"id": 741401216, "item_id": 46337576, "url": "https://news.ycombinator.com/item?id=46337576", "by": "ahurmazda", "date": "2025-12-20", "stance": "recommend", "quote": "We use the golang wrapper at work and love the simplicity and speed", "excerpt": "Also worth mentioning libvips[0] the underlying engine behind sharp. We use the golang wrapper at work and love the simplicity and speed (ofc) [0]https://github.com/libvips/libvips", "context": "uses it at work via the Go wrapper", "use_case": "image processing", "switched_from": "", "story": "Sharp: High performance Node.js image processing/optimization"}]}], "caveats": [], "who": [{"by": "__jonas", "context": "uses Gleam for web APIs", "url": "https://news.ycombinator.com/item?id=49978683", "date": "2026-10-06"}, {"by": "sams99", "context": "Discourse developer", "url": "https://news.ycombinator.com/item?id=49750602", "date": "2026-09-18"}, {"by": "ahurmazda", "context": "uses it at work via the Go wrapper", "url": "https://news.ycombinator.com/item?id=46337576", "date": "2025-12-20"}], "tags": [], "use_cases": ["image processing", "image resizing", "converting heic to jpg"], "compared": [{"slug": "imagemagick", "name": "ImageMagick", "co": 2, "switched_from": 1, "switched_to": 0}, {"slug": "ruby-landlock", "name": "ruby-landlock", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=49749656", "title": "A heap overflow and SSO misconfiguration to compromise OpenAI internal repos", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49975619", "title": "Gleam doesn't compile to Erlang source anymore", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46326261", "title": "Ask HN: How are most people converting HEIC to jpg?", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46291477", "title": "Sharp: High performance Node.js image processing/optimization", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {"recommend": 2}, "2026-01": {}, "2026-02": {}, "2026-03": {}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {}, "2026-09": {"recommend": 2}, "2026-10": {"neutral": 1}}, "quotes": [{"id": 799658928, "item_id": 49978683, "url": "https://news.ycombinator.com/item?id=49978683", "by": "__jonas", "date": "2026-10-06", "stance": "neutral", "quote": "When resizing images for example, I fall back to Elixir's bindings to libvips.", "excerpt": "I use it mostly for web APIs / services, it's great for that! Interop is not seamless since Elixir does not have the same static type system, but it is possible and that does help sometimes. When resizing images for example, I fall back to Elixir's bindings to libvips. I've also used Oban from Gleam in the past.", "context": "uses Gleam for web APIs", "use_case": "image resizing", "switched_from": "", "story": "Gleam doesn't compile to Erlang source anymore"}, {"id": 796029633, "item_id": 49751852, "url": "https://news.ycombinator.com/item?id=49751852", "by": "kawsper", "date": "2026-09-18", "stance": "recommend", "quote": "I can recommend setting VIPS_BLOCK_UNTRUSTED=1 when you switch to vips", "excerpt": "I use ruby-landlock as well for image processing. I can recommend setting VIPS_BLOCK_UNTRUSTED=1 when you switch to vips, it blocks untrusted image decoders. Not setting that value caught the rails team off guard just recently, maybe it should be the default.", "context": "", "use_case": "image processing", "switched_from": "", "story": "A heap overflow and SSO misconfiguration to compromise OpenAI internal repos"}, {"id": 796009633, "item_id": 49750602, "url": "https://news.ycombinator.com/item?id=49750602", "by": "sams99", "date": "2026-09-18", "stance": "recommend", "quote": "We are also in the process of moving away from Magick to Vips", "excerpt": "Update on the Discourse side, we now run all external binaries, including magick via a landlock sandbox. The gem we use is here: https://github.com/discourse/ruby-landlock highly recommend all Rubyists out there consider this. We are also in the process of moving away from Magick to Vips (which also runs in a sandbox, not in process) HEIF is patched, but I doubt this is the last buffer overflow in HEIF, I will not be", "context": "Discourse developer", "use_case": "image processing", "switched_from": "ImageMagick", "story": "A heap overflow and SSO misconfiguration to compromise OpenAI internal repos"}, {"id": 741653392, "item_id": 46353337, "url": "https://news.ycombinator.com/item?id=46353337", "by": "gethly", "date": "2025-12-22", "stance": "recommend", "quote": "I use VIPS cli https://www.libvips.org", "excerpt": "I use VIPS cli https://www.libvips.org I think converting HEIC into jpg would be simple vips copy -i src.hif out.jpg Although I have not used it for a while so not sure it is exactly that. It also does not support batches, you must run one image at a time, but that can be scripted. It also does not support multiple operations, so you might need to use the .v extensions as intermediary between multiple presets(for exa", "context": "", "use_case": "converting HEIC to JPG", "switched_from": "", "story": "Ask HN: How are most people converting HEIC to jpg?"}, {"id": 741401216, "item_id": 46337576, "url": "https://news.ycombinator.com/item?id=46337576", "by": "ahurmazda", "date": "2025-12-20", "stance": "recommend", "quote": "We use the golang wrapper at work and love the simplicity and speed", "excerpt": "Also worth mentioning libvips[0] the underlying engine behind sharp. We use the golang wrapper at work and love the simplicity and speed (ofc) [0]https://github.com/libvips/libvips", "context": "uses it at work via the Go wrapper", "use_case": "image processing", "switched_from": "", "story": "Sharp: High performance Node.js image processing/optimization"}]}