JSON

Used by Node.js (package.json).

FerrFlow updates the top-level version field.

{
  "name": "my-package",
  "version": "1.2.3"
}

TOML

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"   # ← updated

XML

Used 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>

Gradle

Used by Java/Kotlin Gradle projects (build.gradle, build.gradle.kts).

FerrFlow updates the version = "..." assignment.

version = "1.2.3"   // updated

Plain text

Used for simple version files (VERSION, VERSION.txt).

FerrFlow replaces the entire file content with the version number.

1.2.3

Go

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

Helm

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: v2
name: my-app
version: 1.2.3        # ← updated
appVersion: "1.2.3"   # ← updated when present

Dart

Used 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_app
version: 1.2.3+42     # ← updated
dependencies:
  some_pkg:
    version: 2.0.0    # untouched — this is a dep constraint

Config snippet:

[[package.versioned_files]]
path   = "pubspec.yaml"
format = "pubspecyaml"

Elixir

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()
  ]
end

Config snippet:

[[package.versioned_files]]
path   = "mix.exs"
format = "mixexs"

Ruby

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"  # ← updated
end

Config snippet:

[[package.versioned_files]]
path   = "my_gem.gemspec"
format = "gemspec"

Swift

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

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 tag
*.csproj csproj in
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 .version = "…"
Package.swift packageswift top-level let Version = "…"
go.mod gomod git tag only — no file write
VERSION, VERSION.txt txt entire file content

Multiple files per package

A package can have as many versioned file entries as needed:

JSON

{
  "package": [
    {
      "versionedFiles": [
        { "path": "Cargo.toml", "format": "toml" },
        { "path": "npm/package.json", "format": "json" }
      ]
    }
  ]
}

TOML

[[package.versioned_files]]
path   = "Cargo.toml"
format = "toml"

[[package.versioned_files]] path = "npm/package.json" format = "json"

JSON5

{
  package: [
    {
      versionedFiles: [
        { path: "Cargo.toml", format: "toml" },
        { path: "npm/package.json", format: "json" },
      ],
    },
  ],
}

Both files will be updated to the same version before the git commit.