Mindket

AFFiNE

Newversion 2 · updated
Star74.3k

Overview

An open-source, local-first workspace where docs, whiteboards and databases are built from the same blocks, so one doc reads as a page or opens as an endless canvas. The setup notes cover the apps, Docker Compose self-hosting, AI keys, backups, and Claude Code, Cursor and Cline over MCP.

AFFiNE is an open-source project on GitHub in the Productivity category, listed by Mindket. It is free. This is version 2, last updated on . Install it from GitHub as its README says. Get Mindket’s setup notes on your Mindket account, as a zip.

At a glance

Runs in
  • The workspace MCP endpoint, which lets Claude Code, Cursor, Cline and other MCP clients that accept a Bearer header, or can launch the local mcp-remote bridge, search and read one workspace. OAuth-only clients cannot use it
  • AI inside the app, through AFFiNE AI or, on a self-hosted server, your own OpenAI, Anthropic, Gemini or FAL keys
  • A desktop app pointed at your own server, added from the workspace list panel
  • Export of docs to Markdown or HTML, to move them to another machine
Start with
mkdir affine
cd affine
mkdir -p config

Platform

WindowsOperating system
macOSOperating system
LinuxOperating system
iOSOperating system
AndroidOperating system
Claude CodeCoding agent

And 4 more in Where to use it

About

What it is

AFFiNE is an open-source workspace that puts docs, a whiteboard and databases in one app. They are all built from the same blocks: a line of text is a block, and so is a shape on a canvas. Every doc has two modes. Page mode is a linear page that fits your screen, and Edgeless mode is an endless canvas for mind maps, slides and diagrams. The app is local-first, so a local workspace lives on your own disk and works offline. AFFiNE Cloud or your own server adds sync across devices and real-time collaboration.

  1. You open AFFiNE on the web, the desktop or your own server
  2. You type / in a doc and pick blocks from the slash menu
  3. You switch the same doc to Edgeless mode to draw around it
  4. Selected blocks turn into a Table or Kanban database
  5. Cloud or self-hosted sync lets others edit with you live

Who it suits

People who keep notes in one app and sketch on a whiteboard in another, and would rather have both in one doc. Small teams who want their docs on their own server and can run Docker, backups and upgrades themselves. The docs also say who should look elsewhere. AFFiNE is not a typesetting system, so if you like the rulers and layout buttons of Word, Google Docs or Pages, it is the wrong tool.

Who uses it, and how
UseWho uses itHow they use itExample
PlanningPeople who track tasks inside their notesTurn a to-do list into a database and view it as a boardSomeone selects a list of to-dos, uses convert into database and switches the result to the Kanban view.
Brainstorming and slidesPeople who think on a canvasOpen a doc in Edgeless mode for mind maps, presentations and visual workA user lays out text blocks, images and shapes on the canvas as a slide and groups them in a frame.
Knowledge basePeople who sort many docsCollections work as smart folders that pick docs by tags and Doc infoA user adds filters in All docs and clicks Save as New Collection, so matching docs join it by rule.
Repeated pagesPeople who start the same page oftenMark a doc as a Template and set it for the Journal or for every new docA user ticks Template in a doc’s Property, then picks it under Settings, Preference, My Template.
AI assistantsDevelopers who want answers from their own notesConnect Claude Code, Cursor or Cline to the workspace MCP endpointA developer creates a read-only credential labelled Claude Code and adds it with one claude mcp add command.
Teams on their own serversAdmins who run DockerRun the Docker Compose stack and connect the desktop apps to itAn admin downloads the Compose file, sets server.externalUrl and creates the first administrator at /admin.

Where to use it

In a browser at https://app.affine.pro, in the desktop apps for Windows, macOS and Linux, and in the iOS and Android apps. The mobile apps focus on capturing and reviewing notes and sync through AFFiNE Cloud. The desktop app is the most complete, with the full Edgeless whiteboard. Beyond the apps, the maker’s pages name these connections.

  • The workspace MCP endpoint, which lets Claude Code, Cursor, Cline and other MCP clients that accept a Bearer header, or can launch the local mcp-remote bridge, search and read one workspace. OAuth-only clients cannot use it
  • AI inside the app, through AFFiNE AI or, on a self-hosted server, your own OpenAI, Anthropic, Gemini or FAL keys
  • A desktop app pointed at your own server, added from the workspace list panel
  • Export of docs to Markdown or HTML, to move them to another machine
