Sync Platform

Zero-knowledge sync. Let ZeroDark handle the encryption, while you focus on your app.

It starts with the treesystem

The general idea is that provides each user with a virtual filesystem in the cloud. Unlike a traditional filesystem (with only directories & files), the treesystem acts more like a graph, where each item is simply a "node". A node can be whatever you want it to be - a container, an object, a file, etc. Due to client-side encryption, the server cannot read the contents of any node. Additionally, all nodes are allowed to have children. So a node might be a recipe object, and it's children might be associated images. (Thus "files" can have children.) Therefore deleting the node (the recipe object in this example) would automatically delete the children too (all associated recipe images).

In common graph parlance, a traditional filesystem forces all content to be in the leaves. That is, if you think about a traditional filesystem as a graph or a tree-like structure, you can see that all files are leaves, and all non-leaves are directories. The virtual filesystem doesn't enforce this restriction, which allows you to model your graph hierarchy according to the natural relationships between objects/files within your application.

Nodes can be either objects or files supports everything from small objects, to multi-gigabyte sized files. You have complete control over how you structure the virtual filesystem to support your app.

The filesystem is encrypted

All files stored in the cloud are encrypted client-side, before being uploaded. The files are encrypted using a key that only the client knows. And each file is encrypted using a different key - called the file encryption key - randomly generated for each file. Thus read permissions are controlled via cryptography, by simply controlling who can access the file encryption key. This is done by wrapping it with the public keys of users who have permission to read the file. Zero-knowledge is maintained by encrypting both the content of files, as well as filenames & filepaths. See the encryption page for more details.

Client-side crypto - handled automatically

All encryption & decryption is automatically handled by the framework. This frees you to focus on making your app. And the zero-knowledge backend gives you better peace-of-mind when it comes hackers & other online threats.

Client-side networking - handled automatically

The framework also handles all networking IO for you - including uploads & downloads. For large files, the uploads/downloads are automatically performed using multipart. And, on iOS, it includes support for uploading files in the background.

Push notifications too

The server will automatically send push notifications when any files are changed for which a user has permission. And the framework will automatically handle determining what's changed, using an optimized fast-forwarding protocol when possible.

Full download control

The framework only notifies you of what's changed on the cloud. You are always in full control over what to download, and when to download it. For example, you might choose to only download old content if the user asks for it.

Streaming downloads

Storing videos in the cloud, or other large files that can streamed? No problem. The streaming API allows you to fetch partial chunks on demand. And the cache manager will automatically handle disk caching for you - using encryption of course.