Release Strategy
This page documents how Momo manages releases, versioning, and artifact publishing.
Monorepo + Mirror Architecture
Section titled “Monorepo + Mirror Architecture”Momo uses a monorepo workflow with git subrepo mirrors:
- Monorepo (
momomemory/monorepo): Contains the entire project history - Server Mirror (
momomemory/momo): Core Rust server - SDK Mirror (
momomemory/sdk-typescript): TypeScript SDK - Plugin Mirrors (
momomemory/opencode-momo,momomemory/openclaw-momo,momomemory/pi-momo)
Changes are made in the monorepo and pushed to mirrors using just subrepo-push.
Release Commands
Section titled “Release Commands”Use the justfile recipes to release components:
Server Release
Section titled “Server Release”just release-momo 0.3.1This will:
- Bump
momo/Cargo.tomlversion - Commit and push to monorepo
- Push to server mirror (
momomemory/momo) - Create tag
v0.3.1on the mirror repo
SDK Release
Section titled “SDK Release”just release-sdk-ts 0.3.0Plugin Releases
Section titled “Plugin Releases”just release-plugin-opencode 0.1.4just release-plugin-openclaw 0.1.1just release-plugin-pi 0.1.3Published Artifacts
Section titled “Published Artifacts”Published artifacts are defined by each mirror repository’s release workflow.
- Server mirror releases may attach binaries, checksums, and container images.
- SDK and plugin mirrors publish npm packages from their own release automation.
- Check the mirror repository for the exact artifacts produced by a given release.
Versioning Policy
Section titled “Versioning Policy”- Follow Semantic Versioning 2.0.
- Source of truth:
Cargo.tomlorpackage.jsonversionfield. - Mirror tags use
v{version}format (e.g.,v0.3.1). - Pre-release versions (
-alpha,-beta,-rc.N) are supported. - Docker tag
latestonly updates on stable (non-pre-release) tags.
Mirror Release Flow
Section titled “Mirror Release Flow”Each mirror repo owns its release workflow and is triggered after the just release-* command pushes code and creates a v* tag on that mirror:
- Tag created via
just release-*command - Mirror workflow runs in the target mirror repository
- Artifacts and publishing are handled by that mirror’s CI configuration
- npm publish for SDKs and plugins is handled in the mirror repo via OIDC Trusted Publishing
Example for the server:
just release-momo 0.3.1 → updates momo/Cargo.toml → commits "chore(momo): bump version to 0.3.1" → pushes to monorepo → pushes subrepo to momomemory/momo → creates tag v0.3.1 on mirror → mirror CI builds and releasesFuture Enhancements
Section titled “Future Enhancements”| Enhancement | Effort | When to Add |
|---|---|---|
release-please for automated changelogs | Low | When commit volume justifies it |
cargo-release for version bumps | Low | When manual bumps become tedious |
| Windows binary | Medium | When there’s user demand |
| Crates.io publish | Low | If/when the crate becomes a library |
| Cosign/Sigstore signing | Low | When supply-chain security matters |
| SBOM generation | Medium | For enterprise/compliance users |