Help us shape the future of Go! Take the 2026 Go Developer Survey

flowcatalyst-go

module
v0.0.0-...-e3c07e6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 27, 2026 License: Apache-2.0

README

FlowCatalyst

A multi-tenant event router and webhook delivery platform, written in Go.

Applications publish domain events. Other applications (or yours, or external services) consume them via webhook subscriptions. FlowCatalyst handles routing, FIFO ordering, retry, rate-limiting, circuit breaking, and audit — across multiple tenants — so you don't have to reimplement that machinery in every consumer.

The Postgres schema, HTTP API contracts, OpenAPI spec, and Vue frontend are stable: existing SDK consumers and webhook subscribers keep working unchanged across releases.


Architecture at a glance

┌───────────────────┐                          ┌──────────────────────┐
│ Consumer apps     │  ──── events ──────▶     │   FlowCatalyst       │
│ (SDK / outbox)    │                          │                      │
│                   │  ◀──── webhooks ────     │   Platform · Router  │
└───────────────────┘                          │   Scheduler · Stream │
                                                │   Outbox             │
                                                └──┬───────────┬───────┘
                                                   │           │
                                                   ▼           ▼
                                              PostgreSQL    SQS FIFO
                                                   │           │
                                                   ▼           ▼
                                                Redis       Customer IDPs
                                              (HA leader)  (OIDC bridge)

In local development everything above collapses into a single fcdev process backed by an embedded Postgres — no Docker, no SQS, no Redis. (The embedded Postgres is vanilla; to add PostGIS see docs/embedded-postgres-postgis.md.)


Quick start

As a developer publishing events
# 1. Install fcdev (the local development binary)
curl -fsSL https://raw.githubusercontent.com/flowcatalyst/flowcatalyst/main/install.sh | sh

# 2. Run it
fcdev

# 3. Open http://localhost:8080

Windows (PowerShell 5.1+):

irm https://raw.githubusercontent.com/flowcatalyst/flowcatalyst/main/install.ps1 | iex

See Installing fcdev for pinning versions, manual installs, checksum/signature verification, and self-update.

As an operator deploying production

Deploy fc-server (the unified binary) with the subsystems you need enabled via env vars — run one instance with everything on, or several instances each running a subset (router-only, stream-only, …) for split topologies. See Operator notes.

As an engineer working on FlowCatalyst itself

Read docs/architecture.md, then CONVENTIONS.md before writing any code. The docs/usecase-pattern.md walks the compile-time-sealed UseCase + UnitOfWork pattern with a worked example.


Installing fcdev

fcdev is the all-in-one local-development binary. It ships pre-built for macOS (Apple Silicon + Intel), Linux (x86_64 + arm64), and Windows (x86_64). The install commands below fetch the latest release from GitHub, verify it, and put it on your PATH.

Release assets are named with Go's GOOS-GOARCH convention (darwin-arm64, darwin-amd64, linux-amd64, linux-arm64, windows-amd64).

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/flowcatalyst/flowcatalyst/main/install.sh | sh

The script detects your OS/arch from uname, downloads the matching archive, verifies its SHA256 sidecar, installs to /usr/local/bin/fcdev if writable (else ~/.local/bin/fcdev — no sudo prompt), and on macOS strips the Gatekeeper quarantine attribute.

Windows
irm https://raw.githubusercontent.com/flowcatalyst/flowcatalyst/main/install.ps1 | iex

Downloads the windows-amd64 zip, verifies its SHA256, extracts to %LOCALAPPDATA%\Programs\fcdev, and adds that directory to your user PATH (re-open your terminal afterwards). Windows-on-ARM runs the x64 binary under emulation.

Upgrading

Once fcdev is on your PATH, it self-updates — no need to re-run the installer:

fcdev upgrade           # download & replace if a newer release exists
fcdev upgrade --check   # just check, don't install
fcdev upgrade --force   # re-install even if already current

upgrade uses the same release artifacts the installer scripts do, verifies the SHA256, and atomically replaces the running binary.

Environment variables

Both installer scripts honour the same three variables:

Variable Default Purpose
FC_DEV_VERSION latest stable Pin a specific version (e.g. 0.5.0). The leading v is optional.
FC_DEV_INSTALL_DIR platform default (see above) Where to write fcdev.
FC_DEV_FORCE 0 When 1, reinstall even if the requested version is already present.

Example — pin a version into ~/bin on Linux:

curl -fsSL https://raw.githubusercontent.com/flowcatalyst/flowcatalyst/main/install.sh \
  | FC_DEV_VERSION=0.5.0 FC_DEV_INSTALL_DIR="$HOME/bin" sh
Manual install

If you'd rather not pipe a remote script into your shell, every archive on the releases page ships a .sha256 sidecar:

# 1. Pick your target (Go GOOS-GOARCH)
TARGET=darwin-arm64        # macOS Apple Silicon
# TARGET=darwin-amd64      # macOS Intel
# TARGET=linux-amd64       # Linux x86_64
# TARGET=linux-arm64       # Linux ARM64
# TARGET=windows-amd64     # Windows (use the .zip variant)

VERSION=0.5.0

# 2. Download archive + checksum
base="https://github.com/flowcatalyst/flowcatalyst/releases/download/fcdev/v${VERSION}"
curl -LO "${base}/fcdev-v${VERSION}-${TARGET}.tar.gz"
curl -LO "${base}/fcdev-v${VERSION}-${TARGET}.tar.gz.sha256"

# 3. Verify
shasum -a 256 -c "fcdev-v${VERSION}-${TARGET}.tar.gz.sha256"

# 4. Extract + install
tar -xzf "fcdev-v${VERSION}-${TARGET}.tar.gz"
sudo install -m 0755 "fcdev-v${VERSION}-${TARGET}/fcdev" /usr/local/bin/

# 5. (macOS only) strip Gatekeeper quarantine
xattr -d com.apple.quarantine /usr/local/bin/fcdev 2>/dev/null || true

fcdev version

On a private checkout or rate-limited network you can use the GitHub CLI instead, which reuses your gh auth:

gh release download fcdev/v0.5.0 --repo flowcatalyst/flowcatalyst \
  --pattern 'fcdev-v0.5.0-darwin-arm64.tar.gz*'
Verifying Linux archives (optional)

Linux release archives are additionally signed via Sigstore cosign keyless — the signature is bound to the exact GitHub Actions run that built it, recorded in the public Rekor transparency log:

cosign verify-blob \
  --signature  "fcdev-v${VERSION}-${TARGET}.tar.gz.sig" \
  --certificate "fcdev-v${VERSION}-${TARGET}.tar.gz.pem" \
  --certificate-identity-regexp '^https://github.com/flowcatalyst/flowcatalyst(-go)?/\.github/workflows/release-fcdev\.yml@refs/tags/fcdev/v' \
  --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
  "fcdev-v${VERSION}-${TARGET}.tar.gz"

