FsSemanticTagger 0.8.0-alpha.1

This is a prerelease version of FsSemanticTagger.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet tool install --global FsSemanticTagger --version 0.8.0-alpha.1
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local FsSemanticTagger --version 0.8.0-alpha.1
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=FsSemanticTagger&version=0.8.0-alpha.1&prerelease
                    
nuke :add-package FsSemanticTagger --version 0.8.0-alpha.1
                    

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:

  1. Checks for a clean working copy (no uncommitted changes)
  2. Builds in Release configuration
  3. Compares API against the previous release tag
  4. Updates the version in your .fsproj file(s)
  5. 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 / beta increments: bumps the pre-release number (e.g., alpha.1 to alpha.2)
  • If API changes are detected during rc, it drops back to beta
  • stable removes 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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