Ways to run it
RouteWhat you runWhat the pages say
Webhttps://app.affine.pro in a browserThe docs home says you can try AFFiNE there directly
DesktopAn installer from affine.pro/download or GitHub ReleasesWorks fully offline with no account. Windows 10 or later (x64 and ARM64), macOS 11 or later, and Linux as AppImage, .deb or Flatpak
MobileThe iOS and Android appsFor capturing and reviewing notes on the go, synced through AFFiNE Cloud
Self-hostedDocker Compose: AFFiNE, a migration job, PostgreSQL and RedisThe recommended self-host route. Plan at least 4 CPU cores and 2 GB RAM
SourceA clone built with Node.js 22.12 or a later 22.x, Yarn 4 and RustFor contributors. BUILDING.md covers the web app. Separate guides cover the desktop app and the server

How to set it up

Get it saves a zip of Mindket’s setup notes in your downloads folder, with a page for each route from the maker’s README and docs. The web app needs only a browser, and the desktop apps need only a download. The steps below run your own server, the route the Docker Compose page recommends.

  1. Install Docker with Compose v2. The command docker compose version should answer.
  2. Make a deployment folder. Create affine with a config folder inside, as below.
  3. Download the two files. The Compose file and the example config come from the latest release.
  4. Set the external URL. In config/config.json, server.externalUrl is the address users open.
  5. Start the stack. Run docker compose up -d and check it with docker compose ps.
  6. Create the first administrator. Open http://localhost:3010 and follow the prompts.
mkdir affine
cd affine
mkdir -p config
curl -L -o docker-compose.yml \
  https://github.com/toeverything/AFFiNE/releases/latest/download/docker-compose.yml
curl -L -o config/config.json \
  https://github.com/toeverything/AFFiNE/releases/latest/download/config.json.example
docker compose up -d
docker compose ps

The one-time migration container should finish, while AFFiNE, PostgreSQL and Redis keep running. If something fails to start, the page gives this line.

docker compose logs --tail=200 affine affine_migration

How to use it

Type / on a blank line to open the slash menu and pick a block. Basic blocks also take Markdown shortcuts, as the Blocks page lists them.

#    at the start of a line makes a heading
>    at the start of a line makes a quote
---  followed by a space makes a divider

Any block can be dragged by its handle. Select several blocks and use convert into database, and they become a database with Table or Kanban views. The Blocks page says this works well for turning a to-do list into a kanban. In Edgeless mode, text blocks, images and shapes can be laid out as a slide, and frames and groups gather them into sets. Collections work as smart folders. Add filters in All docs and click Save as New Collection, and every doc that matches the rules joins it. To reuse a layout, tick Template in a doc’s Property and set it for the Journal or for every new doc.

A local workspace stays on your device. To share it, enable AFFiNE Cloud in the workspace settings after you sign in, then invite people by email from the members area. They join once they accept the email.

Example

You keep project notes in an AFFiNE Cloud workspace and want Claude Code to answer from them. In AFFiNE you open Settings, then Integrations, then MCP Server, and create a credential labelled Claude Code. You leave the access mode on Read only and copy the endpoint and token, since the token shows once. Then you run the command from AFFiNE’s MCP page.

claude mcp add --transport http affine \
  "https://app.affine.pro/api/workspaces/<workspace-id>/mcp" \
  --header "Authorization: Bearer <your-credential>"

Claude Code then has two tools from AFFiNE, as the MCP page describes them. doc_search runs keyword and semantic search across the workspace, whiteboard text included, and returns short passages with page or canvas locators. read_document fetches a whole doc by its ID. Both stay inside that one workspace and your permissions, and revoking the credential cuts off only this client.

For newcomers and experts

If you are new. Local-first means your workspace is stored on your own machine and you can edit it without an internet connection. The download page says the desktop app syncs only when you choose to sign in to AFFiNE Cloud. A block is any piece of a doc you can move, from a paragraph to a to-do, a shape or a database. Start with the desktop app and a local workspace. No account is needed. Self-hosting is for people who already run servers. The self-host docs say a managed workspace is usually simpler if you do not want to look after Postgres, Redis, backups and upgrades.

