ipld

what's up
what's new
what's next

quick recap

  • IPLD stands for InterPlanetary Linked Data
     
  • IPLD grew out of IPFS
     
  • The goal is: specs (and libraries) that make developing interoperable, decentralized applications easier and better.
  • IPLD stands for InterPlanetary Linked Data
     
  • IPLD grew out of IPFS
     
  • The goal is: specs (and libraries) that make developing interoperable, decentralized applications easier and better.

quick recap

  • IPLD stands for InterPlanetary Linked Data
     
  • IPLD grew out of IPFS
     
  • The goal is: specs (and libraries) that make developing interoperable, decentralized applications easier and better.

a million years ago

IPFS is just[*] a thing that stores files.

 

IPLD started as being just dag-pb
(which stores info in a certain way that was really geared towards files... lots of blobs and links,

structure?  not so much...)

[*] - never say "just" about a decentralized application; it's not easy

IPFS is just[*] a thing that stores files.

 

IPLD started as being just dag-pb
(which stores info in a certain way that was really geared towards files... lots of blobs and links,

structure?  not so much...)

a million years ago

IPFS is just[*] a thing that stores files.

 

IPLD started as being just dag-pb
(which stores info in a certain way that was really geared towards files... lots of blobs and links,

structure?  not so much...)

a Data Model was formed

IPLD is about structured data.
 

list|map|string|int|bool|float|null|bytes|link


No longer limited to one particular set of ideas
which focuses only on filesystems and opaque blobs!

 

IPLD is about structured data.
 

list|map|string|int|bool|float|null|bytes|link


No longer limited to one particular set of ideas
which focuses only on filesystems and opaque blobs!

 

a Data Model was formed

IPLD is about structured data.
 

list|map|string|int|bool|float|null|bytes|link

IPLD libraries traverse this structure.

Think of it like an AST...
without the 'S', because it's codec-agnostic.

 

IPLD is about structured data.
 

list|map|string|int|bool|float|null|bytes|link

IPLD libraries traverse this structure.

Think of it like an AST...
without the 'S', because it's codec-agnostic.

 

what can do with Data Model?

traversal

selectors

advanced layouts

schemas

....

your application

selectors

Selectors are machinery for traversing a tree and "selecting" data that matches.

Create them with just more IPLD!

Built for limited power; can be evaluated in low-trust environments.

(Powers new data transports like Graphsync!)

{
  "description": "Traverse selecting fields",
  "ipld": {
    "bar": false,
    "foo": true,
    "some_other": {}
  },
  "selector": {
    "f": {
      "f>": {
        "foo": {".": {}},
        "bar": {".": {}}
      }
    }
  },
  "expect_visit": [
    {
      "path": "",
      "node": {"map": null},
      "matched": false
    },
    {
      "path": "foo",
      "node": {"bool": true},
      "matched": true
    },
    {
      "path": "bar",
      "node": {"bool": false},
      "matched": true
    }
  ]
}

Selectors are machinery for traversing a tree and "selecting" data that matches.

Create them with just more IPLD!

Built for limited power; can be evaluated in low-trust environments.

(Powers new data transports like Graphsync!)

ADLs

Advanced Data Layouts

 

tl;dr: Sharding for everyone!

Small plugins that make transform some Data Model (including multiple nodes, or multiple blocks) into other Data Model.

Unixfsv1 had this via magic
(e.g. directories in the web gateway did this for you.)

Now we're bringing it to everyone,

ready to use wherever you need it in your application data structures!

Advanced Data Layouts

 

tl;dr: Sharding for everyone!

Small plugins that make transform some Data Model (including multiple nodes, or multiple blocks) into other Data Model.

Unixfsv1 had this via magic
(e.g. directories in the web gateway did this for you.)

Now we're bringing it to everyone,

ready to use wherever you need it in your application data structures!

🎉

Selectors, etc, work transparently over this.

