English | 中文
Version and release management for monorepos that span multiple languages and package ecosystems.
Semifold connects packages from different ecosystems into one dependency-aware workspace. It records release intent in reviewable changesets, updates related versions and changelogs together, and publishes packages in dependency order without replacing Cargo, npm, Python packaging, CMake, or your existing build and test tools.
- One cross-ecosystem workspace graph: stable package identities, manifest dependencies, and explicit relationships such as a native library that must republish its Node.js binding.
- Reviewable release intent: Markdown changesets describe affected packages, semantic-version bumps, changelog categories, and user-facing summaries before versions move.
- Consistent versioning:
smif statuspreviews the repository-wide decision;smif versionapplies manifest edits, internal requirement updates, changelogs, and configured hooks from the same plan. - Dependency-ordered publishing: registry pre-checks, ecosystem-specific commands, GitHub Releases, assets, and partial-failure reporting share one publish workflow.
- Release automation:
smif cimaintains a release branch and pull request when changesets exist, then publishes the prepared versions after that pull request is merged. - Extensible ecosystems: repository-local JavaScript plugins can add package discovery, inspection, and version-edit planning within a capability-restricted runtime.
Built-in adapters currently cover Rust, Node.js, Python, and C++. See the workspace documentation for the exact manifest and dependency behavior of each adapter.
The installed command is available as both smif and semifold; the examples use smif.
macOS and Linux:
curl -L https://semifold.noctisynth.org/install/install.sh | shWindows PowerShell:
irm https://semifold.noctisynth.org/install/install.ps1 | iexcargo install semifoldAfter the initial npm publication of @semifold/cli is complete:
npm install --global @semifold/cliThe npm distribution requires Node.js 20 or newer. It uses napi-rs platform packages for x64 and arm64 on macOS, Windows, and glibc-based Linux. Install only @semifold/cli; npm selects the matching native package.
Verify any installation with:
smif --versionFor installation boundaries and alternatives, read the installation guide.
From the root of a Git repository:
smif init
smif commit
smif statussmif init discovers packages and creates .changes/config.toml. After a user-visible code change, smif commit records its release intent in .changes/*.md, and smif status shows every directly or transitively affected package before files are changed.
For repositories using the generated GitHub Actions workflows, commit the code and changeset together and merge them into main. Semifold then follows this lifecycle:
code change + changeset
-> release plan
-> generated release pull request
-> version and changelog review
-> dependency-ordered publish
Without the generated workflow, preview and apply the same stages manually with smif version --dry-run, smif version, smif publish --dry-run, and smif publish.
Follow the first-release tutorial before adopting the workflow in a production repository.
Issues and pull requests are welcome. Read the contributing guide before changing behavior, configuration, public documentation, or package metadata.
Semifold draws inspiration from Changesets and Covector, while extending the workflow around a dependency graph that spans package ecosystems.
Semifold is distributed under the AGPL-3.0-only license.