All Projects → ipld → Specs

ipld / Specs

Licence: other
Content-addressed, authenticated, immutable data structures

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Specs

hexadb
A schemaless graph database based on RocksDb
Stars: ✭ 33 (-93.88%)
Mutual labels:  graph, linked-data
Cayley
An open-source graph database
Stars: ✭ 14,020 (+2501.11%)
Mutual labels:  graph, linked-data
Rdflib
RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information.
Stars: ✭ 1,584 (+193.88%)
Mutual labels:  graph, linked-data
Rdf
RDF.rb is a pure-Ruby library for working with Resource Description Framework (RDF) data.
Stars: ✭ 353 (-34.51%)
Mutual labels:  graph, linked-data
Diffuse
A music player that connects to your cloud/distributed storage.
Stars: ✭ 517 (-4.08%)
Mutual labels:  ipfs
Pgf
A Portable Graphic Format for TeX
Stars: ✭ 504 (-6.49%)
Mutual labels:  graph
Billboard.js
📊 Re-usable, easy interface JavaScript chart library based on D3.js
Stars: ✭ 5,032 (+833.58%)
Mutual labels:  graph
Things.sh
Simple read-only comand-line interface to your Things 3 database
Stars: ✭ 492 (-8.72%)
Mutual labels:  graph
Opencypher
Specification of the Cypher property graph query language
Stars: ✭ 534 (-0.93%)
Mutual labels:  graph
Madge
Create graphs from your CommonJS, AMD or ES6 module dependencies
Stars: ✭ 5,635 (+945.45%)
Mutual labels:  graph
John
John the Ripper jumbo - advanced offline password cracker, which supports hundreds of hash and cipher types, and runs on many operating systems, CPUs, GPUs, and even some FPGAs
Stars: ✭ 5,656 (+949.35%)
Mutual labels:  hash
Graph Visualization
3D graph visualization with WebGL / Three.js
Stars: ✭ 507 (-5.94%)
Mutual labels:  graph
Chat
基于自然语言理解与机器学习的聊天机器人,支持多用户并发及自定义多轮对话
Stars: ✭ 516 (-4.27%)
Mutual labels:  graph
Littleballoffur
Little Ball of Fur - A graph sampling extension library for NetworKit and NetworkX (CIKM 2020)
Stars: ✭ 505 (-6.31%)
Mutual labels:  graph
Ttyplot
a realtime plotting utility for terminal/console with data input from stdin
Stars: ✭ 532 (-1.3%)
Mutual labels:  graph
Securitydriven.inferno
✅ .NET crypto done right. Professionally audited.
Stars: ✭ 501 (-7.05%)
Mutual labels:  hash
Gonum
Gonum is a set of numeric libraries for the Go programming language. It contains libraries for matrices, statistics, optimization, and more
Stars: ✭ 5,384 (+898.89%)
Mutual labels:  graph
Ipfs Search
Search engine for the Interplanetary Filesystem.
Stars: ✭ 519 (-3.71%)
Mutual labels:  ipfs
Aws Security Viz
Visualize your aws security groups.
Stars: ✭ 511 (-5.19%)
Mutual labels:  graph
Diagram
☊ Tool for making node graphs. Inspired by dependency graph. Used mainly for automation services 📈
Stars: ✭ 510 (-5.38%)
Mutual labels:  graph

IPLD Specifications

The goal of IPLD is to enable decentralized data-structures that are universally addressable and linkable which in turn will enable more decentralized applications. These data-structures allow us to do for data what URLs and links did for HTML web pages. Read more about the principles that are guiding the ongoing development of IPLD in IPLD Foundational Principles.

IPLD is not a single specification, it is a set of specifications. Many of the specifications in IPLD are inter-dependent.

What is IPLD?

IPLD Blocks

The block layer encompasses all content addressed block formats and specifies how blocks are addressed, how they self-describe their codec for encoding/decoding, and how blocks link between each other.

IPLD blocks alone do not define data structures or types, although many codecs may convert these formats into native types, there are no type requirements or assurances about types at the block layer.

Documents:

Concept: Block block-layer/block.md
Concept: Content Addressability concepts/content-addressability.md
Concept: Multihash block-layer/multihash.md
Specification: Content Addressable aRchives (CAR / .car) block-layer/content-addressable-archives.md
Specification: Graphsync block-layer/graphsync/graphsync.md

IPLD Codecs

Codecs serve as an intermediary between raw bytes and the IPLD Data Model. They determine how data is converted to and from the Data Model.

Codecs vary in the completeness in which they can represent the IPLD Data Model. DAG-CBOR and DAG-JSON are native IPLD codecs that currently enable the most complete form of the Data Model. Their base codecs, CBOR and JSON, are also valid IPLD codecs, are unable to represent some Data Model kinds on their own, in particular the Link (CID) kind (and Bytes for JSON), so DAG-JSON and DAG-CBOR provide mechanisms to represent these kinds.

