funcd

module
v0.2.0 Latest Latest
Warning

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

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

README

funcd

A lightweight, modular, single-binary serverless platform for Linux — faasd-like, Kubernetes-inspired internals, designed for the agent era.

  • blueprint.md — the platform blueprint: purpose, components, architecture, resource model, repository structure. The single architectural reference.
  • docs/feat/ — feature-version documents: the initial need and the high-level feature/component list per version (V1, V2, …). What and why — never how.
  • docs/adr/ — Architecture Decision Records. Every concrete decision (project setup, ports & drivers, gateway mechanics, …) is captured as an ADR: need, constraints, alternatives, final solution, and the contracts (interfaces, resource definitions, inputs/outputs) an implementer needs. Features are scaffolded and implemented from ADRs, gradually — no big-bang implementation.

Workflow

Each gate has a skill (.claude/skills/): plan → decide → judge → build → review.

  1. Scope & sequence — docs/feat/ lists what a version must contain; the roadmap-planner skill sequences the ADRs into a computed delivery plan (docs/roadmap/: build waves, critical path).
  2. Brainstorm a topic from that list with the adr skill (component, feature, cross-cutting concern).
  3. ADR captures the decision and its contracts; mark it Proposed when ready.
  4. Judge gate — the adr-judge skill reviews the ADR document against the blueprint, feat row, and related ADRs (inconsistency, bias, scope creep, strengths to keep); the human weighs the verdict and accepts. The feat row advances.
  5. Scaffold — the adr-scaffold skill turns the ADR into a compiling skeleton: interfaces, facades, deps, one skipped test per scenario — no logic.
  6. Review gate — the adr-impl-review skill runs the verification (build/lint/test, tree diff) against the ADR + Definition of Done, gives a severity-tiered verdict, and records a per-model quality scorecard (docs/reviews/).
  7. Implement the feature; make the test skeletons pass.
  8. Validate: full test suite green — every ADR scenario now passes.
  9. Implementation review (recommended) — adr-impl-review again audits code + tests against the ADR and updates the model scorecard.

The current workflow (ADR-0000 gates 0–5)

# Gate Skill Your model Status moves it makes
0 Scope the version roadmap-planner — (sequences ADRs; writes roadmap)
1–2 Brainstorm → Draft adr Opus 4.8 MAX ADR Draft → Proposed; feat idea → adr
3 Judge gate (the ADR document) adr-judge Opus 4.8 Extra none — it only reports; you then accept
— Acceptance (human call) — you ADR → Accepted; blueprint + roadmap synced here; feat → accepted
4 Implement (ADR + blueprint → working code) adr-impl Sonnet 4.6 medium ADR Accepted → Reviewing; feat → reviewing
5 Review gate (the code) adr-impl-review Opus 4.8 Extra pass → ADR Reviewing → Implemented, feat → implemented; else → report, advances nothing

