FsSemanticTagger 0.3.0-alpha.2
See the version list below for details.
dotnet tool install --global FsSemanticTagger --version 0.3.0-alpha.2
dotnet new tool-manifest
dotnet tool install --local FsSemanticTagger --version 0.3.0-alpha.2
#tool dotnet:?package=FsSemanticTagger&version=0.3.0-alpha.2&prerelease
nuke :add-package FsSemanticTagger --version 0.3.0-alpha.2
FsSemanticTagger
Automatic semantic versioning for F# NuGet packages. FsSemanticTagger inspects your compiled DLL to detect API changes and determines the correct version bump according to Semantic Versioning.
How It Works
FsSemanticTagger extracts the public API surface from your compiled assembly using reflection metadata. It compares the current API against the previously released version and classifies changes:
| Change type | Example | Version bump |
|---|---|---|
| Breaking (removed/changed) | Deleted a public method | Major (or minor if < 1.0) |
| Addition (new public API) | Added a new public type | Minor (or patch if < 1.0) |
| No API change | Internal refactoring | Patch |
Installation
dotnet tool install -g FsSemanticTagger
Usage
Generate a config file
For monorepos with multiple packages, generate a semantic-tagger.json config:
fssemantictagger init
This scans for packable .fsproj files and writes a config with sensible defaults. For single-package repos, the tag prefix is "v". For multi-package repos, each package gets a prefix like "mylib-v".
Extract the public API from a DLL
fssemantictagger extract-api path/to/MyLib.dll
Outputs one signature per line:
type MyNamespace.MyClass
MyClass::MyMethod(int, string): bool
MyClass::MyProperty: string
MyClass::.ctor(int)
Compare two versions of a DLL
fssemantictagger check-api old/MyLib.dll new/MyLib.dll
Exit codes:
- 0 -- No API changes
- 1 -- Non-breaking additions only
- 2 -- Breaking changes detected
Orchestrate a release
# Auto-detect changes and bump version accordingly
fssemantictagger release auto
# Start a pre-release cycle
fssemantictagger release alpha
fssemantictagger release beta
fssemantictagger release rc
# Promote to stable
fssemantictagger release stable
The release command:
- Checks for a clean working copy (no uncommitted changes)
- Builds in Release configuration
- Compares API against the previous release tag
- Updates the version in your
.fsprojfile(s) - Creates a VCS tag (supports both Git and Jujutsu)
Add --publish to build and pack locally instead of pushing tags for CI:
fssemantictagger release auto --publish
Configuration
FsSemanticTagger works with zero configuration for simple projects. It auto-discovers a single packable .fsproj file (one with a <PackageId> element).
For monorepos or custom setups, create a semantic-tagger.json:
{
"packages": [
{
"name": "MyLib",
"fsproj": "src/MyLib/MyLib.fsproj",
"tagPrefix": "v",
"fsProjsSharingSameTag": ["src/MyLib.Extensions/MyLib.Extensions.fsproj"]
}
],
"reservedVersions": ["1.0.0"]
}
Config fields
| Field | Type | Description |
|---|---|---|
packages |
array | List of packages to manage |
packages[].name |
string | Package name |
packages[].fsproj |
string | Path to the project file |
packages[].dllPath |
string? | Path to compiled DLL (auto-derived if omitted) |
packages[].tagPrefix |
string? | Git/jj tag prefix (default: "v") |
packages[].fsProjsSharingSameTag |
string[]? | Other .fsproj files to update with the same version |
reservedVersions |
string[]? | Versions to skip |
Pre-release Version Flow
FsSemanticTagger follows a structured pre-release progression:
0.1.0-alpha.1 -> 0.1.0-alpha.2 -> 0.1.0-beta.1 -> 0.1.0-rc.1 -> 0.1.0
alpha/betaincrements: bumps the pre-release number (e.g.,alpha.1toalpha.2)- If API changes are detected during
rc, it drops back tobeta stableremoves the pre-release suffix
VCS Support
FsSemanticTagger works with both Git and Jujutsu. It tries Jujutsu first, then falls back to Git. Tags and clean-working-copy checks work with either VCS.
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.13.0-alpha.2 | 47 | 5/4/2026 |
| 0.13.0-alpha.1 | 66 | 4/27/2026 |
| 0.12.0-alpha.5 | 85 | 4/24/2026 |
| 0.12.0-alpha.4 | 71 | 4/22/2026 |
| 0.12.0-alpha.3 | 69 | 4/20/2026 |
| 0.12.0-alpha.2 | 81 | 4/15/2026 |
| 0.12.0-alpha.1 | 86 | 4/13/2026 |
| 0.11.0-alpha.1 | 64 | 4/13/2026 |
| 0.10.0-alpha.3 | 73 | 4/11/2026 |
| 0.10.0-alpha.1 | 74 | 4/8/2026 |
| 0.9.0-alpha.1 | 67 | 4/8/2026 |
| 0.8.0-alpha.4 | 73 | 4/8/2026 |
| 0.8.0-alpha.2 | 46 | 4/8/2026 |
| 0.8.0-alpha.1 | 62 | 4/8/2026 |
| 0.4.0-alpha.1 | 64 | 4/8/2026 |
| 0.3.0-alpha.2 | 73 | 4/7/2026 |
| 0.3.0-alpha.1 | 61 | 4/7/2026 |
| 0.2.0-alpha.1 | 84 | 4/7/2026 |
| 0.1.0-alpha.1 | 105 | 4/6/2026 |