本文档概述了 AppFlowy 的项目结构、技术选择和架构组织。它涵盖了高层目录布局、核心技术栈决策以及 Flutter 前端和 Rust 后端如何构建和集成。
有关应用程序初始化过程的详细信息,请参阅前端架构和应用程序初始化。有关后端服务架构详情,请参阅后端架构和核心服务。
AppFlowy 采用**混合架构**,结合了 Flutter 前端和 Rust 后端,旨在实现跨平台部署同时保持原生性能。该系统支持仅本地操作模式和云同步操作模式。
来源: README.md54-58 frontend/appflowy_flutter/lib/startup/tasks/app_widget.dart127-143
该仓库清晰地分离了前端和后端职责
| 目录 | 目的 | 技术 |
|---|---|---|
frontend/ | 所有 Flutter 相关代码和资源 | Flutter/Dart |
frontend/appflowy_flutter/ | 主 Flutter 应用程序 | Flutter/Dart |
frontend/resources/ | 静态资源、翻译文件 | JSON、资产文件 |
| 后端目录 | Rust 核心服务和逻辑 | Rust |
doc/ | 文档和指南 | Markdown |
| 构建脚本 | 跨平台构建自动化 | Shell, Batch |
来源: .gitignore1-44 README.md42-52 frontend/scripts/code_generation/language_files/generate_language_files.sh46-52
Flutter 前端以 ApplicationWidget 为根组件组织,实现了 BLoC 模式进行状态管理,并支持全面的国际化。
来源: frontend/appflowy_flutter/lib/startup/tasks/app_widget.dart41-125 frontend/appflowy_flutter/lib/startup/deps_resolver.dart45-193
前端通过 DependencyResolver 使用了一套全面的依赖注入系统
来源: frontend/appflowy_flutter/lib/startup/deps_resolver.dart106-141 frontend/appflowy_flutter/lib/startup/deps_resolver.dart77-104
| 层 | 技术 | 目的 |
|---|---|---|
| 前端 | Flutter 3.x | 跨平台 UI 框架 |
| 后端 | Rust | 高性能核心服务 |
| 状态管理 | BLoC 模式 | 可预测的状态管理 |
| 导航 | GoRouter | 声明式路由 |
| 存储 | SQLite | 本地数据持久化 |
| FFI | flutter_rust_bridge | Flutter-Rust 通信 |
来源: README.md44-51 README.md54-58
AppFlowy 通过使用 easy_localization 包的全面 i18n 系统支持 20 多种语言。
该应用程序支持在 ApplicationWidget 中定义的以下区域设置:
来源: frontend/appflowy_flutter/lib/startup/tasks/app_widget.dart75-110 frontend/appflowy_flutter/packages/flowy_infra/lib/language.dart3-95 project.inlang/settings.json4-35
AppFlowy 实现了一套复杂的主题系统,支持浅色/深色模式、自定义主题和广泛的外观定制。
来源: frontend/appflowy_flutter/lib/workspace/application/settings/appearance/appearance_cubit.dart35-306 frontend/appflowy_flutter/lib/startup/deps_resolver.dart92-94
该项目使用 cargo-make 进行任务编排,并支持多种开发工作流。
| 工具 | 目的 | 用途 |
|---|---|---|
cargo-make | 任务编排 | 跨平台构建 |
flutter pub get | 依赖管理 | 包安装 |
easy_localization:generate | i18n 代码生成 | 翻译编译 |
| Docker | 容器化 | 自托管部署 |
| GitHub Actions | CI/CD | 自动化测试和发布 |
来源: README.md155 frontend/scripts/code_generation/language_files/generate_language_files.sh57-78 frontend/scripts/code_generation/language_files/generate_language_files.cmd18-26
AppFlowy 在 AGPLv3 许可下发布,并包含用于开发和部署的全面配置
.gitignore 配置排除了
/target/, **/*.rs.bk)package-lock.json, yarn.lock)**/resources/proto).idea/, **/.DS_Store)来源: .gitignore1-44 LICENSE1-588 project.inlang/settings.json1-49 doc/CONTRIBUTING.md1-8