WEBVTT

00:00.000 --> 00:07.000
Go ahead and introduce you to Nico.

00:07.000 --> 00:11.800
Nico is the founder of NextCraft.org and an engineer specializing in encryption and local

00:11.800 --> 00:13.440
first software.

00:13.440 --> 00:18.000
He's going to be taking us on a technical dive into NextCraft, which is a local first platform

00:18.000 --> 00:23.640
and STK built in Russ that enables secure decentralized app development without reliance

00:23.640 --> 00:25.960
on DNS or central servers.

00:25.960 --> 00:28.320
So with that, I believe you're set up.

00:28.320 --> 00:29.320
Yeah, I'm on that.

00:29.320 --> 00:30.320
Yep.

00:30.320 --> 00:31.320
All right.

00:31.320 --> 00:32.320
So with that, I'm going to hand over Nico.

00:32.320 --> 00:35.320
Let's welcome Nico, everyone.

00:35.320 --> 00:40.320
Hello, everybody.

00:40.320 --> 00:44.320
So I'm Nico, author of NextCraft.

00:44.320 --> 00:48.320
For those who are switching rooms and that work in the local first room before,

00:48.320 --> 00:54.320
you will have a repeat of 10 minutes and then inside the line.

00:54.320 --> 00:57.320
Okay.

00:57.320 --> 01:05.320
So then, I was saying, and then the next 10 minutes will be deep dive into encryption

01:05.320 --> 01:10.820
and yeah, encryption, the sync protocol that I think you will like.

01:10.820 --> 01:15.320
So I started NextCraft three years ago.

01:15.320 --> 01:19.320
We have the support of FNLNet and GI funds and the European Commission.

01:19.320 --> 01:23.320
We'll tell you a small story about data.

01:23.320 --> 01:26.320
It starts with, where is my data today?

01:26.320 --> 01:30.320
I'm not asking you, but in general, all the others.

01:30.320 --> 01:32.320
It's here.

01:32.320 --> 01:35.320
And that's a problem.

01:35.320 --> 01:39.320
For this reason, we have tons of accounts.

01:39.320 --> 01:42.320
No access to the raw data that we don't have access.

01:42.320 --> 01:45.320
It's there and maybe they give us an API, maybe not.

01:45.320 --> 01:51.320
And we have everything is in plaintext in their cloud.

01:51.320 --> 01:55.320
So, we have open source alternatives.

01:55.320 --> 01:56.320
Great.

01:56.320 --> 01:58.320
Now, same.

01:58.320 --> 02:00.320
Billions of accounts.

02:00.320 --> 02:05.320
In compatible APIs and data formats, nothing works together well.

02:05.320 --> 02:07.320
And the same plaintext in their servers.

02:07.320 --> 02:08.320
So it's cool.

02:08.320 --> 02:09.320
Season means right.

02:09.320 --> 02:12.320
We might trust them, but still, if there is a leak.

02:12.320 --> 02:15.320
I don't want them to have my data.

02:15.320 --> 02:16.320
I want my data.

02:16.320 --> 02:20.320
I want all of my data and I want all my data in one place.

02:20.320 --> 02:23.320
It's so I can control it.

02:23.320 --> 02:24.320
And I have ownership.

02:24.320 --> 02:26.320
A sense of ownership.

02:26.320 --> 02:27.320
A availability.

02:27.320 --> 02:30.320
If there is no internet, I still have it.

02:30.320 --> 02:32.320
Security and privacy are just mentioned.

02:32.320 --> 02:36.320
And I can share and collaborate if I want to.

02:36.320 --> 02:39.320
And not to share it with the NSA, by example.

02:39.320 --> 02:42.320
I want a several place for all my data with an encryption

02:42.320 --> 02:44.320
that we solved the previous problems.

02:44.320 --> 02:49.320
Once it is and when encrypted, the server is useless.

02:49.320 --> 02:50.320
Almost.

02:50.320 --> 02:51.320
Right?

02:51.320 --> 02:55.320
It's just doing store and forward of encrypted blocks of data.

02:55.320 --> 02:58.320
Why do I still have a server?

02:58.320 --> 03:03.320
Some people like Iro or others, they do peer-to-peer.

03:03.320 --> 03:06.320
I have my device connected to another device directly.

03:06.320 --> 03:08.320
And we'll change like that.

03:08.320 --> 03:13.320
We don't do that because we showed that it's hard to find

03:13.320 --> 03:16.320
some other device connected at the exact same moment.

03:16.320 --> 03:18.320
So that's we can change.

03:18.320 --> 03:22.320
It's better to pass with a relay that we call the broker.

03:22.320 --> 03:26.320
And that is in between to help with the transfer of the

03:26.320 --> 03:27.320
encrypted data.

03:27.320 --> 03:29.320
Store and forward.

03:29.320 --> 03:34.320
And okay, local first and CRDT.

03:34.320 --> 03:36.320
So there is the devroom of local first.

03:36.320 --> 03:38.320
Maybe some of you were there.

03:38.320 --> 03:39.320
Local first.

03:39.320 --> 03:42.320
It means that you have the data on your device,

03:42.320 --> 03:44.320
primarily on your device.

03:44.320 --> 03:47.320
And if you don't have internet, it still works.

03:47.320 --> 03:49.320
That's the idea.

03:49.320 --> 03:51.320
CRDT is who knows?

03:51.320 --> 03:52.320
CRDT is.

03:52.320 --> 03:54.320
Oh, it's cool.

03:54.320 --> 03:57.320
So I have not to explain it.

03:57.320 --> 03:59.320
I don't have the time anyway.

03:59.320 --> 04:02.320
But it's this data types.

04:02.320 --> 04:05.320
It's a format that avoids conflicts.

04:05.320 --> 04:08.320
If I change the data and you change it,

04:08.320 --> 04:10.320
but we are not connected.

