Hematite is a collection of Rust crates that grew from an exploration into database design and key data structures. The project includes several innovative components:
- O3db: A log-structured key-value database inspired by BitCask.
- JDAT: A superset of JSON adding types, combining human-readable and binary formats.
- Shield: A secure peer-to-peer protocol built on UDP.
- Namex: A distributed universal name codex for schemes and specifications
This project is currently in early development. While the source is public for transparency and learning, I'll remain the sole developer with a view to opening up for contributions at version 1.0.0 hopefully within 12 months. Until then, I'll adjust the minor version number to reflect roughly the degree of pre-1.0.0 completion, which at the moment is about 50% (hence 0.5.0).
Feel free to:
- Star/watch the repository if interested,
- Open issues for bugs or feature suggestions,
- Fork and experiment with the code,
- Provide feedback through discussions.
However, please note that pull requests are not being accepted at this time.
Hematite started as a Rust learning experience, and one of my objectives has been to minimise third party dependencies. However, despite trying to reinvent lots of wheels it's remarkable just how many crates the library depends upon directly and indirectly, and I am grateful to all their authors and contributors.
The code is mostly unsophisticated. I would rather it be readable and obvious than "clever". While I strive for code that is economical and efficient, the main focus in this phase is on correctness, reliability and maintainability. Optimisation will follow. It avoids the use of unsafe
and unwrap
.
The crates can be organised by their level of cross-dependence, for example:
- fe2o3_core: Core traits and utilities, including logging
- fe2o3_stds: Standard data enumerations
- fe2o3_crypto_traits, fe2o3_hash_traits: Cryptographic and hashing interfaces
- fe2o3_net: Network utilities
- fe2o3_num: Numerical type utilities
- fe2o3_text: String manipulation and formatting
- fe2o3_jdat: JDAT format implementation
- fe2o3_crypto: Post-quantum cryptography implementation
- fe2o3_hash: Generic hashing utilities
- fe2o3_o3db: O3DB database implementation
- fe2o3_steel: Secure web and email server.
- fe2o3_shield: Shield protocol implementation
Documentation is currently under development. For now, you can:
- Clone the repository,
- Explore the individual crates,
- Check the tests for usage examples.
git clone https://github.com/Oxedize/fe2o3.git
cd fe2o3
cargo test --workspace
O3db offers:
- Log-structured storage,
- Memory-optimized design,
- Automatic garbage collection, and
- Simple key-value interface.
JDAT extends JSON to support:
- Type annotations,
- Multiple number formats,
- Binary representation,
- Comment support, and
- Any type as map keys.
Shield provides:
- Secure peer-to-peer communication,
- Post-quantum cryptography options,
- DOS attack protection, and
- UDP-based messaging.
See the LICENSE file for license rights and limitations.
- Complete initial implementation of all components,
- Stabilize APIs,
- Expand documentation,
- Open for community contributions,
- Publish to crates.io.