CRDT
Apps
- greyhound_markdown — real-time collaborative markdown editor built on
crdt_lf(source)
Packages
- hlc
- crdt_lf
- crdt_socket_sync
- crdt_lf_flutter
- crdt_lf_devtools_extension
- crdt_lf_hive
- crdt_lf_sqlite
- crdt_lf_drift
Roadmap
A roadmap is available in the project page. The roadmap provides a high-level overview of the project's goals and the current status of the project.
Workspace structure
This repository is a workspace that contains multiple packages and apps. Consistency is granted by the melos tool.
Melos
Melos (pub.dev) is a CLI tool for Dart/Flutter monorepos. It links the local packages together, so every package can depend on the others without publishing them first, and it runs the same command over all of them (format, analyze, test, publish, ...).
Every shared command lives in melos.yaml and runs with
melos run <script>:
| Script | What it does |
|---|---|
format | formats the code (80 characters per line) |
analyze | runs the analyzer with warnings and infos as errors |
test / test_flutter / test_chrome | runs the Dart, Flutter and web tests |
benchmark | runs the crdt_lf benchmarks |
devtools_build | builds the DevTools extension |
docs_bs / docs_build | bootstraps and builds the documentation site |
update_references | propagates package/app references into the READMEs |
Setup
The Flutter SDK is pinned with fvm, and the documentation
site is a Docusaurus project, so Node.js (with
npm) is required too.
fvm install # installs the pinned Flutter SDK
fvm dart pub get # resolves the workspace tools (melos included)
fvm dart run melos bootstrap # links the packages and prepares the examples
fvm dart run melos run docs_bs # optional: installs the documentation site (needs Node.js)
Note Melos is a
dev_dependencyof the rootpubspec.yaml, so running it asfvm dart run melos ...is the safest option: you use the melos version pinned by this repository, with the Flutter/Dart SDK pinned by fvm. A globally activated melos (dart pub global activate melos) works as well, but it may be a different version than the one the workspace expects, and the difference usually shows up at the worst possible moment 🙃.
A command is provided to try to publish all packages:
fvm dart run melos publish --dry-run
This ensures that every package is formatted, analyzed, tested and built.
Organization
The repository structure is organized as follows:
workspace/
├── melos.yaml # melos configuration file
├── packages/ # contains every package of the workspace
│ ├── crdt_lf/
│ │ ├── lib/
│ │ ├── example/
│ │ └── flutter_example/
│ └── .../
│ ├── lib/
│ ├── example/
│ └── flutter_example/
├── apps/ # contains the applications built on top of the packages
│ └── greyhound_markdown/
│ ├── client/
│ └── server/
├── docs/ # the documentation site (Docusaurus, Node.js project)
├── scripts/ # dart scripts used by the melos commands
└── assets/ # contains the assets used in the documentation
└── .../
VS Code
If you work with VS Code, the repository already contains a
.vscode folder with:
- the recommended extensions (Dart, Flutter, Melos, Mermaid);
- the settings (fvm SDK path, project dictionary for the spell checker);
- the launch configurations for the apps and the examples;
- the snippets used in the READMEs and the changelogs.
Accepting the recommended extensions gives you the smoothest experience on this workspace.
Contributing
Contributions are welcome: bug fixes, new features, documentation, performance work, or anything else — a fixed typo counts too 💚.
The whole flow (roadmap, issues, pull requests, AI-assisted work) is described in CONTRIBUTING.md. Please read it before opening an issue or a pull request.