04:10.320 --> 04:11.320
We are not online at this time.

04:11.320 --> 04:13.320
There is no coordination.

04:13.320 --> 04:15.320
Then we are back online.

04:15.320 --> 04:17.320
We bring the data together.

04:17.320 --> 04:18.320
And there is no conflict.

04:18.320 --> 04:19.320
It's not good.

04:19.320 --> 04:20.320
There is no mesh conflict.

04:20.320 --> 04:21.320
There is no need to do something.

04:21.320 --> 04:23.320
It just works.

04:23.320 --> 04:25.320
There is math behind it.

04:25.320 --> 04:26.320
It's not just just.

04:26.320 --> 04:30.320
But it works.

04:30.320 --> 04:32.320
Then it works good for things.

04:32.320 --> 04:33.320
Some domains.

04:33.320 --> 04:34.320
It works for others.

04:34.320 --> 04:36.320
We don't know yet.

04:36.320 --> 04:40.320
But if you want to know more about CRDT,

04:40.320 --> 04:45.320
you go to those websites that have a lot of resources.

04:45.320 --> 04:48.320
Now, I will show you a bit.

04:48.320 --> 04:50.320
What I was saying before,

04:50.320 --> 04:51.320
Antoine encryption.

04:51.320 --> 04:52.320
What does it mean?

04:52.320 --> 04:55.320
I have the brokers that are the servers that are in red

04:55.320 --> 04:58.320
because they have only encrypted data.

04:58.320 --> 05:00.320
They can't see anything.

05:00.320 --> 05:01.320
So once it's like that,

05:01.320 --> 05:04.320
only the devices are in green and they can decrypt.

05:04.320 --> 05:06.320
Encrypt decrypt.

05:06.320 --> 05:08.320
And then because it's CRDT,

05:08.320 --> 05:11.320
we say the materialize the state.

05:11.320 --> 05:14.320
Because the CRDT, it's a bit like a log.

05:14.320 --> 05:15.320
You have a log of operations.

05:15.320 --> 05:17.320
That's I add this, remove that,

05:17.320 --> 05:20.320
add this character, move it there, whatever.

05:20.320 --> 05:23.320
So we need to process all these operations.

05:23.320 --> 05:26.320
And reconstruct the final document.

05:26.320 --> 05:28.320
The current state of the document.

05:28.320 --> 05:30.320
So we call that materialization of the state.

05:30.320 --> 05:34.320
So if you don't store that locally,

05:34.320 --> 05:37.320
you have to rematerialize every time.

05:37.320 --> 05:38.320
Which is costly.

05:38.320 --> 05:40.320
So look at first, we also store it locally.

05:40.320 --> 05:42.320
And with next half, we store it.

05:42.320 --> 05:44.320
Encrypted at rest.

05:44.320 --> 05:47.320
So that's not the same as the Antoine encryption.

05:47.320 --> 05:50.320
So we re-encrypt at rest.

05:50.320 --> 05:52.320
It's just symmetric encryption.

05:52.320 --> 05:54.320
But that's important, I think, too,

05:54.320 --> 05:57.320
because devices, you never know what happens with them.

05:57.320 --> 06:02.320
So I was coming back to my story of the data.

06:02.320 --> 06:04.320
I want this central place with all my data.

06:04.320 --> 06:05.320
How many servers?

06:06.320 --> 06:08.320
We need it for that.

06:08.320 --> 06:11.320
I say a federation.

06:11.320 --> 06:15.320
We have your server, their servers,

06:15.320 --> 06:17.320
and they talk to each other.

06:17.320 --> 06:20.320
We have a pub sub in X-half.

06:20.320 --> 06:24.320
And we imagine one day that you'll have all the brokers in black.

06:24.320 --> 06:27.320
And all the end user devices in orange.

06:27.320 --> 06:29.320
The colors might change.

06:29.320 --> 06:32.320
But I want a central place.

06:32.320 --> 06:35.320
How many server federation synced in a pub sub?

06:35.320 --> 06:36.320
I said it.

06:36.320 --> 06:41.320
Now, the replication of all the data in all my devices.

06:41.320 --> 06:42.320
This is important.

06:42.320 --> 06:47.320
I can choose also if I want it on this device or all the devices.

06:47.320 --> 06:50.320
This is not ready, but it will be one day.

06:50.320 --> 06:52.320
The data replicates on all my devices.

06:52.320 --> 06:53.320
This is the first thing.

06:53.320 --> 06:57.320
Then there's collaboration between different users.

06:57.320 --> 06:59.320
And the documents.

06:59.320 --> 07:02.320
And the data is also replicated on the brokers.

07:02.320 --> 07:05.320
And if you are not connected with the pub sub,

07:05.320 --> 07:10.320
the brokers remembers what are the documents that you are interested in.

07:10.320 --> 07:12.320
So even if you are not online,

07:12.320 --> 07:16.320
it will continue to gather the blocks and bits of data,

07:16.320 --> 07:18.320
the new things, the dates.

07:18.320 --> 07:23.320
And once you connect, you get all the new things at once.

07:23.320 --> 07:25.320
So that's also cool.

07:26.320 --> 07:29.320
Now, full decentralization, right?

07:29.320 --> 07:34.320
When you are in such a paradigm, so we have a full decentralization,

07:34.320 --> 07:37.320
because also we don't depend on DNS.

07:37.320 --> 07:39.320
Everything is IP based.

07:39.320 --> 07:43.320
We want the devices, the brokers, to be hosted at home.

07:43.320 --> 07:46.320
For example, in a small box,

07:46.320 --> 07:50.320
you don't want to have to set up a DNS just for that.

07:50.320 --> 07:51.320
Though, where are we?

07:51.320 --> 07:55.320
I want to completely decentralize central place for all my data.

07:55.320 --> 07:57.320
And that's next graph.

07:57.320 --> 08:00.320
Why do I central of all my data is there?