IPLD can operate across a broad range of content-addressable codecs, including Git, Ethereum, Bitcoin, and more. DAG-PB is a legacy IPLD format that is still actively used for representing file data for IPFS.

Concept: Serialization and Formats block-layer/serialization-and-formats.md
Specification: CIDs block-layer/CID.md
Specification: DAG-CBOR block-layer/codecs/dag-cbor.md
Specification: DAG-JSON block-layer/codecs/dag-json.md
Specification: DAG-PB block-layer/codecs/dag-pb.md
Specification: DAG-JOSE block-layer/codecs/dag-jose.md

The IPLD Data Model

The Data Model describes a set of base required types to be implemented by a subset of IPLD codecs.

With these basic types authors can create various single-block data structures which can be read with predictable paths and selectors.

With just the data model, several data structures can be authored and put into a single block. These data structures can also link to one another, but a single collection (Map or List) cannot be spread across many blocks with only the Data Model.

Since different systems and transports may impose block size limits (often 2mb or more) in order to control memory usage, larger collections need to be sharded over many blocks at the Schema Layer.

Documents:

Specification: IPLD Data Model data-model-layer/data-model.md
Specification: IPLD Paths data-model-layer/paths.md
Specification: IPLD Selectors selectors/selectors.md

Schemas and Advanced Data Layouts

IPLD Schemas define a mapping from the Data Model to instantiated data structures comprising complex layouts. Schemas add the ability to extend the IPLD Data Model to the wide variety of types required for typical programatic interaction with a data source without the need to implement custom translation abstractions.

Schemas will also serve as an enabling layer for complex multi-block data structures via Advanced Data Layouts by providing stability and consistency of data model use within individual blocks and defined interaction points for the logic required for building and interacting with advanced data layouts, such as multi-block Maps, Lists and Sets.

Documents:

Concept: IPLD Multi-block Collections data-structures/multiblock-collections.md
Specification: IPLD Schemas schemas/README.md
Specification: HashMap data-structures/hashmap.md
Specification: FlexibleByteLayout data-structures/flexible-byte-layout.md

Specification document status

Specification documents in this repository fit into one of two categories and have one of three possible statuses:

  • Prescriptive
    • Exploratory
    • Draft
    • Final
  • Descriptive
    • Draft
    • Final

Prescriptive specifications are intended to describe future implementations or, in some cases, changes to existing implementations.

Descriptive specifications describe existing behavior. In many cases these specifications are not intended to drive new implementations and are only written to understand existing behaviors.

Documents labelled "Specification" in this repository will also be labelled with a descriptor that indicates the category and status. e.g. "Status: Prescriptive - Draft" or "Status: Descriptive - Final".

Design documentation & Library recommendations

Included in this repository are some documents which chronicle our process in developing these specs, as well as some documents which are advisory to library authors (but not specifications, per se):

These documents may be useful to read for those who want to participate more deeply in the design and specification processes (as well as implementation processes!) of IPLD.

Contributing & Discussion

Suggestions, contributions, criticisms are welcome.

Discussion of specifications happens in this repository's issues or via pull request. Discussion of IPLD more generally happens in the IPLD repository.

Check out our contributing document for more information on how we work, and about contributing in general. Please be aware that all interactions related to IPLD are subject to the IPFS Code of Conduct.

Governance

All changes to documents must take place via pull request.

Pull requests are governed by different rules depending on the document type and status of that document:

Specifications:

  • Exploratory Stage
    • Authors can merge changes into exploratory specifications at their own discretion
    • Exploratory specifications live in the design directory until they reach the draft stage. Specs names should include an alternative friendly naming convention (-A, -B, etc) while in this stage.
  • Draft Stage
    • Authors must attempt to reach a consensus between all active participants before a merge
    • If no objections are raised in a 48 hours period changes can be merged
    • If objections cannot be resolved the change can be voted on by the IPLD Team
  • Final Stage
    • Improvements that have a consensus can be merged
    • Changes to behavior should not be merged unless absolutely necessary and agreed upon by a vote of the IPLD Team

Concepts and other documents (including README.md):

  • Authors must attempt to reach a consensus between all active participants before a merge
  • If no objections are raised in a 48 hours period changes can be merged
  • If objections cannot be resolved the change can be voted on by the IPLD Team

Glossary

  • DAG: Short for "Directed Acyclic Graph." It's a tree where two branches can point to the same sub-branch, but only in one direction so there's no possibility of recursion.

IPLD Team

The IPLD Team consists of currently active IPLD developers.

License

This repository is only for documents. All of these are licensed under the CC-BY-SA 3.0 license, © 2016 Protocol Labs Inc.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].