{"slug": "facet", "name": "facet", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 3, "commenters": 5, "warners": 0, "score": 2.889, "rising": -0.98, "first": "2025-11-04", "latest": "2026-09-30", "why": "facet (rust) allows tagging fields as sensitive so they won't show up in logs", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 3, "neutral": 0, "compare": 2, "warn": 0}, "spark": [1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "facet (rust) allows tagging fields as sensitive so they won't show up in logs", "kind": "", "icon": true, "domain": "facet.rs", "github_repo": null, "official_url": "https://facet.rs/", "pricing": "", "aliases": ["facet", "Facet"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 745798208, "item_id": 46612388, "url": "https://news.ycombinator.com/item?id=46612388", "by": "evgpbfhnr", "date": "2026-01-13", "stance": "recommend", "quote": "facet (rust) allows tagging fields as sensitive so they won't show up in logs", "excerpt": "> I\u2019m also intrigued by the potential that type systems have for \u201ctagging\u201d secrets and preventing their propagation beyond where they\u2019re needed facet (rust) allows tagging fields as sensitive so they won't show up in logs: https://facet.rs/guide/attributes/#sensitive I'm sure other languages have equivalents but I rarely see this.. for example I was about to say serde doesn't do it, but it looks like it's possible wi", "context": "", "use_case": "tagging sensitive fields in logs", "switched_from": "", "story": "Handling secrets (somewhat) securely in shells"}, {"id": 733056353, "item_id": 45816022, "url": "https://news.ycombinator.com/item?id=45816022", "by": "quamserena", "date": "2025-11-04", "stance": "recommend", "quote": "There are libraries like facet[0] that implement general reflection, rather than just a subset of it", "excerpt": "I\u2019m not a fan of serde either. I wish there was a way to have foreign derives (or even better: compile-time reflection). There wasn\u2019t a great way to serialize things in Rust in the standard library and the ecosystem crystalized around serde, which is suboptimal imo. There are libraries like facet[0] that implement general reflection, rather than just a subset of it, but it probably won't be supported by all of your d", "context": "", "use_case": "general reflection", "switched_from": "", "story": "Pain Points of OCaml"}]}], "caveats": [], "who": [], "tags": [], "use_cases": ["rust runtime reflection and serialization", "rust reflection derive macro", "tagging sensitive fields in logs", "general reflection"], "compared": [{"slug": "serde", "name": "serde", "co": 3, "switched_from": 0, "switched_to": 0}], "makers": [{"id": 763950754, "item_id": 47746922, "url": "https://news.ycombinator.com/item?id=47746922", "by": "nithinbekal", "date": "2026-04-12", "stance": "neutral", "quote": "building a simple version manager for the language", "excerpt": "A Ruby-inspired typed programming language called Sapphire: https://github.com/sapphire-project/sapphire I was reading the fantastic Crafting Interpreters book, and been wondering what it would be like to design a language from scratch. I really enjoy using Sorbet with Ruby, so wanted to design a small language with Ruby's object model, and a gradual type system. Despite not knowing much programming language theory, ", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: What Are You Working On? (April 2026)"}, {"id": 753025360, "item_id": 47064085, "url": "https://news.ycombinator.com/item?id=47064085", "by": "mkj6", "date": "2026-02-18", "stance": "recommend", "quote": "We built Facet to solve a real problem", "excerpt": "We built Facet to solve a real problem we've seen repeated across teams: the separation between backend and frontend developers creates friction that shouldn't exist. The idea is simple: the same REST endpoint serves JSON to APIs and HTML to browsers (via HTTP content negotiation). A web developer can now: - Build complete admin panels, dashboards, and internal tools without writing backend code - Access data directl", "context": "", "use_case": "Admin panels and CRUD apps", "switched_from": "", "story": null}], "threads": [{"url": "https://news.ycombinator.com/item?id=49883913", "title": "Testing WebGPU data layouts with Facet", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49901149", "title": "Deser: Rethinking Rust Serialization", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47741527", "title": "Ask HN: What Are You Working On? (April 2026)", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47490648", "title": "An Incoherent Rust", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47064084", "title": "item 47064084", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46554774", "title": "Handling secrets (somewhat) securely in shells", "mentions": 1}], "sentiment_by_month": {"2025-11": {"recommend": 1}, "2025-12": {}, "2026-01": {"recommend": 1}, "2026-02": {}, "2026-03": {"recommend": 1}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {}, "2026-09": {"compare": 2}, "2026-10": {}}, "quotes": [{"id": 798532832, "item_id": 49908302, "url": "https://news.ycombinator.com/item?id=49908302", "by": "genxy", "date": "2026-09-30", "stance": "compare", "quote": "Side by side comparison with SERDE https://facet.rs/guide/serde/", "excerpt": "> facet is a library for Rust which provides run-time reflection. By annotating your struct with #[derive(facet::Facet)], you get a SHAPE associated type which can be inspected at runtime. https://github.com/facet-rs/facet > The core crates give types a SHAPE associated constant with their kind, layout, fields, documentation, attributes, and type-specific operations. facet-reflect builds, reads, and mutates values th", "context": "", "use_case": "Rust runtime reflection and serialization", "switched_from": "", "story": "Testing WebGPU data layouts with Facet"}, {"id": 798440800, "item_id": 49902550, "url": "https://news.ycombinator.com/item?id=49902550", "by": "satvikpendem", "date": "2026-09-30", "stance": "compare", "quote": "How does this compare to facet [0][1] by fasterthanlime?", "excerpt": "How does this compare to facet [0][1] by fasterthanlime? Seems some of the reasoning is similar especially for compile time bloat. [0] https://facet.rs [1] https://fasterthanli.me/articles/introducing-facet-reflection-for-rust", "context": "", "use_case": "", "switched_from": "", "story": "Deser: Rethinking Rust Serialization"}, {"id": 759953680, "item_id": 47497105, "url": "https://news.ycombinator.com/item?id=47497105", "by": "mastax", "date": "2026-03-23", "stance": "recommend", "quote": "", "excerpt": "Language changes could help for sure. There\u2019s a library implementation we can use right now though: https://facet.rs/ Basically a derive macro for reflection. Yeah it\u2019s one (more) trait to derive on all your types but then users can use that to do reflection or pretty printing or diffing or whatever they want.", "context": "", "use_case": "Rust reflection derive macro", "switched_from": "", "story": "An Incoherent Rust"}, {"id": 745798208, "item_id": 46612388, "url": "https://news.ycombinator.com/item?id=46612388", "by": "evgpbfhnr", "date": "2026-01-13", "stance": "recommend", "quote": "facet (rust) allows tagging fields as sensitive so they won't show up in logs", "excerpt": "> I\u2019m also intrigued by the potential that type systems have for \u201ctagging\u201d secrets and preventing their propagation beyond where they\u2019re needed facet (rust) allows tagging fields as sensitive so they won't show up in logs: https://facet.rs/guide/attributes/#sensitive I'm sure other languages have equivalents but I rarely see this.. for example I was about to say serde doesn't do it, but it looks like it's possible wi", "context": "", "use_case": "tagging sensitive fields in logs", "switched_from": "", "story": "Handling secrets (somewhat) securely in shells"}, {"id": 733056353, "item_id": 45816022, "url": "https://news.ycombinator.com/item?id=45816022", "by": "quamserena", "date": "2025-11-04", "stance": "recommend", "quote": "There are libraries like facet[0] that implement general reflection, rather than just a subset of it", "excerpt": "I\u2019m not a fan of serde either. I wish there was a way to have foreign derives (or even better: compile-time reflection). There wasn\u2019t a great way to serialize things in Rust in the standard library and the ecosystem crystalized around serde, which is suboptimal imo. There are libraries like facet[0] that implement general reflection, rather than just a subset of it, but it probably won't be supported by all of your d", "context": "", "use_case": "general reflection", "switched_from": "", "story": "Pain Points of OCaml"}]}