Supported formats
Used by Node.js (package.json).
FerrFlow updates the top-level version field.
{ "name": "my-package", "version": "1.2.3"}Used by Rust (Cargo.toml) and Python (pyproject.toml).
FerrFlow updates the version field under [package], [project], or [tool.poetry].
[package]name = "my-crate"version = "1.2.3" # ← updatedUsed by Java/Maven (pom.xml).
FerrFlow updates the first <version> element it encounters.
<project> <groupId>com.example</groupId> <artifactId>my-app</artifactId> <version>1.2.3</version> <!-- updated --></project>Used by Java/Kotlin Gradle projects (build.gradle, build.gradle.kts).
FerrFlow updates the version = "..." assignment.
version = "1.2.3" // updatedUsed for simple version files (VERSION, VERSION.txt).
FerrFlow replaces the entire file content with the version number.
1.2.3Used by Go projects (go.mod).
Go modules use git tags directly — FerrFlow does not modify go.mod. The version is derived entirely from the git tag (v1.2.3 or {name}@v1.2.3).
On a brand-new repo with no matching tag yet, FerrFlow v3+ bootstraps from the strategy’s zero value (0.0.0 for semver, 0 for sequential, …) and creates the first real tag itself — you do not need to run git tag … v0.0.0 before the first release. See how release picks the baseline.
Used by Kubernetes Helm charts (Chart.yaml).
FerrFlow updates the version field and, when present, keeps appVersion in sync.
The newer chartyaml alias is functionally equivalent — use whichever reads more naturally in your config.
apiVersion: v2name: my-appversion: 1.2.3 # ← updatedappVersion: "1.2.3" # ← updated when presentUsed by Dart and Flutter packages (pubspec.yaml).
FerrFlow updates the top-level version: key, leaving dependency versions, anchors, and comments intact. SemVer build suffixes (1.2.3+42) are supported.
name: my_appversion: 1.2.3+42 # ← updateddependencies: some_pkg: version: 2.0.0 # untouched — this is a dep constraintConfig snippet:
[[package.versioned_files]]path = "pubspec.yaml"format = "pubspecyaml"Used by Elixir / Mix projects (mix.exs).
FerrFlow updates the first version: "…" literal it finds — the canonical spot is inside def project do [ ..., version: "x.y.z", ... ] end.
def project do [ app: :my_app, version: "1.2.3", # ← updated elixir: "~> 1.15", deps: deps() ]endConfig snippet:
[[package.versioned_files]]path = "mix.exs"format = "mixexs"Used by Ruby gems (*.gemspec).
FerrFlow updates the .version = "…" assignment. Any receiver name works (s, spec, gem, …). Setting version from a constant (s.version = MyGem::VERSION) isn’t covered — version the loaded version.rb file directly in that case.
Gem::Specification.new do |s| s.name = "my_gem" s.version = "1.2.3" # ← updatedendConfig snippet:
[[package.versioned_files]]path = "my_gem.gemspec"format = "gemspec"Used by Swift packages (Package.swift).
Swift PM derives a package’s version from git tags, so there’s no canonical location inside Package.swift — FerrFlow updates the first let <name>Version = "…" declaration. Constant names must end with Version (e.g. packageVersion, AppVersion) or be literally version. Dependency .package(url:..., from: "…") arguments are not touched.
import PackageDescription
let packageVersion = "1.2.3" // ← updated
let package = Package( name: "MyPackage", dependencies: [ .package(url: "…", from: "1.5.0"), // untouched ])Config snippet:
[[package.versioned_files]]path = "Package.swift"format = "packageswift"File → format quick reference
Section titled “File → format quick reference”| File | format | Selector / behaviour |
|---|---|---|
Cargo.toml | toml | package.version |
pyproject.toml | toml | project.version or tool.poetry.version |
package.json | json | version |
composer.json | json | version |
pom.xml | xml | first <version> tag |
*.csproj | csproj | <Version> in <PropertyGroup> |
build.gradle, build.gradle.kts | gradle | version = "…" |
Chart.yaml | helm or chartyaml | top-level version: |
pubspec.yaml | pubspecyaml | top-level version: |
mix.exs | mixexs | version: "…" in project keyword list |
*.gemspec | gemspec | <ident>.version = "…" |
Package.swift | packageswift | top-level let <name>Version = "…" |
go.mod | gomod | git tag only — no file write |
VERSION, VERSION.txt | txt | entire file content |
Multiple files per package
Section titled “Multiple files per package”A package can have as many versioned file entries as needed:
{ "package": { "versionedFiles": [ { "path": "Cargo.toml", "format": "toml" }, { "path": "npm/package.json", "format": "json" } ] }}[[package.versioned_files]]path = "Cargo.toml"format = "toml"
[[package.versioned_files]]path = "npm/package.json"format = "json"{ package: { versionedFiles: [ { path: "Cargo.toml", format: "toml" }, { path: "npm/package.json", format: "json" }, ], },}package: versionedFiles: - path: Cargo.toml format: toml - path: npm/package.json format: jsonBoth files will be updated to the same version before the git commit.