08:00.320 --> 08:06.320
Now, I'm going to go on the stack and step by step above on the stack.

08:06.320 --> 08:12.320
The protocol above that is specialized for synchronizing CRDTs.

08:12.320 --> 08:14.320
And to end and cryptate CRDTs.

08:14.320 --> 08:17.320
And in the second part, I will explain how.

08:18.320 --> 08:20.320
I can't sync any kind of CRDTs.

08:20.320 --> 08:22.320
So we have several CRDTs.

08:22.320 --> 08:27.320
And anyone, any CRDT could do, could work on this protocol.

08:27.320 --> 08:29.320
We already have three.

08:29.320 --> 08:30.320
You will see that later.

08:30.320 --> 08:34.320
Then we use for access control permissions.

08:34.320 --> 08:37.320
We use capabilities.

08:37.320 --> 08:41.320
Not are in fact cryptographic, similar, like signatures,

08:41.320 --> 08:44.320
or if you want certificates.

08:44.320 --> 08:48.320
And if you don't have this key, this private key,

08:48.320 --> 08:52.320
or symmetric key, depends for writing.

08:52.320 --> 08:55.320
It's asymmetric.

08:55.320 --> 08:59.320
And for reading, it's symmetric key.

08:59.320 --> 09:00.320
OK.

09:00.320 --> 09:03.320
So if you don't have it, you can't open the documents at all.

09:03.320 --> 09:04.320
Right?

09:04.320 --> 09:05.320
So that's a capability.

09:05.320 --> 09:07.320
It's not ACL.

09:07.320 --> 09:10.320
Then we have, I was there already.

09:10.320 --> 09:12.320
We used this.

09:12.320 --> 09:14.320
It's a scheme.

09:14.320 --> 09:16.320
Like you have HTTP, FTP.

09:16.320 --> 09:18.320
You have DID, column.

09:18.320 --> 09:20.320
And then you can do what you want.

09:20.320 --> 09:22.320
With sub name for your own.

09:22.320 --> 09:24.320
It's called a method.

09:24.320 --> 09:25.320
And G for next graph.

09:25.320 --> 09:27.320
And then there, we put what we want.

09:27.320 --> 09:34.320
We put public keys to identify users and documents.

09:34.320 --> 09:37.320
Each document gets a deal.

09:37.320 --> 09:39.320
And that's it's very stable.

09:39.320 --> 09:40.320
Never changes.

09:40.320 --> 09:43.320
That the document moved from one block after another.

09:43.320 --> 09:44.320
From an account to another.

09:44.320 --> 09:45.320
You share it.

09:45.320 --> 09:46.320
It's the same did.

09:46.320 --> 09:48.320
It's never going to change.

09:48.320 --> 09:51.320
So it's not a content addressing, by example.

09:51.320 --> 09:54.320
Because that changes every time you change the document.

09:54.320 --> 09:56.320
That's very important to have a stable ID.

09:56.320 --> 09:58.320
And not connected to domain either.

09:58.320 --> 10:03.320
So we know the problems associated with domains for identifying resources.

10:03.320 --> 10:04.320
Right?

10:04.320 --> 10:05.320
I'm sure you know.

10:05.320 --> 10:08.320
So then we have in the protocol.

10:08.320 --> 10:10.320
I upload and download of binary files.

10:10.320 --> 10:11.320
This is basic.

10:11.320 --> 10:13.320
We have to have it.

10:13.320 --> 10:15.320
We're streaming content addressing this time.

10:15.320 --> 10:16.320
Because this is immutable.

10:16.320 --> 10:17.320
So it's okay.

10:17.320 --> 10:19.320
And then a chunking.

10:19.320 --> 10:21.320
We like a bit around.

10:21.320 --> 10:24.320
Now what are the strategies that we support for documents?

10:24.320 --> 10:26.320
It's document based.

10:26.320 --> 10:27.320
YGS, auto merge.

10:27.320 --> 10:30.320
And the third one are the F that you never heard of.

10:30.320 --> 10:31.320
I'm sure.

10:31.320 --> 10:34.320
So YGS is known.

10:34.320 --> 10:37.320
Auto merge also.

10:37.320 --> 10:40.320
They do JSON like data.

10:40.320 --> 10:43.320
It's maps and arrays.

10:43.320 --> 10:46.320
And RDF is a graph format.

10:46.320 --> 10:48.320
So I like graphs.

10:48.320 --> 10:51.320
And that's maybe why I call it next graph.

10:51.320 --> 10:55.320
And I find it cool to store data.

10:55.320 --> 11:00.320
And also to link data between documents between users.

11:01.320 --> 11:07.320
So your database that is local to your devices is in fact connected to other databases.

11:07.320 --> 11:13.320
Because we have identifiers that are globally unique.

11:13.320 --> 11:18.320
Where are we on that next slide?

11:18.320 --> 11:20.320
RDF, right?

11:20.320 --> 11:23.320
It's called Sparkle is the query language.

11:23.320 --> 11:25.320
It's similar to SQL.

11:25.320 --> 11:27.320
Data log also is very similar.

11:27.320 --> 11:29.320
If you heard of that log.

11:29.320 --> 11:31.320
And then we call it link data.

11:31.320 --> 11:32.320
It's a standout.

11:32.320 --> 11:35.320
And you need the records.

11:35.320 --> 11:36.320
Like in SQL it's okay.

11:36.320 --> 11:38.320
You have a row with the columns.

11:38.320 --> 11:40.320
Here you can only have three columns.

11:40.320 --> 11:41.320
Always.

11:41.320 --> 11:42.320
That's why we call them triples.

11:42.320 --> 11:44.320
And that's small.

11:44.320 --> 11:47.320
The smallest unit of data that you can store.

11:47.320 --> 11:50.320
I'm not going to dig into it now.

11:50.320 --> 11:53.320
And then it brings interoperability.

