![Crates.io Version](https://img.shields.io/crates/v/tribles) ![docs.rs](https://img.shields.io/docsrs/tribles) ![Discord Shield](https://discordapp.com/api/guilds/795317845181464651/widget.png?style=shield) # About > The real tragedy would be if people forgot that you can have new ideas about programming models in the first place.
- [Bret Victor](https://worrydream.com/dbx/) The [trible.space](https://trible.space) is our answer to the question "what if we re-invented data storage from first principles". It is a knowledge graph standard for blob storage that provides metadata management capabilities similar to file- and version-control-systems with the queryability and convenience of an embedded database. We hope to overcome the shortcomings of previous semantic web/triple-store technologies, through simplicity, easy canonicalization and cryptographic identifiers, clean distributed semantics and lightweight libraries empowered by idiomatic host-language capabilities. By reifying most concepts and operations as first class citizens, we hope to provide a toolkit that can be flexibly combined to serve a variety of knowledge representation, database, and data exchange use cases. # Differentiators - A novel family of worst case optimal join algorithms combined with a series of tailored datastructures obviates manual query-tuning. - Optimizer-free query engine design, providing predicatble performance and enabling single digit μs latency. - Fast in-memory datasets with cheap COW semantics (i.e. persistent immutability). - Fast set operations over in-memory datasets. - Separation of names and identities. - Explicit abstract datatypes and concrete layouts. - Durable compressed fully queryable zero-copy archives, based on succinct datastructures. - Self describing and documenting. - Eventually consistent distributed semantics based on CRDTs and CALM, providing build-in version control. - Delta-Queries between arbitrary datasets. - Compile-time typed queries and dataset construction. - Low overall complexity. If you feel that stuff is obvious, maybe a bit boring, and that you could have come up with it yourself, then we achieved our goal. # Community If you have any questions or want to chat about graph databases hop into our [discord](https://discord.gg/v7AezPywZS). # Example ```rust use tribles::prelude::*; use tribles::prelude::valueschemas::*; use tribles::prelude::blobschemas::*; NS! { pub namespace literature { "8F180883F9FD5F787E9E0AF0DF5866B9" as author: GenId; "0DBB530B37B966D137C50B943700EDB2" as firstname: ShortString; "6BAA463FD4EAF45F6A103DB9433E4545" as lastname: ShortString; "A74AA63539354CDA47F387A4C3A8D54C" as title: ShortString; "76AE5012877E09FF0EE0868FE9AA0343" as height: FR256; "6A03BAF6CFB822F04DA164ADAAEB53F6" as quote: Handle; } } fn main() -> std::io::Result<()> { let mut blobs = BlobSet::new(); let mut set = TribleSet::new(); let author_id = ufoid(); set.union(literature::entity!(&author_id, { firstname: "Frank", lastname: "Herbert", })); set.union(literature::entity!({ title: "Dune", author: &author_id, quote: blobs.insert("Deep in the human unconscious is a \ pervasive need for a logical universe that makes sense. \ But the real universe is always one step beyond logic."), quote: blobs.insert("I must not fear. Fear is the \ mind-killer. Fear is the little-death that brings total \ obliteration. I will face my fear. I will permit it to \ pass over me and through me. And when it has gone past I \ will turn the inner eye to see its path. Where the fear \ has gone there will be nothing. Only I will remain.") })); let title = "Dune"; for (_, f, l, q) in find!(ctx, (author: (), first: String, last: Value<_>, quote), literature::pattern!(ctx, &set, [ { author @ firstname: first, lastname: last }, { title: (title), author: author, quote: quote }])) { let q: &str = blobs.get(q).unwrap(); println!("'{q}'\n - from {title} by {f} {}.", l.from_value::<&str>()) } Ok(()) } ```