A presentation at Speakeasy JS by Brooklyn Zelenka
πWebNativeπ How to put a full stack directly in the browser β¨Speakeasy JSπ»
Or:
Or: The Beginnings of a WebOS
Or: The Beginnings of a WebOS Wait, no
Or:
Or: A Browser-Based File System, Location Independence, User Controlled Data, Self-Modifying Apps, & Serverless Auth β¦plus some surprising things weβve learned along the way
Brooklyn Zelenka @expede
Brooklyn Zelenka @expede β’ CTO at Fission β’ https://fission.codes β’ 100% FOSS β’ Obsoleting backends one function at a time β’ PLT, VMs, Distributed Systems, Prev. ETH Core β’ Founded Vancouver FP, Code & Co ee YVR ff β’ FOSS β Witchcraft, Exceptional, Rescue, &c
shop.fission.codes Code: SPEAKEASYJS
Stickers! shop.fission.codes Code: SPEAKEASYJS
This is the JavaScript meetup for π₯Ό mad science, π§ hacking, and π§ͺ experiments SpeakeasyJS Homepage
This is the JavaScript meetup for π₯Ό mad science, π§ hacking, and π§ͺ experiments SpeakeasyJS Homepage
This is the JavaScript meetup for β π₯Ό mad science, β π§ hacking, and β π§ͺ experiments π SpeakeasyJS Homepage
The Problem(s) Starting Conditions π¦
WebNative π The Web Today
WebNative π The Web Today π π₯
WebNative π The Web Today π π₯ π’
WebNative π The Web Today π π₯ π’ π
WebNative π The Web Today π π₯ π’ β π
WebNative π The Web Today π π₯ π’ β πͺ π
WebNative π The Web Today π π₯ π’ β πͺ π
WebNative π The Web Today π π π π₯ π’ π₯ π₯ β πͺ π
WebNative π The Web Today π π π π₯ π’ π₯ π₯ β πͺ π π
WebNative π The Web Today π π π π₯ π₯ π₯ π β β β π π π π π π
WebNative π What We Actually Want π π₯ π π₯ π π
WebNative π What We Actually Want π π₯ π π₯ π π
β¦and so it was for many yearsβ¦
β¦and so it was for many yearsβ¦ π¦βππΎπ°π’π
Is the way we do things today the βone true wayβ? Will we be doing things this way in 2025? 2050? 2100? Does knowledge always progress from good to better? Are we stuck in a local maxima?
WebNative π Natural Consequences β’ Server-focus β’ Must learn more of stack β’ Single source of truth β’ DevOps, Docker, k8s β’ Latency assumption β’ FE deeply concerned with data sync
WebNative π What Even is a βServerβ?
WebNative π What Even is a βServerβ?
What if we turn the web architecture Inside Out? π
WebNative π Like Nativeβ¦ but for the Web π§
WebNative π Like Nativeβ¦ but for the Web π§
WebNative π Like Nativeβ¦ but for the Web π§
WebNative π Like Nativeβ¦ but for the Web π§
WebNative π Like Nativeβ¦ but for the Web π§
WebNative π Like Nativeβ¦ but for the Web π§
WebNative π Like Nativeβ¦ but for the Web π§
WebNative π New Assumptions, New Approach β’ 2021 != 1991 β’ Donβt need to rely on client/server β’ Browsers are super powerful β’ UI & data = only essential parts β’ Post-serverless, edge++ β’ New primitives (βgame changersβ) β’ Location independent data π β’ Browser-based encryption πͺ β’ Consistency models (OT, CRDTs, RAFT) π€ β’ i.e. State transfer -> state synchronization β’ New features naturally fall out of the architecture β’ Recognize that weβre increasingly connected/networked ffi β’ Local-first means network e cient (in the normal case)
WebNative π Bootstrapping from Browsers APIs β’ WebCrypto API β’ Web Workers β’ Service Workers β’ IndexedDB β’ PWA & Web App Manifest
WebNative π How Many Steps Can We Skip?
WebNative π How Many Steps Can We Skip? Users π¨π«π©ππ§βπ· Developer π©π»
WebNative π How Many Steps Can We Skip? Users π¨π«π©ππ§βπ· Browser π₯ REST / JSON-RPC / GraphQL β Server β Data Store π DevOps π€ Developer π©π»
WebNative π How Many Steps Can We Skip? Users π¨π«π©ππ§βπ· Browser π₯ REST / JSON-RPC / GraphQL β Current Server β Data Store π DevOps π€ Developer π©π»
WebNative π How Many Steps Can We Skip? Users π¨π«π©ππ§βπ· Browser π₯ REST / JSON-RPC / GraphQL β Current Server β Data Store π DevOps π€ Developer π©π» Users π¨π«π©ππ§βπ· Browser π₯ WebNative π Developer π©π»
WebNative π How Many Steps Can We Skip? Users π¨π«π©ππ§βπ· Browser π₯ REST / JSON-RPC / GraphQL β Current Server β Data Store π DevOps π€ Developer π©π» Users π¨π«π©ππ§βπ· Browser π₯ WebNative π Developer π©π» Proposed
WebNative π How Many Steps Can We Skip? Users π¨π«π©ππ§βπ· Browser π₯ Current Users π¨π«π©ππ§βπ· Browser π₯ WebNative π REST / JSON-RPC / GraphQL β Developer π©π» Server β Quick iteration π Data Store π DevOps π€ Developer π©π» Focus on end users π Lower barrier to entry π¨π¨ Proposed
WebNative π Constraints β’ Vanilla browser, no plugins β’ UX as good or better than existing β’ Literally no distinction between local and production β’ No server required, put it in the browser β’ User controlled identity & data β’ Open to participation β’ Accessible o ine ffl β’ At least as secure as existing apps
WebNative π Mini-Demo
WebNative π Mini-Demo
WebNative π Code
WebNative π Code Auth doesnβt even leave your browser π
WebNative π Code
If React is βjust the view layerβ, then WebNative is βjust the data layerβ It turns out the data layer touches lots of other things
WebNative π Stack
WebNative π Stack 1st & 3rd Party Devβs App Business Logic & View
WebNative π Stack 1st & 3rd Party Devβs App Business Logic & View API Platform Abstractions WebNative SDK
WebNative π Stack β¬ Apps β¬ Core Technology 1st & 3rd Party Devβs App Business Logic & View API Platform Abstractions WebNative SDK
WebNative π Stack 1st & 3rd Party Devβs App Business Logic & View API Platform Abstractions WebNative SDK β¬ Apps β¬ Core Technology Command/Mutation UCAN Auth & ID Read/Query Cryptree Identity did:key
WebNative π Stack 1st & 3rd Party Devβs App Business Logic & View API Platform Abstractions WebNative SDK β¬ Apps β¬ Core Technology Command/Mutation UCAN Auth & ID Read/Query Cryptree Transport DNS, IPFS, PubSub, Matrix Identity did:key
WebNative π Stack 1st & 3rd Party Devβs App Business Logic & View API Platform Abstractions WebNative SDK β¬ Apps β¬ Core Technology Durable Structured Store WebNative Database Durable File Store WebNative File System Durable Data Command/Mutation UCAN Auth & ID Read/Query Cryptree Transport DNS, IPFS, PubSub, Matrix Identity did:key
WebNative π Stack 1st & 3rd Party Devβs App Business Logic & View API Platform Abstractions WebNative SDK β¬ Apps β¬ Core Technology Broadcast Collaboration, Chat, Instant Sync Soft Realtime Store Durable Structured Store WebNative Database O ine & Async Sharing Exchange Store Durable File Store WebNative File System Durable Data Command/Mutation UCAN ffl Auth & ID Global: Aggregation, Forms, Feeds Gossip Broadcast Read/Query Cryptree Transport DNS, IPFS, PubSub, Matrix Identity did:key
WebNative π Painting a Picture πΌ β’ Go from zero to production on a plane β β’ Move data to compute and vice versa π β’ Publish updates from inside the browser π β’ Code is data = self modifying apps π£ β’ Anyone can be a service provider (lower bar to entry) ππ β’ Including adversarial cooperation
Content Addressed Data
Content Addressed Data It works offline and online, totally distributed & concurrent, anyone can create or request data, & data is always changing.
Content Addressed Data It works offline and online, totally distributed & concurrent, anyone can create or request data, & data is always changing.
Content Addressed Data It works offline and online, totally distributed & concurrent, anyone can create or request data, & data is always changing. Great!
Content Addressed Data It works offline and online, totally distributed & concurrent, anyone can create or request data, & data is always changing. Great!
Content Addressed Data It works offline and online, totally distributed & concurrent, anyone can create or request data, & data is always changing. Great! How do you even get a consistent pointer?
Content Addressed Data Pushing Bytes Around π
Content Addressed Data Unique Hash ~ UUID++
Content Addressed Data Unique Hash ~ UUID++
Content Addressed Data Arbitrary Content
Content Addressed Data Arbitrary Content
Content Addressed Data Location Addressing β’ Predominantly single-source (per file) server/client β’ Like a key/value store {ip => {path => content}} β’ DNS maps names to IP addresses β’ Focused on the physical network β’ Mutable addressing β’ www.foo.com/baz may be JSON today, but a video tomorrow β’ β¦or altered content
Content Addressed Data Location Addressing β’ Predominantly single-source (per file) server/client β’ Like a key/value store {ip => {path => content}} β’ DNS maps names to IP addresses β’ Focused on the physical network β’ Mutable addressing V I R T UA L A D D R E S S P H Y S I C A L L O C AT I O N β’ www.foo.com/baz may be JSON today, but a video tomorrow β’ β¦or altered content
Content Addressed Data Universal / Content-Based Routing β’ A layer of abstraction above location β’ Like a key/value store {hash(content) => content} β’ Content hash AKA βcontent identifierβ or CID β’ Special βuniversalβ relationship to content V I R T UA L A D D R E S S β’ Focused on the data β’ Who cares where itβs stored? β’ E cient auto-caching β’ Still have paths β’ Immutable DAG ffi β’ No loops P H Y S I C A L L O C AT I O N
Content Addressed Data Universal / Content-Based Routing β’ A layer of abstraction above location β’ Like a key/value store {hash(content) => content} CONTENT ID β’ Content hash AKA βcontent identifierβ or CID β’ Special βuniversalβ relationship to content V I R T UA L A D D R E S S β’ Focused on the data β’ Who cares where itβs stored? β’ E cient auto-caching β’ Still have paths β’ Immutable DAG ffi β’ No loops P H Y S I C A L L O C AT I O N
Content Addressed Data Hash-Linked Data
Content Addressed Data Hash-Linked Data { Qm123456β¦: { data: βHello worldβ, links: [ {name: βcompanyβ, hash: Qmabcdefβ¦} {name: βlicenseβ, hash: Qmzyxwvuβ¦} ] } }
Content Addressed Data Hash-Linked Data { { Qm123456β¦: { data: βHello worldβ, links: [ {name: βcompanyβ, hash: Qmabcdefβ¦} {name: βlicenseβ, hash: Qmzyxwvuβ¦} ] } } Qmabcdefβ¦: { data: βFISSIONβ, links: [ {name: βcityβ, hash: Qm1gb5snβ¦}, {name: βaboutβ, hash: Qmzyxwvuβ¦} ] } }
Content Addressed Data Hash-Linked Data { { Qm123456β¦: { data: βHello worldβ, links: [ {name: βcompanyβ, hash: Qmabcdefβ¦} {name: βlicenseβ, hash: Qmzyxwvuβ¦} ] } } Qmabcdefβ¦: { data: βFISSIONβ, links: [ {name: βcityβ, hash: Qm1gb5snβ¦}, {name: βaboutβ, hash: Qmzyxwvuβ¦} ] } } ipfs cat /ipfs/Qm123456β¦/company/about/founder => βBrookeβ
Content Addressed Data Tradeoffs β’ Equality vs identity β’ Recovering identity from structural equality, but not vice-versa β’ Caching is trivial β’ Data fetches β’ Artifacts β’ Results of computation β’ Zookoβs Triangle
Content Addressed Data P2P Discovery, Lookup, Transport
Content Addressed Data P2P Discovery, Lookup, Transport π
Content Addressed Data P2P Discovery, Lookup, Transport π
Content Addressed Data P2P Discovery, Lookup, Transport π
Content Addressed Data P2P Discovery, Lookup, Transport π» π» β π» π
Content Addressed Data P2P Discovery, Lookup, Transport π» π» β π» π
Content Addressed Data P2P Discovery, Lookup, Transport π» π» π» π» π» β π» π» π π» π» π» π» π»
Content Addressed Data P2P Discovery, Lookup, Transport π» π» π» π» π» β π» π» π π» π» π» π» π»
Content Addressed Data P2P Discovery, Lookup, Transport π» π» π» π» π» β π» π» π π» π» π» π» π»
Content Addressed Data P2P Discovery, Lookup, Transport π» π» π» π» π» β π» π» π π» π» π» π» π»
Content Addressed Data P2P Discovery, Lookup, Transport π» π» π π»
Content Addressed Data P2P Discovery, Lookup, Transport π» π» π π»
Content Addressed Data Mutable Pointer Broadcast: DNSLink π»π₯ π₯π» π» π©π» β π https://yourname.example.com π¨π€
Content Addressed Data Mutable Pointer Broadcast: DNSLink π»π₯ π₯π» π» π©π» β π https://yourname.example.com π¨π€
Content Addressed Data Mutable Pointer Broadcast: DNSLink π»π₯ π₯π» β π https://yourname.example.com TXT => CID π» π©π» π¨π€
Content Addressed Data Mutable Pointer Broadcast: DNSLink π»π₯ π₯π» π» π©π» β π https://yourname.example.com π¨π€
Content Addressed Data Mutable Pointer Broadcast: DNSLink π»π₯ π₯π» π» π©π» β π https://yourname.example.com π¨π€
Content Addressed Data Mutable Pointer Broadcast: DNSLink π»π₯ π₯π» π» π©π» β π https://yourname.example.com π¨π€
Content Addressed Data Mutable Pointer Broadcast: DNSLink π»π₯ π₯π» π» π©π» β π https://yourname.example.com π¨π€
Content Addressed Data Mutable Pointer Broadcast: DNSLink π»π₯ π₯π» π§ β π https://yourname.example.com π¨π€
Content Addressed Data Mutable Pointer Broadcast: DNSLink π»π₯ π₯π» π§ β π https://yourname.example.com π¨π€
Content Addressed Data Mutable Pointer Broadcast: DNSLink π»π₯ π₯π» β π https://yourname.example.com TXT => CID π§ π¨π€
Content Addressed Data Mutable Pointer Broadcast: DNSLink π»π₯ π₯π» π§ β π https://yourname.example.com π¨π€
Content Addressed Data
Content Addressed Data So we have a universal namespace.
Content Addressed Data So we have a universal namespace.
Content Addressed Data So we have a universal namespace. Great!
Content Addressed Data So we have a universal namespace. Great!
Content Addressed Data So we have a universal namespace. Great! Well that seems pretty insecureβ¦
Securing Data Access Fixing the Leaky Pipes πΏ
Securing Data Access Grouped by User, Not by App
Securing Data Access Grouped by User, Not by App
Securing Data Access Grouped by User, Not by App f f f Aliceβs Stu Bobβs Stu Carolβs Stu
Securing Data Access Grouped by User, Not by App Bobβs Photo Gallery πΌ f f f Aliceβs Stu Bobβs Stu Carolβs Stu
Securing Data Access Grouped by User, Not by App Bobβs Photo Gallery πΌ Aliceβs Stu Bobβs Stu Carolβs Stu f f f Carolβs Videogame πΎ
Securing Data Access Grouped by User, Not by App Aliceβs Stu Mu Alic sic eβs Pla πΆ yer Bobβs Photo Gallery πΌ Bobβs Stu Carolβs Stu f f f Carolβs Videogame πΎ
Securing Data Access WNFS Layout
Securing Data Access WNFS Layout alice.fission.name
Securing Data Access WNFS Layout Public Photos Avatars Apps alice.fission.name
Securing Data Access WNFS Layout alice.fission.name Public Photos Avatars Private Apps Photos Apps Family Photos My Gallery
Securing Data Access WNFS Layout alice.fission.name Public Photos Avatars Private Apps Shared By Me Photos Apps Family Photos My Gallery Keys and Keys Keysand and Pointers Pointers Pointers
Securing Data Access WNFS Layout alice.fission.name Public Photos Avatars Private Apps Shared By Me Photos Apps Family Photos My Gallery Keys and Keys Keysand and Pointers Pointers Pointers Shared w/ Me Keys and Pointers
Securing Data Access Virtual Nodes
Securing Data Access Virtual Nodes Raw Node
Securing Data Access Virtual Nodes Raw Node File Node Raw Data Metadata
Securing Data Access Virtual Nodes Raw Node File Node Raw Data Metadata Directory Node Index Metadata
Securing Data Access Virtual Nodes File Node Raw Node β’ Virtual Node Raw Data β’ Consistent interface β’ Arbitrary metadata β’ Tags, creators, MIME, sources, &c Metadata Directory Node Index Metadata
Securing Data Access Hard & Soft Links
Securing Data Access Hard & Soft Links β’ Hard links β’ New for the web! β’ Direct reference β’ 2 pointers ~ duplicate
Securing Data Access Hard & Soft Links β’ Hard links β’ New for the web! β’ Direct reference β’ 2 pointers ~ duplicate β’ Soft links β’ Like a symlink or web link β’ 2 pointers ~ latest β’ May break β’ Always some version available
Securing Data Access Hard & Soft Links β’ Hard links β’ New for the web! β’ Direct reference β’ 2 pointers ~ duplicate β’ Soft links β’ Like a symlink or web link β’ 2 pointers ~ latest β’ May break β’ Always some version available
Securing Data Access Hard & Soft Links β’ Hard links β’ New for the web! β’ Direct reference β’ 2 pointers ~ duplicate β’ Soft links β’ Like a symlink or web link β’ 2 pointers ~ latest β’ May break β’ Always some version available
Securing Data Access Hard & Soft Links β’ Hard links β’ New for the web! β’ Direct reference β’ 2 pointers ~ duplicate β’ Soft links β’ Like a symlink or web link β’ 2 pointers ~ latest β’ May break β’ Always some version available
Securing Data Access Hard & Soft Links β’ Hard links β’ New for the web! β’ Direct reference β’ 2 pointers ~ duplicate β’ Soft links β’ Like a symlink or web link β’ 2 pointers ~ latest β’ May break β’ Always some version available
Securing Data Access Persistent Versioning & Events
Securing Data Access Persistent Versioning & Events Photos@r0 Vacation Avatars@r0 beach.png caricature.jpg Revision 0
Securing Data Access Persistent Versioning & Events Photos@r0 Vacation Avatars@r0 beach.png caricature.jpg Revision 0 π
Securing Data Access Persistent Versioning & Events Photos@r0 Photos@r1 Vacation Avatars@r0 Avatars@r1 beach.png caricature.jpg headshot.png Revision 0 Revision 1 π
Securing Data Access Persistent Versioning & Events Photos@r0 ChildEvent Vacation Avatars@r0 beach.png caricature.jpg Photos@r1 InsertNew Revision 0 headshot.png Revision 1 π Avatars@r1
Securing Data Access Persistent Versioning & Events Photos@r0 ChildEvent Vacation Avatars@r0 beach.png caricature.jpg Photos@r1 InsertNew Revision 0 headshot.png Revision 1 π Avatars@r1
Securing Data Access Persistent Versioning & Events Photos@r0 ChildEvent Vacation Avatars@r0 beach.png caricature.jpg Photos@r1 InsertNew Revision 0 Avatars@r1 headshot.png Revision 1 π Generation 0
Securing Data Access Persistent Versioning & Events Generation 0 Generation 1 Photos@r0 ChildEvent Vacation Avatars@r0 beach.png caricature.jpg Photos@r1 InsertNew Revision 0 headshot.png Revision 1 π Avatars@r1
Securing Data Access Rearranged Photos@r1 Photos@r0 Vacation Avatars@r0 beach.png caricature.jpg Avatars@r1 headshot.png
Securing Data Access Private Nodes π CBOR Binary Encrypted Node π AES256 + π Virtual Node = Index π π Metadata π
Securing Data Access Cryptree π Virtual Node Virtual Node π Index π π Metadata π π π Index Metadata
Cryptree π Virtual Node Virtual Node π Index π π Metadata π π name: βbeach.jpgβ revision: 42 key: βB374A26A71490437Aβ¦β π
, } , { Securing Data Access Index Metadata
π Cryptree π Virtual Node Virtual Node π Index π π Metadata π π name: βbeach.jpgβ revision: 42 key: βB374A26A71490437Aβ¦β π
, } , { Securing Data Access Index Metadata
π Cryptree π Virtual Node Virtual Node π Index π π Metadata π π name: βbeach.jpgβ revision: 42 key: βB374A26A71490437Aβ¦β π
, } , { Securing Data Access Index Metadata
Securing Data Access Subtree Read Access
Securing Data Access Encrypted Tree is Surprisingly Efficient
Securing Data Access Encrypted Tree is Surprisingly Efficient HAMT (weight 16)
Securing Data Access Encrypted Tree is Surprisingly Efficient HAMT 163 = 4,096 items (weight 16) 164 = 65,536 items
Securing Data Access Encrypted Tree is Surprisingly Efficient HAMT 163 = 4,096 items (weight 16) 164 = 65,536 items Append-only Quick Read/Write Merkleized Concurrency Friendly
Securing Data Access Encrypted Tree is Surprisingly Efficient HAMT 163 = 4,096 items (weight 16) 164 = 65,536 items Append-only Quick Read/Write Merkleized Concurrency Friendly π
Securing Data Access Namefilters & Hiding Paths
Securing Data Access Namefilters & Hiding Paths β’ Bare Filter β’ parentFilte β’ AND bloom(SHA(aesKey) β’ AND bloom(SHA(aesKey ++ revision) β’ Saturation β’ nameFilter AND bloom(SHA(nameFilter) ) ) ) r β’ Repeat until threshold bits flipped
Securing Data Access Access-Mediated Collaborative Rooting
Securing Data Access Access-Mediated Collaborative Rooting Rev 0
Securing Data Access Access-Mediated Collaborative Rooting Rev 0
Securing Data Access Access-Mediated Collaborative Rooting Rev 0 Rev 1 (Partial)
Securing Data Access Access-Mediated Collaborative Rooting Rooting progress Rev 0 Rev 1 (Partial)
Securing Data Access Access-Mediated Collaborative Rooting Rooting progress Rev 0 Rev 1 (Partial)
Securing Data Access Access-Mediated Collaborative Rooting Rooting progress No common root at this layer! Attached via HAMT Rev 0 Rev 1 (Partial)
Securing Data Access Progressive Fast Forward Rev 0 Rev 1 (Partial)
Securing Data Access Progressive Fast Forward Rev 0 Rev 1 (Partial) Rev 2 (Partial)
Securing Data Access Progressive Fast Forward Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)
Securing Data Access Progressive Fast Forward Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)
Securing Data Access Progressive Fast Forward Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)
Securing Data Access Progressive Fast Forward Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)
Securing Data Access Progressive Fast Forward current rev + 2n Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)
Securing Data Access Progressive Fast Forward current rev + 2n Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)
Securing Data Access Progressive Fast Forward current rev + 2n β2m current rev + 2n Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)
Securing Data Access Progressive Fast Forward current rev + 2n β2m current rev + 2n Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)
Securing Data Access Progressive Fast Forward current rev + 2n β2m current rev + 2n Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)
Securing Data Access Progressive Fast Forward current rev + 2n β2m current rev + 2n O(2 * log n) Ξ(1) π Rev 3 (Complete) Rev 0 Rev 1 (Partial) Rev 2 (Partial)
Securing Data Access File Sharing
Securing Data Access File Sharing Shared by Me
Securing Data Access File Sharing Shared by Me did:key:zStEksDrxkwYmpzqB did:key:zStEksDrxkwYmpzqB did:key:zStEksDrxkwYmpzqB dAQjjx1PRbHG3fq4ChGeJcYU dAQjjx1PRbHG3fq4ChGeJcYU dAQjjx1PRbHG3fq4ChGeJcYU YU44a4CBUExTTjeCbop6Uur YU44a4CBUExTTjeCbop6Uur YU44a4CBUExTTjeCbop6Uur
Securing Data Access File Sharing Shared by Me did:key:zStEksDrxkwYmpzqB did:key:zStEksDrxkwYmpzqB did:key:zStEksDrxkwYmpzqB dAQjjx1PRbHG3fq4ChGeJcYU dAQjjx1PRbHG3fq4ChGeJcYU dAQjjx1PRbHG3fq4ChGeJcYU YU44a4CBUExTTjeCbop6Uur YU44a4CBUExTTjeCbop6Uur YU44a4CBUExTTjeCbop6Uur Human Readable Name π Symlink
Securing Data Access File Sharing Shared by Me did:key:zStEksDrxkwYmpzqB did:key:zStEksDrxkwYmpzqB did:key:zStEksDrxkwYmpzqB dAQjjx1PRbHG3fq4ChGeJcYU dAQjjx1PRbHG3fq4ChGeJcYU dAQjjx1PRbHG3fq4ChGeJcYU YU44a4CBUExTTjeCbop6Uur YU44a4CBUExTTjeCbop6Uur YU44a4CBUExTTjeCbop6Uur Human Readable Name π Symlink
Securing Data Access File Sharing Shared by Me did:key:zStEksDrxkwYmpzqB did:key:zStEksDrxkwYmpzqB did:key:zStEksDrxkwYmpzqB dAQjjx1PRbHG3fq4ChGeJcYU dAQjjx1PRbHG3fq4ChGeJcYU dAQjjx1PRbHG3fq4ChGeJcYU YU44a4CBUExTTjeCbop6Uur YU44a4CBUExTTjeCbop6Uur YU44a4CBUExTTjeCbop6Uur Human Readable Name π Symlink
Securing Data Access File Sharing Shared by Me Shared with Me did:key:zStEksDrxkwYmpzqB did:key:zStEksDrxkwYmpzqB did:key:zStEksDrxkwYmpzqB dAQjjx1PRbHG3fq4ChGeJcYU dAQjjx1PRbHG3fq4ChGeJcYU dAQjjx1PRbHG3fq4ChGeJcYU YU44a4CBUExTTjeCbop6Uur YU44a4CBUExTTjeCbop6Uur YU44a4CBUExTTjeCbop6Uur Human Readable Name π Symlink
Securing Data Access
Securing Data Access So we can read recursively encrypted trees that live anywhere.
Securing Data Access So we can read recursively encrypted trees that live anywhere.
Securing Data Access So we can read recursively encrypted trees that live anywhere. Great!
Securing Data Access So we can read recursively encrypted trees that live anywhere. Great!
Securing Data Access So we can read recursively encrypted trees that live anywhere. Great! How do you do writes if a a server canβt check the content?
User Controlled, Serverless, Universal Auth & ID β¦and UCAN Too πͺ
UCAN Self-Sovereign Identity π
UCAN Self-Sovereign Identity β’ W3C π
UCAN Self-Sovereign Identity β’ W3C β’ Microsoft π
UCAN Self-Sovereign Identity β’ W3C β’ Microsoft β’ Government of British Columbia π
UCAN Self-Sovereign Identity β’ W3C β’ Microsoft β’ Government of British Columbia β’ Based on public-key cryptography π
UCAN Self-Sovereign Identity β’ W3C β’ Microsoft β’ Government of British Columbia β’ Based on public-key cryptography β’ Truly βuniversalβ user IDs π
UCAN Self-Sovereign Identity β’ W3C β’ Microsoft β’ Government of British Columbia β’ Based on public-key cryptography β’ Truly βuniversalβ user IDs β’ Agnostic about backing π
UCAN Self-Sovereign Identity β’ W3C β’ Microsoft β’ Government of British Columbia β’ Based on public-key cryptography β’ Truly βuniversalβ user IDs β’ Agnostic about backing β’ For users, devices, and more π
UCAN Object Capability Model (OCAP)
UCAN Object Capability Model (OCAP) β’ ACL is βreactive authβ / OCAP is βproactive authβ
UCAN Object Capability Model (OCAP) β’ ACL is βreactive authβ / OCAP is βproactive authβ β’ OCAP contains all the info about access
UCAN Object Capability Model (OCAP) β’ ACL is βreactive authβ / OCAP is βproactive authβ β’ OCAP contains all the info about access β’ Generally some reference, proof, or key β’ Rights to anything directly created (parenthood) β’ The right to delegate subset of access to another (introduction)
UCAN Object Capability Model (OCAP) β’ ACL is βreactive authβ / OCAP is βproactive authβ β’ OCAP contains all the info about access β’ Generally some reference, proof, or key β’ Rights to anything directly created (parenthood) β’ The right to delegate subset of access to another (introduction) β’ Long history (e.g. X.509, SDSI, SPKI, Macaroons)
UCAN 3rd-party Redelegation & Attenuation
UCAN 3rd-party Redelegation & Attenuation π₯
UCAN 3rd-party Redelegation & Attenuation π₯ β
UCAN 3rd-party Redelegation & Attenuation π₯ π β
UCAN 3rd-party Redelegation & Attenuation π₯ π β π
UCAN 3rd-party Redelegation & Attenuation π₯ π β 2β£ π
UCAN JWT
UCAN Auth Chaining β’ OCAP, provable chains, revocable β’ Non-exportable 2048-bit RSA (WebCrypto), Ed25519 & BLS everywhere else
UCAN OAuth vs UCAN Sequence
UCAN OAuth vs UCAN Sequence
UCAN OAuth vs UCAN Sequence (Verifiable & user originated)
Final Thoughts π
Final Thoughts More Coming β Embarrassingly Distributed Deductive Database
Final Thoughts More Coming β Embarrassingly Distributed Deductive Database Source I
Final Thoughts More Coming β Embarrassingly Distributed Deductive Database Source I User+App A
Final Thoughts More Coming β Embarrassingly Distributed Deductive Database Source I User+App A Source II
Final Thoughts More Coming β Embarrassingly Distributed Deductive Database B Source II Us e r+A pp Source I User+App A
Final Thoughts More Coming β Embarrassingly Distributed Deductive Database pp D User+App C User+App A B r+A r+A Us e Us e Source II pp Source I
Final Thoughts More Coming β Embarrassingly Distributed Deductive Database β’ Assert, refute, time, source D User+App C β’ Merge / split easily β’ Access control = di erent views β’ JSON in the front, Datalog in the back π§π€ β’ Help define API? calendly.com/walkah ff pp User+App A B r+A r+A Us e Us e Source II pp Source I
Final Thoughts More Coming β Universal Distributed Compute Off-Platform Side Effect Stream Platform Effect Stream Pure Function Stream Base Event Stream
Final Thoughts Stack 1st & 3rd Party Devβs App Business Logic & View API Platform Abstractions WebNative SDK β¬ Apps β¬ Core Technology Broadcast Collaboration, Chat, Instant Sync Soft Realtime Store Durable Structured Store WebNative Database O ine & Async Sharing Exchange Store Durable File Store WebNative File System Durable Data Command/Mutation UCAN ffl Auth & ID Global: Aggregation, Forms, Feeds Gossip Broadcast Read/Query Cryptree Networking DNS, IPFS, PubSub, Matrix Identity did:key
Final Thoughts 60+ Year Trend
Final Thoughts 60+ Year Trend High Touch Invisible Custom Product / Rental Commodity / Utility
Final Thoughts 60+ Year Trend High Touch Ba rrie r to Ent ry Invisible Custom Product / Rental Commodity / Utility
Final Thoughts 60+ Year Trend High Touch Bespoke Private Ownership Ba rrie r to Ent ry Shared Hosting Serverless Universal Invisible Custom Product / Rental Commodity / Utility
https://fission.codes https://guide.fission.codes https://discord.gg/zAQBDEq π Thank You, Speakeasy JS π brooklyn@fission.codes github.com/expede @expede shop.fission.codes Code: SPEAKEASYJS