11:53.320 --> 11:56.320
Because you can have schemas that are adopted by.

11:56.320 --> 12:02.320
We call them ontologies that describe this through RDF, the format.

12:02.320 --> 12:06.320
We can have interoperability between different apps.

12:06.320 --> 12:09.320
And the user remains in control.

12:09.320 --> 12:14.320
Because the data is the user owns the data and can change the apps.

12:14.320 --> 12:15.320
It's not happy with the app.

12:15.320 --> 12:16.320
It changes.

12:16.320 --> 12:17.320
That's valuable software.

12:17.320 --> 12:19.320
You can compose apps.

12:19.320 --> 12:23.320
But your data remains the same.

12:23.320 --> 12:25.320
Now this is an example.

12:25.320 --> 12:27.320
Very schematic of RDF.

12:27.320 --> 12:29.320
When you connect data items.

12:29.320 --> 12:30.320
We key data.

12:30.320 --> 12:32.320
My example is based on RDF.

12:32.320 --> 12:35.320
They extract the data from Wikipedia.

12:35.320 --> 12:38.320
And you can query it in Sparkle.

12:38.320 --> 12:41.320
We have also all the social networks.

12:41.320 --> 12:42.320
It's the graph.

12:42.320 --> 12:43.320
Database for sure.

12:43.320 --> 12:45.320
So that you can query it.

12:45.320 --> 12:48.320
But they have bigger databases.

12:48.320 --> 12:50.320
For us it's different.

12:50.320 --> 12:51.320
It's decentralized.

12:52.320 --> 12:55.320
Now the linking between the documentation and the data base.

12:55.320 --> 12:57.320
Local database.

12:57.320 --> 12:59.320
That has automatic joins.

12:59.320 --> 13:03.320
You don't need to think about the primary.

13:03.320 --> 13:06.320
Forenkeys and to join your tables.

13:06.320 --> 13:09.320
Because all these three pairs are joinable by default.

13:09.320 --> 13:11.320
That's cool.

13:11.320 --> 13:13.320
Clearly this I said.

13:13.320 --> 13:15.320
And team honestly.

13:15.320 --> 13:16.320
Okay.

13:16.320 --> 13:17.320
Hello.

13:17.320 --> 13:19.320
So next graph.

13:19.320 --> 13:21.320
Engine is sync protocol.

13:21.320 --> 13:22.320
CRDT.

13:22.320 --> 13:23.320
Agnostic.

13:23.320 --> 13:25.320
Graph database and encryption address.

13:25.320 --> 13:26.320
Now the SDK.

13:26.320 --> 13:29.320
We can do apps with next graph.

13:29.320 --> 13:30.320
Of course.

13:30.320 --> 13:31.320
Web.

13:31.320 --> 13:32.320
Web apps.

13:32.320 --> 13:34.320
It's rust compiled.

13:34.320 --> 13:36.320
In native.

13:36.320 --> 13:40.320
It's rust compiled to binary code.

13:40.320 --> 13:43.320
And but we still web view.

13:43.320 --> 13:46.320
We like to do everything in web technology.

13:46.320 --> 13:48.320
For now.

13:48.320 --> 13:50.320
But the future is open.

13:50.320 --> 13:54.320
We could do TTTK or what we want.

13:54.320 --> 13:57.320
But the engine is all in rust.

13:57.320 --> 14:01.320
And then we have bindings for Python and type script.

14:01.320 --> 14:02.320
When you do native apps.

14:02.320 --> 14:04.320
So it's then with same tutorial.

14:04.320 --> 14:07.320
This is not as we have all this platform supported.

14:07.320 --> 14:09.320
And this language is.

14:09.320 --> 14:10.320
So.

14:10.320 --> 14:12.320
The SDK is composed of two APIs.

14:12.320 --> 14:14.320
Two level of APIs.

14:14.320 --> 14:17.320
You have the the raw APIs lower.

14:17.320 --> 14:20.320
It's a you subscribe to a document.

14:20.320 --> 14:22.320
Or two several documents.

14:22.320 --> 14:23.320
You receive the dates.

14:23.320 --> 14:24.320
You send the dates.

14:24.320 --> 14:27.320
And these updates are of the form of a CRDT of dates.

14:27.320 --> 14:28.320
It's a binary blob.

14:28.320 --> 14:31.320
Most of the time for YGS and auto merge.

14:31.320 --> 14:33.320
You don't really know what's inside.

14:33.320 --> 14:34.320
And.

14:34.320 --> 14:36.320
For our DF it's going to be trippers.

14:36.320 --> 14:40.320
But trippers also you might not really know what it means.

14:40.320 --> 14:42.320
But for in some cases you need that.

14:42.320 --> 14:44.320
If you're going to use post mirror.

14:44.320 --> 14:48.320
For example, you want native APIs.

14:48.320 --> 14:50.320
But on top of that, we made an OEM.

14:50.320 --> 14:52.320
So that you can manipulate the data.

14:52.320 --> 14:54.320
Like type script object.

14:54.320 --> 14:56.320
There are types of boxes.

14:56.320 --> 14:59.320
You know, and you can just do.

14:59.320 --> 15:01.320
Object dot title.

15:01.320 --> 15:02.320
Equal.

15:02.320 --> 15:04.320
And it's reactive.

15:04.320 --> 15:05.320
We have signals.

15:05.320 --> 15:07.320
And selective to react as well.

15:07.320 --> 15:08.320
And view for now.

15:08.320 --> 15:10.320
The font and frameworks.

15:10.320 --> 15:12.320
But we could add more like a.

15:12.320 --> 15:13.320
Solid.

15:13.320 --> 15:15.320
Solid GSM things like that.

15:15.320 --> 15:16.320
It's.

15:16.320 --> 15:19.320
Wouldn't be difficult now that we did all of the work for the others.

15:19.320 --> 15:20.320
The main ones.