The loop (exactly as you said): review changes-requested/fail → ADR stays Reviewing → back to gate 4 (adr-impl) to fix the model-attributed findings → re-review → repeat until the review gate passes and stamps Implemented. (adr-attributed findings don't loop here — they break out to a new superseding ADR.)

Repositories

funcd is split across the pyvvo org (ADR-0141):

Repo Holds
pyvvo/funcd the Go platform: daemon, API, CLI, SDK, runtime images, providers, e2e tests, ADRs
pyvvo/funcd-typescript the Node shim and the TypeScript examples; npm @funcd-dev/shim
pyvvo/funcd-python the Python shim and the Python examples; PyPI funcd-shim
pyvvo/funcd-functions real functions deployed on the platform

funcd pins the two language repos as Go modules in go.mod, embeds their shims, and runs their committed examples in its e2e tests and Lima lanes. To take a new language release:

go get github.com/pyvvo/funcd-typescript@<tag>

To work on a shim and funcd together, clone the language repo next to funcd and add a local go.work, which git ignores:

go work init . ../funcd-typescript

Status

See docs/PROJECT-SUMMARY.md for what is built and the decision log.

License

Apache-2.0 — Copyright 2026 The funcd Authors.

Directories

Path Synopsis
api
fault
Package fault is the shared error taxonomy for the funcd platform (ADR-0002).
Package fault is the shared error taxonomy for the funcd platform (ADR-0002).
lintfixture
Package lintfixture holds a known-bad lint fixture for scenario: api-boundary-rule-fires (ADR-0027), gated behind the `lintfixture` build tag — see tests/lint-fixtures/lintrules_test.go.
Package lintfixture holds a known-bad lint fixture for scenario: api-boundary-rule-fires (ADR-0027), gated behind the `lintfixture` build tag — see tests/lint-fixtures/lintrules_test.go.
types/v1alpha1
Package v1alpha1 holds the v1alpha1 API types — shared between server, client, and SDK.
Package v1alpha1 holds the v1alpha1 API types — shared between server, client, and SDK.
cmd
funcd command
Command funcd is the thin shell over the pkg/funcd platform library: it selects drivers and runs the platform until a signal arrives (ADR-0014).
Command funcd is the thin shell over the pkg/funcd platform library: it selects drivers and runs the platform until a signal arrives (ADR-0014).
funcdctl command
Command funcdctl is a kubectl-style CLI over the funcd control-plane API (ADR-0024), built on the cobra command framework (ADR-0042).
Command funcdctl is a kubectl-style CLI over the funcd control-plane API (ADR-0024), built on the cobra command framework (ADR-0042).
docs
demo/server command
Command demo-server starts an embedded funcd wired for real function execution, on fixed local ports, so a CLI demo (docs/demo/journey.sh) can drive `funcdctl` against it and invoke functions over HTTP.
Command demo-server starts an embedded funcd wired for real function execution, on fixed local ports, so a CLI demo (docs/demo/journey.sh) can drive `funcdctl` against it and invoke functions over HTTP.
internal
activator
Package activator implements scale-to-zero (ADR-0016): an in-process data-path component backing a gateway route's upstream.
Package activator implements scale-to-zero (ADR-0016): an in-process data-path component backing a gateway route's upstream.
activator/storescaler
Package storescaler is the V1 store-backed activator.Scaler driver (ADR-0016): it records a function's scale intent as its partitioned status Phase — the wake edge Idle→Deploying for replicas>=1, the reclaim edge *→Idle for replicas==0 — via store.Update.
Package storescaler is the V1 store-backed activator.Scaler driver (ADR-0016): it records a function's scale intent as its partitioned status Phase — the wake edge Idle→Deploying for replicas>=1, the reclaim edge *→Idle for replicas==0 — via store.Update.
artifact
Package artifact is OCI artifact distribution (ADR-0031): how a function source bundle reaches the platform.
Package artifact is OCI artifact distribution (ADR-0031): how a function source bundle reaches the platform.
auth
Package auth is the authorization kernel (ADR-0018): the Authorizer port (PDP) every enforcement point (PEP) calls, plus the typed principal/verb/decision model.
Package auth is the authorization kernel (ADR-0018): the Authorizer port (PDP) every enforcement point (PEP) calls, plus the typed principal/verb/decision model.
auth/authcontract
Package authcontract is the shared conformance suite for the auth.Authorizer port (ADR-0018): Run asserts the default-deny namespace-RBAC guarantee against any driver — admin spans namespaces + cluster-scoped kinds, developer writes only in its namespaces, viewer is read-only, and an unknown principal is denied.
Package authcontract is the shared conformance suite for the auth.Authorizer port (ADR-0018): Run asserts the default-deny namespace-RBAC guarantee against any driver — admin spans namespaces + cluster-scoped kinds, developer writes only in its namespaces, viewer is read-only, and an unknown principal is denied.
auth/cedar
Package cedar is the cedar-go authorization driver (ADR-0074) behind the auth.Authorizer port (ADR-0018): it answers per-object, fine-grained data-plane decisions (KV first) that the coarse RBAC driver cannot express.
Package cedar is the cedar-go authorization driver (ADR-0074) behind the auth.Authorizer port (ADR-0018): it answers per-object, fine-grained data-plane decisions (KV first) that the coarse RBAC driver cannot express.
auth/rbac
Package rbac is the built-in namespace-scoped RBAC Authorizer driver (ADR-0018): admin / developer / viewer roles, default-deny.
Package rbac is the built-in namespace-scoped RBAC Authorizer driver (ADR-0018): admin / developer / viewer roles, default-deny.
blob
Package blob is the storage-layer port (ADR-0007): opaque byte objects behind the blob.Bucket port.
Package blob is the storage-layer port (ADR-0007): opaque byte objects behind the blob.Bucket port.
blob/blobcontract
Package blobcontract is the shared conformance suite for the blob.Bucket port (ADR-0007).
Package blobcontract is the shared conformance suite for the blob.Bucket port (ADR-0007).
blob/gocloud
Package gocloud is the gocloud.dev/blob driver for the blob.Bucket port (ADR-0007): memory / file / S3 by URL, all pure-Go (no cgo).
Package gocloud is the gocloud.dev/blob driver for the blob.Bucket port (ADR-0007): memory / file / S3 by URL, all pure-Go (no cgo).
blob/s3gateway
Package s3gateway is the funcd S3-protocol frontend over the blob.Bucket substrate (ADR-0080), with in-platform identity via funcd-managed per-function SigV4 keypairs resolved by an in-process versitygw auth.IAMService (ADR-0085).
Package s3gateway is the funcd S3-protocol frontend over the blob.Bucket substrate (ADR-0080), with in-platform identity via funcd-managed per-function SigV4 keypairs resolved by an in-process versitygw auth.IAMService (ADR-0085).
bus
Package bus is the messaging port (ADR-0008): core pub/sub plus durable JetStream streams/consumers, behind the bus.Bus port.
Package bus is the messaging port (ADR-0008): core pub/sub plus durable JetStream streams/consumers, behind the bus.Bus port.
bus/buscontract
Package buscontract is the shared conformance suite for the bus.Bus port (ADR-0008).
Package buscontract is the shared conformance suite for the bus.Bus port (ADR-0008).
bus/nats
Package nats is the embedded-NATS driver for the bus.Bus port (ADR-0008): an in-process nats-server with JetStream (memory or file storage), all pure-Go (no cgo).
Package nats is the embedded-NATS driver for the bus.Bus port (ADR-0008): an in-process nats-server with JetStream (memory or file storage), all pure-Go (no cgo).
catalog/gateway
Package gateway is the funcd catalog PEP proxy over the Quack/DuckLake serving path (ADR-0137, FEAT-0008/F102).
Package gateway is the funcd catalog PEP proxy over the Quack/DuckLake serving path (ADR-0137, FEAT-0008/F102).
contract
Package contract enforces the funcd contract type profile (ADR-0058): the bounded, language-agnostic subset of JSON Schema 2020-12 that a function's I/O contract may use — "the def" (the discipline JTD and WIT apply).
Package contract enforces the funcd contract type profile (ADR-0058): the bounded, language-agnostic subset of JSON Schema 2020-12 that a function's I/O contract may use — "the def" (the discipline JTD and WIT apply).
controller
Package controller is the one general reconcile engine (ADR-0015): a store-watch informer feeds a rate-limited, deduplicating workqueue that worker goroutines drain by calling each kind's registered Reconciler — with exponential-backoff retry, RequeueAfter, status write-back (the reconciler's), and clean shutdown.
Package controller is the one general reconcile engine (ADR-0015): a store-watch informer feeds a rate-limited, deduplicating workqueue that worker goroutines drain by calling each kind's registered Reconciler — with exponential-backoff retry, RequeueAfter, status write-back (the reconciler's), and clean shutdown.
controlplane
Package controlplane owns the huma API registration, typed operations, the Handlers seam, and the api/fault → huma problem+json error bridge (ADR-0005).
Package controlplane owns the huma API registration, typed operations, the Handlers seam, and the api/fault → huma problem+json error bridge (ADR-0005).
controlplane/admission
Package admission is the control-plane admission framework (ADR-0063): a two-phase pipeline (mutate-all → validate-all) of single-purpose Admissions run on every resource write, after authz and before the store.
Package admission is the control-plane admission framework (ADR-0063): a two-phase pipeline (mutate-all → validate-all) of single-purpose Admissions run on every resource write, after authz and before the store.
controlplane/cmd/specgen command
Command specgen writes the huma-generated OpenAPI 3.1 spec to the committed path.
Command specgen writes the huma-generated OpenAPI 3.1 spec to the committed path.
controlplane/middleware
Package middleware holds the control-plane API server's net/http middleware (ADR-0018).
Package middleware holds the control-plane API server's net/http middleware (ADR-0018).
dataplane
Package dataplane is the function-invocation data plane (ADR-0033): the HTTP handler that serves function traffic, separate from the control-plane API (ADR-0028).
Package dataplane is the function-invocation data plane (ADR-0033): the HTTP handler that serves function traffic, separate from the control-plane API (ADR-0028).
edge/authn
Package authn is the edge authentication PEP (ADR-0113, F77): for a data-plane request whose target has an `authenticated` stance, it extracts a bearer token, resolves it to a connection-scoped Identity (never client-asserted), and DELEGATES the allow/deny decision to the existing auth.Authorizer (RBAC namespace-scope in V1; fine-grained Cedar edge policy in V2).
Package authn is the edge authentication PEP (ADR-0113, F77): for a data-plane request whose target has an `authenticated` stance, it extracts a bearer token, resolves it to a connection-scoped Identity (never client-asserted), and DELEGATES the allow/deny decision to the existing auth.Authorizer (RBAC namespace-scope in V1; fine-grained Cedar edge policy in V2).
edge/limit
Package limit is the ingress-protection middleware (ADR-0112, F75): it refuses abusive traffic on the data-plane chain BEFORE dataplane.Handler — and therefore before the activator can wake a scaled-to-zero sandbox (the reject returns without ever calling activator.ServeHTTP).
Package limit is the ingress-protection middleware (ADR-0112, F75): it refuses abusive traffic on the data-plane chain BEFORE dataplane.Handler — and therefore before the activator can wake a scaled-to-zero sandbox (the reject returns without ever calling activator.ServeHTTP).
edge/observ
Package observ is the edge observability middleware (ADR-0114, F76): RED metrics (request rate / errors / duration by function+status) off the OTel meter, an edge span that mints or adopts a W3C traceparent so the downstream invocation span parents under it (the ingress hop joins the one-run-one-trace waterfall, ADR-0101/0102), and a structured access log correlated by X-Request-Id.
Package observ is the edge observability middleware (ADR-0114, F76): RED metrics (request rate / errors / duration by function+status) off the OTel meter, an edge span that mints or adopts a W3C traceparent so the downstream invocation span parents under it (the ingress hop joins the one-run-one-trace waterfall, ADR-0101/0102), and a structured access log correlated by X-Request-Id.
edge/router
Package router is the edge request matcher (ADR-0110, F79): it compiles the Ready Route set into a host/path/method table and resolves a public data-plane request to a target (namespace, function).
Package router is the edge request matcher (ADR-0110, F79): it compiles the Ready Route set into a host/path/method table and resolves a public data-plane request to a target (namespace, function).
edge/shape
Package shape is the edge shaping middleware (ADR-0114, F78): CORS (preflight + ACAO), response header inject/strip, and gzip compression that SKIPS streaming (text/event-stream) and upgrades (Connection: Upgrade / 101) and FORWARDS http.Flusher + http.Hijacker so SSE/WebSocket pass through unbroken.
Package shape is the edge shaping middleware (ADR-0114, F78): CORS (preflight + ACAO), response header inject/strip, and gzip compression that SKIPS streaming (text/event-stream) and upgrades (Connection: Upgrade / 101) and FORWARDS http.Flusher + http.Hijacker so SSE/WebSocket pass through unbroken.
edge/static
Package static is the edge static-asset handler (ADR-0120, F82): it serves a Bucket-prefix static site directly through the FEAT-0006 edge — index resolution, content-types, a weak (ModTime,Size) ETag + conditional GET (304), HTTP Range (206), an optional SPA fallback, and a pinned three-tier Cache-Control — with no function code and no activator hop.
Package static is the edge static-asset handler (ADR-0120, F82): it serves a Bucket-prefix static site directly through the FEAT-0006 edge — index resolution, content-types, a weak (ModTime,Size) ETag + conditional GET (304), HTTP Range (206), an optional SPA fallback, and a pinned three-tier Cache-Control — with no function code and no activator hop.
edge/tls
Package edgetls is the TLS termination provider port (ADR-0111, F74): it builds the *tls.Config funcd attaches to its own http.Servers (no listener handover — the caller drives ServeTLS).
Package edgetls is the TLS termination provider port (ADR-0111, F74): it builds the *tls.Config funcd attaches to its own http.Servers (no listener handover — the caller drives ServeTLS).
edge/tls/acme
Package acme is the certmagic-backed ACME TLS driver (ADR-0111, F74): automatic public certificates via an ACME CA (Let's Encrypt by default; a test directory URL for Pebble).
Package acme is the certmagic-backed ACME TLS driver (ADR-0111, F74): automatic public certificates via an ACME CA (Let's Encrypt by default; a test directory URL for Pebble).
edge/tls/static
Package static is the stdlib TLS driver (ADR-0111, F74): it builds a *tls.Config from a static certificate — either operator-PROVIDED (tls.LoadX509KeyPair) or SELF-SIGNED (one multi-SAN cert this package generates with crypto/x509 and persists under the storage dir).
Package static is the stdlib TLS driver (ADR-0111, F74): it builds a *tls.Config from a static certificate — either operator-PROVIDED (tls.LoadX509KeyPair) or SELF-SIGNED (one multi-SAN cert this package generates with crypto/x509 and persists under the storage dir).
envresolve
Package envresolve is the single config+secret env-resolver shared by the Function reconciler and the provider framework (ADR-0093, relocating ADR-0092's helper to a neutral leaf).
Package envresolve is the single config+secret env-resolver shared by the Function reconciler and the provider framework (ADR-0093, relocating ADR-0092's helper to a neutral leaf).
eventing
Package eventing implements funcd eventing (ADR-0023, reshaped by ADR-0108): a typed CloudEvents v1.0 envelope, an EventSource reconciler that registers a `timer:` source's NAMED events, and — on each firing — PUBLISHES a named CloudEvent onto a Publisher seam (the in-process Fanout) the F69 Sensor subscribes to.
Package eventing implements funcd eventing (ADR-0023, reshaped by ADR-0108): a typed CloudEvents v1.0 envelope, an EventSource reconciler that registers a `timer:` source's NAMED events, and — on each firing — PUBLISHES a named CloudEvent onto a Publisher seam (the in-process Fanout) the F69 Sensor subscribes to.
eventing/deadletter
Package deadletter is the eventing dead-letter queue PORT (ADR-0118, F85): the durable park for a Sensor action-delivery that failed past the bounded retry cap.
Package deadletter is the eventing dead-letter queue PORT (ADR-0118, F85): the durable park for a Sensor action-delivery that failed past the bounded retry cap.
eventing/deadletter/badger
Package badger is the dead-letter-queue deadletter driver (ADR-0118), backed by Badger v4 in a DEDICATED instance (never the metastore).
Package badger is the dead-letter-queue deadletter driver (ADR-0118), backed by Badger v4 in a DEDICATED instance (never the metastore).
eventing/deadletter/memory
Package memory is the in-memory deadletter.Store driver (ADR-0118): a small pure-Go map with no files, for cross-platform tests and the InMemory preset.
Package memory is the in-memory deadletter.Store driver (ADR-0118): a small pure-Go map with no files, for cross-platform tests and the InMemory preset.
expr
Package expr is the funcd reference engine (ADR-0095): one typed `${{ … }}` expression grammar shared across the platform.
Package expr is the funcd reference engine (ADR-0095): one typed `${{ … }}` expression grammar shared across the platform.
funclog
Package funclog captures function telemetry over a freeze-safe side channel and persists it OTel-native through the blob.Bucket port (ADR-0081).
Package funclog captures function telemetry over a freeze-safe side channel and persists it OTel-native through the blob.Bucket port (ADR-0081).
funclog/compact
Package compact folds the funclog "raw" raw OTLP-JSON-Lines objects (ADR-0081) into columnar Parquet "compacted", time-windowed and Hive-partitioned, through the blob.Bucket port (ADR-0007).
Package compact folds the funclog "raw" raw OTLP-JSON-Lines objects (ADR-0081) into columnar Parquet "compacted", time-windowed and Hive-partitioned, through the blob.Bucket port (ADR-0007).
funclog/logread
Package logread is the thin pure-Go function-log reader (ADR-0084): it merges the compacted Parquet (ADR-0083) with the recent raw OTLP-JSONL tail (ADR-0081) over the blob.Bucket port, filters by time/severity/limit, and returns a tenant's function logs time-ordered.
Package logread is the thin pure-Go function-log reader (ADR-0084): it merges the compacted Parquet (ADR-0083) with the recent raw OTLP-JSONL tail (ADR-0081) over the blob.Bucket port, filters by time/severity/limit, and returns a tenant's function logs time-ordered.
function
Package function is the Function lifecycle reconciler (ADR-0020): the one controller.Reconciler for KindFunction.
Package function is the Function lifecycle reconciler (ADR-0020): the one controller.Reconciler for KindFunction.
gateway
Package gateway is the ingress / API gateway port (ADR-0012): program routes declaratively and serve them as an http.Handler that reverse-proxies a matched public path to a function's worker upstream.
Package gateway is the ingress / API gateway port (ADR-0012): program routes declaratively and serve them as an http.Handler that reverse-proxies a matched public path to a function's worker upstream.
gateway/embedded
Package embedded implements the gateway.Gateway port with net/http/httputil — a hand-written reverse proxy behind a longest-prefix router (ADR-0012).
Package embedded implements the gateway.Gateway port with net/http/httputil — a hand-written reverse proxy behind a longest-prefix router (ADR-0012).
gateway/gatewaycontract
Package gatewaycontract is the shared conformance suite for the gateway.Gateway port (ADR-0012).
Package gatewaycontract is the shared conformance suite for the gateway.Gateway port (ADR-0012).
kvstore
Package kvstore is the key/value substrate port (ADR-0019): get/put/delete/list over opaque string keys and []byte values.
Package kvstore is the key/value substrate port (ADR-0019): get/put/delete/list over opaque string keys and []byte values.
kvstore/badger
Package badger is the durable kvstore.KV driver (ADR-0066): a pure-Go Badger instance (separate from the metastore's, ADR-0065) with a single-writer group-commit gateway and per-store DropPrefix teardown.
Package badger is the durable kvstore.KV driver (ADR-0066): a pure-Go Badger instance (separate from the metastore's, ADR-0065) with a single-writer group-commit gateway and per-store DropPrefix teardown.
kvstore/kvstorecontract
Package kvstorecontract is the shared conformance suite for the kvstore.KV port (ADR-0019): Run asserts put/get/overwrite/delete/list/missing-key against any driver.
Package kvstorecontract is the shared conformance suite for the kvstore.KV port (ADR-0019): Run asserts put/get/overwrite/delete/list/missing-key against any driver.
kvstore/memory
Package memory is the in-memory kvstore.KV driver (ADR-0019): a mutex-guarded map, for dev/e2e/tests.
Package memory is the in-memory kvstore.KV driver (ADR-0019): a mutex-guarded map, for dev/e2e/tests.
network
Package network is the worker network-isolation substrate (ADR-0115, FEAT-0007/F80): the L3/L4 egress policy layer.
Package network is the worker network-isolation substrate (ADR-0115, FEAT-0007/F80): the L3/L4 egress policy layer.
network/egress
Package egress is the transparent egress PEP (ADR-0117, FEAT-0007/F81): the enforcement point F80's nftables substrate REDIRECTs remaining external worker TCP into.
Package egress is the transparent egress PEP (ADR-0117, FEAT-0007/F81): the enforcement point F80's nftables substrate REDIRECTs remaining external worker TCP into.
platform/clock
Package clock is the canonical injected-dependency example (ADR-0002).
Package clock is the canonical injected-dependency example (ADR-0002).
platform/config
Package config is the funcd daemon config — funcdconfig.yaml (ADR-0061, ADR-0062).
Package config is the funcd daemon config — funcdconfig.yaml (ADR-0061, ADR-0062).
platform/lintfixture
Package lintfixture holds a known-bad lint fixture for scenario: platform-leaf-rule-fires (ADR-0027), gated behind the `lintfixture` build tag — see tests/lint-fixtures/lintrules_test.go.
Package lintfixture holds a known-bad lint fixture for scenario: platform-leaf-rule-fires (ADR-0027), gated behind the `lintfixture` build tag — see tests/lint-fixtures/lintrules_test.go.
platform/observability
Package observability builds the funcd platform's root logger (ADR-0009).
Package observability builds the funcd platform's root logger (ADR-0009).
platform/version
Package version exposes funcd's build identity.
Package version exposes funcd's build identity.
pooling
Package pooling is the pure worker-pooling placement policy (ADR-0046): it maps a function to either a solo worker (its own process, the default) or a shared pool worker keyed by (namespace, runtime, worker-id).
Package pooling is the pure worker-pooling placement policy (ADR-0046): it maps a function to either a solo worker (its own process, the default) or a shared pool worker keyed by (namespace, runtime, worker-id).
provider
Package provider is the platform provider catalog (ADR-0082): the blueprint provider model in code.
Package provider is the platform provider catalog (ADR-0082): the blueprint provider model in code.
route
Package route reconciles the Route resource (ADR-0110, F79): it validates each Route's backends, applies the multi-tenancy rules (host required in explicit-mode namespaces; deterministic cross-namespace (host,path,method) collision resolution), sets Ready/NotReady, and programs the edge router replace-all from the full Ready-route set — mirroring the Function reconciler's programAllRoutes discipline.
Package route reconciles the Route resource (ADR-0110, F79): it validates each Route's backends, applies the multi-tenancy rules (host required in explicit-mode namespaces; deterministic cross-namespace (host,path,method) collision resolution), sets Ready/NotReady, and programs the edge router replace-all from the full Ready-route set — mirroring the Function reconciler's programAllRoutes discipline.
runtime
Package runtime is the function worker port (ADR-0011): create, start, stop, observe, and harvest logs from a worker instance (one replica of a function).
Package runtime is the function worker port (ADR-0011): create, start, stop, observe, and harvest logs from a worker instance (one replica of a function).
runtime/containerd
Package containerd implements the runtime.Runtime port over containerd + runc on Linux (ADR-0011): pull a curated runtime image, run it as a runc container with conservative OCI defaults (no added caps, no_new_privileges, optional limits), attach a per-worker netns with default-deny lateral (go-cni bridge + firewall), and harvest logs via cio.LogFile.
Package containerd implements the runtime.Runtime port over containerd + runc on Linux (ADR-0011): pull a curated runtime image, run it as a runc container with conservative OCI defaults (no added caps, no_new_privileges, optional limits), attach a per-worker netns with default-deny lateral (go-cni bridge + firewall), and harvest logs via cio.LogFile.
runtime/ctrmanager
Package ctrmanager brings up the container runtime funcd will drive (ADR-0054).
Package ctrmanager brings up the container runtime funcd will drive (ADR-0054).
runtime/embedimg
Package embedimg carries funcd's curated runtime images baked into the binary (ADR-0054).
Package embedimg carries funcd's curated runtime images baked into the binary (ADR-0054).
runtime/process
Package process implements the runtime.Runtime port by supervising functions as plain OS child processes (ADR-0011).
Package process implements the runtime.Runtime port by supervising functions as plain OS child processes (ADR-0011).
runtime/provision
Package provision is funcd's TEMPORARY container-runtime self-provisioning (ADR-0056): `funcd install` downloads the pinned, SHA-256-verified static binaries the managed-containerd path needs — crun (the OCI runtime the runc-v2 shim execs), containerd (+ its runc-v2 shim + ctr), and the CNI plugins — laying crun/containerd into funcd's bin dir and the CNI plugins into /opt/cni/bin.
Package provision is funcd's TEMPORARY container-runtime self-provisioning (ADR-0056): `funcd install` downloads the pinned, SHA-256-verified static binaries the managed-containerd path needs — crun (the OCI runtime the runc-v2 shim execs), containerd (+ its runc-v2 shim + ctr), and the CNI plugins — laying crun/containerd into funcd's bin dir and the CNI plugins into /opt/cni/bin.
runtime/runtimecontract
Package runtimecontract is the shared conformance suite for the runtime.Runtime port (ADR-0011).
Package runtimecontract is the shared conformance suite for the runtime.Runtime port (ADR-0011).
scheduler
Package scheduler is the placement port (ADR-0017): the control-plane decision of which worker/node runs a function replica.
Package scheduler is the placement port (ADR-0017): the control-plane decision of which worker/node runs a function replica.
scheduler/schedulercontract
Package schedulercontract is the shared conformance suite for the scheduler.Scheduler port (ADR-0017, ADR-0145): Run asserts the port guarantee against any driver — a valid request yields a non-empty Placement.WorkerNode and no error, unless it lists artifact platforms none of which the driver's node runs.
Package schedulercontract is the shared conformance suite for the scheduler.Scheduler port (ADR-0017, ADR-0145): Run asserts the port guarantee against any driver — a valid request yields a non-empty Placement.WorkerNode and no error, unless it lists artifact platforms none of which the driver's node runs.
scheduler/singlenode
Package singlenode is the single-node scheduler driver (ADR-0017): it places every function replica on one configured local worker — deterministic, and total except for an artifact built for other platforms than the node's (ADR-0145).
Package singlenode is the single-node scheduler driver (ADR-0017): it places every function replica on one configured local worker — deterministic, and total except for an artifact built for other platforms than the node's (ADR-0145).
secrets
Package secrets is the secrets delivery resolver (ADR-0022): it reads a function's bound Secret resources (auto-decrypted by the store's at-rest encryptor) and returns their data as an env-var map for worker injection — PDP-authorized (the secrets PEP).
Package secrets is the secrets delivery resolver (ADR-0022): it reads a function's bound Secret resources (auto-decrypted by the store's at-rest encryptor) and returns their data as an env-var map for worker injection — PDP-authorized (the secrets PEP).
secrets/aesgcm
Package aesgcm is the V1 at-rest secrets encryptor (ADR-0022): an AES-256-GCM store.Encryptor that fills the ADR-0006 seam.
Package aesgcm is the V1 at-rest secrets encryptor (ADR-0022): an AES-256-GCM store.Encryptor that fills the ADR-0006 seam.
sensor
Package sensor implements the F69 Sensor (ADR-0109): the reusable event→action binder.
Package sensor implements the F69 Sensor (ADR-0109): the reusable event→action binder.
services
Package services holds the platform service pattern (ADR-0019): the single KindService reconciler (the Dispatcher) that routes each Service to the TypeHandler registered for its spec.type, plus the shared status write-back.
Package services holds the platform service pattern (ADR-0019): the single KindService reconciler (the Dispatcher) that routes each Service to the TypeHandler registered for its spec.type, plus the shared status write-back.
services/blob
Package blob is the blob storage service: the function-facing, binding-gated Facade (ADR-0127) over the blob.Bucket substrate, plus the blob services.TypeHandler the Service dispatcher routes type:blob to.
Package blob is the blob storage service: the function-facing, binding-gated Facade (ADR-0127) over the blob.Bucket substrate, plus the blob services.TypeHandler the Service dispatcher routes type:blob to.
services/catalog
Package catalog is the CatalogService reconciler (ADR-0086 as reworked by ADR-0087, F48/F57): the ADR-0019 controller half of the DuckLake/DuckDB/Quack add-on provider.
Package catalog is the CatalogService reconciler (ADR-0086 as reworked by ADR-0087, F48/F57): the ADR-0019 controller half of the DuckLake/DuckDB/Quack add-on provider.
services/identity
Package identity is the controller for KindIdentity (ADR-0135, FEAT-0008/F100): a user-assigned managed identity whose reconciler issues a revocable SigV4 credential — a stable access key (IdentityAccessKey) plus a generated, rotatable secret written to an owned Secret.
Package identity is the controller for KindIdentity (ADR-0135, FEAT-0008/F100): a user-assigned managed identity whose reconciler issues a revocable SigV4 credential — a stable access key (IdentityAccessKey) plus a generated, rotatable secret written to an owned Secret.
services/kv
Package kv is the KV service (ADR-0019/0072/0073): the function-facing Facade (binding-gated, <ns>/<store>/<table>/<key> prefixed, results prefix-stripped) over the kvstore.KV port, plus the KV services.TypeHandler the Service dispatcher routes type:kv to, and the KindKVStore reconciler.
Package kv is the KV service (ADR-0019/0072/0073): the function-facing Facade (binding-gated, <ns>/<store>/<table>/<key> prefixed, results prefix-stripped) over the kvstore.KV port, plus the KV services.TypeHandler the Service dispatcher routes type:kv to, and the KindKVStore reconciler.
services/roles
Package roles wires the ADR-0136 RolesAssignment model to the Cedar PDP: a store-backed WriterLister that feeds the generalized single-writer forbid's `writers` set, and a compile helper that turns RolesAssignments into the synthetic read/query/invoke permits the PolicySource aggregates.
Package roles wires the ADR-0136 RolesAssignment model to the Cedar PDP: a store-backed WriterLister that feeds the generalized single-writer forbid's `writers` set, and a compile helper that turns RolesAssignments into the synthetic read/query/invoke permits the PolicySource aggregates.
site
Package site reconciles the Site resource (ADR-0139, F103): it resolves the site bundle's digest once per spec generation, materializes the bundle under a digest-scoped Bucket prefix (index written last, so its presence means complete), materializes the owned Bucket + Route, and publishes a status DERIVED from the owned Route — the durable record of what is served.
Package site reconciles the Site resource (ADR-0139, F103): it resolves the site bundle's digest once per spec generation, materializes the bundle under a digest-scoped Bucket prefix (index written last, so its presence means complete), materializes the owned Bucket + Route, and publishes a status DERIVED from the owned Route — the durable record of what is served.
store
Package store is the metastore / database-layer port (ADR-0006): a generic, watchable, versioned record store over ADR-0003 v1alpha1.Object values.
Package store is the metastore / database-layer port (ADR-0006): a generic, watchable, versioned record store over ADR-0003 v1alpha1.Object values.
store/badger
Package badger is the pure-Go store.Engine (ADR-0065): a Badger v4 LSM at a local directory, superseding ADR-0006's slatedb/cgo engine and restoring funcd's pure-Go static binary.
Package badger is the pure-Go store.Engine (ADR-0065): a Badger v4 LSM at a local directory, superseding ADR-0006's slatedb/cgo engine and restoring funcd's pure-Go static binary.
store/memory
Package memory is the pure-Go, cgo-free store.Engine: a process-local map guarded by a RWMutex.
Package memory is the pure-Go, cgo-free store.Engine: a process-local map guarded by a RWMutex.
store/storecontract
Package storecontract is the shared conformance suite for the store port (ADR-0006).
Package storecontract is the shared conformance suite for the store port (ADR-0006).
testkit/bench
Package bench is the funcd benchmark & sustainability harness (ADR-0040): it embeds the platform, drives the public data plane, and samples process memory to answer whether the platform is sustainable on the target box (RAM-bound, scale-to-zero).
Package bench is the funcd benchmark & sustainability harness (ADR-0040): it embeds the platform, drives the public data plane, and samples process memory to answer whether the platform is sustainable on the target box (RAM-bound, scale-to-zero).
testkit/langmod
Package langmod locates the language repos funcd pins as Go modules (ADR-0141): a pinned module's root, for the committed example builds, and the embedded Node shims written to a temp dir, for the tests that exec them.
Package langmod locates the language repos funcd pins as Go modules (ADR-0141): a pinned module's root, for the committed example builds, and the embedded Node shims written to a temp dir, for the tests that exec them.
testkit/loadgen
Package loadgen is a small, stdlib-only client-side HTTP load generator (ADR-0053).
Package loadgen is a small, stdlib-only client-side HTTP load generator (ADR-0053).
workernode/local
Package local is the per-sandbox worker-node local API (ADR-0064): an HTTP-over-UDS surface the runtime shim calls for the synchronous fn-to-fn invoke verb (context.invoke).
Package local is the per-sandbox worker-node local API (ADR-0064): an HTTP-over-UDS surface the runtime shim calls for the synchronous fn-to-fn invoke verb (context.invoke).
workflow
Package workflow implements the funcd workflow engine core (ADR-0094, FEAT-0005/F64): the state-machine orchestrator that drives a WorkflowRun over its steps.
Package workflow implements the funcd workflow engine core (ADR-0094, FEAT-0005/F64): the state-machine orchestrator that drives a WorkflowRun over its steps.
workflow/runstate
Package runstate is the durable-run-state PORT for the workflow engine (ADR-0094).
Package runstate is the durable-run-state PORT for the workflow engine (ADR-0094).
workflow/runstate/badger
Package badger is the run-state runstate driver (ADR-0094), backed by Badger v4.
Package badger is the run-state runstate driver (ADR-0094), backed by Badger v4.
pkg
funcd
Package funcd is the platform-as-a-library facade (ADR-0014): the composition root that wires every port into a *Platform and owns its start/stop lifecycle.
Package funcd is the platform-as-a-library facade (ADR-0014): the composition root that wires every port into a *Platform and owns its start/stop lifecycle.
sdk
Package sdk is the typed Go client over the funcd control-plane REST API (ADR-0024).
Package sdk is the typed Go client over the funcd control-plane REST API (ADR-0024).
tests
e2e/boundary-fixture
Package boundaryfixture holds a known-bad lint fixture for scenario: e2e-boundary-rule-fires (ADR-0025), gated behind the `lintfixture` build tag — see tests/lint-fixtures/lintrules_test.go and the sibling tests/lint-fixtures fixtures.
Package boundaryfixture holds a known-bad lint fixture for scenario: e2e-boundary-rule-fires (ADR-0025), gated behind the `lintfixture` build tag — see tests/lint-fixtures/lintrules_test.go and the sibling tests/lint-fixtures fixtures.
lint-fixtures/any-leak
Package anyleak holds a known-bad lint fixture for scenario: lint-blocks-any-leak (ADR-0002).
Package anyleak holds a known-bad lint fixture for scenario: lint-blocks-any-leak (ADR-0002).
lint-fixtures/mock-framework
Package mockframework holds a known-bad lint fixture for scenario: no-mock-framework (ADR-0002), gated behind the `lintfixture` build tag — see any-leak/doc.go and tests/lint-fixtures/lintrules_test.go.
Package mockframework holds a known-bad lint fixture for scenario: no-mock-framework (ADR-0002), gated behind the `lintfixture` build tag — see any-leak/doc.go and tests/lint-fixtures/lintrules_test.go.

Jump to

Keyboard shortcuts

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