• This repository has been archived on 29/Jun/2022
  • Stars
    star
    592
  • Rank 75,570 (Top 2 %)
  • Language
    JavaScript
  • License
    Other
  • Created over 8 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Content-addressed, authenticated, immutable data structures

!!!

This document has moved.

You'll now find information like this in the ipld/ipld meta-repo, and published to the web at https://ipld.io/ .

All documentation, fixtures, specifications, and web content is now gathered into that repo. Please update your links, and direct new contributions there.

!!!


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 programmatic 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.

More Repositories

1

ipld

InterPlanetary Linked Data
Nunjucks
1,261
star
2

go-car

A content addressible archive utility
Go
148
star
3

libipld

Rust IPLD library
Rust
135
star
4

go-ipld-prime

Golang interfaces for the IPLD Data Model, with core Codecs included, IPLD Schemas support, and some handy functional transforms tools.
Go
132
star
5

explore.ipld.io

Explore the Merkle Forest from the comfort of your browser
JavaScript
122
star
6

js-ipld

The JavaScript Implementation of IPLD
JavaScript
119
star
7

js-ipld-dag-pb

JavaScript Implementation of the MerkleDAG Nodes with Protobuf.
JavaScript
69
star
8

js-ipld-dag-cbor

JavaScript implementation of the IPLD dag-cbor format.
JavaScript
53
star
9

js-car

Content Addressable aRchive format reader and writer for JavaScript
JavaScript
42
star
10

js-ipld-ethereum

JavaScript Implementation of All Ethereum IPLD formats
JavaScript
40
star
11

java-cid

Java implementation of Content Identifier
Java
39
star
12

js-ipld-graph-builder

Provides an efficient way to build and manipulate IPLD DAGs as JSON
JavaScript
38
star
13

py-cid

Self-describing content-addressed identifiers for distributed systems implementation in Python
Python
36
star
14

js-ipld-git

JavaScript
34
star
15

go-ipld-deprecated

Golang IPLD Dev Entry Point Repo
Go
32
star
16

docs

All you need to know about IPLD
JavaScript
31
star
17

ipld-examples

30
star
18

interface-ipld-format

A interface you can follow to implement a valid IPLD format, resolvable through the IPLD Resolver (available in IPFS)
29
star
19

js-dag-cbor

dag-cbor codec for IPLD
JavaScript
27
star
20

js-dag-ucan

UCAN codec for IPLD
JavaScript
22
star
21

website

Official website for IPLD
HTML
22
star
22

go-ipld-btc

ipld handlers for bitcoin
Go
22
star
23

legacy-unixfs-v2

This repository contains deprecated / legacy Unixfs "V2" discussions.
21
star
24

go-ipldtool

A fine gadget
Go
17
star
25

frisbii

An experimental minimal IPLD data provider for the IPFS network
Go
17
star
26

edelweiss

Decentralized Protocol Compiler
Go
16
star
27

js-dag-json

JSON Directed Acyclic Graph for IPLD
JavaScript
15
star
28

go-storethehash

Storage for hashes, targeted at content addressable systems
Go
13
star
29

js-ipld-block

Implementation of the Block data structure in JavaScript.
JavaScript
13
star
30

js-ipld-bitcoin

JavaScript implementation of Bitcoin IPLD formats
JavaScript
12
star
31

js-dag-pb

An implementation of the DAG-PB spec for JavaScript (for use with multiformats or @ipld/block)
JavaScript
12
star
32

js-ipld-cli

Interact with IPLD on the command line
JavaScript
12
star
33

go-ipld-graphql

Graphql queries over IPLD schemas
Go
11
star
34

js-ipld-eth-block

JavaScript Implementation of the IPLD format - Ethereum Block
JavaScript
11
star
35

js-ipld-zcash

JavaScript implementation of Zcash IPLD formats
JavaScript
11
star
36

py-ipld-dag

Merkle DAG implementation for IPLD in Python
Python
11
star
37

js-ipld-schema

IPLD Schema Implementation: parser and utilities
JavaScript
11
star
38

roadmap