Selectors, etc, work transparently over this.

🎉

ADLs

Generic Data Model trees are great...
But what happens when we want some more leverage for development?


Everybody who's written a data validator before knows there's a lot of work there.  Type systems are great tools for getting the computer to do the work for you!

Generic Data Model trees are great...
But what happens when we want some more leverage for development?


Everybody who's written a data validator before knows there's a lot of work there.  Type systems are great tools for getting the computer to do the work for you!

IPLD Schemas!

-> can have structs, unions, enums, etc here (in addition to the maps and lists and strings etc already in the DM)

- Type clauses describe the semantic behaviors

- Type clauses describe the semantic behaviors

- Type clauses describe the semantic behaviors

-> can have structs, unions, enums, etc here (in addition to the maps and lists and strings etc already in the DM)

-> can have structs, unions, enums, etc here (in addition to the maps and lists and strings etc already in the DM)

- Representation clauses describe how to transcribe this information into DM (and thence, codecs!)

- Representation clauses describe how to transcribe this information into DM (and thence, codecs!)

- Representation clauses describe how to transcribe this information into DM (and thence, codecs!)

-> separately tunable!

-> separately tunable!

-> separately tunable!

-> separately tunable!

-> separately tunable!

IPLD Schemas!

- Types also have a Data Model interface.

  This is independent of the representation used when wrangling serial data.

  -> means: you can still run Selectors, traversals, and other generic code, also against data processed with Schemas!

- Types also have a Data Model interface.

  This is independent of the representation used when wrangling serial data.

  -> means: you can still run Selectors, traversals, and other generic code, also against data processed with Schemas!

- Types also have a Data Model interface.

  This is independent of the representation used when wrangling serial data.

  -> means: you can still run Selectors, traversals, and other generic code, also against data processed with Schemas!

IPLD Schemas!

Use Schemas
wherever you would... normally use schemas.

Use Schemas
wherever you would... normally use schemas.

Use Schemas
wherever you would... normally use schemas.

IPLD Schemas!

Schemas are optional.

`[1,2]` matches `type Whee [Int]`

 

`[1,2]` also matches `type Wow struct {a Int, b Int} representation tuple`.

Schemas are optional.

Schemas can also be used for feature detection.

Schemas can also be used for feature detection.

`[1,2]` matches `type Whee [Int]`

 

`[1,2]` also matches `type Wow struct {a Int, b Int} representation tuple`.

`[1,2]` matches `type Whee [Int]`

 

`[1,2]` also matches `type Wow struct {a Int, b Int} representation tuple`.

IPLD Schemas!

We have syntax highlighters!

We have syntax highlighters!

We have syntax highlighters!

(courtesy @rvagg)

IPLD Schemas!

We have codegen!

(golang) (in alpha)
((come try it!))

We have codegen!

(golang) (in alpha)
((come try it!))

We have codegen!

(golang) (in alpha)
((come try it!))

We have codegen!

(golang) (in alpha)
((come try it!))

We have codegen!

(golang) (in alpha)
((come try it!))

IPLD Schemas!

We have schema auto-derivers.
(this is so cool I don't even understand it)

(courtesy @rvagg)

IPLD Schemas!

We have bridges to GraphQL!  (Why not!)

We have bridges to GraphQL!  (Why not!)

We have bridges to GraphQL!  (Why not!)

We have bridges to GraphQL!  (Why not!)

We have bridges to GraphQL!  (Why not!)

(real filecoin data, queriable -- courtesy @willscott)

Come build applications with IPLD!

ipld

https://ipld.io

https://github.com/ipld/*

https://github.com/ipld/specs

irc: #ipld on freenode
matrix: #ipld:matrix.org

https://ipld.io

https://github.com/ipld/*

https://github.com/ipld/specs

irc: #ipld on freenode
matrix: #ipld:matrix.org

your host:

   @warpfork

your host:

   @warpfork