15:20.320 --> 15:21.320
Those.

15:21.320 --> 15:24.320
So on top of that, we have a framework.

15:24.320 --> 15:26.320
It's a bit different than the SDK.

15:26.320 --> 15:28.320
The framework gives you features.

15:28.320 --> 15:29.320
Functionalities.

15:29.320 --> 15:33.320
That the other apps that developers want.

15:33.320 --> 15:34.320
Right.

15:34.320 --> 15:36.320
They want to develop again and again.

15:36.320 --> 15:38.320
And that they just want to use.

15:38.320 --> 15:40.320
So history.

15:40.320 --> 15:42.320
We have that already.

15:42.320 --> 15:43.320
It's the.

15:43.320 --> 15:48.320
It's the log of of all the operations that are signed.

15:48.320 --> 15:50.320
So we have a authenticity of all the commis.

15:50.320 --> 15:52.320
Like a bit like a block chain.

15:52.320 --> 15:54.320
You know, say that it.

15:54.320 --> 15:56.320
You have a proof.

15:56.320 --> 15:57.320
And you have no detail.

15:57.320 --> 15:58.320
And you can't change it.

15:58.320 --> 15:59.320
It's immutable.

15:59.320 --> 16:00.320
That's immutable.

16:00.320 --> 16:02.320
All the history you can't change it.

16:02.320 --> 16:05.320
And the dates of the past are linked to the present.

16:05.320 --> 16:07.320
So it's.

16:07.320 --> 16:09.320
Well, it's the history.

16:09.320 --> 16:11.320
And you can time travel.

16:11.320 --> 16:13.320
You can go back in time.

16:13.320 --> 16:14.320
Commission.

16:14.320 --> 16:15.320
Okay.

16:15.320 --> 16:16.320
I talked about it.

16:16.320 --> 16:19.320
I'm not going to dive in so much into it.

16:19.320 --> 16:21.320
Then we have search locally.

16:21.320 --> 16:22.320
Local search.

16:22.320 --> 16:23.320
Always everything local.

16:23.320 --> 16:26.320
Sparkle the query engine local.

16:26.320 --> 16:28.320
And the reactive queries.

16:28.320 --> 16:29.320
The IBM.

16:29.320 --> 16:30.320
We don't have it yet.

16:30.320 --> 16:32.320
It's the when you start a query.

16:32.320 --> 16:33.320
You get some results.

16:33.320 --> 16:35.320
And the data changes afterwards.

16:35.320 --> 16:37.320
And then your results change.

16:37.320 --> 16:38.320
Consequently.

16:38.320 --> 16:40.320
And that's super cool.

16:40.320 --> 16:43.320
Especially when you are doing everything reactive and local first and everything.

16:43.320 --> 16:44.320
But we are working on it.

16:44.320 --> 16:47.320
We'll have it in around six months from now.

16:47.320 --> 16:48.320
Then we have.

16:48.320 --> 16:49.320
We want to add.

16:49.320 --> 16:50.320
This is not ready.

16:50.320 --> 16:51.320
Comments chat and notification.

16:51.320 --> 16:53.320
But this is basic, right?

16:53.320 --> 16:54.320
And the store.

16:54.320 --> 16:55.320
We have it the wallet.

16:55.320 --> 16:56.320
We have it.

16:56.320 --> 16:57.320
We wouldn't work without it.

16:57.320 --> 16:58.320
The wallet.

16:58.320 --> 16:59.320
It's not like.

16:59.320 --> 17:00.320
It's not a cryptocurrency.

17:00.320 --> 17:05.320
It's just a small file where you have some keys stored there and is protected by a password.

17:05.320 --> 17:06.320
You know.

17:06.320 --> 17:08.320
And it's local.

17:08.320 --> 17:12.320
We never have to connect to anything to use this wallet.

17:12.320 --> 17:15.320
And the app store is because we want you to make apps.

17:15.320 --> 17:18.320
And then we will be able to install.

17:18.320 --> 17:19.320
Right?

17:19.320 --> 17:20.320
Through the.

17:20.320 --> 17:21.320
The system.

17:21.320 --> 17:22.320
So.

17:22.320 --> 17:24.320
Where I mean this is also for after.

17:24.320 --> 17:27.320
So I'm basic assets transaction is good to say that we don't have it.

17:27.320 --> 17:28.320
That's everything.

17:28.320 --> 17:29.320
Even.

17:29.320 --> 17:30.320
A bunch of consistent.

17:30.320 --> 17:31.320
For now.

17:31.320 --> 17:32.320
This is a principle of realities.

17:32.320 --> 17:35.320
But we want to add it because when you do e-commerce.

17:35.320 --> 17:36.320
When you do.

17:36.320 --> 17:38.320
You want to vote double spend.

17:38.320 --> 17:39.320
When.

17:39.320 --> 17:40.320
It's needed.

17:40.320 --> 17:41.320
Right?

17:41.320 --> 17:42.320
So we will add it with pixels.

17:42.320 --> 17:43.320
Basically.

17:43.320 --> 17:44.320
And the coordination.

17:44.320 --> 17:45.320
Then you need internet.

17:45.320 --> 17:46.320
But.

17:46.320 --> 17:47.320
Yes.

17:47.320 --> 17:48.320
A trade of.

17:48.320 --> 17:49.320
It's good to.

17:49.320 --> 17:51.320
Bring it into the framework for those.

17:51.320 --> 17:52.320
We need it.

17:53.320 --> 17:56.320
Some apps that have been done with this ecosystem.

17:56.320 --> 17:59.320
Do clearly mean me who you can check it.

17:59.320 --> 18:01.320
On my website.

18:01.320 --> 18:03.320
Different types of apps services.

18:03.320 --> 18:05.320
You can do services.

18:05.320 --> 18:06.320
And then.

18:06.320 --> 18:10.320
A nice announcement that we are going to do a suite of apps that is.

