mirror of
https://github.com/anyproto/docs.git
synced 2025-06-08 05:47:05 +09:00
GITBOOK-196: Final Doc Changes
This commit is contained in:
parent
f4e37cbcf8
commit
7e2b351ec4
129 changed files with 1431 additions and 969 deletions
|
@ -1,24 +0,0 @@
|
|||
---
|
||||
description: >-
|
||||
Does the page become included into another when you create a link or move
|
||||
object?
|
||||
---
|
||||
|
||||
# Can pages be nested one to another?
|
||||
|
||||
Let's look at an example:
|
||||
|
||||
> * I have object A.
|
||||
> * In object A, I had a link to an existing object B.
|
||||
> * Then I moved object B inside object A (`move to` action).
|
||||
> * At this point, I am starting to have a link to object B on object A. What's happened?
|
||||
|
||||
Answer: **they both starting to have links to each other**.
|
||||
|
||||
We have <mark style="background-color:red;">no nesting</mark> for [fundamental-concepts.md](../fundamental-concepts.md "mention"). So object doesn't physically include/store different objects.
|
||||
|
||||
All Anytype structures are based on links between objects. Links are directional, so you know that page A links to → page B. You can link oppositely if you need that. You can't use classical hierarchy when files belong to folders and folders create a path. But you can make some of the objects Favourite to be accessible straight from Home.
|
||||
|
||||
All objects connections will soon look like an interconnected network:
|
||||
|
||||
.png>)
|
|
@ -1,13 +0,0 @@
|
|||
# Free forever? How will Anytype make money?
|
||||
|
||||
Anytype is free to use because it’s self-hosted and uses the storage on your devices.
|
||||
|
||||
#### **But how will you make money?** 
|
||||
|
||||
Initially, we will offer subscriptions for decentralized backup services to our users.
|
||||
|
||||
You can use Anytype for free anytime without any storage or upload limits because you’re using the disk space on your devices. Some users may also want to ensure their data is backed up, and we will offer them a place on decentralized Anytype nodes. The stored information is encrypted, and we have neither access to the user’s data nor their encryption keys.
|
||||
|
||||
{% hint style="success" %}
|
||||
For Alpha testers, backup storage will be offered for free as a gift.
|
||||
{% endhint %}
|
|
@ -1,15 +0,0 @@
|
|||
# How are media files stored on devices?
|
||||
|
||||
To keep bandwidth and storage usage low but provide a fast experience, Anytype downloads **Text** and **Images** to your device automatically as they are smaller in size.
|
||||
|
||||
**Files** and **Videos** are downloaded **on-demand**. For example, on mobile devices, it's only when you choose to **play** the video that it will begin to download and save on your device. It also works as a cache. For example, when watching 10% of movies, Anytype may preload and store 30%. So if you are streaming or frequently using a large file, it will be taken from your device storage.
|
||||
|
||||
**Files** are fully downloaded when you press download and get "cached" on your device.
|
||||
|
||||
{% hint style="info" %}
|
||||
Working with cache is not yet available and will be implemented in the next release.
|
||||
{% endhint %}
|
||||
|
||||
{% content-ref url="storage-and-deletion.md" %}
|
||||
[storage-and-deletion.md](storage-and-deletion.md)
|
||||
{% endcontent-ref %}
|
|
@ -1,13 +0,0 @@
|
|||
# How does keychain phrase login work? Like password?
|
||||
|
||||

