Skip to content

Shipped vs planned

Fanout is pre-release. It is used in earnest, and it changes without migration paths. This page is the account of what that means per capability, so a reader does not have to infer it from how confidently a page is written.

Every documentation page carries one of three markers in its frontmatter, and the vocabulary is closed — a fourth value fails the build rather than quietly introducing a fourth kind of claim:

MarkerWhat it means
shippedThe binary on the current tag does this, and the shape is settled.
previewIt runs today, and its shape may still change without a migration path.
plannedDesigned and written down. Nothing executes it yet.

The marker reaches an agent too: llms.txt annotates every non-shipped page inline, so something reading the index knows before it fetches the page.

Every page states its status explicitly rather than relying on the default. That is deliberate: shipped is the schema’s default, so a page that says nothing asserts stability by silence — which is the opposite of what a pre-release product should do. Most pages here are preview because their user-facing contracts are still being refined. The marker describes the current stability of a capability; it does not imply an unlisted compatibility surface.

shipped is reserved for what has not moved and is not expected to: what Fanout is, the release and install mechanics, and backing up the data directory.

CapabilityStatusNotes
OTLP ingest over gRPC and HTTPshippedBoth transports, one port and one ingest token.
Parquet storage, trace indexes, and DuckDB analyticsshippedAuthoritative local Parquet; rebuildable DuckDB query state.
Browser clientpreviewShips in the binary; surfaces still moving.
Chat investigatorpreviewDisabled unless FANOUT_AI_PROVIDER selects anthropic or openai; the selected provider’s key is required at startup.
Agent-built dashboardspreviewBuild and refine from chat: fifteen panel types, variables, comparison, saved grids and immutable versions with restore. View links retain filters and time; dashboard access remains owner-scoped.
MCP toolspreviewServed at /mcp; the tool set is not frozen.
AlertspreviewRules evaluate on an interval against rollups.
Local email sign-inshippedCodes by email; no passwords.
Local self-signuppreviewFANOUT_SELF_SIGNUP, off by default. Provisions viewers after code verification only.
OIDC viewer auto-provisioningpreviewVerified identities admitted as viewers without a shared credential.
OIDC sign-inshippedProvider flow, with group and domain mapping.
Generated settings referenceshippedcmd/fanout-docgen writes it; just check fails when it drifts from the type.
Release checksums and provenanceshippedSHA256SUMS plus GitHub build attestations on every archive.
Publication benchmarkpreviewA qualified candidate is visible on Performance; repeatable public artifacts are still required.
Signatures and SBOMplannedDeliberately deferred until something consumes them.
Guides for every operational taskpreviewDashboard authoring and inspection are documented; operational coverage is still incomplete.
Namespace scoping on alert rulesplannedThe field is stored but evaluation ignores it; scope with service.

What “no migration path” means in practice

Section titled “What “no migration path” means in practice”

It means what it says. A storage-format change may require starting from an empty data directory. The configuration loader rejects unknown FANOUT_ setting names, except platform-injected service-discovery names, so a typo surfaces as a refusal to start rather than as a silently ignored value.

Do not run a Fanout instance as the only copy of data you need to keep.