Fetch it withore sync --pull-only https://oregami.oxegen.io/oxedyne/fe2o3
showing README.md
<p align="center"> <img src="img/oxedyne_logo_white_text_below_opt.svg" width="150"/> </p>
<p align="center"> <img src="img/fe2o3_display_white_opt.svg" width="200"/> </p>
Oxedyne Hematite (fe2o3)
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, designed for high throughput.
- JDAT: A superset of JSON adding types, combining human-readable and binary formats.
- Shield: A secure peer-to-peer protocol and app built on UDP.
- Namex: A distributed universal name codex for schemes and specifications.
Oxedyne is my Rust/Web development shop.
Status
This solo project has been in progress on a part time basis for several years, and I estimate completion of the initial 0.9.0 release is at around 50% overall. I'm now doing this in public in the hope of soliciting ideas and suggestions, with a view to publishing a developer guide and accepting contributions some time in the next 12 months.
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,
- Contribute through GitHub Sponsors if you want faster development or wider adoption, and
- Make pull requests once the contribution window opens.
See the detailed project progress for recently completed and upcoming features.
Project Philosophy
Hematite started as a Rust learning experience, and one of my objectives has been to minimise third-party dependencies. However, despite every effort to reinvent lots of wheels, it still depends on many crates directly and indirectly. So I am very grateful to all their authors and contributors.
The code aims mostly to be correct, readable, and maintainable rather than super-fast or clever. While I have always strived for economy and efficiency, I'm looking forward to community contributions that help make better use of Rust features, and lead to more aggressive optimisation.
One of the initial motivations for the library was to improve my personal developer experience, which has involved a range of experiments particularly around error handling and logging. The code avoids the use of unsafe and unwrap. The ? propogator is avoided in favour of macros that are more explicitly function-like such as the directly replacement ok!, the match-based res! and the closure catch! which tries to capture unwind panics. Eventually any impacts on performance will be properly assessed. Tags were built into the fe2o3_core::error::Error type which offers a foundation for theoretical benefits but the practical value remains to be seen.
Components
The crates can be organised by their level of internal cross-dependencies, currently the most notable being:
Foundational (no internal cross-dependencies)
- fe2o3_core: Core traits, utilities, logging, and fundamental types, typically small and relatively simple.
- fe2o3_stds: A place for existing public standards.
Fundamental (1-3 internal cross-dependencies)
- fe2o3_bot: Thread worker library, for bot-like worker threads with common termination semantics.
- fe2o3_data: Specialised data structures such as ring buffers, stacks, trees and timestamped types.
- fe2o3_iop_hash: Interoperability layer for hashing, including SHA3-256 and Seahash.
- fe2o3_net: Network utilities with support for DNS, HTTP, WebSocket, and SMTP.
- fe2o3_num: Numerical type utilities, big integer, decimal types, and number strings.
- fe2o3_text: String manipulation and formatting, with text processing tools, base2x encoding and a REPL-friendly Stringer.
Functional (4-7 internal cross-dependencies)
- fe2o3_crypto: Cryptography library including post-quantum implementations such as SABER and Dilithium.
- fe2o3_hash: Generic hashing and key derivation utilities.
- fe2o3_iop_crypto: Interoperability layer for cryptography, including AES-GCM, and Ed25519.
- fe2o3_iop_db: Interoperability layer for databases.
- fe2o3_jdat: A user-level type layer including JDAT format implementation.
- fe2o3_namex: A distributed, general purpose, universal name codex with utilities.
- fe2o3_syntax: A command parsing library for defining custom protocols.
Application Level (8+ internal cross-dependencies)
- fe2o3_o3db: The Ozone database.
- fe2o3_shield: Shield protocol implementation for secure peer-to-peer networking.
- fe2o3_steel: A web server implementation with developer mode, HTTPS, WebSocket, and SMTPS support.
- fe2o3_tui: A terminal user interface library, including the Ironic TUI.
Getting Started
Hematite is currently available via GitHub and version 0.9.0 will be available on crates.io. You can use it in several ways:
Installation
Note that Hematite is developed on linux. Compilation of C static libraries for the post quantum cryptography scheme SABRE reference implementation (for testing) requires OpenSSL. On ubuntu:
sudo apt-get install libssl-dev
From GitHub
For the latest development version, use git dependencies:
[dependencies]
oxedyne_fe2o3 = { git = "https://github.com/oxedyne-io/fe2o3" }
Local Development
To explore or contribute:
- Clone the repository:
git clone https://github.com/oxedyne-io/fe2o3.git
cd fe2o3
- Build the project:
cargo build
- Run the tests:
cargo test
Tests are grouped inside files within a tests directory for each crate, and run via the tests/main.rs file, e.g.:
cd fe2o3_core
cargo test main -- --nocapture
From crates.io
When it becomes available, you can access specific crates directly :
[dependencies]
oxedyne_fe2o3_core = "0.5.0"
oxedyne_fe2o3_jdat = "0.5.0"
Or use the workspace crate to access everything:
[dependencies]
oxedyne_fe2o3 = { version = "0.5.0", features = ["all"] }
Or just the components you need:
[dependencies]
oxedyne_fe2o3 = { version = "0.5.0", features = ["core", "jdat", "o3db"] }
Usage Examples
Check the test files in each crate's tests directory for detailed usage examples. Here's a quick start:
// Using the workspace crate
use oxedyne_fe2o3::core::prelude::*;
use oxedyne_fe2o3::jdat;
// Or individual crates
use oxedyne_fe2o3_core::prelude::*;
use oxedyne_fe2o3_jdat;
Highlights
Ozone Database
O3db aims to:
- Write data quickly to log-structured files,
- Offer a high degree of parallalism using operating system threads,
- Keep as much data in a fast volatile cache as possible,
- Provide automatic file garbage collection, and a
- Simple, familiar key-value interface.
JDAT
JDAT extends JSON to support:
- Type annotations including multiple number formats,
- Binary encoding and decoding,
- Comment support, and
- Any type as map keys.
Shield Protocol
Shield stands for Signed Hash In Every Little Datagram and provides:
- UDP-based messaging,
- Secure and authenticated peer-to-peer communication,
- Post-quantum cryptography options, and
- Mitigates DOS attacks through use of proof of work in all packets.
Namex
Namex aims to enable:
- A decentralised, versionless database for mapping 32-byte identifiers to entities
- Support for over 4 billion identifier families, each with over 65,000 variants
- JDAT-based storage format with human-readable export options
- Rich entity metadata including names, descriptions, timestamps, and cross-references
- Language-aware naming with alternative name support
- Hierarchical tagging system for flexible categorisation
Steel Web Server
Steel includes:
- A robust HTTPS server with WebSocket upgrade support
- Development mode with hot reloading and self-signed certificates
- Production mode with Let's Encrypt certificate automation
- Built-in static file serving and route configuration
- Clean separation between server and application layers
- JavaScript/TypeScript bundling and SASS compilation in development mode
Iron Interactive Console
Ironic aims to offer:
- Modal editing inspired by Vi/Vim
- Windowing system with draggable/resizable windows
- Tab-based interface for organizing content
- Customisable styles and colours
- Scrollbars and status indicators
- File tree navigation
- Support for both static and editable text views
License
See the LICENSE file for license rights and limitations.
Future Plans
- Complete initial implementation of all components,
- Stabilise APIs,
- Expand documentation,
- Open for community contributions,
- Publish to crates.io.
Contact
<hello@oxedyne.io>
| Name | Size | What |
|---|---|---|
| .claude/ | 155 bytes | 1 file |
| benches/ | 10.4 KiB | 2 files |
| dev/ | 25.6 KiB | 4 files |
| fe2o3_austenite/ | 6.6 MiB | 127 files |
| fe2o3_bot/ | 19.4 KiB | 9 files |
| fe2o3_core/ | 253 KiB | 48 files |
| fe2o3_crypto/ | 1.6 MiB | 72 files |
| fe2o3_data/ | 166 KiB | 24 files |
| fe2o3_datime/ | 1.4 MiB | 125 files |
| fe2o3_file/ | 587 KiB | 76 files |
| fe2o3_font/ | 3.6 MiB | 15 files |
| fe2o3_geom/ | 646 KiB | 258 files |
| fe2o3_graphics/ | 1.7 MiB | 275 files |
| fe2o3_hash/ | 220 KiB | 34 files |
| fe2o3_infer/ | 166 KiB | 17 files |
| fe2o3_iop_crypto/ | 41.9 KiB | 10 files |
| fe2o3_iop_db/ | 24.7 KiB | 7 files |
| fe2o3_iop_hash/ | 21.1 KiB | 9 files |
| fe2o3_jdat/ | 833 KiB | 48 files |
| fe2o3_mail/ | 102 KiB | 9 files |
| fe2o3_namex/ | 107 KiB | 15 files |
| fe2o3_net/ | 1.7 MiB | 101 files |
| fe2o3_num/ | 79.2 KiB | 12 files |
| fe2o3_o3db_sync/ | 2.1 MiB | 149 files |
| fe2o3_ore/ | 1.0 MiB | 30 files |
| fe2o3_pearlite/ | 145 KiB | 20 files |
| fe2o3_sbj/ | 12.8 MiB | 211 files |
| fe2o3_shield/ | 434 KiB | 51 files |
| fe2o3_social/ | 90.5 KiB | 8 files |
| fe2o3_stds/ | 234 KiB | 9 files |
| fe2o3_steel/ | 2.5 MiB | 114 files |
| fe2o3_syntax/ | 5.0 MiB | 28 files |
| fe2o3_sys/ | 47.8 KiB | 13 files |
| fe2o3_test/ | 40.6 KiB | 9 files |
| fe2o3_text/ | 8.7 MiB | 250 files |
| fe2o3_tui/ | 456 KiB | 60 files |
| fe2o3_units/ | 79.7 KiB | 14 files |
| img/ | 10.3 KiB | 3 files |
| src/ | 2.0 KiB | 2 files |
| tests/ | 1.0 KiB | 1 file |
| .gitignore | 1.6 KiB | |
| .oreignore | 1.9 KiB | |
| Cargo.lock | 167 KiB | |
| Cargo.toml | 4.2 KiB | |
| LICENSE | 205 bytes | |
| LICENSE-APACHE | 11.1 KiB | |
| LICENSE-BSD | 1.3 KiB | |
| PROGRESS.md | 3.6 KiB | |
| README.md | 8.6 KiB | |
| build_docs | 248 bytes | executable |
| commit_all | 210 bytes | executable |
| fe2o3_overview.md | 28.1 KiB | |
| rustfmt.toml | 3.1 KiB |
2283 live files at the head of the history, holding 53.4 MiB.