https://github.com/facet-rs/facet
Rust reflection, serialization, deserialization, pretty printing, etc. — the last proc macro you should need
https://github.com/facet-rs/facet
debugging deserialization introspection reflection rust rust-lang serialization
Last synced: 12 days ago
JSON representation
Rust reflection, serialization, deserialization, pretty printing, etc. — the last proc macro you should need
- Host: GitHub
- URL: https://github.com/facet-rs/facet
- Owner: facet-rs
- License: apache-2.0
- Created: 2025-03-10T09:48:16.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2026-03-11T21:50:10.000Z (18 days ago)
- Last Synced: 2026-03-12T04:22:44.183Z (18 days ago)
- Topics: debugging, deserialization, introspection, reflection, rust, rust-lang, serialization
- Language: Rust
- Homepage: https://facet.rs
- Size: 36.3 MB
- Stars: 2,424
- Watchers: 3
- Forks: 114
- Open Issues: 114
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE-APACHE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
- awesome - facet-rs/facet - Rust reflection, serialization, deserialization, pretty printing, etc. — the last proc macro you should need (Rust)
README
# facet-core
[](https://coveralls.io/github/facet-rs/facet?branch=main)
[](https://crates.io/crates/facet-core)
[](https://docs.rs/facet-core)
[](./LICENSE)
[](https://discord.gg/JhD7CwCJ8F)
facet provides reflection for Rust: it gives types a [`SHAPE`](Facet::SHAPE) associated
const with details on the layout, fields, doc comments, attributes, etc.
It can be used for many things, from (de)serialization to pretty-printing,
rich debuggers, CLI parsing, reflection in templating engines, code
generation, etc.
See for details.
## Workspace contents
The main `facet` crate re-exports symbols from:
- [facet-core](https://github.com/facet-rs/facet/tree/main/facet-core), which defines the main components:
- The [`Facet`] trait and implementations for foreign types (mostly `libstd`)
- The [`Shape`] struct along with various vtables and the whole [`Def`] tree
- Type-erased pointer helpers like [`PtrUninit`], [`PtrConst`], and [`Opaque`]
- Autoderef specialization trick needed for `facet-macros`
- [facet-macros](https://github.com/facet-rs/facet/tree/main/facet-macros), which implements the [`Facet`] derive attribute as a fast/light proc macro powered by [unsynn](https://docs.rs/unsynn)
For struct manipulation and reflection, we have:
- [facet-reflect](https://github.com/facet-rs/facet/tree/main/facet-reflect),
allows building values of arbitrary shapes in safe code, respecting invariants.
It also allows peeking at existing values.
Internal crates include:
- [facet-testhelpers](https://github.com/facet-rs/facet/tree/main/facet-testhelpers) a simple log logger and color-backtrace configured with the lightweight btparse backend
## Ecosystem
Various crates live under the umbrella, and their
repositories are kept somewhat-consistent through [facet-dev](https://github.com/facet-rs/facet-dev).
Crates are in various states of progress, buyer beware!
In terms of data formats, we have:
- [facet-json](https://github.com/facet-rs/facet-format/tree/main/facet-json): JSON format support
- [facet-toml](https://github.com/facet-rs/facet-format/tree/main/facet-toml): TOML format support
- [facet-yaml](https://github.com/facet-rs/facet-format/tree/main/facet-yaml): YAML format support
- [facet-msgpack](https://github.com/facet-rs/facet-format/tree/main/facet-msgpack): MessagePack deserialization
- [facet-asn1](https://github.com/facet-rs/facet-format/tree/main/facet-asn1): ASN.1 format support
- [facet-xdr](https://github.com/facet-rs/facet-format/tree/main/facet-xdr): XDR format support
- [facet-csv](https://github.com/facet-rs/facet-format/tree/main/facet-csv): CSV format support
Still adjacent to serialization/deserialization, we have:
- [facet-urlencoded](https://github.com/facet-rs/facet/tree/main/facet-urlencoded): URL-encoded form data deserialization
- [figue](https://github.com/bearcove/figue): CLI arguments, config files, and environment variables (external crate)
As far as utilities go:
- [facet-value](https://github.com/facet-rs/facet/tree/main/facet-value): Memory-efficient dynamic value type, supporting JSON-like data plus bytes
- [facet-pretty](https://github.com/facet-rs/facet/tree/main/facet-pretty): Pretty-print Facet types
- [facet-diff](https://github.com/facet-rs/facet/tree/main/facet-diff): Diffing capabilities for Facet types
- [facet-assert](https://github.com/facet-rs/facet/tree/main/facet-assert): Pretty assertions for Facet types (no PartialEq required)
- [facet-serialize](https://github.com/facet-rs/facet-serialize): Generic iterative serialization facilities
- [facet-deserialize](https://github.com/facet-rs/facet-deserialize): Generic iterative deserialization facilities
And the less developed:
- [facet-inspect](https://github.com/facet-rs/facet-inspect): Utilities to inspect the content of a Facet object
## Extracted crates
These crates were previously part of this monorepo but have been extracted to their own repositories:
- [facet-xml](https://github.com/facet-rs/facet-xml): XML/DOM ecosystem (includes facet-xml, facet-dom, facet-svg, facet-atom, facet-xml-node, facet-xml-diff, facet-singularize)
- [facet-axum](https://github.com/facet-rs/facet-axum): Axum web framework integration
## Extended cinematic universe
Some crates are developed completely independently from the facet org:
- [facet-v8](https://github.com/simonask/facet-v8) provides an experimental Facet/v8 integration
- [facet-openapi](https://github.com/ThouCheese/facet-openapi) (experimental) Generates OpenAPI definitions from types that implement Facet
- [facet_generate](https://github.com/redbadger/facet-generate) reflects Facet types into Java, Swift and TypeScript
- [multi-array-list](https://lib.rs/crates/multi-array-list) provides an experimental `MultiArrayList` type
## Sponsors
Thanks to all individual sponsors:

...along with corporate sponsors:



...without whom this work could not exist.
## Special thanks
The facet logo was drawn by [Misiasart](https://misiasart.com/).
## License
Licensed under either of:
- Apache License, Version 2.0 ([LICENSE-APACHE](https://github.com/facet-rs/facet/blob/main/LICENSE-APACHE) or )
- MIT license ([LICENSE-MIT](https://github.com/facet-rs/facet/blob/main/LICENSE-MIT) or )
at your option.