@ -26,7 +26,7 @@ So to recap, in a Document we have :
- the **Graph** part (some RDF triples). This is mandatory and always available in all documents, even if left empty.
- the **Discrete** part (some JSON, XML or plain-text. based on Yjs or Automerge CRDTs). This can be optional, meaning that it is possible to create a purely graph\*based document that doesn't hold any discrete part.
- the **Discrete** part (some JSON, XML or plain-text. based on Yjs or Automerge CRDTs). This can be optional, meaning that it is possible to create a purely graph-based document that doesn't hold any discrete part.
- some optional **binary files** attached to the document.
@ -40,7 +40,7 @@ Each Document is identified with a **unique identifier**, that is a public key r
It is a permanent ID of the form `did:ng:o:[44 chars of the ID]` by example `did:ng:o:EghEnCqhpzp4Z7KXdbTx0LkQ1dUaaqwC0DGVS-0BAKAA`.
This Identifier is a valid URI that can be used to link a document with another (both in the rich-text or in the RDF data, as subject, object or even predicate i a document is used to define an ontology). We call it **NURI**, for NextGraph URI.
This Identifier is a valid URI that can be used to link a document with another (both in the rich-text or in the RDF data, as subject, object or even predicate if a document is used to define an ontology). We call it **NURI**, for NextGraph URI.
It follows the **DID** (Decentralized Identifier) format, and an adhoc DID Method will be specified and registered shortly.
@ -48,7 +48,7 @@ It follows the **DID** (Decentralized Identifier) format, and an adhoc DID Metho
When you create a new Document, you first have to select its **type**, which is also called "primary class" internally.
There are already several types proposed to you (not all of them are currently implemented. see a list in [features](/en/features), and App developers can add new types.
There are already several types proposed to you (not all of them are currently implemented. see a list in [features](/en/features) ), and App developers can add new types.
Here is a short list of the most used types :
@ -86,7 +86,7 @@ If you are editing a text document, please pay attention to the fact that live e
Viewers and Editors are what we call "Apps". And they can be installed from the built-in App Store (not ready yet, but will be available soon).
NextGraph comes with a set of Official Apps (listed in [Features](/en/features) that are always available (they don't need to be installed), and developers can also create new apps, that will need to be installed by the final user (but when the user receives a link to a Document for which they don't have the necessary app installed, we will propose them to install this missing app automatically).
NextGraph comes with a set of Official Apps (listed in [Features](/en/features)) that are always available (they don't need to be installed), and developers can also create new apps, that will need to be installed by the final user (but when the user receives a link to a Document for which they don't have the necessary app installed, we will propose them to install this missing app automatically).
#### History
@ -110,15 +110,15 @@ A **branch** is a concept that helps us separate the data within a single docume
- A document can be composed of several blocks. Imagine the blocks like separate paragraphs in a text document, or separate embeds (video, table, spreadsheet, etc...) of content that come from other documents or that have different types, and you want to assemble all those blocks into one document. So you select those blocks and put them one after another. When the reader opens a document, they will not see that it is made of several blocks. to them it will just appear to be one document that they scroll into.
- We also use branches when we want to fork the work that is happening on a Document (let's say in collaborative editing). This can be handy if we want to keep the current version of the Document unchanged, while we are working a newer version. All the work on the newer version is not visible to the reader, until the "working branch" is merged back into the main branch. This is something that programmers will understand very well, but that can be very handy for everybody else too. Please note that we use the terms "fork" and "merge" here as we did when we talked about CRDTs earlier, but it is not exactly the same thing. Here the fork and merge happens only on request from the user. You can decide at some point to fork a document or block. Then you can also decide that it is time to merge it back. But that's a bit different than the automatic and transparent "merge and fork" that is continuously happening every time that someone goes offline. To make things more clear, we don't call the later this way, we just say the document synchronizes itself. fork and merge should be terms used only when the user decides to manually fork.
- We also use branches when we want to fork the work that is happening on a Document (let's say in collaborative editing). This can be handy if we want to keep the current version of the Document unchanged, while we are working on a newer version. All the work on the newer version is not visible to the reader, until the "working branch" is merged back into the main branch. This is something that programmers will understand very well, but that can be very handy for everybody else too. Please note that we use the terms "fork" and "merge" here as we did when we talked about CRDTs earlier, but it is not exactly the same thing. Here the fork and merge happens only on request from the user. You can decide at some point to fork a document or block. Then you can also decide that it is time to merge it back. But that's a bit different than the automatic and transparent "merge and fork" that is continuously happening every time that someone goes offline. To make things more clear, we don't call the later this way, we just say the document synchronizes itself. fork and merge should be terms used only when the user decides to manually fork.
- Branches and blocks can also be used to store different translation of your content. You do not want to create a new document for each translation. Instead, you create separate blocks within the same document, and each block hols the translated content. NextGraph is designed to help you with managing translation and multi-lingual content, and when the user will open the Document, the most adapted language will be selected for them.
- Branches and blocks can also be used to store different translation of your content. You do not want to create a new document for each translation. Instead, you create separate blocks within the same document, and each block holds the translated content. NextGraph is designed to help you with managing translation and multi-lingual content, and when the user will open the Document, the most adapted language will be selected for them.
- Another advantage of blocks, is that it lets you create different types of content within the same document. As we have seen earlier, NextGraph offers different types of content (called primary classes). We said earlier that you have to select a type when you create a document. That's true. And this will in fact be the type of the main branch of your document. But then you can add more blocks, that will have different types. So you can combine many different types of content inside the same document. And eventually, you can even change the type of the document itself, by switching the main branch to be another branch (more on that later).
- Also, we internally use the branches feature to store some internal data that you don't see, but that needs to have different branches for the good functioning of NextGraph.
One of the advantage of dividing your content into several blocks is also that blocks can have different read permissions. So if you want to share some information with a certain group of people, but not with some other group, but still refer to that as one document, then you can use blocks. By example, let's say you a Social profile, where you describe yourself, your interest, and where you put some contact information. Maybe the contact details should not be available to everyone (like phone number, postal address, etc..) Still, you do not want to create 2 documents for that purpose. So you will have 2 blocks. one will only contain the minimum public information you want to share to everyone. The other block will contain more details like phone number and address, and it will include also a link to the other block. This way, you don't have to copy paste the general information about you in both blocks. The "include link" is transparent for the privileged reader who got access to the more private profile. they will not see that that the document is composed of 2 blocks. to them it will just appear as one document. And of course, all the other readers who only got the link to the generic block, will not see that there exist another block that contains more private details.
One of the advantage of dividing your content into several blocks is also that blocks can have different read permissions. So if you want to share some information with a certain group of people, but not with some other group, but still refer to that as one document, then you can use blocks. By example, let's say you have a Social profile, where you describe yourself, your interest, and where you put some contact information. Maybe the contact details should not be available to everyone (like phone number, postal address, etc..) Still, you do not want to create 2 documents for that purpose. So you will have 2 blocks. one will only contain the minimum public information you want to share to everyone. The other block will contain more details like phone number and address, and it will include also a link to the other block. This way, you don't have to copy paste the general information about you in both blocks. The "include link" is transparent for the privileged reader who got access to the more private profile. they will not see that the document is composed of 2 blocks. to them it will just appear as one document. And of course, all the other readers who only got the link to the generic block, will not see that there exists another block that contains more private details.
So, to recap. Each branch holds a separate list of commits, that can be seen in the History pane.
@ -87,7 +87,7 @@ Now let's have a look at what those CRDTs have in common and what is different b
| **multi-lingual strings** | ✅ 🔥 | ❌ | ❌ |
| <tdcolspan=3> Store the value of a string property in several languages / translations |
| **Counter CRDT** | ❌ | ❌ | ✅ 🔥 |
| <tdcolspan=3> Counters are a safe way to manage integers in a concurrent system. Automerge is the only one offering counters. Please note that CRDT types in general are "eventual consistent" only (BASE model). If you need stronger guarantees like the ones provided by ACID systems (specially guaranteeing the sequencing of operations, very useful for preventing double-spending) then you have to use a **Synchronous Transaction** in Nextgraph. |
| <tdcolspan=3> Counters are a safe way to manage integers in a concurrent system. Automerge is the only one offering counters. Please note that CRDT types in general are "eventual consistent" only (BASE model). If you need stronger guarantees like the ones provided by ACID systems (specially guaranteeing the sequencing of operations, very useful for preventing double-spending) then you have to use a **Synchronous Transaction** in NextGraph. |
| <tdcolspan=3> (\*) discrete data cannot link to external documents. This is the reason why all Documents in NextGraph have a Graph part, in order to enable inter-linking of data and documents across the Global Giant Graph of Linked Data / Semantic Web |
@ -16,7 +16,7 @@ You have heard that with NextGraph there will be no more ToS to accept. You are
#### Why is the loading so slow on the web app ?
When you use the web app, we do not store your data locally, because there is not enough space to do so in local storage (the browser limits us to 5MB). Soon we will have a new feature for the web-app, where all your data will be stored locally in the browser, thanks to indexedDB. but this is not ready yet. So for now, every time you open your wallet and start using the web app, all the document's content is fetched from the broker. This can take some time and it explains why the loading is slow. Once the documents have been retrieve, as long as you do not close the tab, we keep it locally and it even works offline, if you loose connectivity to the internet.
When you use the web app, we do not store your data locally, because there is not enough space to do so in local storage (the browser limits us to 5MB). Soon we will have a new feature for the web-app, where all your data will be stored locally in the browser, thanks to indexedDB. but this is not ready yet. So for now, every time you open your wallet and start using the web app, all the document's content is fetched from the broker. This can take some time and it explains why the loading is slow. Once the documents have been retrieved, as long as you do not close the tab, we keep it locally in memory and it even works offline, in case you loose connectivity to the internet.
#### Where is my data stored when I install the native App ?
@ -29,7 +29,7 @@ When you use our native app, all the content of the documents is stored locally
You will soon be able to use the CLI in order to read your local data (on Desktop and Laptop).
We recommend you to **not configure** your mobile Nextgraph app for Cloud backup. There is o need to store your NextGraph data in the Cloud as it is already backed up by your broker. In the future, we will also offer you the option to backup your data to more than one broker.
We recommend you to **not configure** your mobile NextGraph app for Cloud backup. There is no need to store your NextGraph data in the Cloud as it is already backed up by your broker. In the future, we will also offer you the option to backup your data to more than one broker.
#### I cannot share my documents with other users
@ -37,8 +37,8 @@ This is a temporary limitation that will be lifted in several weeks from now (in
#### Can I create several Wallet for myself ?
We do not recommend you to create more than one Wallet. The app is not designed to handle such case. Instead, the app has been designed so that you can create more separate identities from within the same wallet. identities that are stored in the same wallet are still independent one from another and nobody will be able to tell that you own both identities. This feature is not available yet but will come soon. here is really no need to create to create several wallets. Specially because you will ahve difficulties to remember several pazzles.
We do not recommend you to create more than one Wallet. The app is not designed to handle such case. Instead, the app has been designed so that you can create more separate identities from within the same wallet. identities that are stored in the same wallet are still independent one from another and nobody will be able to tell that you own both identities. This feature is not available yet but will come soon. There is really no need to create several wallets. Specially because you will have difficulties to remember several pazzles.
#### Where is the iOS app ?
We were not able to publish the iOS app for now, as we do not have a compilation station with the latest macOS. This will be fixed soon and the app should eb available in the App Store of Apple soon afterwards.
We were not able to publish the iOS app for now, as we do not have a compilation station with the latest macOS. This will be fixed soon and the app should be available in the App Store of Apple soon afterwards.
@ -4,7 +4,7 @@ description: NextGraph aims to offer a robust, private, secure and easy to use S
layout: ../../layouts/MainLayout.astro
---
We have seen that Nextgraph is [organized around documents](/en/documents), and that we can share and collaborate on the those documents with other users.
We have seen that NextGraph is [organized around documents](/en/documents), and that we can share and collaborate on the those documents with other users.
The internal mechanism of synchronization of the documents is based on a pub/sub, and this enables us to offer all the range of features and services that a Social Network offers.
@ -20,9 +20,9 @@ Our protocol is open source, our infrastructure is also open, as anybody can run
The only part that we had to design and implement ourselves, is the [network protocol](/en/network). We explained in the [Encryption chapter](/en/encryption) why we had to create a new protocol and why we could not reuse an existing one. But this innovation was worth it!
As we also know that existing protocols are widely used, we will strive to be compatible with them.
As we also know that some existing protocols are widely used, we will strive to be compatible with them.
ActivityPub is the most famous OSS protocol for social network, and we have started a collaboration with the [ActivityPods project](https://activitypods.org) in order to bring full compatibility of NextGraph with ActivityPub protocol, and also with the Solid standard! We also aim at harmonizing our frameworks so that apps developed for ActivityPods will also work on NextGraph framework and thus benefit from local-first and ent-to-end encryption, and the reverse will also be true. Apps developed on NextGraph framework will also work on ActivityPods, and therefor be compatible with ActivityPub and Solid.
ActivityPub is the most famous OSS protocol for social network, and we have started a collaboration with the [ActivityPods project](https://activitypods.org) in order to bring full compatibility of NextGraph with ActivityPub protocol, and also with the Solid standard! We also aim at harmonizing our frameworks so that apps developed for ActivityPods will also work on NextGraph framework and thus benefit from local-first and end-to-end encryption, and the reverse will also be true. Apps developed on NextGraph framework will also work on ActivityPods, and therefor be compatible with ActivityPub and Solid.
ActivityPods will act as a gateway between the world of HTTP and NextGraph, that has severed ties with HTTP for reasons explained in the [Encryption chapter](/en/encryption).
@ -32,7 +32,7 @@ We believe that offering Social Network features in the heart of our framework i
### Stream
Each NextGraph Store comes by default with a **Stream**, which is a list of updates that we anybody can subscribe to. (the private store doesn't offer that, and in order to subscribe to the protected store, you need the link with the long secret key).
Each NextGraph Store comes by default with a **Stream**, which is a list of updates that anybody can subscribe to. (the private store doesn't offer that, and in order to subscribe to the protected store, you need the link with the long secret key).
Subscribing to the stream is equivalent to "following" a profile.
@ -48,7 +48,7 @@ We can also "reply" to a Post, which is the equivalent of commenting, on other p
We also differentiate between the content that the user wants to add permanently to their profile (this is what we call the homepage of the Store), and the content that should be sent to the stream (more like Stories, or announcements that new content has been added to the store). The stream is ephemeral, while the Store stays permanent.
Of course, it is also possible to like and react to al the content, and to share content in the DMs too.
Of course, it is also possible to like and react to all the content, and to share content in the DMs too.
### Groups and chatroom
@ -64,15 +64,15 @@ One of the advantages of NextGraph, is that your social graph (the connections b
We give way too much power to some private companies like Meta or Twitter/X, when we use their platform. They can see the whole graph of all the social connections between people, globally, all over the planet. That's a lot of interesting information, used for advertising, but also for political meddling, and also for surveillance by intelligence services.
With nextGraph, the social graph is distributed in the hands of each participant to the graph, that holds only the needed connections to the people they know, follow, like or interact with. Nobody can see the "big picture".
With NextGraph, the social graph is distributed in the hands of each participant to the graph, that holds only the needed connections to the people they know, follow, like or interact with. Nobody can see the "big picture". It is very good to protect everyone's privacy!
But this has a negative side-effect. The global graph that Meta by example, maintains, enables them to be able to derive some useful information like recommendations, or specialized content that matches your interests.
We will overcome this caveat of not having access to the global graph, by enabling peer-to-peer traversal of the graph.
This will be possible very soon in NextGraph, thanks to the use of the Semantic Web and the features of "federated queries" that let's you query the data that is not on your machine, but instead, sits in the machine of your friends and contacts. If those other users give you the permission to do so, you will be ale to search in their own graph too.
This will be possible very soon in NextGraph, thanks to the use of the Semantic Web and the features of "federated queries" that let's you query the data that is not on your machine, but instead, sits in the machine of your friends and contacts. If those other users give you the permission to do so, you will be able to search in their own graph too.
This is why NextGraph makes a strong separation between the data that is private and should always stay private, and the data that is public or protected. Public data can be queried by anyone, will protected data needs your permission.
This is why NextGraph makes a strong separation between the data that is private and should always stay private, and the data that is public or protected. Public data can be queried by anyone, while protected data needs your permission.
With federated queries, we will be able to ask our friends for recommendation, and to see our social graph in a more meaningful way.
@ -84,7 +84,7 @@ And unlike ActivityPub, where everything is public and the system administrators
### Compatibility with Big Tech
Even though we really want to get rid of all th Big-Tech products and services, we understand that a level of compatibility with them will be need if we want the transition process to be fast and smooth.
Even though we really want to get rid of all the Big-Tech products and services, we understand that a level of compatibility with them will be need if we want the transition process to be fast and smooth.
Indeed, most of our contacts and friends today are still using the social networks and tools of Big-Tech.
@ -92,7 +92,7 @@ If we want to reach them, we have to use the tools and platforms that they use,
We are investigating how we could offer a certain level of compatibility with those platforms, so that users of NextGraph can also cross-post to Meta or X, and could also interact with their users (DMs, follow, etc).
It will not be easy, as those platforms do not offer APIs for us to connect to and have access to their users.
It will not be easy, as those platforms do not offer APIs for us to connect to and have access to their users' data.
Maybe one day the European Union will finally force them to open their APIs and force interoperability.
@ -100,6 +100,6 @@ In the meanwhile, we are currently exploring ways to implement this already.
Another important tool would be the option to import all the content and contacts that someone has gathered through the years on a platform of big-tech, so it can be used in NextGraph, when that person decides to switch to our platform. Some big-tech platforms already offer the export option. and we would have to implement the import part.
It is important to understand that NextGraph does not need to implement an export feature, because with NextGraph, all your data is totally under your control already. it is local and you have it directly on your device, it is saved in some open standards like RDF, JSON or Markdown, and you can do whatever you want with it. Furthermore, if you decide at some point ot use a different broker, or to self-host your own broker, all your data at NextGraph is absolutely **portable** and you can move your data to another broker without any bad consequence. Your documents and links have unique IDs that are not related to the broker where you store the data. That's another advantage that no other platform or framework can offer, not even ActivityPub, which is all based on http and domain names, and that will break as soon as you change hosting provider. (I have experienced this myself. The list of followers can easily be transferred, but you loose all your posts and DMs).
It is important to understand that NextGraph does not need to implement an export feature, because with NextGraph, all your data is totally under your control already. it is local and you have it directly on your device, it is saved in some open standards like RDF, JSON or Markdown, and you can do whatever you want with it. Furthermore, if you decide at some point to use a different broker, or to self-host your own broker, all your data at NextGraph is absolutely **portable** and you can move your data to another broker without any bad consequence. Your documents and links have unique IDs that are not related to the broker where you store the data. That's another advantage that no other platform or framework can offer, not even ActivityPub or Solid, which are all based on http and domain names, and that will break as soon as you change hosting provider. (I have experienced this myself. In Mastodon, the list of followers can easily be transferred, but you loose all your posts and DMs).
Welcome to NextGraph, that will soon offer all those Social Network features, and that already offers the best [collaborative tools](/en/collaboration) with offline-first and end-to-end encryption.
@ -44,17 +44,17 @@ Once the wallet has arrived on a new device, everything works the same in the ne
### Pazzle and mnemonic
In order to protect your wallet from unauthorized access, we have decided not to use a password, because that would be too risky. We know very well that users do not chose secure password by themselves, because they need to remember such password, so it has to be simple.
In order to protect your wallet from unauthorized access, we have decided not to use a password, because that would be too risky. We know very well that users do not choose secure password by themselves, because they need to remember such password, so it has to be simple.
The other opposite behaviour is to create a very secure password with a password generator, by example, and then store this very complex password in a password/keys manager. This is another problem, as it just transfers the security of the whole system to that "password manager" that we know have been found insecure so many times. the question of the transfer of such complex password from one device to another is another problem... and we wouldn't have solved anything if we were to use password.
The other opposite behaviour is to create a very secure password with a password generator, by example, and then store this very complex password in a password/keys manager. This is another problem, as it just transfers the security of the whole system to that "password manager" that we know have been found insecure so many times. the question of the transfer of such complex password from one device to another is another problem... and we wouldn't have solved anything if we were to use passwords.
So.. here comes the Pazzle.
It is a contraction of Puzzle+password. Which means that it is like a puzzle that you need to reconstruct every time you want to login. And it is secure and randomly generated by us (and we do not let the user choose it).
The pazzle is composed of 9 images, that yo will most likely remember after several tries.
The pazzle is composed of 9 images, that you will most likely remember after several tries.
It is also important to memorize the order of all the images (which ones come first). This is a bit harder to remember, but a simple way to deal with it is to tell yourself a small story that links all the images one to the next. Like: the elephant east a banana and takes a plane to go play basketball with a fish, that eats blueberries under a palm tree ...etc. The story is your pazzle, and you will not be able to choose it, but the way you tell it to yourself, is your own creativity ;)
It is also important to memorize the order of all the images (which ones come first). This is a bit harder to remember, but a simple way to deal with it is to tell yourself a small story that links all the images one to the next. Like: the elephant eats a banana and takes a plane to go play basketball with a fish, that eats blueberries under a palm tree ...etc. The story is your pazzle, and you will not be able to choose it, but the way you tell it to yourself, is your own creativity ;)
Until you remember the pazzle, you can write it down on a piece of paper. And we guarantee you that after few logins, you will know it by heart very well.
@ -62,14 +62,14 @@ There is also a mnemonic "passphrase" that is an alternative way to login into y
We propose this option for those we have special needs (like programmers that need to enter in the wallet very quickly).
in general, we encourage you to use the pazzle instead.
In general, we encourage you to use the pazzle instead. in the future, we will also implement the option to login with physical dongle/key that has been paired with the wallet.
The mnemonic can also be seen as a recovery passphrase. But be very careful where you save it. Anybody that finds your mnemonic or pazzle, and also has a hold on the wallet file or on a device that has the wallet already imported, can surely enter your account and read/write all your data.
So the best is not to store those things on your device/computer/phone, but instead, to keep them offline, in a paper form.
We also help yo with that by providing a Recovery PDF file that contains all the information of your wallet, in a PDF form that you can print, and keep somewhere in your drawer or in a secret place.
We also help you with that by providing a Recovery PDF file that contains all the information of your wallet, in a PDF form that you can print, and keep somewhere in your drawer or in a secret place.
In any case, we at Nextgraph cannot see your pazzle, mnemonic, or wallet file, as it always stays local. And we never see it passing (except when you transfer using QRcode or TextCode, but in those cases, it is re-encrypted again and only kept on our server for 5 minutes).
In any case, we at NextGraph cannot see your pazzle, mnemonic, or wallet file, as it always stays local. And we never see it passing (except when you transfer using QRcode or TextCode, but in those cases, it is re-encrypted again and only kept on our server for 5 minutes).
Now that you created your wallet and that you entered for the first time into the App, let's discover together what this App contains and [how it is organized](/en/documents).