Skip to content

Latest commit

 

History

History
115 lines (75 loc) · 4.85 KB

File metadata and controls

115 lines (75 loc) · 4.85 KB
Semifold logo

Semifold

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.

What Semifold manages

  • 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 status previews the repository-wide decision; smif version applies 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 ci maintains 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.

Installation

The installed command is available as both smif and semifold; the examples use smif.

Installation script

macOS and Linux:

curl -L https://semifold.noctisynth.org/install/install.sh | sh

Windows PowerShell:

irm https://semifold.noctisynth.org/install/install.ps1 | iex

Cargo

cargo install semifold

npm

After the initial npm publication of @semifold/cli is complete:

npm install --global @semifold/cli

The 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 --version

For installation boundaries and alternatives, read the installation guide.

A first release

From the root of a Git repository:

smif init
smif commit
smif status

smif 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.

Documentation

Contributing

Issues and pull requests are welcome. Read the contributing guide before changing behavior, configuration, public documentation, or package metadata.

Acknowledgements

Semifold draws inspiration from Changesets and Covector, while extending the workflow around a dependency graph that spans package ecosystems.

License

Semifold is distributed under the AGPL-3.0-only license.