IPLD Project Roadmap
10
star
39

js-examples

JavaScript IPLD Examples
JavaScript
9
star
40

go-ipld

Golang IPLD Dev Entry Point Repo
9
star
41

wasm-ipld

Tools and examples of IPLD codecs and ADLs in WASM callable from hosts
Rust
8
star
42

research

Research repo for the IPLD github org
TeX
8
star
43

js-ipld-torrent-file

JavaScript implementation of the Torrent IPLD format
8
star
44

serde_ipld_dagcbor

DAG-CBOR implementation for Serde
Rust
8
star
45

go-codec-dagpb

An implementation of the DAG-PB spec for Go
Go
7
star
46

java-ipld-cbor

A Java implementation of the IPLD cbor format
Java
7
star
47

codec-fixtures

Fixtures for testing standard IPLD codecs
JavaScript
7
star
48

js-unixfs

UnixFS Directed Acyclic Graph for IPLD
JavaScript
7
star
49

js-ipld-stack

EXPERIMENTAL: Next JS IPLD authoring stack
JavaScript
7
star
50

team-mgmt

IPLD Team Planning, Management & Coordination threads
6
star
51

js-ipld-selector

JavaScript
6
star
52

eth-hash-to-cid

Utility to convert ethereum hashes to CID (Content IDentifier)
JavaScript
6
star
53

js-block

IPLD Block Interface
JavaScript
6
star
54

js-ipld-raw

JavaScript implementation of the IPLD raw format.
JavaScript
5
star
55

js-printify

Convert a decoded IPLD value to a colored printable string
JavaScript
5
star
56

js-unixfsv2

IPLD unixfs-v2 Implementation
JavaScript
4
star
57

go-ipld-adl-hamt

Go
4
star
58

replication

Discussions and proposals regarding IPLD replication.
4
star
59

js-bitcoin

JavaScript Bitcoin data multiformats codecs and utilities for IPLD
JavaScript
4
star
60

go-ipld-schema

Implementation of an ipld schema parser
Go
4
star
61

go-datalark

Use IPLD from Starlark -- read and write data, and play programmagically in an interpreted language!
Go
4
star
62

react-ipld

React components for IPLD
JavaScript
4
star
63

rust-ipld-core

This crate provides core types for interoperating with IPLD.
Rust
4
star
64

js-composites

WIP: IPLD Composites
JavaScript
4
star
65

js-ipld-eth-tx-trie

JavaScript
3
star
66

js-ipld-eth-tx

JavaScript
3
star
67

serde_ipld_dagjson

IPLD DAG-JSON support for Serde.
Rust
3
star
68

ipld-in-memory

🧠 IPLD in your RAM
JavaScript
3
star
69

cid-cbor

Spec for Content Identifiers (CIDs) in CBOR for IANA CBOR Tag registry
3
star
70

js-schema-gen

Generate type interfaces from IPLD Schema
JavaScript
2
star
71

js-iq

Experimental: IPLD Query
JavaScript
2
star
72

js-ipld-torrent-info

JavaScript implementation of the Torrent File IPLD format
2
star
73

js-codec-interface

IPLD Codec Interface
JavaScript
2
star
74

go-fixtureplate

Tools to generate and inspect IPLD data to assist in testing
Go
2
star
75

js-ipld-bencode

JavaScript implementation of the bencode IPLD format
2
star
76

go-walker

Walker provides an alternate, parellizable and controllable way to execute selectors
Go
2
star
77

js-schema-validation

Validate decoded data against an IPLD Schema
JavaScript
1
star
78

js-datastore-car

Content Addressable aRchive format reader and writer
JavaScript
1
star
79

auto

Org level automation.
JavaScript
1
star
80

js-ipld-garbage

Generate garbage objects conformant with the IPLD Data Model
JavaScript
1
star
81

grants

IPLD Grants for Research and Development
1
star
82

go-selector-store

A simple store to record selector traversals
Go
1
star
83

rust-ipld-dagpb

IPLD DAG-PB codec.
Rust
1
star
84

github-mgmt

TypeScript
1
star