diff --git a/README.md b/README.md index 503dafab..af4fe358 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@

🔌 Offline and private

- Your files are plain .figcraft archives on your own disk. No account, no cloud, no telemetry. SVG, PNG, JPG, WebP and PDF in and out; .fig files open (best effort), and so do designs exported as the public REST API file JSON, with their prototypes and variables. + Your files are plain .figcraft archives on your own disk. No account, no telemetry, and nothing leaves your computer unless you share a file (what sharing sends where). SVG, PNG, JPG, WebP and PDF in and out; .fig files open (best effort), and so do designs exported as the public REST API file JSON, with their prototypes and variables.

🤖 Agent-ready

@@ -260,6 +260,28 @@ Installers for macOS (universal, signed and notarized), Windows (x64, x86 and ar > [!IMPORTANT] > **Status:** FigCraft is in **alpha**: about 49% of the way to replacing Figma for real work, by our own estimate. Nearly all of Figma's main menu is wired ([`docs/parity-checklist.md`](docs/parity-checklist.md)) and the core editor works end to end, but FigCraft opens `.fig` files only best effort, has only a first preview of multiplayer (live sessions hosted from the app or a self-hosted server, with per-person undo and share links to edit or to view; no accounts, teams or cloud yet), runs its own WebAssembly plugins rather than Figma's, and hasn't been checked against real Figma documents. The honest, area-by-area picture is in the [roadmap](ROADMAP.md) and [`docs/target-app-parity.md`](docs/target-app-parity.md). Expect rough edges and please file issues, or tell us what broke on [Discord](https://discord.gg/artcraft). +## Privacy and online sharing + +FigCraft works offline: it has no account and no telemetry, and it contacts no server until you +share or join a file. Live sessions are a **preview**. Before you share anything that matters, +know what sharing does: + +- **Share ▸ Online uploads the file to a server.** By default that is the public server at + `collab.craftapps.dev`; you can set another one, or your own, in Preferences. The file stays on + the server after you stop sharing, until you remove it (Share ▸ Advanced ▸ Remove from server…) + or nobody has opened it for 30 days, when a public server deletes it. +- **It is not end-to-end encrypted.** The connection to the server is encrypted (TLS), but the + server stores the file unencrypted and whoever runs the server can read it. Don't share + confidential work through a server you don't trust; run your own + ([`docs/server.md`](docs/server.md)) or share on the local network instead. +- **The code or link is the access.** There are no accounts: anyone who has an edit code or link + can open and change the file, anyone with a view code or link can open it. Stop sharing revokes + them and disconnects everyone else. +- **Share ▸ Local network involves no server**, but it is not encrypted either: your app hosts + the session and others connect to it directly, so use it on networks you trust. +- **No guarantees.** The public server is offered as is, without backups or uptime promises, and + files on it can be removed. Keep your own saved copy of anything you share. + ## The Crafting Apps FigCraft is one of the **Crafting Apps**: free, open-source creative tools from the diff --git a/docs/server.md b/docs/server.md index 813de025..445200b0 100644 --- a/docs/server.md +++ b/docs/server.md @@ -667,6 +667,11 @@ sudo systemctl start figcraft-server ## Security +- **Not end-to-end encrypted.** TLS (from the reverse proxy) protects files on their way to and from + the server; on the server they are stored unencrypted, so the operator and anyone who can read + the data directory can read every file. Tell the people who publish to your server so (the + README's [Privacy and online sharing](../README.md#privacy-and-online-sharing) says it for the + default public server), and set `operator_contact` and `terms_url` on a public one. - **Access** is a share link (128-bit random token) per file and access level, an owner token (128-bit) per file published without the key, or the server key (128-bit) for managing files. Tokens are stored as SHA-256 hashes and every comparison runs in constant time; revoking a link