Warning:
This document has not been updated for a while. If you find any outdated information, please feel free to open an issue or submit a PR.
Note For developing & building desktop client app, please refer to building-desktop-client-app.md
AFFiNE client has both Node.js & Rust toolchains.
We suggest develop our product under node.js LTS(Long-term support) version
install Node LTS version
Up to now, the major node.js version is 18.x
install fnm
fnm use
Please follow the official guide at https://www.rust-lang.org/tools/install.
This setup requires modern yarn (currently 3.x
), run this if your yarn version is 1.x
Reference: Yarn installation doc
corepack enable
corepack prepare yarn@stable --activate
# install dependencies
yarn install
Run the following script. It will build the native module at /packages/native
and build Node.js binding using NAPI.rs.
This could take a while if you build it for the first time.
Note: use strip
from system instead of binutils
if you are running MacOS. see problem here
yarn workspace @affine/native build
yarn run build:infra
yarn run build:plugins
yarn workspace @affine/storage build
Adding test cases is strongly encouraged when you contribute new features and bug fixes.
We use Playwright for E2E test, and vitest for unit test.
To test locally, please make sure browser binaries are already installed via npx playwright install
.
Also make sure you have built the @affine/core
workspace before running E2E tests.
yarn test
# there are `affine-local`, `affine-legacy/*`, `affine-local`, `affine-plugin`, `affine-prototype` e2e tests,
# which are run under different situations.
cd tests/affine-local
yarn e2e