what's up
what's new
what's next
quick recap
quick recap
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
IPLD is about structured data.
list|map|string|int|bool|float|null|bytes|link
a Data Model was formed
IPLD is about structured data.
list|map|string|int|bool|float|null|bytes|link
IPLD is about structured data.
list|map|string|int|bool|float|null|bytes|link
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!
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