|
||||
|
||||
This code is used for logging in to another device and recovering your data. It works with unique algorithms providing authorization and encryption of your data simultaneously.
|
||||
|
||||
### Tech
|
||||
|
||||
To keep your data secure, we use the BIP39 Algorithm to derive keychain phrases and use the process of [**Key Derivation Function**](https://en.wikipedia.org/wiki/Key\_derivation\_function) to get all the information that needs to be associated with your passphrase.
|
||||
|
||||
1. Your keychain phrase is used to derive your account's [**private key**](https://en.wikipedia.org/wiki/Public-key\_cryptography) using the [**BIP39 Algorithm**](https://medium.com/coinmonks/mnemonic-generation-bip39-simply-explained-e9ac18db9477)**.**
|
||||
2. Then your private key is further used to derive your profile page with a [**Textile-DB thread ID**](https://github.com/textileio/go-threads)\*\* \*\*and the encryption key. This is how we ensure that your account is associated with your ID.
|
||||
3. Then your private key is used to derive the ID and encryption key for the [**ThreadsDB**](https://github.com/textileio/go-threads#running-threaddb) that contains encryption keys for the rest of the [fundamental-concepts.md](../fundamental-concepts.md "mention") you have in Anytype.
|
|
@ -1,33 +0,0 @@
|
|||
# Privacy & Security
|
||||
|
||||
## Privacy
|
||||
|
||||
All of your data is private in Anytype alpha. Only you have the encryption keys. No one at Anytype can decrypt your data. So if you lose your phrase, we can’t restore access. Likewise, no one in Anytype or anyone else can read the content of your Anytype.
|
||||
|
||||
### Keychain
|
||||
|
||||
Your keychain phrase is the login and passphrase at the same time.
|
||||
|
||||
This mnemonic represents your master key generated on the signup, similar to Bitcoin. Changing it is impossible or automatically migrating all your data to a new key if the current one is compromised or forgotten.
|
||||
|
||||
We can’t do anything about it but create a new account and import all the data from the markdown backup. The invitation key can be used only once. After signing up, your keychain becomes stored in the OS wallet application, so the app can log in automatically when startup.
|
||||
|
||||
{% hint style="info" %}
|
||||
We are thinking about logic to provide possibilities like recovery, migration, and keychain changing with the second factor in the future.
|
||||
{% endhint %}
|
||||
|
||||
### Local Anytype data folder itself is not encrypted
|
||||
|
||||
Anytype stores data in a non-encrypted way locally. We have a prerequisite that the user’s machine is non-compromised and trusted. Basically, if a device is compromised, there are plenty of attack vectors, including RAM scanning and passphrase keylogging, which is useless. We will definitely make additional encryption later. **For now, we recommend turning HDD encryption and device password on.**
|
||||
|
||||
### Tech details
|
||||
|
||||
Here are some technical details on encryption and data storage:
|
||||
|
||||
* Anytype stores changes for each object you’ve created
|
||||
* Every object’s change has 2 encryption layers with different keys.
|
||||
* The First layer is used to connect changes within an object (for example, all this encrypted data belongs to the object with id \<abc>)
|
||||
* Second layer is used to encrypt the actual data. We using AES with stream **encryption** with CFB mode
|
||||
* When you create a new change for an object, we periodically send it to our backup node(with only the first-layer key). More info about sync [here](syncing-and-p2p.md).
|
||||
* Anytype backup nodes have access to the first layer key, so it can group changes for the object and send them in one pack when you want to restore your data
|
||||
* Anytype backup nodes HAVE NO access to the second layer key, so it can’t read the actual changes to the data
|
|
@ -1,47 +0,0 @@
|
|||
# Storage & Deletion
|
||||
|
||||
## Storage
|
||||
|
||||
Anytype is Offline first; hence, all data you create will be stored locally first. After that, the data is synced to the backup node and your devices for redundancy.
|
||||
|
||||
We use a private IPFS network and [ThreadDB](https://docs.textile.io/threads/) to handle storage. It is a Peer-To-Peer file system that facilitates decentralized data storage across devices. Furthermore, we use the deduplication feature to reduce storage. For example, if the same picture is uploaded three times, there is only one image copy stored to reduce storage consumption.
|
||||
|
||||
{% hint style="info" %}
|
||||
You can read more about IPFS here: [we-are-using-ipfs.-what-is-that.md](../faqs/we-are-using-ipfs.-what-is-that.md "mention").
|
||||
{% endhint %}
|
||||
|
||||
### Media
|
||||
|
||||
Media files are not directly downloaded in overall syncing to save bandwidth. Instead, when that file is requested, it is streamed to your device from the backup node or your devices on the network. For example, if you have a 4K Video, it will be streamed from the backup node or P2P devices to your device.
|
||||
|
||||
So when you open an object with an image, it downloads. When you press play on video & audio, it begins to download. After that, this file will be stored in the application cache.
|
||||
|
||||
## Deletion
|
||||
|
||||

|
||||
|
||||
At the moment you can delete only the [fundamental-concepts.md](../fundamental-concepts.md "mention") that you create inside Anytype. At first, you can move them to a bin that will remove them from navigation. Secondly, you can remove them completely from all devices. All your devices will also delete them when getting online.
|
||||
|
||||
{% hint style="warning" %}
|
||||
This action is irreversible, so please be careful.
|
||||
{% endhint %}
|
||||
|
||||
### Media
|
||||
|
||||
{% hint style="warning" %}
|
||||
Objects like Media and those with Anytype (Types, Relations) might be deleted in further releases.
|
||||
{% endhint %}
|
||||
|
||||
You can delete all the content via the clear cache option in iOS and Android. This will remove all the data altogether and force the app to sync once again entirely. Since the media download works on-premise (take a look on[#media-1](storage-and-deletion.md#media-1 "mention")), you will remove all cached media and clear some storage.
|
||||
|
||||
## Root Folder
|
||||
|
||||
The Anytype Root Folder is a variable based on the OS where all your local data is stored. Currently, it is not possible to change the location of this folder. However, this functionality will be added at a later date.
|
||||
|
||||
## Filesystem integration
|
||||
|
||||
Anytype does not have a way to reference files from the OS files system. So all the files are getting copied when you drop media and files inside Anytype. We will introduce this feature later.
|
||||
|
||||
{% hint style="success" %}
|
||||
By the way, you can check our roadmap in the [Community Forum](https://community.anytype.io/t/release-plan-a-general-roadmap/1283).
|
||||
{% endhint %}
|
|
@ -1,54 +0,0 @@
|
|||
# Syncing & P2P
|
||||
|
||||
All your data primarily syncs to the encrypted backup node in the current alpha. For alpha testers, the application is always connected to the backup node and cannot be disconnected.
|
||||
|
||||
#### Local backups
|
||||
|
||||
Anytype is offline-first, and our backup nodes are still in early testing (we can't guarantee data recovery in 100% cases yet), it may be a good idea to do a regular backup of your Anytype folder (bottom-right question mark → Status → Folder path) to some safe place or with markdown Export.
|
||||
|
||||
#### Page history
|
||||
|
||||
We have a history of the document changes that you can use if you lose some data and restore previous versions. So the overall risk of losing some data because of the bug is marginal/non-existent. The only part that we can't guarantee is total recovery from our backup node. It's still in testing mode, an Alpha.
|
||||
|
||||
### Syncing. How does it work?
|
||||
|
||||
All objects are syncing separately. You can have 1 object in the actual state while another is downloading. Every object syncs with all historical changes being merged together. You can work being offline, with different devices different document states.
|
||||
|
||||
The app will transfer small chunks (those changes) of data that will build the document back in forth to devices and backup nodes. So when you open the document, not in its actual state. You just need to wait.
|
||||
|
||||
Later we will introduce more features bringing transparency into syncing.
|
||||
|
||||
### P2P
|
||||
|
||||
We transfer objects directly between devices and backup nodes. That means that you can use the app on several devices in one network without connecting to the world wide web. Interconnections trying to establish with all machines being used with time intervals and if connected then checking changes, transfer data online. We can't broadcast every used device every second, so it can take some time to retrieve data from another device (restarting the app can help).
|
||||
|
||||
### Status
|
||||
|
||||

|
||||
|
||||
* Status `Synced` is shown when: The app is backed on one node at least. If the app retrieved that no changes were made
|
||||
* Status `Syncing…` is shown when: For backup node: upload, download, pinning of files. For devices (direct interconnection): upload, download
|
||||
* Status `No connection` is shown when: Anytype node doesn't connect. You can send the data directly between devices.
|
||||
* Status `Not syncing` is shown when: The app fails to sync. It can be network problems or bugs.
|
||||
* Status `Preparing...` is shown when: Warming up and initializing synchronization.
|
||||
|
||||
Overall status (for an object):
|
||||
|
||||
* If the Object is not fully synced with some device or backup node and something is syncing (like device), → then it is in `Syncing…` state
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
If you encounter an error during sync:
|
||||
|
||||
.png>)
|
||||
|
||||
You will need to send us the «Object diagnostics» for debug. They can be found in the menu bar under the file option. «Object diagnostics» are **confidential**. Please send it to support@anytype.io.
|
||||
|
||||
## Future Plans
|
||||
|
||||
In the future, we plan on giving users more control over the sync functionality. Some of the features that we are going to implement:
|
||||
|
||||
* [ ] Sync Control Options
|
||||
* [ ] The Precise status of each Object
|
||||
* [ ] The Naming of Sync Devices
|
||||
* [ ] Ability to toggle sync for specific pages and objects
|
|
@ -1,11 +0,0 @@
|
|||
# We are using IPFS. What is that?
|
||||
|
||||
[IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/) is an upgrade to HTTP, which is the protocol your web browser used to bring you here. When you type a website into your browser, it "asks" another computer – usually, but not always, your internet provider – how to get to the site and then loads the page.
|
||||
|
||||
This can be problematic, as it centralizes accessing information to a handful of companies.
|
||||
|
||||
[IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/) removes the need for that middleman, as the request is sent to the entire network. This network is made of other users like you. So when you "ask" for a page/object, the network points you to the correct place; no centrality is needed.
|
||||
|
||||
What makes IPFS incredibly compelling for Anytype is how it provides an address to every unique object. For example, if you're looking for an image, you won't need to request an entire website – with all the nonsense found these days – just to view an image. Instead, you can request that object, and the network will point you to it. This enables Anytype users to build a personal web of knowledge, with the ability to share and connect with others on their terms.
|
||||
|
||||
When we talk about blockchains, we refer to something like Bitcoin or Ethereum Classic. In these cases, a blockchain is a massive file that contains a record of every action on the network. Every user of the web keeps a copy of this record. This record cannot be changed. In IPFS, each network node stores only content it is interested in, plus some indexing information that helps figure out which node is storing what, so you don't need to copy the whole internet.
|
|
@ -1,18 +0,0 @@
|
|||
# What Trackers does Anytype Use?
|
||||
|
||||
While the product is in alpha, we use analytics services to help us understand performance of the app as a whole, adoption of certain features, and how the latter impacts retention.
|
||||
|
||||
**Amplitude** is the main service we use for tracking _events_ inside the app. It allows us to track metrics such as:
|
||||
|
||||
* How many users joined in the past month & how many dropped
|
||||
* How many Objects, Blocks, Sets, and Custom Types were created (and average that per number of active users)
|
||||
* How much time people spend in the app, on average
|
||||
* Which devices are used to login to the app
|
||||
|
||||
We use these to understand our main product metrics and whether overall, we’re moving in the correct direction. While we can track frequency and adoption of events, _we cannot in any way track the content you create._ I’d like to emphasise that this last point is foundational to us.
|
||||
|
||||
In practice, this means that we know for instance that custom Types are very popular, but we cannot see what these custom types are (nor which Objects you’ve created with those types).
|
||||
|
||||
Besides Amplitude, our iOS and Android teams use **Crashlytics** to understand the pervasiveness of crashes.
|
||||
|
||||
Once we open our beta we are eager to provide analytics opt-out.
|
Loading…
Add table
Add a link
Reference in a new issue