18:10.320 --> 18:12.320
Supposed to replace.

18:12.320 --> 18:13.320
Google.

18:13.320 --> 18:15.320
Workspace or something like that.

18:15.320 --> 18:16.320
Local first.

18:16.320 --> 18:17.320
And when I crypt it.

18:17.320 --> 18:20.320
And based on the next half.

18:20.320 --> 18:22.320
And we have.

18:22.320 --> 18:23.320
Yeah, a good team.

18:23.320 --> 18:24.320
A good consortium.

18:24.320 --> 18:27.320
And they will be also subgranting for those who want to contribute.

18:27.320 --> 18:28.320
And help us.

18:28.320 --> 18:30.320
Through an internet.

18:30.320 --> 18:31.320
If you know in a net.

18:31.320 --> 18:33.320
You know what I mean.

18:33.320 --> 18:36.320
Then I recap.

18:36.320 --> 18:37.320
The stack.

18:37.320 --> 18:40.320
The open platform with the brokers.

18:40.320 --> 18:42.320
That can be hosted anywhere.

18:42.320 --> 18:45.320
Then on top the photo and the engine.

18:45.320 --> 18:48.320
And there is the framework and the ecosystem.

18:48.320 --> 18:54.320
And those are the properties of this whole ecosystem and the framework.

18:54.320 --> 18:56.320
I'm not going to dig into that.

18:56.320 --> 18:57.320
You understood me.

18:57.320 --> 18:58.320
What is not done.

18:58.320 --> 18:59.320
What we will do this year.

18:59.320 --> 19:00.320
We are still in alpha.

19:00.320 --> 19:02.320
It's about performances.

19:02.320 --> 19:04.320
About the toy plugin.

19:04.320 --> 19:05.320
Because for now.

19:05.320 --> 19:07.320
There is only available on the web.

19:07.320 --> 19:08.320
To make web apps.

19:08.320 --> 19:09.320
But it's the same code.

19:09.320 --> 19:11.320
You code your app once.

19:12.320 --> 19:14.320
The same API.

19:14.320 --> 19:16.320
And then it just works in toy too.

19:16.320 --> 19:17.320
We do it.

19:17.320 --> 19:18.320
I use it.

19:18.320 --> 19:21.320
But I didn't make it so easy for you to do the same.

19:21.320 --> 19:23.320
You would have to fork or an extra thought.

19:23.320 --> 19:24.320
I will do that.

19:24.320 --> 19:25.320
And then the app store.

19:25.320 --> 19:26.320
And improve the framework.

19:26.320 --> 19:28.320
And implement the core protocol.

19:28.320 --> 19:29.320
Because we don't have it implemented.

19:29.320 --> 19:32.320
Which is the one that talks between the brokers.

19:32.320 --> 19:33.320
For now.

19:33.320 --> 19:34.320
I'm just using one broker.

19:34.320 --> 19:37.320
And everybody forgives me.

19:37.320 --> 19:40.320
But it's because I don't have so much time.

19:40.320 --> 19:43.320
I don't have so much time to do everything all at once.

19:43.320 --> 19:47.320
Now those are sparkling.

19:47.320 --> 19:48.320
How much am I?

19:48.320 --> 19:50.320
I moved time.

19:50.320 --> 19:51.320
8 minutes.

19:51.320 --> 19:52.320
8 minutes is good.

19:52.320 --> 19:55.320
So here we have this.

19:55.320 --> 19:57.320
You can read like me.

19:57.320 --> 20:00.320
I can not talk anymore.

20:00.320 --> 20:02.320
So we have this store.

20:02.320 --> 20:05.320
The concept of a store is.

20:05.320 --> 20:07.320
It's a bunch of documents together.

20:07.320 --> 20:09.320
So I have the private one, which is only for me.

20:09.320 --> 20:11.320
It synchronizes between my devices.

20:11.320 --> 20:13.320
But that's where it stops.

20:13.320 --> 20:16.320
Then I have protected one where I can share with other users.

20:16.320 --> 20:18.320
I decided which one was permissions.

20:18.320 --> 20:20.320
And then the public one is for everyone.

20:20.320 --> 20:24.320
You don't need to have an account or anything to access.

20:24.320 --> 20:27.320
Then you can create more of those for groups.

20:27.320 --> 20:31.320
When you put your friends in it and everything.

20:31.320 --> 20:32.320
OK.

20:32.320 --> 20:34.320
This is already said.

20:34.320 --> 20:36.320
Now let's go to the meet of the thing.

20:36.320 --> 20:38.320
Because there is five minutes for questions after.

20:38.320 --> 20:39.320
Right?

20:39.320 --> 20:41.320
It's after the six minutes.

20:41.320 --> 20:43.320
Seven minutes.

20:43.320 --> 20:44.320
I think it's OK.

20:44.320 --> 20:46.320
I will stop very soon if you have questions.

20:46.320 --> 20:47.320
Let me know.

20:47.320 --> 20:49.320
So I can stop.

20:49.320 --> 20:51.320
So what is that?

20:51.320 --> 20:53.320
That's how it works internally.

20:53.320 --> 20:55.320
See, that's the part you will like the most.

20:55.320 --> 20:57.320
So we have a plain text.

20:57.320 --> 20:58.320
It's here.

20:58.320 --> 20:59.320
Whatever graph.

20:59.320 --> 21:00.320
The date.

21:00.320 --> 21:01.320
The data.

21:01.320 --> 21:02.320
We trunk it.

21:02.320 --> 21:04.320
In the maximum one megabyte.

21:04.320 --> 21:06.320
Then each chunk is.

21:06.320 --> 21:09.320
We make a hash of the plain text.

21:09.320 --> 21:11.320
And it's a keyed hash.

21:11.320 --> 21:15.320
Because you will understand that this is convergent and encryption.

21:15.320 --> 21:21.320
Which is a subject subject to the confirmation of file attack.

