{"slug": "crane", "name": "Crane", "category": "infra", "category_name": "Infrastructure and DevOps", "description": "", "recommenders": 3, "commenters": 7, "warners": 2, "score": 1.359, "rising": -0.98, "first": "2025-12-24", "latest": "2026-03-08", "why": "there are tools like crane [0] and regctl [1] that do that today.", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 3, "neutral": 2, "compare": 0, "warn": 2}, "spark": [0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "there are tools like crane [0] and regctl [1] that do that today.", "kind": "", "icon": false, "domain": null, "github_repo": "github.com/bloomberg/crane", "official_url": "https://github.com/bloomberg/crane", "pricing": "", "aliases": ["Crane", "crane"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 756700688, "item_id": 47293793, "url": "https://news.ycombinator.com/item?id=47293793", "by": "vatsachak", "date": "2026-03-07", "stance": "recommend", "quote": "crane", "excerpt": "crane https://crane.dev/getting-started.html", "context": "", "use_case": "Building Rust with Nix", "switched_from": "", "story": "A Decade of Docker Containers"}, {"id": 743516800, "item_id": 46469800, "url": "https://news.ycombinator.com/item?id=46469800", "by": "jzelinskie", "date": "2026-01-02", "stance": "recommend", "quote": "I think the most common tool for similar workflows is Google's crane", "excerpt": "I think the most common tool for similar workflows is Google's crane[0]. It might be slightly more low-level than most developers want, though. [0]: https://github.com/google/go-containerregistry/blob/v0.20.7/cmd/crane/doc/crane.md", "context": "", "use_case": "inspecting container images", "switched_from": "", "story": "List, inspect and explore OCI container images, their layers and contents"}, {"id": 742102098, "item_id": 46381381, "url": "https://news.ycombinator.com/item?id=46381381", "by": "bmitch3020", "date": "2025-12-24", "stance": "recommend", "quote": "there are tools like crane [0] and regctl [1] that do that today.", "excerpt": "> The current recommendation is rules_oci, which takes the opposite approach: use only off\u2011the\u2011shelf tools... I'm the author of one of those off the shelf tools, and the rules_oci decision here always struck me as a bit unusual. OCI is a relatively easy spec with a number of libraries that implement it. Instead of creating a custom build command that leveraged those libraries to be an efficient build tool, they found", "context": "", "use_case": "Add layers to images", "switched_from": "", "story": "A faster path to container images in Bazel"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 747929200, "item_id": 46745575, "url": "https://news.ycombinator.com/item?id=46745575", "by": "aleksejs", "date": "2026-01-24", "stance": "warn", "quote": "It seems far from obvious that the complex and ad-hoc syntactic transformations involved", "excerpt": "The linked website and repository do not refer to the outputs as \"verified C++\". The use of that term in the submission title here seems misleading, and the Design Principles [1] document clarifies it is only the source (Rocq) programs that are formally verified. It seems far from obvious that the complex and ad-hoc syntactic transformations involved in translating them to C++ preserve the validity of the source proo", "context": "", "use_case": "Rocq-to-C++ translation", "switched_from": "", "story": "Extracting verified C++ from the Rocq theorem prover at Bloomberg"}, {"id": 742065184, "item_id": 46379074, "url": "https://news.ycombinator.com/item?id=46379074", "by": "tkinz27", "date": "2025-12-24", "stance": "warn", "quote": "crane the utility that rules_oci uses to upload containers does not yet support uploading zstd layers", "excerpt": "I looked into switching to zstd recently however at least crane the utility that rules_oci uses to upload containers does not yet support uploading zstd layers. https://github.com/google/go-containerregistry/pull/1827", "context": "", "use_case": "uploading container images", "switched_from": "", "story": "A faster path to container images in Bazel"}]}], "who": [], "tags": [], "use_cases": ["container image builds", "building rust with nix", "rocq-to-c++ translation", "inspecting container images", "add layers to images", "uploading container images"], "compared": [{"slug": "rocq", "name": "Rocq", "co": 3, "switched_from": 0, "switched_to": 0}], "makers": [{"id": 803706368, "item_id": 50231648, "url": "https://news.ycombinator.com/item?id=50231648", "by": "the-hangry-dev", "date": "2026-10-25", "stance": "recommend", "quote": "I've been working on Crane - a native, cross-platform text editor for files that are too big for most editors", "excerpt": "Hi, I've been working on Crane - a native, cross-platform text editor for files that are too big for most editors (e.g. multi-GB logs, CSV, JSON and SQL dumps, FASTA/FASTQ and others...). It's written in C++23 and uses its own UI library (so not Qt or Electron). It's at an early beta stage (currently free, no signups or e-mails required) and has basic required features from any text editor (i.e. syntax highlighting f", "context": "developer of Crane", "use_case": "editing huge files", "switched_from": "", "story": "Crane \u2013 a text editor for large files"}, {"id": 748277888, "item_id": 46767368, "url": "https://news.ycombinator.com/item?id=46767368", "by": "mzweav", "date": "2026-01-26", "stance": "neutral", "quote": "I'm the other dev of Crane", "excerpt": "I'm the other dev of Crane. Our current plan is to use BRiCk (https://skylabsai.github.io/BRiCk/index.html) to directly verify that the C++ implementation our STM primitives are extracted to matches the functional specification of STM. Having done that, we can then axiomatize the functional specification over our monadic, interaction tree interface and reason directly over the functional code in Rocq without needing ", "context": "developer of Crane", "use_case": "C++ extraction from Rocq", "switched_from": "", "story": "Extracting verified C++ from the Rocq theorem prover at Bloomberg"}, {"id": 747911232, "item_id": 46744452, "url": "https://news.ycombinator.com/item?id=46744452", "by": "joomy", "date": "2026-01-24", "stance": "neutral", "quote": "More about our design choices can be found here", "excerpt": "We do C++ only because C++ is the primary programming language at Bloomberg, and we aim to generate verified libraries that interact easily with the existing code. More about our design choices can be found here: https://bloomberg.github.io/crane/papers/crane-rocqpl26.pdf", "context": "", "use_case": "Verified C++ from Rocq", "switched_from": "", "story": "Extracting verified C++ from the Rocq theorem prover at Bloomberg"}, {"id": 747882880, "item_id": 46742680, "url": "https://news.ycombinator.com/item?id=46742680", "by": "joomy", "date": "2026-01-24", "stance": "neutral", "quote": "I'm one of Crane's developers.", "excerpt": "Hi, I'm one of Crane's developers. You can map Rocq `bool`s to C++ `bool`, Rocq strings to C++ `std::string`s, etc. You just have to manually import the mapping module: https://github.com/bloomberg/crane/blob/6a256694460c0f895c279323792b14f4c2076909/theories/Mapping/Std.v The output you posted is from an example that we missed importing. It's also one of the tests that do not yet pass. But then again, in the readme, ", "context": "", "use_case": "Extracting C++ from Rocq", "switched_from": "", "story": "Extracting verified C++ from the Rocq theorem prover at Bloomberg"}], "threads": [{"url": "https://news.ycombinator.com/item?id=46689631", "title": "Extracting verified C++ from the Rocq theorem prover at Bloomberg", "mentions": 5}, {"url": "https://news.ycombinator.com/item?id=47289311", "title": "A Decade of Docker Containers", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=46317687", "title": "A faster path to container images in Bazel", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=50231647", "title": "Crane \u2013 a text editor for large files", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46409400", "title": "List, inspect and explore OCI container images, their layers and contents", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {"warn": 1, "recommend": 1}, "2026-01": {"recommend": 1, "warn": 1, "neutral": 1}, "2026-02": {}, "2026-03": {"recommend": 1, "neutral": 1}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {}, "2026-09": {}, "2026-10": {}}, "quotes": [{"id": 756748512, "item_id": 47296782, "url": "https://news.ycombinator.com/item?id=47296782", "by": "poly2it", "date": "2026-03-08", "stance": "neutral", "quote": "I use crane, but it does not have arbitrary granularity.", "excerpt": "I use crane, but it does not have arbitrary granularity. The end goal would be something which handled all builds in Nix.", "context": "", "use_case": "container image builds", "switched_from": "", "story": "A Decade of Docker Containers"}, {"id": 756700688, "item_id": 47293793, "url": "https://news.ycombinator.com/item?id=47293793", "by": "vatsachak", "date": "2026-03-07", "stance": "recommend", "quote": "crane", "excerpt": "crane https://crane.dev/getting-started.html", "context": "", "use_case": "Building Rust with Nix", "switched_from": "", "story": "A Decade of Docker Containers"}, {"id": 748313968, "item_id": 46769623, "url": "https://news.ycombinator.com/item?id=46769623", "by": "GregarianChild", "date": "2026-01-26", "stance": "neutral", "quote": "I hope you publish this.", "excerpt": "Thanks. I hope you publish this. I imagine https://github.com/bloomberg/crane/blob/main/theories/Monads/STM.v is the functional specification of STM. I see that you use ITrees. WHat's the reason for not using Choice Trees that tend to be easier for handling non-determinism?", "context": "", "use_case": "", "switched_from": "", "story": "Extracting verified C++ from the Rocq theorem prover at Bloomberg"}, {"id": 747929200, "item_id": 46745575, "url": "https://news.ycombinator.com/item?id=46745575", "by": "aleksejs", "date": "2026-01-24", "stance": "warn", "quote": "It seems far from obvious that the complex and ad-hoc syntactic transformations involved", "excerpt": "The linked website and repository do not refer to the outputs as \"verified C++\". The use of that term in the submission title here seems misleading, and the Design Principles [1] document clarifies it is only the source (Rocq) programs that are formally verified. It seems far from obvious that the complex and ad-hoc syntactic transformations involved in translating them to C++ preserve the validity of the source proo", "context": "", "use_case": "Rocq-to-C++ translation", "switched_from": "", "story": "Extracting verified C++ from the Rocq theorem prover at Bloomberg"}, {"id": 743516800, "item_id": 46469800, "url": "https://news.ycombinator.com/item?id=46469800", "by": "jzelinskie", "date": "2026-01-02", "stance": "recommend", "quote": "I think the most common tool for similar workflows is Google's crane", "excerpt": "I think the most common tool for similar workflows is Google's crane[0]. It might be slightly more low-level than most developers want, though. [0]: https://github.com/google/go-containerregistry/blob/v0.20.7/cmd/crane/doc/crane.md", "context": "", "use_case": "inspecting container images", "switched_from": "", "story": "List, inspect and explore OCI container images, their layers and contents"}, {"id": 742102098, "item_id": 46381381, "url": "https://news.ycombinator.com/item?id=46381381", "by": "bmitch3020", "date": "2025-12-24", "stance": "recommend", "quote": "there are tools like crane [0] and regctl [1] that do that today.", "excerpt": "> The current recommendation is rules_oci, which takes the opposite approach: use only off\u2011the\u2011shelf tools... I'm the author of one of those off the shelf tools, and the rules_oci decision here always struck me as a bit unusual. OCI is a relatively easy spec with a number of libraries that implement it. Instead of creating a custom build command that leveraged those libraries to be an efficient build tool, they found", "context": "", "use_case": "Add layers to images", "switched_from": "", "story": "A faster path to container images in Bazel"}, {"id": 742065184, "item_id": 46379074, "url": "https://news.ycombinator.com/item?id=46379074", "by": "tkinz27", "date": "2025-12-24", "stance": "warn", "quote": "crane the utility that rules_oci uses to upload containers does not yet support uploading zstd layers", "excerpt": "I looked into switching to zstd recently however at least crane the utility that rules_oci uses to upload containers does not yet support uploading zstd layers. https://github.com/google/go-containerregistry/pull/1827", "context": "", "use_case": "uploading container images", "switched_from": "", "story": "A faster path to container images in Bazel"}]}