Each release's notes include the exact --certificate-identity-regexp for that build. macOS and Windows archives are not yet codesigned.

Troubleshooting
  • fcdev: command not found after install — the install dir isn't on your PATH yet. Open a new terminal, or source ~/.zshrc (the script prints the exact line to add).
  • macOS "cannot be opened because it is from an unidentified developer" — the installer strips the quarantine xattr automatically; for a manual download run xattr -d com.apple.quarantine /usr/local/bin/fcdev.
  • First run downloads Postgres — fcdev fetches a platform-specific embedded-Postgres bundle on first launch, so the initial start needs network access and is slower than subsequent runs.

Binaries

Binary Purpose
fc-server Unified production server — every subsystem (platform API, router, scheduler, stream, outbox, MCP) toggleable via env vars. Run one instance with everything on, or several each running a subset for split topologies.
fcdev Local development monolith: all subsystems in one process against an embedded Postgres.

The repo ships these two binaries rather than a separate executable per subsystem — split topologies are achieved by running multiple fc-server instances with different subsystems enabled.


Building from source

The repo builds with make (run make help for the full target list):

make build            # build the Vue frontend, then every Go binary into bin/
make build-release    # optimized build (trimpath, -s -w)
make go-build         # Go binaries only (assumes frontend/dist already built)

Local dev loop (embedded Postgres — no Docker, no separate migrate step):

make run              # run fcdev once
make dev              # run fcdev with live reload (requires air; see `make install-tools`)
make dev-full         # fcdev + the Vite frontend dev server together
make run-server       # run the unified fc-server (subsystems via env)

Bootstrap & database:

make setup            # bootstrap admin user + default tenant + .env, then print next steps
make init             # bootstrap only
make fresh            # truncate every FlowCatalyst table (keeps schema)
make db-reset         # wipe the embedded Postgres data dir and start fresh

fcdev init also creates your application and writes its service-account credentials to .env. Those credentials are provisioned exactly like an application service account made in the admin UI: they carry the platform:application-service role and are confined to that one application. Event types you publish must therefore start with <application-code>: (anything else is rejected with 400), and event types are registered through the SDK sync endpoint (POST /api/applications/{appCode}/event-types/sync) rather than POST /api/event-types, which needs admin event-type permissions the application role does not carry.

Quality gates:

make install-hooks    # once: git pre-push hook that runs `make pre-push`
make pre-push         # fast gate (~1 min, no Docker): build, vet, pinned lint, conformance, changed-package tests
make test             # unit + integration (embedded Postgres)
make lint             # pinned golangci-lint (built into ./.tools with your Go)
make ci               # everything CI runs, same order, same pinned tools

See docs/contributing.md ("Before you push").


SDK clients

Language Location
TypeScript / JavaScript clients/typescript-sdk/
Laravel / PHP clients/laravel-sdk/
Go (in-repo package) pkg/fcsdk/

The TS and Laravel SDKs are generated from the huma OpenAPI spec (make sdk-generate); releases are cut with make release-ts-sdk / make release-laravel-sdk and mirrored to standalone repos. All SDKs cover the outbox pattern for atomic event publishing, definition syncing for declaring event types and roles, and webhook signature verification.


Technology stack

Layer Technology
Language Go 1.27
HTTP router go-chi/chi v5
API / OpenAPI huma v2 (OpenAPI 3.1, generated spec)
Database PostgreSQL via pgx v5; handwritten SQL compiled with sqlc; goose migrations
Embedded DB (dev) fergusstrange/embedded-postgres
Queue AWS SQS FIFO (prod), embedded Postgres (dev); NATS supported
Auth RS256 JWT (golang-jwt + lestrrat-go/jwx), OIDC bridge (coreos/go-oidc), WebAuthn/passkeys (go-webauthn), Argon2id passwords, HMAC webhook signing
Caching / HA in-process cache + Redis (go-redis) for leader election
Metrics Prometheus (client_golang)
Scheduling robfig/cron
Secrets AWS Secrets Manager, encrypted files
CLI spf13/cobra
MCP modelcontextprotocol/go-sdk (read-only server for LLM clients)
Frontend Vue SPA, built and embedded via //go:embed

PostgreSQL extensions: none required. Partitioning is managed in-process, the same code in dev and prod — no pg_partman or pg_cron.


Operator notes

Default HTTP port

fc-server defaults to FC_API_PORT=8080. Older deployments defaulted to 3000 — operators behind load-balancer rules that hard-code 3000 should set FC_API_PORT=3000 explicitly. The FC_API_PORT env var (or its legacy alias PORT) overrides the binary default.

Service Default Override env
Platform HTTP FC_API_PORT=8080 FC_API_PORT / PORT
fcdev --api-port 8080 FC_API_PORT / --api-port
Metrics FC_METRICS_PORT=9090 FC_METRICS_PORT
MCP 127.0.0.1:8090 FC_MCP_PORT / FC_MCP_BIND

The complete environment-variable reference (every variable the server, subsystems, and fcdev read, with defaults and aliases) is in docs/environment-variables.md.


Documentation


License

Copyright © 2026 Belac (FlowCatalyst)

Component License Text
Platform (cmd/, internal/, and everything not listed below) Apache-2.0 LICENSE, NOTICE
Go SDK (pkg/fcsdk/, its own Go module) Apache-2.0 pkg/fcsdk/LICENSE, pkg/fcsdk/NOTICE

The platform and the Go SDK are permissively licensed so that anyone can run, modify and build on them without a legal review standing in the way; the Apache licence also carries an explicit patent grant. The Go SDK is a separate Go module (github.com/flowcatalyst/flowcatalyst/pkg/fcsdk) and carries its own copy of the licence and notice, because a module download contains only the module's own directory.

Directories