21:21.320 --> 21:24.320
So we don't want people to try to understand.

21:24.320 --> 21:26.320
If you have a file on your.

21:26.320 --> 21:27.320
This car.

21:27.320 --> 21:29.320
So we.

21:30.320 --> 21:34.320
And the keying is a one big complex but it works.

21:34.320 --> 21:37.320
Then we have the hash of the plain text.

21:37.320 --> 21:39.320
That becomes the encryption key.

21:39.320 --> 21:41.320
The symmetric encryption key.

21:41.320 --> 21:44.320
So we encrypt this chunk with the key.

21:44.320 --> 21:47.320
And that becomes the cipher text.

21:47.320 --> 21:48.320
Right?

21:48.320 --> 21:51.320
And then we hash the cipher text.

21:51.320 --> 21:55.320
And that becomes the ID of this block of this chunk.

21:55.320 --> 21:56.320
The same.

21:56.320 --> 21:59.320
So we have a.

21:59.320 --> 22:04.320
A pair of information, which is the block ID.

22:04.320 --> 22:06.320
And the same symmetric key.

22:06.320 --> 22:07.320
The symmetric key is here.

22:07.320 --> 22:08.320
The block ID is there.

22:08.320 --> 22:13.320
And with that, I can retrieve the data from the broker by example.

22:13.320 --> 22:15.320
I identify the data.

22:15.320 --> 22:16.320
The block.

22:16.320 --> 22:19.320
And then I can decrease.

22:19.320 --> 22:20.320
Right?

22:20.320 --> 22:22.320
So we call that a reference.

22:23.320 --> 22:26.320
Now, when you have many chunks.

22:26.320 --> 22:29.320
You put all of that into a.

22:29.320 --> 22:31.320
That I just so before I.

22:31.320 --> 22:32.320
I'll explain you.

22:32.320 --> 22:34.320
So I don't need to do it.

22:34.320 --> 22:35.320
Right?

22:35.320 --> 22:38.320
Then it's good because I didn't plan to do it.

22:38.320 --> 22:39.320
Anyway.

22:39.320 --> 22:40.320
So.

22:45.320 --> 22:50.320
There's something going on with the slides.

22:51.320 --> 22:52.320
Anyway, this slide is good.

22:52.320 --> 22:53.320
So I will explain that.

22:53.320 --> 22:56.320
Now what we have that when we have this.

22:56.320 --> 22:57.320
This blocks.

22:57.320 --> 22:59.320
And this was just one operation.

22:59.320 --> 23:00.320
Let's say a big one.

23:00.320 --> 23:02.320
Ah, now it's coming back.

23:02.320 --> 23:03.320
Okay.

23:03.320 --> 23:05.320
So we have.

23:05.320 --> 23:06.320
Ah, yeah.

23:06.320 --> 23:07.320
There is this slide in the middle.

23:07.320 --> 23:09.320
And then there is the other one.

23:09.320 --> 23:10.320
No.

23:10.320 --> 23:11.320
It's going back.

23:11.320 --> 23:12.320
Anyway.

23:12.320 --> 23:14.320
A bit annoying.

23:14.320 --> 23:15.320
So we have.

23:15.320 --> 23:16.320
I will explain it anyway.

23:16.320 --> 23:17.320
We have a.

23:18.320 --> 23:21.320
So then once we have all this operation one after another.

23:21.320 --> 23:24.320
Here we are.

23:24.320 --> 23:26.320
So this is one of them.

23:26.320 --> 23:29.320
I say root commit is the first when you create the document.

23:29.320 --> 23:31.320
You have the root commit.

23:31.320 --> 23:34.320
It's encrypted with the mechanism of you before.

23:34.320 --> 23:35.320
All of them.

23:35.320 --> 23:37.320
And then.

23:37.320 --> 23:40.320
We have the first operation that add some text.

23:40.320 --> 23:43.320
One character or one sentence to the text.

23:43.320 --> 23:44.320
In a text editor.

23:44.320 --> 23:45.320
Let's say.

23:45.320 --> 23:46.320
So we do the same.

23:46.320 --> 23:47.320
We encrypted everything.

23:47.320 --> 23:50.320
We get a key and an ID.

23:50.320 --> 23:54.320
But what we do is that we link this new.

23:54.320 --> 23:58.320
That are commit with the past with the previous one.

23:58.320 --> 23:59.320
Always.

23:59.320 --> 24:01.320
So you can see this is the past.

24:01.320 --> 24:02.320
And we are.

24:02.320 --> 24:04.320
The timeline is doing like that.

24:04.320 --> 24:06.320
I should not pass the line.

24:06.320 --> 24:09.320
And then you have.

24:09.320 --> 24:11.320
So what happens?

24:11.320 --> 24:12.320
See how it is.

24:12.320 --> 24:14.320
You can have concurrent modifications.

24:14.320 --> 24:15.320
So this is what happened there.

24:15.320 --> 24:16.320
In three and four.

24:16.320 --> 24:17.320
They didn't have internet.

24:17.320 --> 24:19.320
Maybe one of the two didn't have internet.

24:19.320 --> 24:20.320
So there is.

24:20.320 --> 24:22.320
They're all based on two.

24:22.320 --> 24:25.320
And they don't know that they mutually.

24:25.320 --> 24:27.320
They made some modifications.

24:27.320 --> 24:28.320
So we have this fork.

24:28.320 --> 24:31.320
Temporary fork in the dagger.

24:31.320 --> 24:33.320
And the next time that they have internet.

24:33.320 --> 24:35.320
They will exchange those commits.

24:35.320 --> 24:37.320
Through the service.

24:37.320 --> 24:38.320
Through the pub sub.

24:38.320 --> 24:41.320
And they will realize that there was this fork.

24:41.320 --> 24:42.320
And you know what?

24:42.320 --> 24:44.320
We don't even have a measure operation.

24:44.320 --> 24:46.320
There's a measure commit or something like that.

24:46.320 --> 24:47.320
They just stay like that.

24:47.320 --> 24:49.320
We say we have two heads at that moment.

24:49.320 --> 24:51.320
Two current heads.

24:51.320 --> 24:52.320
And then we.

24:52.320 --> 24:54.320
At the next operation.

24:54.320 --> 24:57.320
If someone writes something new.

24:57.320 --> 24:58.320
We will.

24:58.320 --> 24:59.320
The next one.

24:59.320 --> 25:00.320
The number five.

25:00.320 --> 25:01.320
We'll be a merge.

25:01.320 --> 25:02.320
In fact, a merge.

25:02.320 --> 25:03.320
A operation.

25:03.320 --> 25:05.320
But it also has some real data in it.

25:05.320 --> 25:06.320
Right?

25:06.320 --> 25:08.320
It says the whatever this person is used.

25:08.320 --> 25:09.320
It's Alice.

25:09.320 --> 25:11.320
That she did.

25:12.320 --> 25:14.320
And it also makes the merge.

25:14.320 --> 25:17.320
And with interference with the ideas.

25:17.320 --> 25:18.320
The previous ones.

25:18.320 --> 25:21.320
So when you come and want to open the document.

25:21.320 --> 25:23.320
The only thing that you need.

25:23.320 --> 25:25.320
Let's say you didn't have access to the document.

25:25.320 --> 25:26.320
It just arrived to you.

25:26.320 --> 25:28.320
It was given access to.

25:28.320 --> 25:31.320
The only thing you need is the key and the idea of the number five.

25:31.320 --> 25:32.320
That is there in red.

25:32.320 --> 25:34.320
If I give you that.

25:34.320 --> 25:36.320
Then you can open them.

25:36.320 --> 25:37.320
You know.

25:37.320 --> 25:38.320
One of the other like that.

25:38.320 --> 25:40.320
And I would stop here because I think I'm very close to the end.

25:40.320 --> 25:42.320
And then a question or two.

25:42.320 --> 25:43.320
That's it.

25:43.320 --> 25:44.320
Thank you.

25:48.320 --> 25:49.320
All right.

25:49.320 --> 25:50.320
We have time for more two quick questions.

25:50.320 --> 25:51.320
Okay.

25:51.320 --> 25:52.320
I see a hand right here.

25:56.320 --> 25:59.320
How does that client authenticate with a broker?

25:59.320 --> 26:01.320
How does a broker know when a client is allowed to talk to?

26:01.320 --> 26:02.320
Signs.

26:02.320 --> 26:03.320
A challenge.

26:03.320 --> 26:05.320
We see the private key.

26:05.320 --> 26:06.320
Simple.

26:06.320 --> 26:07.320
Okay.

26:07.320 --> 26:10.320
Like the same private key used for encrypting the files?

26:10.320 --> 26:11.320
No.

26:11.320 --> 26:15.320
We have different ones for this because only the broker needs to know that one.

26:15.320 --> 26:18.320
Your register to this broker is giving you service, right?

26:18.320 --> 26:21.320
So your register always your friend or it's yours or you pay for it.

26:21.320 --> 26:23.320
Something like that.

26:25.320 --> 26:27.320
That's it.

26:28.320 --> 26:29.320
Yeah.

26:29.320 --> 26:36.320
One question regarding this large RDF structure with the distributed graph.

26:36.320 --> 26:39.320
How does that relate to the capabilities?

26:39.320 --> 26:45.320
Can you let's say make accessible only a part of the big graph?

26:45.320 --> 26:51.320
Provide capabilities for only a part but still have them connected to perhaps inaccessible?

26:51.320 --> 26:54.320
I see people with disabilities with people moving.

26:54.320 --> 26:56.320
They shouldn't move when the questions.

26:56.320 --> 26:57.320
Okay.

26:57.320 --> 26:58.320
Okay.

26:58.320 --> 26:59.320
Okay.

26:59.320 --> 27:03.320
Now I was wondering about the relationship between the capabilities on one side.

27:03.320 --> 27:11.320
And this possibility to build one big RDF.

27:11.320 --> 27:12.320
Yes.

27:12.320 --> 27:13.320
Thank you.

27:13.320 --> 27:14.320
Okay.

27:14.320 --> 27:15.320
And then how these two relates?

27:15.320 --> 27:19.320
Can you let's say give access, give capabilities to parts of the graph?

27:19.320 --> 27:20.320
Exactly.

27:20.320 --> 27:24.320
So each the graph is made of documents that contain a bit of it.

27:24.320 --> 27:26.320
But then you have a bigger graph.

27:26.320 --> 27:28.320
The composition of all of them, the union.

27:28.320 --> 27:30.320
So each document has permissions.

27:31.320 --> 27:34.320
I can share only one part of the graph for all of it.

27:34.320 --> 27:36.320
And so is a bit of a question?

27:36.320 --> 27:37.320
Yes.

27:37.320 --> 27:38.320
All right.

27:38.320 --> 27:39.320
And sorry.

27:39.320 --> 27:40.320
We have to call it there.

27:40.320 --> 27:43.320
But if you'd like to ask more questions, we can we find you.

27:43.320 --> 27:44.320
Where do I find me?

27:44.320 --> 27:45.320
Yeah.

27:45.320 --> 27:47.320
We're going to find you if they want to talk about it.

27:47.320 --> 27:48.320
All right.

27:48.320 --> 27:49.320
So reach out through here.

27:49.320 --> 27:50.320
And yeah.

27:50.320 --> 27:52.320
On that note, let's give another round of applause everyone.

27:52.320 --> 27:53.320
Thank you, Nico.

27:53.320 --> 27:55.320
We appreciate it.

27:55.320 --> 27:56.320
All right.

28:00.320 --> 28:02.320
Thank you.