For experts. The editor is BlockSuite, Toeverything’s open-source collaborative editor. The README names y-octo, a native, thread-safe Yjs CRDT implementation, as the core engine that gives the AFFiNE client and server their local-first functionality. It also names OctoBase, a data engine written in Rust. The desktop app is Electron wrapping the prebuilt web app, with native modules in Rust built through napi-rs.

A self-hosted server reads config/config.json from ./config. server.externalUrl must be the final address users open, and copilot.byok.enabled lets workspace owners add their own provider keys. Settings saved in the Admin Panel at /admin/settings take effect at once. Provider keys belong to workspaces, never to the server config. The AI page gives this block to allow OpenAI-compatible endpoints.

{
  "copilot": {
    "enabled": true,
    "byok": {
      "enabled": true,
      "allowCustomEndpoint": true,
      "allowPrivateEndpoint": false
    }
  }
}

Keep allowPrivateEndpoint off unless every workspace administrator is trusted to send provider requests into the private network. Transcription and workspace indexing need a Gemini key stored on the server, or an AFFiNE AI plan fallback where available, and indexing also needs the indexer turned on. The official Compose file already ships PostgreSQL with pgvector. The MCP endpoint is POST /api/workspaces/{workspace-id}/mcp over stateless Streamable HTTP. After a credential is rotated, the old token keeps working for up to 24 hours, or until its expiry if sooner.

Good to know

These come from the README, the LICENSE and the maker’s pages.

  • License: GitHub labels it Other. The LICENSE file puts code outside packages/backend and packages/common/native under MIT. The README says Community Edition is free to self-host under MIT. But the license file in packages/backend/server puts the parts of those two folders shipped in Community Edition under MPL 2.0. The rest is the AFFiNE Enterprise Edition license, which the self-host page calls source-available. It allows production use only with a subscription for the right number of seats
  • Seats: the docs give each workspace on a self-hosted instance at most 10 seats for free. More need the paid Team Plan, at $10 a seat a month billed yearly or $12 monthly, or an Installable License from sales for a network that cannot reach AFFiNE’s license service
  • Data sent out: the self-host page says a disconnected network needs separate plans for fonts from cdn.affine.pro, default client telemetry and images from ghcr.io. The Team Plan checks its license against app.affine.pro
  • Upgrades: read the release notes, back up and compare the old and new Compose files first. The Upgrade page says not to use latest as a blind production upgrade path. Version 0.27.4 moved the data folders, so an older Compose file needs care
  • Backups: a full backup is the Postgres dump, ./data/storage for uploads and the config files. A database-only restore leaves the uploaded files out. The docs say to test a restore
  • Identity: the self-host page names OIDC for single sign-on, with MFA at your identity provider. It says not to choose AFFiNE today if you need SAML or SCIM provisioning, built-in audit logs or an official Kubernetes deployment
  • MCP writes: read only is the default. The MCP page says the implementation it reviewed on October 26, 2026 limits write tools to development or canary deployments
  • Builds: Stable is for daily work, Beta previews features with light testing, and Canary is published as soon as it is built
  • Contributing: a pull request merges only after every committer signs the Contributor License Agreement

README and files

README

AFFiNE: setup notes

This kit holds setup notes only. Mindket wrote them. AFFiNE itself comes from its maker's web app, desktop and mobile apps, Docker images and source code: https://github.com/toeverything/AFFiNE

These notes are not made or endorsed by the AFFiNE team (Toeverything). The README calls AFFiNE "a privacy-focused, local-first, open-source, and ready-to-use alternative for Notion & Miro", and says docs, canvas and tables are merged in it. The documentation is at https://docs.affine.pro/

License: GitHub labels it "Other". The LICENSE file (https://github.com/toeverything/AFFiNE/blob/canary/LICENSE) says content outside two folders is under the MIT license in LICENSE-MIT. Content under packages/backend and packages/common/native is under the license in packages/backend/server/LICENSE. That file says the parts shipped as AFFiNE Community Edition (CE) are under MPL 2.0, and the rest is the AFFiNE Enterprise Edition (EE) license, which may be used in production only with an EE subscription for the right number of seats. Third-party components keep their own licenses. The README says CE "is free for self-host under the MIT license". The self-host page (https://affine.pro/self-host) says the server backend is source-available under the AFFiNE EE license, while the editor and most client code are MIT-licensed.

What installs

  • Nothing, if you use the web app at https://app.affine.pro in a browser. Source: https://docs.affine.pro/
  • A desktop app for Windows, macOS or Linux, or a mobile app for iOS or Android, from https://affine.pro/download. See setup/desktop-and-web.md.
  • For self-hosting, a Docker Compose stack: the AFFiNE server, a one-time migration job, PostgreSQL and Redis, with data under ./data and configuration under ./config. See setup/docker-compose.md.
  • Nothing in your coding agent, unless you add the optional MCP connection: setup/claude-code.md, setup/cursor.md and setup/other-mcp-clients.md.

What you need first

Main install command

The quickest start needs no install: open https://app.affine.pro, or download the desktop app. To run your own server, the Docker Compose page gives these steps. Run them where the deployment folder can stay, since the page says to keep it in a stable location:

mkdir affine
cd affine
mkdir -p config
curl -L -o docker-compose.yml \
  https://github.com/toeverything/AFFiNE/releases/latest/download/docker-compose.yml
curl -L -o config/config.json \
  https://github.com/toeverything/AFFiNE/releases/latest/download/config.json.example
docker compose up -d
docker compose ps

Then open http://localhost:3010 and create the first administrator account. Source: https://docs.affine.pro/self-host-affine/install/docker-compose-recommended

Per-platform notes

  • setup/desktop-and-web.md: the web app, the desktop and mobile apps, and local or cloud workspaces
  • setup/docker-compose.md: your own server with Docker Compose
  • setup/configuration-and-ai.md: config/config.json, the Admin Panel and AI with your own provider keys
  • setup/backup-and-upgrade.md: backing up, restoring and upgrading a self-hosted server
  • setup/claude-code.md: the workspace MCP endpoint in Claude Code
  • setup/cursor.md: the same endpoint in Cursor
  • setup/other-mcp-clients.md: Cline, and local stdio clients such as Claude Desktop
  • setup/build-from-source.md: building the web app, the desktop app and the server from the repository

Update or remove

The download page says the desktop app updates through its built-in updater, and the latest installer is always on that page. Source: https://affine.pro/download

For a self-hosted server, follow setup/backup-and-upgrade.md. The Upgrade page says not to use latest as a blind production upgrade path. Source: https://docs.affine.pro/self-host-affine/install/upgrade

The pages these notes drew on give no uninstall steps. By hand, and this is Mindket's note, not the maker's: uninstall the desktop app the way your system removes any app. For the server, docker compose down in the deployment folder stops the stack, and your data and settings stay in ./data and ./config until you delete them. The Upgrade page says not to run docker compose down --volumes until an upgraded deployment has been verified.

Usage data and outbound connections

  • The self-host page says that in disconnected networks, fonts from cdn.affine.pro, default client telemetry and images from ghcr.io need separate planning. Source: https://affine.pro/self-host
  • The Team Plan checks license keys over the Internet, against app.affine.pro. An Installable License works where that service cannot be reached. Source: https://docs.affine.pro/self-host-affine/features/team-license
  • The AI page says self-hosted AI uses provider keys you add to a workspace (OpenAI, Anthropic, Gemini or FAL), custom OpenAI-compatible endpoints only if an administrator allows them, and an AFFiNE AI plan fallback where available for transcription and indexing. The self-host page says to review the provider data flow before you enable AI, and that AI can be disabled server-wide or per workspace. Sources: https://docs.affine.pro/self-host-affine/administer/ai and https://affine.pro/self-host
  • The download page says the desktop app syncs only when you choose to sign in to AFFiNE Cloud. Source: https://affine.pro/download

Sources

Files
README.md  7 KB
setup/backup-and-upgrade.md  5 KB
setup/build-from-source.md  3 KB
setup/claude-code.md  3 KB
setup/configuration-and-ai.md  3 KB
setup/cursor.md  1 KB
setup/desktop-and-web.md  3 KB
setup/docker-compose.md  4 KB
setup/other-mcp-clients.md  2 KB

9 files, 31 KB, downloaded as a zip.

What’s new

  • Version 2 · 2026-11-09

    Updated by Mindket to the current version of this kit.

  • Version 1 · 2026-11-03

Reviews

No ratings yet

Write a review

No reviews yet.

What people say

Posts and comments that name this project on Hacker News, Bluesky, X, Reddit, Facebook and YouTube, found by a weekly search and on Trendshift. Mindket doesn’t write or check them. Open one to read it where it was posted.

entherheTo replace Notion&Miro, we build a next-gen open-source knowledge baseCheck out at:https://github.com/toeverything/AFFiNE#stay-up-to-date We built an open-source, privacy first Notion/Miro alternative! We call it Affine, and we built it with Typescript/React/Rust. We know that there have been so called notion or airtable "open source alternative"s, but we want to…5 points · 2 repliesMarek 'seqre' GrzelakI haven't used them myself, but heard of those projects which sound like could work: github.com/toeverything... github.com/AppFlowy-IO/...4 likes@awe0_io$81r/opensourcevietnamTỰ DO SÁNG TẠO KHÔNG GIỚI HẠN VỚI AFFINE: SỰ KẾT HỢP HOÀN HẢO GIỮA MIRO WHITEBOARD VÀ NOTION DOCS TỰ HOSTsimonpureToeverything/AFFiNE: privacy first knowledge base4 pointsDavidAFFiNE 0.27.4 brings GPT 5.6 and Gemini 3.7 support, better memory usage during GC, and improved BYOK model editing. Heads up: major breaking changes to server config and version compatibility. #selfhosted #homelab https://github.com/toeverything/AFFiNE/releases/tag/v0.27.42 likes@RepoLogsTired of paying for Notion AND Miro? AFFiNE is the open-source knowledge base combining docs, whiteboards, and planning into a single lightning-fast workspace. Built for privacy-first teams who want total control over their data stack... https://t.co/pK2MWv2ap7square_usualI built a faster Notion in RustThere's a ton of these right now. I did some research the other day and found at least five "open source" (to various degrees, all of these are not strictly speaking open source but open core) notion alternatives, and they're all in some ways better, in some ways worse than notion. I settled on…DavidAFFiNE 0.27.4 brings GPT 5.6 and Gemini 3.7 support, better memory usage during GC, and OneNote import improvements. Heads up: config now uses config.json over env vars. #selfhosted #homelab https://github.com/toeverything/AFFiNE/releases/tag/v0.27.42 likes@the_osps• Docs and whiteboard fully merged on an edgeless canvas • Multimodal AI partner for reports, slides, mindmaps, and prototypes • Local-first with real-time sync and self-hosting supportxet7Show HN: Kan.bn – An open-source alterative to TrelloFor replacing Notion Kanban, maybe AFFiNE, that is mostly MIT license: https://github.com/toeverything/AFFiNE But some part of server code license may need checking: https://github.com/toeverything/AFFiNE/blob/canary/packages/...GitHub Trending JS/TS🎉 Celebrating! 🎉 (500+ new stars) 📦 toeverything / AFFiNE ⭐ 64,112 (+536) 🗒 TypeScript There can be more than Notion and Miro. AFFiNE(pronounced [ə‘fain]) is a next-gen knowledge base that brings planning, sorting and creating all together. Privacy first, open-source, customizable an...2 replies

Searched

More from Mindket

See all from Mindket

Bonsai-27B-GGUF

lmstudio-community · Kit

A GGUF conversion of the 27B Bonsai model for LM Studio, with a 3.80 GB Q1_0 language file and a 0.93 GB BF16 vision projector. Tested for text, vision and par…

New

Runs DeepSeek-V4.1-Flash-1017 as a 2.9 bits-per-weight EXL3 quantization, a 196 GiB copy for people serving large models on their own hardware. Perplexity stay…

New

MusicGen Small

facebook · Kit

Generates short music clips from a text description or an audio prompt, in the small checkpoint of facebook's MusicGen. It suits developers and music hobbyists…

New

Similar projects

See all in Productivity

vscode

microsoft · Kit

Holds the open source code behind Visual Studio Code, an editor with debugging, extensions and tool integration for Windows, macOS and Linux. For developers wh…

New195k

Bun

oven-sh · Kit

The all-in-one toolkit for JavaScript and TypeScript apps. One executable holds a Node.js-compatible runtime, a package manager, a test runner and a bundler. T…

New96.7k

Memos

usememos · Kit

A free, MIT-licensed note-taking app that you host yourself, where short thoughts and longer Markdown notes gather in a personal timeline. The setup notes cove…

New64.4k