Path Synopsis
bench
function-runtimes/wazerobench command
Command wazerobench measures function artifacts on the platform's real function engine (internal/functions/engine, wazero) through the same runtimes.Loader the runner uses: a "wasm" artifact is compiled as is, a "js" artifact is a bundled script loaded into the shared QuickJS engine.
Command wazerobench measures function artifacts on the platform's real function engine (internal/functions/engine, wazero) through the same runtimes.Loader the runner uses: a "wasm" artifact is compiled as is, a "js" artifact is a bundled script loaded into the shared QuickJS engine.
function-runtimes/wazerobench/loopcfg command
Command loopcfg isolates what wazero's CloseOnContextDone (the runner's deadline mechanism, engine.New) costs each guest: every workload, single thread, with the setting on (what the runner does) and off.
Command loopcfg isolates what wazero's CloseOnContextDone (the runner's deadline mechanism, engine.New) costs each guest: every workload, single thread, with the setting on (what the runner does) and off.
cmd
decrypt-check command
Throwaway diagnostic: verify FLOWCATALYST_APP_KEY can decrypt a ciphertext (e.g.
Throwaway diagnostic: verify FLOWCATALYST_APP_KEY can decrypt a ciphertext (e.g.
fc-server command
Command fc-server is the FlowCatalyst unified production server.
Command fc-server is the FlowCatalyst unified production server.
fcdev command
Command fcdev is the FlowCatalyst developer monolith — a single binary that runs every subsystem against an embedded Postgres so engineers can iterate without Docker.
Command fcdev is the FlowCatalyst developer monolith — a single binary that runs every subsystem against an embedded Postgres so engineers can iterate without Docker.
fcrunner-echo command
Command fcrunner-echo is the in-repo echo test runner (internal/functions/ echorunner): a Go v1 control-protocol client for the made-up runtime "echo".
Command fcrunner-echo is the in-repo echo test runner (internal/functions/ echorunner): a Go v1 control-protocol client for the made-up runtime "echo".
Package docs embeds the platform's PUBLISHED Markdown documentation — the curated set under published/ — so the running binary serves it to administrators (Platform → Documentation in the SPA, via /api/docs) and the pages always match the running build.
Package docs embeds the platform's PUBLISHED Markdown documentation — the curated set under published/ — so the running binary serves it to administrators (Platform → Documentation in the SPA, via /api/docs) and the pages always match the running build.
Package frontend embeds the built Vue SPA (frontend/dist) into the Go binary and exposes it as an http.Handler.
Package frontend embeds the built Vue SPA (frontend/dist) into the Go binary and exposes it as an http.Handler.
internal
common
Package common holds types shared across the router, queue, stream, outbox, and platform packages: messages, dispatch modes, mediation results, outbox status, configuration shapes, and warnings.
Package common holds types shared across the router, queue, stream, outbox, and platform packages: messages, dispatch modes, mediation results, outbox status, configuration shapes, and warnings.
envutil
Package envutil holds the shared environment-variable parsing helpers the per-package FromEnv constructors use.
Package envutil holds the shared environment-variable parsing helpers the per-package FromEnv constructors use.
functions/abi
Package abi is the function runner's guest calling convention, version 1 (docs/function-runner-plan.md §5): the frame layout both directions use, the request/response metadata, the host-call op codes and error codes, and the describe document a module declares its needs with.
Package abi is the function runner's guest calling convention, version 1 (docs/function-runner-plan.md §5): the frame layout both directions use, the request/response metadata, the host-call op codes and error codes, and the describe document a module declares its needs with.
functions/budget
Package budget is the function runner's memory accounting (docs/function-runner-plan.md §7).
Package budget is the function runner's memory accounting (docs/function-runner-plan.md §7).
functions/control
Package control is the wire contract between the platform and function runners (docs/function-runner-plan.md §8.3): the desired-state document a runner long-polls for, the heartbeat it reports back, and the emit request it makes on a function's behalf.
Package control is the wire contract between the platform and function runners (docs/function-runner-plan.md §8.3): the desired-state document a runner long-polls for, the heartbeat it reports back, and the emit request it makes on a function's behalf.
functions/echorunner
Package echorunner is a tiny in-repo test runner that speaks the Go v1 control protocol for a made-up runtime, "echo".
Package echorunner is a tiny in-repo test runner that speaks the Go v1 control protocol for a made-up runtime, "echo".
functions/engine
Package engine runs function modules on wazero (docs/function-runner-plan.md §6.1): one runtime per runner with a disk compilation cache, the `fc` host module every guest calls capabilities through, the load-time module check, and instances whose linear memory is charged to the runner's budget.
Package engine runs function modules on wazero (docs/function-runner-plan.md §6.1): one runtime per runner with a disk compilation cache, the `fc` host module every guest calls capabilities through, the load-time module check, and instances whose linear memory is charged to the runner's budget.
functions/fnfixture
Package fnfixture is the raw ABI v1 guest the function runner's tests run: a Rust module (source in guest/) whose behaviour is chosen by the request path — /echo, /meta, /count, /spin, /grow?mb=N, /trap, /malformed and /call?op=N (the request body is passed to fc.call as a host-call frame).
Package fnfixture is the raw ABI v1 guest the function runner's tests run: a Rust module (source in guest/) whose behaviour is chosen by the request path — /echo, /meta, /count, /spin, /grow?mb=N, /trap, /malformed and /call?op=N (the request body is passed to fc.call as a host-call frame).
functions/jsengine
Package jsengine embeds the function runner's shared JavaScript engine: QuickJS behind ABI v1, built from clients/fn-js-engine (see its build.sh).
Package jsengine embeds the function runner's shared JavaScript engine: QuickJS behind ABI v1, built from clients/fn-js-engine (see its build.sh).
functions/runner
Package runner is the function runner (docs/function-runner-plan.md §6): it long-polls the platform for its pool's desired state, prepares the versions it names (download, verify, compile), routes HTTP invocations to them with per-endpoint auth and per-function permits, serves their host calls, and reports back in heartbeats.
Package runner is the function runner (docs/function-runner-plan.md §6): it long-polls the platform for its pool's desired state, prepares the versions it names (download, verify, compile), routes HTTP invocations to them with per-endpoint auth and per-function permits, serves their host calls, and reports back in heartbeats.
functions/runtimes
Package runtimes turns a function artifact into something the engine can instantiate, for each runtime a version may declare:
Package runtimes turns a function artifact into something the engine can instantiate, for each runtime a version may declare:
ids
Package ids holds distinct types for the platform's entity identifiers.
Package ids holds distinct types for the platform's entity identifiers.
logging
Package logging configures structured logging via slog.
Package logging configures structured logging via slog.
mcp
Package mcp implements the FlowCatalyst MCP (Model Context Protocol) server: read-only, agent-facing access to the platform's event types, subscriptions, applications, roles, and OpenAPI specs.
Package mcp implements the FlowCatalyst MCP (Model Context Protocol) server: read-only, agent-facing access to the platform's event types, subscriptions, applications, roles, and OpenAPI specs.
migrate
Package migrate applies the embedded schema migrations to a Postgres database using github.com/pressly/goose/v3 as the runner.
Package migrate applies the embedded schema migrations to a Postgres database using github.com/pressly/goose/v3 as the runner.
netguard
Package netguard keeps outbound deliveries away from addresses that should never be a customer webhook: the machine's own loopback, cloud metadata (169.254.169.254 and its IPv6 sibling), link-local ranges, and — unless allowed — private networks such as the cluster's own pod and service addresses.
Package netguard keeps outbound deliveries away from addresses that should never be a customer webhook: the machine's own loopback, cloud metadata (169.254.169.254 and its IPv6 sibling), link-local ranges, and — unless allowed — private networks such as the cluster's own pod and service addresses.
oauthtoken
Package oauthtoken mints and caches OAuth2 client_credentials access tokens for one platform, for the components that call the platform as a client: the MCP server, and the router fetching its configuration document.
Package oauthtoken mints and caches OAuth2 client_credentials access tokens for one platform, for the components that call the platform as a client: the MCP server, and the router fetching its configuration document.
outbox
Package outbox implements the outbox processor: it polls the consumer application's outbox table, batches by message group, and forwards to the FlowCatalyst platform API.
Package outbox implements the outbox processor: it polls the consumer application's outbox table, batches by message group, and forwards to the FlowCatalyst platform API.
outbox/mongo
Package mongo is the MongoDB-backed outbox repository.
Package mongo is the MongoDB-backed outbox repository.
outbox/postgres
Package postgres is the Postgres-backed outbox repository.
Package postgres is the Postgres-backed outbox repository.
outbox/sqlite
Package sqlite is the SQLite-backed outbox repository.
Package sqlite is the SQLite-backed outbox repository.
platform/appdocs
Package appdocs stores application-synced documentation: Markdown pages an application pushes through the SDK sync surface (POST /api/applications/{appCode}/docs/sync), read by administrators in Platform → Documentation.
Package appdocs stores application-synced documentation: Markdown pages an application pushes through the SDK sync surface (POST /api/applications/{appCode}/docs/sync), read by administrators in Platform → Documentation.
platform/application
Package application represents a registered application (or integration) in the platform.
Package application represents a registered application (or integration) in the platform.
platform/application/api
Package api wires the HTTP routes for the application subdomain via huma.
Package api wires the HTTP routes for the application subdomain via huma.
platform/appusers
Package appusers is the user and invitation administration an application performs for its own users, as its own service account (F20).
Package appusers is the user and invitation administration an application performs for its own users, as its own service account (F20).
platform/audit
Package audit holds the audit log entity and repository (read API + a direct batch-ingest Insert).
Package audit holds the audit log entity and repository (read API + a direct batch-ingest Insert).
platform/audit/api
Package api wires the audit log read-only HTTP endpoints via huma.
Package api wires the audit log read-only HTTP endpoints via huma.
platform/auth
Package auth houses:
Package auth houses:
platform/auth/api
Package api wires admin HTTP routes for the auth subdomain via huma.
Package api wires admin HTTP routes for the auth subdomain via huma.
platform/auth/authservice
Package authservice owns JWT token generation and validation for the OAuth/OIDC surface (the former fosite-backed JWT strategy was removed — see ADR-0001).
Package authservice owns JWT token generation and validation for the OAuth/OIDC surface (the former fosite-backed JWT strategy was removed — see ADR-0001).
platform/auth/bridge
Package bridge implements the OIDC client / bridge side of auth: FlowCatalyst as an OIDC client of external IDPs (Entra, Keycloak, Google).
Package bridge implements the OIDC client / bridge side of auth: FlowCatalyst as an OIDC client of external IDPs (Entra, Keycloak, Google).
platform/auth/clientselection
Package clientselection serves /auth/client/* — the multi-tenant client context switcher used by the SPA in embedded auth mode (list accessible clients, switch, current).
Package clientselection serves /auth/client/* — the multi-tenant client context switcher used by the SPA in embedded auth mode (list accessible clients, switch, current).
platform/auth/grantstore
Package grantstore persists OAuth2 authorization codes and refresh tokens.
Package grantstore persists OAuth2 authorization codes and refresh tokens.
platform/auth/login
Package login wires the SPA's session-cookie authentication surface:
Package login wires the SPA's session-cookie authentication surface:
platform/auth/loginbackoff
Package loginbackoff provides layered brute-force protection for the password login endpoint.
Package loginbackoff provides layered brute-force protection for the password login endpoint.
platform/auth/mfatoken
Package mfatoken mints and validates the short-lived, single-purpose tokens that carry a half-authenticated user between /auth/login and the /auth/2fa/* endpoints:
Package mfatoken mints and validates the short-lived, single-purpose tokens that carry a half-authenticated user between /auth/login and the /auth/2fa/* endpoints:
platform/auth/oauthapi
Package oauthapi is the hand-rolled OAuth2 endpoint surface.
Package oauthapi is the hand-rolled OAuth2 endpoint surface.
platform/auth/operations
Package operations holds the 13 auth subdomain admin use cases.
Package operations holds the 13 auth subdomain admin use cases.
platform/auth/passwordhash
Package passwordhash is the single source of truth for FlowCatalyst's password / OAuth-client-secret hashing.
Package passwordhash is the single source of truth for FlowCatalyst's password / OAuth-client-secret hashing.
platform/auth/passwordpolicy
Package passwordpolicy is the single password-acceptance policy for internal (password-auth) users, applied everywhere the platform sets a password on a USER principal: admin user create, the self-service change-password flow, and the password-reset confirm flow.
Package passwordpolicy is the single password-acceptance policy for internal (password-auth) users, applied everywhere the platform sets a password on a USER principal: admin user create, the self-service change-password flow, and the password-reset confirm flow.
platform/auth/payload
Package payload backs the oauth_oidc_payloads table that holds the OIDC artifacts the provider issues: access tokens, refresh tokens, authorization codes, client_credentials sessions, etc.
Package payload backs the oauth_oidc_payloads table that holds the OIDC artifacts the provider issues: access tokens, refresh tokens, authorization codes, client_credentials sessions, etc.
platform/auth/provider
Package provider hosts the JWT claims projection and session-cookie token helpers shared across FlowCatalyst's auth surfaces.
Package provider hosts the JWT claims projection and session-cookie token helpers shared across FlowCatalyst's auth surfaces.
platform/auth/sessiontoken
Package sessiontoken is the platform's session-cookie JWT layer.
Package sessiontoken is the platform's session-cookie JWT layer.
platform/auth/twofa
Package twofa holds the shared 2FA domain-policy evaluation used by both the login flow and the password-reset/invite flow, so the "does this user's domain require 2FA, and with which methods" decision lives in exactly one place.
Package twofa holds the shared 2FA domain-policy evaluation used by both the login flow and the password-reset/invite flow, so the "does this user's domain require 2FA, and with which methods" decision lives in exactly one place.
platform/branding
Package branding resolves the configurable platform name — the brand a user sees in emails, their authenticator app (TOTP issuer), passkey prompts, and the SPA.
Package branding resolves the configurable platform name — the brand a user sees in emails, their authenticator app (TOTP issuer), passkey prompts, and the SPA.
platform/client
Package client is the tenant / organization root in the multi-tenant model.
Package client is the tenant / organization root in the multi-tenant model.
platform/client/api
Package api wires HTTP routes for the client (tenant) subdomain via huma.
Package api wires HTTP routes for the client (tenant) subdomain via huma.
platform/connection
Package connection stores outbound webhook delivery targets (subscriber endpoints).
Package connection stores outbound webhook delivery targets (subscriber endpoints).
platform/connection/api
Package api wires the HTTP routes for the connection subdomain via huma.
Package api wires the HTTP routes for the connection subdomain via huma.
platform/cors
Package cors stores allowed CORS origins for the platform's HTTP layer.
Package cors stores allowed CORS origins for the platform's HTTP layer.
platform/cors/api
Package api wires HTTP routes for the cors subdomain via huma.
Package api wires HTTP routes for the cors subdomain via huma.
platform/dispatch
Package dispatch holds how the platform names and addresses the dispatch queues it advertises to the router, and how it builds the router-config document describing them.
Package dispatch holds how the platform names and addresses the dispatch queues it advertises to the router, and how it builds the router-config document describing them.
platform/dispatchjob
Package dispatchjob holds the dispatch-job entity and repository.
Package dispatchjob holds the dispatch-job entity and repository.
platform/dispatchjob/api
Package api wires the dispatch-job read-only HTTP endpoints via huma.
Package api wires the dispatch-job read-only HTTP endpoints via huma.
platform/dispatchjob/operations
Package operations holds the dispatch-job human-initiated admin use cases: Cancel / Complete (terminal → terminal operator overrides on a FAILED job) and Resend (bulk reset-to-PENDING).
Package operations holds the dispatch-job human-initiated admin use cases: Cancel / Complete (terminal → terminal operator overrides on a FAILED job) and Resend (bulk reset-to-PENDING).
platform/dispatchjob/processing
Package processing implements POST /api/dispatch/process — the internal callback the message router invokes for each queued dispatch job.
Package processing implements POST /api/dispatch/process — the internal callback the message router invokes for each queued dispatch job.
platform/dispatchjob/settled
Package settled implements POST /api/dispatch/settled — the router→platform "settled message" hook that closes the fast-move half of T3/A-01 (BLOCK_ON_ERROR group recovery; the reaper in dispatchjob.RunReaper is the backstop for a router crash between the ACK and this call — see that package's doc comment).
Package settled implements POST /api/dispatch/settled — the router→platform "settled message" hook that closes the fast-move half of T3/A-01 (BLOCK_ON_ERROR group recovery; the reaper in dispatchjob.RunReaper is the backstop for a router crash between the ACK and this call — see that package's doc comment).
platform/dispatchpool
Package dispatchpool encapsulates rate-limit + concurrency settings used by the message router.
Package dispatchpool encapsulates rate-limit + concurrency settings used by the message router.
platform/dispatchpool/api
Package api wires HTTP routes for dispatch_pool via huma.
Package api wires HTTP routes for dispatch_pool via huma.
platform/docsapi
Package docsapi serves the platform's documentation surface to administrators.
Package docsapi serves the platform's documentation surface to administrators.
platform/emaildomainmapping
Package emaildomainmapping maps email domains to IDPs at signup; it carries optional client grants and 2FA policy applied to users who sign up via that domain.
Package emaildomainmapping maps email domains to IDPs at signup; it carries optional client grants and 2FA policy applied to users who sign up via that domain.
platform/emaildomainmapping/api
Package api wires HTTP routes for email_domain_mapping via danielgtaylor/huma/v2.
Package api wires HTTP routes for email_domain_mapping via danielgtaylor/huma/v2.
platform/event
Package event is the CloudEvents 1.0 envelope stored in msg_events.
Package event is the CloudEvents 1.0 envelope stored in msg_events.
platform/event/api
Package api wires the event HTTP endpoints via huma.
Package api wires the event HTTP endpoints via huma.
platform/eventtype
Package eventtype is the worked-example subdomain.
Package eventtype is the worked-example subdomain.
platform/eventtype/api
Package api wires the HTTP routes for the event_type subdomain via danielgtaylor/huma/v2.
Package api wires the HTTP routes for the event_type subdomain via danielgtaylor/huma/v2.
platform/eventtype/operations
Package operations holds the EventType use cases.
Package operations holds the EventType use cases.
platform/function
Package function is the function-runner platform aggregate: the function itself (identity, ownership, pool/warm/limits settings) plus the child records a function owns — versions, aliases, and settings — and the runner-fleet bookkeeping (fng_runners, fng_pool_revisions).
Package function is the function-runner platform aggregate: the function itself (identity, ownership, pool/warm/limits settings) plus the child records a function owns — versions, aliases, and settings — and the runner-fleet bookkeeping (fng_runners, fng_pool_revisions).
platform/function/api
Package api wires HTTP routes for function via huma.
Package api wires HTTP routes for function via huma.
platform/function/artifact
Package artifact is the function-runner artifact store (docs/function-runner-plan.md §8.4): content-addressed by sha256, with a file:// implementation (fc-dev default) and an s3:// implementation (production).
Package artifact is the function-runner artifact store (docs/function-runner-plan.md §8.4): content-addressed by sha256, with a file:// implementation (fc-dev default) and an s3:// implementation (production).
platform/function/control
Package control is the platform's side of the function runner's control plane (docs/function-runner-plan.md §8.3): the desired-state document a runner long-polls, its heartbeat, artifact downloads, and event emission on a function's behalf.
Package control is the platform's side of the function runner's control plane (docs/function-runner-plan.md §8.3): the desired-state document a runner long-polls, its heartbeat, artifact downloads, and event emission on a function's behalf.
platform/function/operations
alias.go is work package 4's alias endpoints plus work package 8's promote wiring (plan §4, §8.2, §8.5): PUT points a named alias at a READY version; DELETE removes it.
alias.go is work package 4's alias endpoints plus work package 8's promote wiring (plan §4, §8.2, §8.5): PUT points a named alias at a READY version; DELETE removes it.
platform/functiondomain
Package functiondomain is the function-runner public-routes domain-claim aggregate (docs/function-runner-plan.md §8, "public routes"): a claimed hostname ZONE, owned by a client (or the platform, when nil), that a function's route hostname must be covered by.
Package functiondomain is the function-runner public-routes domain-claim aggregate (docs/function-runner-plan.md §8, "public routes"): a claimed hostname ZONE, owned by a client (or the platform, when nil), that a function's route hostname must be covered by.
platform/functiondomain/api
Package api wires HTTP routes for functiondomain via huma.
Package api wires HTTP routes for functiondomain via huma.
platform/identityprovider
Package identityprovider stores OIDC IDP configuration (Entra, Keycloak, Google, ...) and the platform-internal "INTERNAL" identity provider for password auth.
Package identityprovider stores OIDC IDP configuration (Entra, Keycloak, Google, ...) and the platform-internal "INTERNAL" identity provider for password auth.
platform/identityprovider/api
Package api wires the HTTP routes for the identity_provider subdomain via danielgtaylor/huma/v2.
Package api wires the HTTP routes for the identity_provider subdomain via danielgtaylor/huma/v2.
platform/idp
Package idp holds provider-specific OIDC integration glue (Keycloak, Entra, Google, generic).
Package idp holds provider-specific OIDC integration glue (Keycloak, Entra, Google, generic).
platform/ingestion
Package ingestion stores ingestions: the definitions of how data from outside (HTTP push, SFTP, S3, queues, polled tables and APIs, runtime extensions) becomes dispatch jobs.
Package ingestion stores ingestions: the definitions of how data from outside (HTTP push, SFTP, S3, queues, polled tables and APIs, runtime extensions) becomes dispatch jobs.
platform/ingestion/api
Package api wires the HTTP routes for the ingestion subdomain via huma.
Package api wires the HTTP routes for the ingestion subdomain via huma.
platform/ingestion/runtimeapi
Package runtimeapi wires the routes an ingestion runtime calls (docs/ingestion-design.md section 7): poll, report, state, job creation and secrets, under /api/ingestion-runtime/v1, as the runtime's service account holding platform:ingestion:runtime:operate.
Package runtimeapi wires the routes an ingestion runtime calls (docs/ingestion-design.md section 7): poll, report, state, job creation and secrets, under /api/ingestion-runtime/v1, as the runtime's service account holding platform:ingestion:runtime:operate.
platform/loginattempt
Package loginattempt tracks user-login and service-account-token outcomes for backoff / rate-limiting and audit.
Package loginattempt tracks user-login and service-account-token outcomes for backoff / rate-limiting and audit.
platform/loginattempt/api
Package api wires the HTTP routes for the login-attempt subdomain via huma.
Package api wires the HTTP routes for the login-attempt subdomain via huma.
platform/mfa
Package mfa is the data layer for two-factor authentication of internal users: enrolled factors (TOTP / email PIN), single-use recovery codes, pending email-PIN challenges, and remembered ("trusted") devices.
Package mfa is the data layer for two-factor authentication of internal users: enrolled factors (TOTP / email PIN), single-use recovery codes, pending email-PIN challenges, and remembered ("trusted") devices.
platform/notify
Package notify sends best-effort security-notification emails — "your password changed", "a new passkey was registered", "2FA was reset", etc.
Package notify sends best-effort security-notification emails — "your password changed", "a new passkey was registered", "2FA was reset", etc.
platform/openapispecs
Package openapispecs is the per-application OpenAPI document store.
Package openapispecs is the per-application OpenAPI document store.
platform/openapispecs/operations
Package operations holds the OpenAPI-spec use cases.
Package operations holds the OpenAPI-spec use cases.
platform/passwordreset
Package passwordreset stores short-lived single-use reset tokens.
Package passwordreset stores short-lived single-use reset tokens.
platform/passwordreset/api
Package api serves the unauthenticated /auth/password-reset/* flow: request → (email link) → validate → confirm.
Package api serves the unauthenticated /auth/password-reset/* flow: request → (email link) → validate → confirm.
platform/platformconfig
Package platformconfig stores system-wide settings (one row per application:section:property) and a per-role access grant table.
Package platformconfig stores system-wide settings (one row per application:section:property) and a per-role access grant table.
platform/platformconfig/api
Package api wires HTTP routes for platform_config via huma.
Package api wires HTTP routes for platform_config via huma.
platform/portalauth
Package portalauth is the portal plane's front-channel auth surface (docs/portal-identity-plan.md Phase 2.5 v2): GET /portal/authorize, POST /portal/auth/check-domain, POST /portal/auth/login.
Package portalauth is the portal plane's front-channel auth surface (docs/portal-identity-plan.md Phase 2.5 v2): GET /portal/authorize, POST /portal/auth/check-domain, POST /portal/auth/login.
platform/portalidentity
Package portalidentity is the portal identity plane (docs/portal-identity-plan.md Phase 2.5 v2): portal end-users as a SEPARATE population from iam_principals — one identity per (client, email) context, platform-implemented (password machinery, reset tokens, OIDC bridge reuse) but with initiation endpoints independent of the employee auth surface.
Package portalidentity is the portal identity plane (docs/portal-identity-plan.md Phase 2.5 v2): portal end-users as a SEPARATE population from iam_principals — one identity per (client, email) context, platform-implemented (password machinery, reset tokens, OIDC bridge reuse) but with initiation endpoints independent of the employee auth surface.
platform/portalidentity/api
Package api serves /api/portal-users and /api/portal-apps — the admin surface of the portal identity plane (docs/portal-identity-plan.md Phase 2.5 v2).
Package api serves /api/portal-users and /api/portal-apps — the admin surface of the portal identity plane (docs/portal-identity-plan.md Phase 2.5 v2).
platform/principal
Package principal is the unified user/service-account aggregate.
Package principal is the unified user/service-account aggregate.
platform/principal/api
Package api wires the HTTP routes for the principal subdomain via huma.
Package api wires the HTTP routes for the principal subdomain via huma.
platform/process
Package process stores free-form workflow documentation (typically Mermaid diagrams) scoped to {application, subdomain, process-name}.
Package process stores free-form workflow documentation (typically Mermaid diagrams) scoped to {application, subdomain, process-name}.
platform/process/api
Package api wires the HTTP routes for the process subdomain via huma.
Package api wires the HTTP routes for the process subdomain via huma.
platform/publicapi
Package publicapi serves the small set of endpoints that must be reachable without an authenticated session:
Package publicapi serves the small set of endpoints that must be reachable without an authenticated session:
platform/resetapproval
Package resetapproval is the lost-device password-reset approval queue (Phase 8 / docs/auth-hardening-plan.md).
Package resetapproval is the lost-device password-reset approval queue (Phase 8 / docs/auth-hardening-plan.md).
platform/resetapproval/api
Package api serves the lost-device password-reset approval queue (Phase 8 / docs/auth-hardening-plan.md): a client-administrator lists pending requests for their client(s) and approves/denies them.
Package api serves the lost-device password-reset approval queue (Phase 8 / docs/auth-hardening-plan.md): a client-administrator lists pending requests for their client(s) and approves/denies them.
platform/role
Package role defines RBAC role shapes with permission sets (incl.
Package role defines RBAC role shapes with permission sets (incl.
platform/role/api
Package api wires the HTTP routes for the role subdomain via danielgtaylor/huma/v2.
Package api wires the HTTP routes for the role subdomain via danielgtaylor/huma/v2.
platform/scheduledjob
Package scheduledjob holds the cron-driven job definitions.
Package scheduledjob holds the cron-driven job definitions.
platform/scheduledjob/api
Package api wires HTTP routes for scheduled_job via huma.
Package api wires HTTP routes for scheduled_job via huma.
platform/scheduledjob/operations
Package operations holds all 7 scheduled_job admin use cases plus fire_now, and the bulk SDK sync (sync.go).
Package operations holds all 7 scheduled_job admin use cases plus fire_now, and the bulk SDK sync (sync.go).
platform/scheduledjob/scheduler
Package scheduler is the scheduled-job cron + dispatch engine for ScheduledJob aggregates.
Package scheduler is the scheduled-job cron + dispatch engine for ScheduledJob aggregates.
platform/scheduler
Package scheduler is the dispatch-job scheduler: polls PENDING dispatch jobs, groups by message_group, applies pause/block filters, and publishes to the message queue (SQS in prod, in-process queue in dev) for the router to consume.
Package scheduler is the dispatch-job scheduler: polls PENDING dispatch jobs, groups by message_group, applies pause/block filters, and publishes to the message queue (SQS in prod, in-process queue in dev) for the router to consume.
platform/sdksync
Package sdksync wires the SDK self-registration ("sync") routes, scoped under /api/applications/{appCode}.
Package sdksync wires the SDK self-registration ("sync") routes, scoped under /api/applications/{appCode}.
platform/seed
Package seed installs the built-in roles, the platform application, and the platform event-types catalog.
Package seed installs the built-in roles, the platform application, and the platform event-types catalog.
platform/serviceaccount
Package serviceaccount implements machine-to-machine principals with webhook credentials and roles.
Package serviceaccount implements machine-to-machine principals with webhook credentials and roles.
platform/serviceaccount/api
Package api wires the HTTP routes for the service_account subdomain via huma.
Package api wires the HTTP routes for the service_account subdomain via huma.
platform/shared/apicommon
Package apicommon holds reusable HTTP response shapes.
Package apicommon holds reusable HTTP response shapes.
platform/shared/apiroute
Package apiroute collapses the standard huma route registration ceremony into one line per route.
Package apiroute collapses the standard huma route registration ceremony into one line per route.
platform/shared/auth
Package auth provides the authenticated-request context and the permission-check helpers used by every write handler.
Package auth provides the authenticated-request context and the permission-check helpers used by every write handler.
platform/shared/bff
Package bff hosts the /bff/* endpoints — frontend-only, session-auth, response shapes tuned to screens.
Package bff hosts the /bff/* endpoints — frontend-only, session-auth, response shapes tuned to screens.
platform/shared/database
Package database provides the pgxpool factory.
Package database provides the pgxpool factory.
platform/shared/dispatchqueue
Package dispatchqueue holds the naming and priority rules shared by the dispatch scheduler (which publishes each claimed job to a queue) and the router-config document the platform serves (which advertises those same queues).
Package dispatchqueue holds the naming and priority rules shared by the dispatch scheduler (which publishes each claimed job to a queue) and the router-config document the platform serves (which advertises those same queues).
platform/shared/email
Package email sends transactional emails (password reset, …) over SMTP.
Package email sends transactional emails (password reset, …) over SMTP.
platform/shared/encryption
Package encryption implements field-level AES-256-GCM encryption with FLOWCATALYST_APP_KEY rotation support, plus a keyed-hash form for secrets that are only ever verified (never resent or re-signed by the platform).
Package encryption implements field-level AES-256-GCM encryption with FLOWCATALYST_APP_KEY rotation support, plus a keyed-hash form for secrets that are only ever verified (never resent or re-signed by the platform).
platform/shared/httpcompat
Package httpcompat is the integration layer between danielgtaylor/huma/v2 and FlowCatalyst's existing wire conventions.
Package httpcompat is the integration layer between danielgtaylor/huma/v2 and FlowCatalyst's existing wire conventions.
platform/shared/httperror
Package httperror maps internal errors to HTTP responses with the platform's canonical JSON envelope shape:
Package httperror maps internal errors to HTTP responses with the platform's canonical JSON envelope shape:
platform/shared/jsontime
Package jsontime provides a time wrapper with fixed-precision microsecond ISO-8601 JSON serialisation.
Package jsontime provides a time wrapper with fixed-precision microsecond ISO-8601 JSON serialisation.
platform/shared/me
Package me serves /api/me — the canonical "who am I" lookup returned to agents, SDKs, and the dashboard.
Package me serves /api/me — the canonical "who am I" lookup returned to agents, SDKs, and the dashboard.
platform/shared/middleware
Package middleware provides the platform's chi/net/http middleware stack.
Package middleware provides the platform's chi/net/http middleware stack.
platform/shared/platformsink
Package platformsink implements usecasepgx.Sink for the platform itself.
Package platformsink implements usecasepgx.Sink for the platform itself.
platform/shared/ratelimit
Package ratelimit provides the distributed Store and the in-memory Governor.
Package ratelimit provides the distributed Store and the in-memory Governor.
platform/shared/repocommon
Package repocommon holds shared repository-layer helpers: the ErrNoRows→nil single-row convention and the positional-argument filter builder used by the hand-rolled dynamic list queries (see docs/sqlc.md for why those stay hand-written).
Package repocommon holds shared repository-layer helpers: the ErrNoRows→nil single-row convention and the positional-argument filter builder used by the hand-rolled dynamic list queries (see docs/sqlc.md for why those stay hand-written).
platform/shared/sdk
dispatch_job_create.go hosts POST /api/dispatch-jobs — the singular SDK create.
dispatch_job_create.go hosts POST /api/dispatch-jobs — the singular SDK create.
platform/shared/syncdiff
Package syncdiff holds the value comparisons the definition syncs use to tell a row they would rewrite with different content from one they would rewrite with the same content (F30): an unchanged row is neither saved nor counted nor audited.
Package syncdiff holds the value comparisons the definition syncs use to tell a row they would rewrite with different content from one they would rewrite with the same content (F30): an unchanged row is neither saved nor counted nor audited.
platform/shared/validate
Package validate holds the shared operations-layer input checks.
Package validate holds the shared operations-layer input checks.
platform/shared/versioncache
Package versioncache answers "has this principal (or a role it holds) changed since a given moment?" cheaply enough to check on every request.
Package versioncache answers "has this principal (or a role it holds) changed since a given moment?" cheaply enough to check on every request.
platform/subscription
Package subscription binds event types to delivery targets (connections / endpoints).
Package subscription binds event types to delivery targets (connections / endpoints).
platform/subscription/api
Package api wires HTTP routes for the subscription subdomain via huma.
Package api wires HTTP routes for the subscription subdomain via huma.
platform/webauthn
Package webauthn implements passkey (WebAuthn) credentials and the registration/authentication ceremonies.
Package webauthn implements passkey (WebAuthn) credentials and the registration/authentication ceremonies.
platform/webauthn/api
Package api wires the WebAuthn HTTP routes under /auth/webauthn/* via huma.
Package api wires the WebAuthn HTTP routes under /auth/webauthn/* via huma.
platform/webauthn/webauthntest
Package webauthntest is a software WebAuthn authenticator for tests: it builds the registration (attestation "none") and assertion payloads a browser would send, so the ceremony paths can be exercised against the real go-webauthn verifier without a browser.
Package webauthntest is a software WebAuthn authenticator for tests: it builds the registration (attestation "none") and assertion payloads a browser would send, so the ceremony paths can be exercised against the real go-webauthn verifier without a browser.
queue
Package queue provides a multi-backend message queue abstraction: a Consumer interface, a Publisher interface, and per-backend implementations registered at runtime.
Package queue provides a multi-backend message queue abstraction: a Consumer interface, a Publisher interface, and per-backend implementations registered at runtime.
queue/nats
Package nats is the NATS JetStream queue backend.
Package nats is the NATS JetStream queue backend.
queue/postgres
Package postgres is the Postgres-backed queue backend.
Package postgres is the Postgres-backed queue backend.
queue/sqs
Package sqs is the AWS SQS-backed queue backend.
Package sqs is the AWS SQS-backed queue backend.
router
Package router is the FlowCatalyst message router (fc-router).
Package router is the FlowCatalyst message router (fc-router).
router/api
Package api wires the router's HTTP surface using huma — the same OpenAPI library the platform uses, so the swagger surface is shared.
Package api wires the router's HTTP surface using huma — the same OpenAPI library the platform uses, so the swagger surface is shared.
runtimetune
Package runtimetune adjusts Go runtime settings once at start-up from the container's cgroup limits and the roles this process runs.
Package runtimetune adjusts Go runtime settings once at start-up from the container's cgroup limits and the roles this process runs.
schemacodegen
Package schemacodegen is a pure-Go port of the SPA's JSON Schema code generators (frontend/packages/schema-codegen), its syntax highlighter (frontend/src/utils/schema-highlight.ts) and its schema zip export (frontend/src/utils/schema-export.ts), so the server-rendered UI can show the event-type schema viewer without JavaScript.
Package schemacodegen is a pure-Go port of the SPA's JSON Schema code generators (frontend/packages/schema-codegen), its syntax highlighter (frontend/src/utils/schema-highlight.ts) and its schema zip export (frontend/src/utils/schema-export.ts), so the server-rendered UI can show the event-type schema viewer without JavaScript.
secrets
Package secrets implements a pluggable secrets provider registry.
Package secrets implements a pluggable secrets provider registry.
standby
Package standby implements Redis-backed leader election.
Package standby implements Redis-backed leader election.
stream
Package stream implements the CQRS projection processors that move rows from write tables (msg_events, msg_dispatch_jobs) into their denormalized read counterparts, plus the event fan-out that matches subscriptions and emits dispatch jobs.
Package stream implements the CQRS projection processors that move rows from write tables (msg_events, msg_dispatch_jobs) into their denormalized read counterparts, plus the event fan-out that matches subscriptions and emits dispatch jobs.
tsid
Package tsid is the FlowCatalyst platform's typed-entity overlay on top of the SDK's Crockford Base32 TSID primitives (pkg/fcsdk/tsid).
Package tsid is the FlowCatalyst platform's typed-entity overlay on top of the SDK's Crockford Base32 TSID primitives (pkg/fcsdk/tsid).
ui
Package ui mounts the server-rendered UI under /ui: templ components from the framework's UI kit (internal/ui/kit), Datastar for interaction (internal/ui/ds), served next to the Vue SPA and switched over area by area (only with the owner's approval; until then the SPA stays the default).
Package ui mounts the server-rendered UI under /ui: templ components from the framework's UI kit (internal/ui/kit), Datastar for interaction (internal/ui/ds), served next to the Vue SPA and switched over area by area (only with the owner's approval; until then the SPA stays the default).
ui/assets
Package assets embeds and serves the UI's static files: the kit stylesheet (built from the framework's ui-kit by scripts/ui-kit-sync.sh), the Lucide icon sprite, the pinned datastar.js and the licence notices.
Package assets embeds and serves the UI's static files: the kit stylesheet (built from the framework's ui-kit by scripts/ui-kit-sync.sh), the Lucide icon sprite, the pinned datastar.js and the licence notices.
ui/compress
Package compress is response compression for /ui: Brotli or gzip, chosen from Accept-Encoding, for the server-rendered pages (text/html) and the Datastar streams (text/event-stream).
Package compress is response compression for /ui: Brotli or gzip, chosen from Accept-Encoding, for the server-rendered pages (text/html) and the Datastar streams (text/event-stream).
ui/ds
Package ds is the platform's thin wrapper over the official Datastar Go SDK (github.com/starfederation/datastar-go, pinned in go.mod).
Package ds is the platform's thin wrapper over the official Datastar Go SDK (github.com/starfederation/datastar-go, pinned in go.mod).
ui/guard
Package guard holds the request guards of the server-rendered UI (/ui): cross-site request forgery protection, the session requirement with HTML-vs-Datastar negotiation, the role-less profile gate and the security headers.
Package guard holds the request guards of the server-rendered UI (/ui): cross-site request forgery protection, the session requirement with HTML-vs-Datastar negotiation, the role-less profile gate and the security headers.
ui/htmlnorm
Package htmlnorm turns an HTML fragment into a canonical form so two renderings of the same markup compare equal regardless of formatting.
Package htmlnorm turns an HTML fragment into a canonical form so two renderings of the same markup compare equal regardless of formatting.
ui/kit
templ: version: v0.3.1020
templ: version: v0.3.1020
ui/md
Package md renders Markdown to sanitised HTML on the server (the docs pages, help text).
Package md renders Markdown to sanitised HTML on the server (the docs pages, help text).
ui/pages
templ: version: v0.3.1020
templ: version: v0.3.1020
ui/shell
templ: version: v0.3.1020
templ: version: v0.3.1020
tools
analyzer/idconv command
Command idconv runs the idconv analyzer as a standalone tool.
Command idconv runs the idconv analyzer as a standalone tool.
analyzer/idconv/analyzer
Package analyzer implements the idconv analyzer.
Package analyzer implements the idconv analyzer.
analyzer/uowseal command
Command uowseal runs the uowseal analyzer as a standalone tool.
Command uowseal runs the uowseal analyzer as a standalone tool.
analyzer/uowseal/analyzer
Package analyzer implements the uowseal go vet analyzer.
Package analyzer implements the uowseal go vet analyzer.
dump-spec command
dump-spec emits the platform's huma-generated OpenAPI spec to stdout without booting a database.
dump-spec emits the platform's huma-generated OpenAPI spec to stdout without booting a database.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL