mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-04 00:28:33 +00:00
2.6 KiB
2.6 KiB
Tutorial
Introduction
This tutorial will walk you through the codebase of AFFiNE. It is intended for new contributors to AFFiNE.
Building the project
Make sure you know how to build the project. See BUILDING for more information.
For the debugging purpose, you might need use local OctoBase on port 3000.
Codebase overview
The codebase is organized as follows:
apps/contains the source code for the different entry points of the project.web/contains the source code for the web app.electron/contains the source code for the Electron app.server/backend side for AFFiNE, see https://github.com/toeverything/OctoBase instead.
packages/contains the source code for all the packages in the repo.clicontains the source code for the CLI. Development only.componentcontains the source code for the UI component library.debugcontains the source code for the debug helper.envcontains the source code for the environment setup.hookscontains the source code for the custom React hooks.i18ncontains the source code for the internationalization.jotaicontains the source code for the Jotai store atoms.octobase-nodecontains the source code for the OctoBase Node.js binding using Rust.templatescontains the source code for the templates.workspacecontains the source code for the workspace related code.
@affine/env
Environment setup for AFFiNE client side.
It includes the global constants, browser and system check.
This package should be imported at the very beginning of the entry point.
@affine/workspace
Current we have two workspace plugin:
localfor local workspace, which is the default workspace type.affinefor cloud workspace, which is the workspace type for AFFiNE Cloud with OctoBase backend.
Design principles
- Each workspace plugin has its state and is isolated from other workspace plugins.
- The workspace plugin is responsible for its own state management, data persistence, synchronization, data backup and recovery.
For the workspace API, see types.ts.
@affine/component
The UI component library for AFFiNE.
Each component should be a standalone component which can be used in any context, like the Storybook.
Debugging Environments
@affine/env
yarn dev
@affine/electron
See building desktop client app.
@affine/component Storybook
yarn workspace @affine/component storybook