Atomic Data is a specification for sharing, modifying and modeling data.
It uses links to connect pieces of data, and therefore makes it easier to connect datasets to each other - even when these datasets exist on separate machines.
Atomic Data is especially suitable for knowledge graphs, distributed datasets, semantic data, p2p applications, decentralized apps and linked open data. It is designed to be highly extensible, easy to use, and to make the process of domain specific standardization as simple as possible.
Atomic Data is Linked Data, as it is a more strict subset of RDF.
It is typed (you know if something is a
URL, etc.) and extensible through Atomic Schema, which means that you can define your own Classes, Properties and Datatypes.
The default serialization format for Atomic Data is JSON-AD, which is simply JSON where each key is a URL of an Atomic Property.
These Properties are responsible for setting the datatype (to ensures type-safety) and setting
shortnames (which help to keep names short) and descriptions (which provide semantic explanations of what a property should be used for).
Atomic Data has a standard for communicating state changes called Commits. These Commits are signed using cryptographic keys, which ensures that every change can be audited. Commits are also used to construct a history of versions.
Agents are Users that enable authentication. Atomic Data can be traversed using Paths, or queried using Collections. Hierarchies are used for authorization and keeping data organized. Invites can be used to easily create new users and provide them with rights.
Note that Atomic Data is a highly layered specification, which means that you are free to take whatever you like, although some
If you want to read more about how Atomic Data works - read on. If you'd rather play and discover for yourself, play with the existing tooling:
- Browser app atomic-data-browser (demo on atomicdata.dev)
- Build a react app using typescript & react libraries. Start with the react template on codesandbox
- Host your own atomic-server (powers atomicdata.dev, run with
docker run -p 80:80 -p 443:443 -v atomic-storage:/atomic-storage joepmeneer/atomic-server)
- Discover the command line tool: atomic-cli (
cargo install atomic-cli)
- Use the Rust library: atomic-lib
Make sure to join our Discord if you'd like to discuss Atomic Data with others.
This is written mostly as a book, so reading it in the order of the Table of Contents will probably give you the best experience. That being said, feel free to jump around - links are often used to refer to earlier discussed concepts. If you encounter any issues while reading, please leave an issue on Github. Use the arrows on the side / bottom to go to the next page.
Keep in mind that none of the Atomic Data project has reached a v1, which means that breaking changes can happen.