# envelo
[](https://github.com/envelo-rs/envelo/actions/workflows/ci.yml)
[](https://crates.io/crates/envelo)
[](https://docs.rs/envelo)
[](#)
[](VERSIONS.md)
[](LICENSE-MIT)
> ⚠️ 0.0.x is pre-release/experimental; breaking changes are expected. See [VERSIONS.md](./VERSIONS.md) for status and compatibility details.
Minimal envelope for creation-time fields (`Header`), body (`Payload`), and per-route metadata (`Extension`). One type, zero dependencies, and `#![no_std]` by default.
## What’s included
- Single type: `Envelo<Header, Payload, Extension>`.
- Clear split: immutable creation-time data in `Header`; hop-local metadata in `Extension`.
- Ergonomics: constructor, immutable/mutable accessors, `into_parts`, and `From<(H, P, E)>` for easy wrapping.
- Traits: `Debug + Clone + PartialEq + Eq + Hash` when your field types support them.
- Dependencies: none; `#![no_std]` without feature flags.
## Install
```toml
[dependencies]
envelo = "0.0.1"
```
## Example
```rust
use envelo::Envelo;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
struct Header {
event_id: &'static str,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
struct UserSignup<'a> {
user_id: &'a str,
}
let msg = Envelo::new(
Header { event_id: "evt-123" },
UserSignup { user_id: "alice" },
(), // nothing to attach per route yet
);
assert_eq!(msg.payload().user_id, "alice");
```
Swap or mutate `Extension` as the message moves between stages. See [ARCHITECTURE.md](./ARCHITECTURE.md) for design notes and patterns.
## More
- [VERSIONS.md](./VERSIONS.md): release status and compatibility.
- [ARCHITECTURE.md](./ARCHITECTURE.md): design goals and usage patterns.
- [CONTRIBUTING.md](./CONTRIBUTING.md): contribution guide.
## License
Dual-licensed under MIT OR Apache-2.0. See the bundled license files.