Vdir client library for Rust
This library is composed of 2 feature-gated layers:
- Low-level I/O-free coroutines: no_std-compatible state machines containing the whole Vdir logic, usable anywhere
- Mid-level standard client: a blocking client that runs the coroutines against the local filesystem for you
- I/O-free core: state machines carrying the whole Vdir logic, with no filesystem calls and no async runtime, so the same operations drive blocking, async or test harnesses.
- Standard client: a blocking client running every operation against the local filesystem (requires
clientfeature). - Collections: create, delete, list, rename and update collection directories, including the optional display name, description and color metadata markers.
- Items: store, get, list, locate, copy, move and delete contact and calendar files, written atomically through a temporary file and a rename.
Tip
Each layer is toggled through a cargo feature; the default set is listed in Cargo.toml and on docs.rs.
The library implements the Vdir storage format: collections are directories, items are files inside them, and metadata lives in a small set of marker files. Items are either contacts (vCard) or calendar objects (iCalendar); io-vdir treats them as opaque bytes and leaves parsing to the consumer.
See documentation at docs.rs.
See complete examples at ./examples.
This project is licensed under either of:
- Chat on Matrix
- News on Mastodon or RSS
- Mail at pimalaya.org@posteo.net
Special thanks to the NLnet foundation and the European Commission that have been financially supporting the project for years:
- 2022 → 2023: NGI Assure
- 2023 → 2024: NGI Zero Entrust
- 2024 → 2026: NGI Zero Core
- 2026 → 2027: NGI Zero Commons Fund
This program is part of Pimalaya, free software funded entirely by grants and donations. If you find it useful, consider sponsoring its development:
