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.