# Anytype Desktop > **Local‑first, peer‑to‑peer & end‑to‑end‑encrypted knowledge OS for macOS, Windows & Linux.** [![Latest release](https://img.shields.io/github/v/release/anyproto/anytype-ts?label=Download)](https://github.com/anyproto/anytype-ts/releases) [![Build Status](https://github.com/anyproto/anytype-ts/actions/workflows/build.yml/badge.svg?branch=main&event=release)](https://github.com/anyproto/anytype-ts/actions/workflows/build.yml) [![Crowdin](https://badges.crowdin.net/anytype-desktop/localized.svg)](https://crowdin.com/project/anytype-desktop) [![License](https://img.shields.io/badge/license-ASAL-1.0-blue.svg)](LICENSE.md) Anytype is a **personal knowledge base**—your digital brain—that lets you gather, connect and remix all kinds of information. Create pages, tasks, wikis, journals—even entire apps—and *define your own data model* while your data stays **offline‑first, private and encrypted** across devices. ## ✨ Key Features - **Offline‑first, local storage** with optional peer‑to‑peer sync. - **Zero‑knowledge encryption** powered by *any‑sync*. - **Composable blocks**: text, databases, kanban, calendar & custom Types. - **Cross‑platform desktop client** built with Electron + TypeScript. - **Extensible** through a gRPC API and AI "Agents" (see [`AGENTS.md`](./AGENTS.md)). - **Open code** under the Any Source Available License 1.0. ## 📚 Table of Contents - [Quick Start](#-quick-start) - [Prerequisites](#-prerequisites) - [Building from Source](#-building-from-source) - [Development Workflow](#-development-workflow) - [Updating Middleware](#updating-middleware) - [Updating Protobuf Bindings](#updating-protobuf-bindings) - [Localisation](#-localisation) - [Contributing](#-contributing) - [Community & Support](#-community--support) - [License](#-license) ## 🚀 Quick Start Just want to try it? Grab the latest installer from the [releases page](https://github.com/anyproto/anytype-ts/releases) or head to **[download.anytype.io](https://download.anytype.io)** and log in with your *Any‑ID*. ## 🏗 Building from Source On ARM systems, node package `keytar` needs to be rebuilt during installation, so make sure that your system has a C++ compiler, Python3 and Python package `setuptools`. E.g. on Debian/Ubuntu: `sudo apt install python3-setuptools`. Alternatively, on any system, create a Python virtual environment (venv) and inside the venv: `pip install setuptools`. Then build from source inside the venv. **Linux** also needs the protobuf compiler **with** the well-known `.proto` files (used to generate the gRPC bindings in step 5): - **Fedora:** `sudo dnf install protobuf-compiler protobuf-devel jq` - **Debian / Ubuntu:** `sudo apt install protobuf-compiler libprotobuf-dev jq` ```bash # 1 – Clone & open this repository git clone https://github.com/anyproto/anytype-ts.git && cd anytype-ts # 2 - Install JavaScript dependencies bun install # 3 – Fetch the prebuilt middleware binary + proto/JSON assets into dist/ ./update.sh # 4 – Build the core engine cd .. && git clone https://github.com/anyproto/anytype-heart.git && cd anytype-heart make install-dev-js CLIENT_DESKTOP_PATH=../anytype-ts && cd ../anytype-ts # 5 – Generate protobuf bindings (middleware/) + service registry (src/ts/lib/api/service.ts) # From the anytype-heart checkout built in step 4: bun run generate:protos # …or, to skip the anytype-heart checkout entirely, generate from the assets fetched in step 3: # bash scripts/generate-protos.sh --from-dist # 6 - Update locale bun run update:locale # 7 – Build the Electron desktop app (see package.json for more options) bun run dist: ``` > Steps 3–5 produce `middleware/` and `src/ts/lib/api/service.ts`, which are git-ignored. Skipping step 5 causes `Failed to resolve import "./service" from src/ts/lib/api/dispatcher.ts`. See [Updating Protobuf Bindings](#updating-protobuf-bindings) and [`scripts/README.md`](scripts/README.md#protobuf-generation) for details. ### Environment flags | Variable | Effect | |--------------------------|--------------------------------------------------| | `ELECTRON_SKIP_NOTARIZE` | Skip macOS / Windows signing & notarizing | | `ELECTRON_SKIP_SENTRY` | Don’t upload sourcemaps to Sentry | ## 🧑‍💻 Development Workflow You can use [nix](https://nix.dev/install-nix) to install all the required dependencies at once. ```shell # open a shell with all the required dependencies nix develop --command $SHELL ``` Start the dev server with hot‑reload (builds Electron bundle, starts Vite, then launches Electron): ```bash bun run start:dev # Windows: bun run start:dev-win # add --user-data-dir=./my_dir to electron(-win) script in package.json if you want to use custom user data directory ``` When you close Electron, the Vite dev server is automatically stopped. For browser-based development without Electron: ```bash bun run start:web ``` See [Web Mode](./docs/src/ts/lib/web/README.md) for details. ### Useful commands ```bash bun run build # Production build (Vite) bun run build:dev # Development build (Vite) bun run typecheck # TypeScript type checking bun run lint # Run linters (Biome + ESLint) ``` ### Environment variables | Name | Purpose | |--------------|---------------------------------------------------| | `SERVER_PORT`| Vite dev server port (default: `8080`) | | `ANYPROF` | Expose Go `pprof` on `localhost:` | ### Web Clipper Extension Build and switch manifest for different browsers: ```bash bun run build:ext bun run ext:manifest:firefox bun run ext:manifest:chromium ``` ### Updating Middleware The middleware version is pinned in `middleware.version`. To fetch a pre-built middleware binary and its protobuf/JSON assets: ```bash ./update.sh ``` This downloads the `anytype-heart` release matching the version in `middleware.version`, extracts the `anytypeHelper` binary into `dist/`, and copies protobuf definitions and generated JSON into `dist/lib/`. For CI environments (requires GitHub credentials): ```bash ./update-ci.sh --user= --token= --os= --arch= --middleware-version= ``` ### Updating Protobuf Bindings The TypeScript protobuf bindings (`middleware/`) and the gRPC service registry (`src/ts/lib/api/service.ts`) are **generated and git-ignored** — a fresh checkout has neither, and the dev/build will fail with `Failed to resolve import "./service" from src/ts/lib/api/dispatcher.ts` until you generate them. **From a local [anytype-heart](https://github.com/anyproto/anytype-heart) checkout** (expected at `../anytype-heart`, requires the Go toolchain): ```bash bun run generate:protos ``` **Without an anytype-heart checkout** (uses the `.proto` files downloaded by `./update.sh` into `dist/lib/protos/`): ```bash ./update.sh bash scripts/generate-protos.sh --from-dist ``` **Prerequisites:** `bun install` must have been run (for `ts-proto`), and `protoc` **plus the well-known `google/protobuf/*.proto` files** must be installed: - **Fedora:** `sudo dnf install protobuf-compiler protobuf-devel` - **Debian / Ubuntu:** `sudo apt install protobuf-compiler libprotobuf-dev` - **macOS:** `brew install protobuf` > The `-devel` / `-dev` package is required on Linux — without it `protoc` reports `google/protobuf/struct.proto: File not found`. See [`scripts/README.md`](scripts/README.md#protobuf-generation) for the full Linux first-time setup and troubleshooting. ## 🌍 Localisation Translations live on [Crowdin](https://crowdin.com/project/anytype-desktop). Pull the latest locale files with: ```bash bun run update:locale ``` ## 🤝 Contributing We ♥ contributors! Please read our [Contributing Guide](https://github.com/anyproto/.github/blob/main/docs/CONTRIBUTING.md) and follow the [Code of Conduct](https://github.com/anyproto/.github/blob/main/docs/CODE_OF_CONDUCT.md). > **Security issues?** Don’t open public issues—email **security@anytype.io** and see our [Security Guide](https://github.com/anyproto/anytype-ts?tab=security-ov-file). ## 💬 Community & Support - **Forum** – - **Docs** – - **Blog** – ## 📝 License Made by **Any** — a Swiss association 🇨🇭 Licensed under the **Any Source Available License 1.0**.