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

pando

module
v0.4.0 Latest Latest
Warning

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

Go to latest
Published: Oct 11, 2026 License: AGPL-3.0

README

Pando

Pando

Deploy and share apps

trypando.ai · Quickstart

CI Docker Hub codecov Go 1.27 OpenSSF Scorecard OpenSSF Best Practices Quality gate status AI Code Assurance

Deploy and share any app. Pando runs on your own server and hosts the apps your team builds, including the ones written with AI. Beside the text, a topographic contour map with a red summit marker.

What is Pando?

Pando is a self-hosted deployment platform. It runs on a machine you control — a laptop, a home server, a VPS, a server inside a company network — and hosts web applications on it: building them from a git repository, running them in containers, giving each an address, and deciding who can reach them.

It is used two ways, and does the same job in both. On your own machine it takes the place of a hosting provider for side projects and tools you would rather not pay to host. Inside a team or a company it is one place to run internal applications, with accounts, groups, roles, host policy and an audit log — and with every app reached through one Pando hostname rather than a public hostname, certificate and firewall rule per application.

What it does:

  • Deploys from a repository URL. Pando clones it, works out how the app should be built and run, and shows you what it worked out before building anything.
  • Builds five ways, picked automatically: a Dockerfile, a compose file, an image you already publish, a static site, or a buildpack for apps with none of those. Compose files are imported as written, including multiple services, healthchecks, volumes and startup order.
  • Puts sign-in in front of every app. Apps are private by default. Share one with specific people or groups, or make it public. Your app receives a signed token describing who is visiting, so it does not need its own login.
  • Creates databases on request. Postgres, MySQL and Redis can be provisioned per app, with credentials generated, injected as environment variables, and kept stable across redeploys.
  • Manages secrets, environment variables, volumes and resource limits per app.
  • Gives you logs, a terminal into a running container, and one-click rollback to any previous configuration.
  • Backs up app storage, including automatically before an app is deleted.
For teams and organizations

The same installation, configured rather than upgraded. There is no separate edition and no feature gating.

  • Accounts, groups and roles. Permissions are individual verbs in two scopes — what someone can do to one app, and what they can do to the installation. The four built-in roles cannot be edited, and custom roles are composed from the verb list. Access can be granted to a group as easily as to a person, and group membership is read at the moment of the decision rather than copied into grants.
  • Single sign-on and provisioning. People sign in with a local password or through your identity provider over OpenID Connect or SAML 2.0 — Okta, Microsoft Entra ID, Google Workspace, Keycloak, Authentik or any other. A provider's groups arrive in Pando, where you decide what they can do, and SCIM 2.0 creates, suspends and regroups people the moment the provider says so. Each provider is tested with a real sign-in before anyone else sees it, and password sign-in can be turned off once it is working. See docs/identity-providers.md.
  • Two separate planes. Being able to use an app and being able to administer it are separate grants, so somebody who runs an application need not be able to open it, and somebody who uses it daily need not be able to change it.
  • Host policy, set once and enforced everywhere: which sources apps may be deployed from, whether apps may be made public, minimum isolation for builds and for runtime, where apps may connect out to (an allowlist or a denylist, which apps may narrow and loosen only as policy allows), deploys that wait for somebody's approval, whether a backup is required before anything is destroyed, a maximum lifetime for API tokens, and verbs disabled installation-wide — app.exec most often, and separately for automated tokens.
  • An audit log that cannot be rewritten. Every action is recorded with who did it, and the database role Pando runs as holds no UPDATE or DELETE on that table, so neither Pando nor an adapter can alter it after the fact.
  • Events, sent where you will see them. Subscribe to deploys, failures, sign-ins, grants, backups and the rest — on one app, or the whole installation — and Pando posts each to a webhook, signed so the receiver can check it, or to Slack, Microsoft Teams, Discord, email or ntfy. Failed deliveries are retried and recorded, and can be sent again. The catalog is docs/events.md.
  • Isolation between apps. Each app runs on its own private network and publishes nothing to the host. Builds run in a rootless builder with no access to a container runtime socket.
  • One way in. All traffic reaches applications through Pando's proxy, which authenticates the caller and makes the authorization decision. There is no bypass for public apps or for websockets.

Console

http://localhost:8080. Two views, depending on your permissions: a page of app tiles for people who only need to open apps, and an admin interface for people who deploy and configure them.

The admin interface covers apps and their configuration, sharing and access, environment variables and secrets, host policy, user accounts, groups and roles, backups, the audit log, event subscriptions, and a terminal into any running container.

CLI

Installed separately, or used from inside the container with docker compose exec pando pando ….

pando login https://pando.example.com    # stores an API token for this machine

pando app add https://github.com/you/notes
pando app list
pando app show notes
pando deploy notes                       # or: pando deploy ./local-directory
pando logs notes --follow
pando exec notes -- sh

pando slot set notes database --provision   # let Pando create the database
pando secret set notes STRIPE_KEY
pando grant add notes --user usr_01HQ8…     # give someone access
pando rollback notes                        # to the previous configuration
pando export notes                          # the app's full spec, as JSON

Also pando backup, pando policy, pando token and pando subscriptions. Run pando <command> --help for details, and --server to talk to an installation other than the one you logged into. Every command, with its flags: docs/cli.md.

For CI, a container or anything else with no home directory to store a login in, set a token in the environment instead:

export PANDO_SERVER=https://pando.example.com
export PANDO_TOKEN=tok_…      # from the console, under API and tools

MCP server

Pando exposes its API to coding agents over MCP, so an agent can deploy and inspect apps directly. It runs on your machine over stdio and uses the token from pando login.

pando login https://pando.example.com

Claude Code:

claude mcp add pando -- pando mcp

Any other MCP client, in its config file:

{
  "mcpServers": {
    "pando": {
      "command": "pando",
      "args": ["mcp"]
    }
  }
}

The tools, with their arguments: docs/mcp.md. An MCP client that runs pando mcp without a login of its own takes PANDO_SERVER and PANDO_TOKEN from its env block.

An agent's token carries the same permissions you do and no more, and everything it does appears in the audit log under your name. Running commands inside apps, reading secret values and changing who has access are not available as MCP tools, and are denied to tokens by host policy by default.

HTTP API

Everything above is a client of /api/v1, which you can use directly with a session cookie or a bearer token from pando token. Errors return a machine-readable code, a description, and a suggested fix:

{
  "code": "PLAN_SLOT_UNFILLED",
  "message": "This app needs a PostgreSQL database, and one hasn't been chosen yet.",
  "remedy": "Choose how to fill the database slot: provision one inside this app, connect to an existing one, or paste a connection string.",
  "details": { "slots": [{ "key": "database", "type": "postgres" }] },
  "request_id": "req_01HQ8…"
}

Every endpoint, the verb it asks for and every error code: docs/api.md — generated from the running code, so it cannot describe a version of Pando that no longer exists. The same reference for the latest release is published at trypando.ai/docs, which the console's API and tools screen links to and where you mint a token. Your installation serves its own at GET /api/v1/reference for anything that would rather read it as JSON.

Configuration

Set on the pando service in docker-compose.yml, or in the environment.

Variable Default Purpose
PANDO_PORT 8080 Port the console and API are served on.
PANDO_ADMIN_PASSWORD — Initial admin password, for an unattended install. Read only on first run; unset, the administrator is set up in the console with the setup token Pando prints to its log.
PANDO_APP_PORT_START / _END 9000 / 9019 Range of host ports apps are given. Sets both what Compose publishes and what Pando allocates.
PANDO_BASE_DOMAIN localtest.me Domain per-app subdomains are taken from, when using hostname routing.
PANDO_DATABASE_URL the bundled Postgres Point Pando at an existing database instead.
PANDO_DATABASE_PASSWORD_FILE the generated password A file holding the password for PANDO_DATABASE_URL's user, which the URL then leaves out. The bundled Postgres's password is generated on the first start and kept in the pando-secrets volume; back that up with postgres-data.
PANDO_DOCKER_SOCKET /var/run/docker.sock The Docker socket Pando's container mounts. On Linux, set it to rootless Docker's, usually /run/user/1000/docker.sock; see docs/rootless.md.
PANDO_SERVER_EXTERNAL_URL — The address browsers reach Pando on, such as https://pando.example.com. Set this whenever something else terminates TLS — it is what marks the session cookie Secure.
PANDO_SERVER_TRUSTED_PROXIES — The proxies in front of Pando, such as 10.0.0.5, separated by commas. Set it so the audit log records each client's own address rather than the proxy's.
PANDO_POLICY_<SETTING> — Fixes a host policy setting, such as PANDO_POLICY_MIN_SECURITY_SCORE=70. It cannot then be changed in the console. Compose passes only the variables listed on the pando service, so add it there. See the reference.

What Pando does not do

It does not schedule across machines: one installation runs apps on its host, and multi-machine support would come from a runtime adapter that spans machines. It does not run your tests. It is not an app marketplace, not a disaster-recovery product with RPO/RTO guarantees, not multi-region, and not multi-tenant — one installation serves one organization.

It reports problems rather than working around them. If an app loads its assets from the domain root and will break under a path prefix, Pando says so; it does not rewrite the app's pages.

Documentation

  • docs/reference.md — the external interfaces in one place: the HTTP API, what an app receives, every configuration variable, and the guarantees worth relying on.
  • docs/design/04-api.md — the full API reference.
  • docs/identity-providers.md — connecting Okta, Entra ID, Google Workspace, Keycloak, Authentik or another provider, and SCIM.
  • docs/rootless.md — running Pando on rootless Docker on a Linux server, so a compromise of Pando is not root on the host.
  • CHANGELOG.md — what changed in each release, and whether you need to act.

Reporting a problem

Contributing

Bug reports and pull requests are welcome. See CONTRIBUTING.md for how the project is organized, how to build it, and what a change needs before it can be merged. CODE_OF_CONDUCT.md applies everywhere the project happens.

License

AGPL-3.0, with a commercial license available for embedding Pando in a proprietary product or offering it as a hosted service without publishing modifications. See LICENSING.md for which applies to you, and LICENSE for the full text. Contributors sign the Contributor License Agreement once, by posting a comment on their first pull request.

Directories

Path Synopsis
cmd
gen-api-types command
Command gen-api-types emits TypeScript types for the console from the Go types the API actually returns.
Command gen-api-types emits TypeScript types for the console from the Go types the API actually returns.
gen-reference command
gen-reference writes docs/api.md, docs/cli.md and docs/mcp.md from the binary that serves them.
gen-reference writes docs/api.md, docs/cli.md and docs/mcp.md from the binary that serves them.
pando command
Command pando is both the CLI and the server entrypoint (design 00 §2).
Command pando is both the CLI and the server entrypoint (design 00 §2).
internal
adapter/ai/aikit
Package aikit is what every AI adapter does the same way, whatever its provider: the prompts, the tools a model is given and their schemas, the budgeted reader a model reads the repository through, and what a tool call does.
Package aikit is what every AI adapter does the same way, whatever its provider: the prompts, the tools a model is given and their schemas, the budgeted reader a model reads the repository through, and what a tool call does.
adapter/ai/aikit/aitest
Package aitest holds what the AI adapters' tests share: a repository in memory.
Package aitest holds what the AI adapters' tests share: a repository in memory.
adapter/ai/anthropic
Package anthropic screens deployment plans with Claude (design 10 §6).
Package anthropic screens deployment plans with Claude (design 10 §6).
adapter/ai/local
Package local performs Pando's AI functions with a model served on your own hardware, by any server that speaks the OpenAI Chat Completions API: Ollama, LM Studio, llama.cpp's server, vLLM.
Package local performs Pando's AI functions with a model served on your own hardware, by any server that speaks the OpenAI Chat Completions API: Ollama, LM Studio, llama.cpp's server, vLLM.
adapter/ai/openai
Package openai performs Pando's AI functions with OpenAI's models, through the Responses API.
Package openai performs Pando's AI functions with OpenAI's models, through the Responses API.
adapter/api
Package api defines the seven adapter interfaces.
Package api defines the seven adapter interfaces.
adapter/auditsink/https
Package https is the audit sink adapter for a SIEM's HTTPS ingest endpoint (R-382, design 12 §5.1): one POST per batch, in the body shape the destination reads — newline-delimited JSON, a JSON array, Splunk HEC's envelope, or Elastic's bulk action lines.
Package https is the audit sink adapter for a SIEM's HTTPS ingest endpoint (R-382, design 12 §5.1): one POST per batch, in the body shape the destination reads — newline-delimited JSON, a JSON array, Splunk HEC's envelope, or Elastic's bulk action lines.
adapter/auditsink/sinkkit
Package sinkkit holds what the audit sink kinds share: the settings that narrow and shape what core sends (R-384), reading inline credentials out of plain configuration (R-190), and a trusted certificate bundle.
Package sinkkit holds what the audit sink kinds share: the settings that narrow and shape what core sends (R-384), reading inline credentials out of plain configuration (R-190), and a trusted certificate bundle.
adapter/auditsink/syslog
Package syslog is the audit sink adapter for a syslog collector (R-382, design 12 §5.1): RFC 5424 messages over TCP, octet-counted as RFC 5425 and RFC 6587 frame them, with TLS unless the operator turns it off.
Package syslog is the audit sink adapter for a syslog collector (R-382, design 12 §5.1): RFC 5424 messages over TCP, octet-counted as RFC 5425 and RFC 6587 frame them, with TLS unless the operator turns it off.
adapter/backup/local
Package local stores backup bundles on a filesystem path.
Package local stores backup bundles on a filesystem path.
adapter/builder/buildkit
Package buildkit implements the builder adapter: rootless, containerized, no socket.
Package buildkit implements the builder adapter: rootless, containerized, no socket.
adapter/identity/local
Package local implements the local identity adapter: username and password, argon2id.
Package local implements the local identity adapter: username and password, argon2id.
adapter/identity/oidc
Package oidc is the generic OpenID Connect identity adapter (R-043).
Package oidc is the generic OpenID Connect identity adapter (R-043).
adapter/identity/saml
Package saml is the SAML 2.0 identity adapter (R-043).
Package saml is the SAML 2.0 identity adapter (R-043).
adapter/imageregistry/ecr
Package ecr is the image registry adapter for Amazon ECR.
Package ecr is the image registry adapter for Amazon ECR.
adapter/imageregistry/oci
Package oci is the image registry adapter for any registry that signs in with a username and password, or not at all: the Distribution registry docker-compose.registry.yml runs, Harbor, GitHub Container Registry, Google Artifact Registry, Zot.
Package oci is the image registry adapter for any registry that signs in with a username and password, or not at all: the Distribution registry docker-compose.registry.yml runs, Harbor, GitHub Container Registry, Google Artifact Registry, Zot.
adapter/imageregistry/registrykit
Package registrykit is what the image registry adapters share: reading a registry address, laying built images out in it, and deleting a deleted app's (R-224).
Package registrykit is what the image registry adapters share: reading a registry address, laying built images out in it, and deleting a deleted app's (R-224).
adapter/notify/chat
Package chat is the notify adapters for chat platforms that take an incoming webhook: Slack, Microsoft Teams and Discord (R-374, issue #50).
Package chat is the notify adapters for chat platforms that take an incoming webhook: Slack, Microsoft Teams and Discord (R-374, issue #50).
adapter/notify/console
Package console is the v1 notification adapter (R-230, R-231).
Package console is the v1 notification adapter (R-230, R-231).
adapter/notify/ntfy
Package ntfy is the notify adapter for ntfy, the push notification service (R-374, issue #50): ntfy.sh or a server of your own.
Package ntfy is the notify adapter for ntfy, the push notification service (R-374, issue #50): ntfy.sh or a server of your own.
adapter/notify/smtp
Package smtp is the email notify adapter (R-232, R-374, issue #50).
Package smtp is the email notify adapter (R-232, R-374, issue #50).
adapter/routing/cloudflare
Package cloudflare routes apps through a Cloudflare Tunnel (R-160, design 03 §4.5).
Package cloudflare routes apps through a Cloudflare Tunnel (R-160, design 03 §4.5).
adapter/routing/loopback
Package loopback implements port-mode routing with no TLS: the laptop default.
Package loopback implements port-mode routing with no TLS: the laptop default.
adapter/routing/traefik
Package traefik implements subdomain and path routing with TLS.
Package traefik implements subdomain and path routing with TLS.
adapter/runtime/docker
Package docker implements the runtime adapter for local containers.
Package docker implements the runtime adapter for local containers.
adapter/runtime/kubernetes
Package kubernetes runs apps on a Kubernetes cluster (issue #72, PR 6, O-33).
Package kubernetes runs apps on a Kubernetes cluster (issue #72, PR 6, O-33).
adapter/runtime/multidocker
Package multidocker runs apps on several Docker hosts (notes-multi-host-docker-issue-72.md, issue #72 PR 7).
Package multidocker runs apps on several Docker hosts (notes-multi-host-docker-issue-72.md, issue #72 PR 7).
adapter/scanner/trivy
Package trivy scans what an app deploys, with Trivy in a container.
Package trivy scans what an app deploys, with Trivy in a container.
adapter/secrets/local
Package local implements the secrets adapter, encrypted at rest with the key on disk (R-190).
Package local implements the secrets adapter, encrypted at rest with the key on disk (R-190).
adapter/services/docker
Package docker provisions services that fill declared slots: postgres, mysql, redis.
Package docker provisions services that fill declared slots: postgres, mysql, redis.
adapter/source/azuredevops
Package azuredevops is the source adapter for Azure DevOps Services and Azure DevOps Server (R-091).
Package azuredevops is the source adapter for Azure DevOps Services and Azure DevOps Server (R-091).
adapter/source/bitbucket
Package bitbucket is the source adapter for Bitbucket Cloud and Bitbucket Data Center (R-091).
Package bitbucket is the source adapter for Bitbucket Cloud and Bitbucket Data Center (R-091).
adapter/source/forgekit
Package forgekit is what source adapters share: reading a repository address in each of the forms people write one, deciding whether a connection covers it, and building the credential core clones with.
Package forgekit is what source adapters share: reading a repository address in each of the forms people write one, deciding whether a connection covers it, and building the credential core clones with.
adapter/source/generic
Package generic is the source adapter for any git host (R-091): an HTTPS username and token, or an SSH key with the host's key pinned.
Package generic is the source adapter for any git host (R-091): an HTTPS username and token, or an SSH key with the host's key pinned.
adapter/source/gitea
Package gitea is the source adapter for Gitea and Forgejo, Codeberg among them (R-091).
Package gitea is the source adapter for Gitea and Forgejo, Codeberg among them (R-091).
adapter/source/github
Package github is the source adapter for GitHub (R-091): github.com and GitHub Enterprise Server, reached with a GitHub App installation, an OAuth application, a personal access token or a deploy key.
Package github is the source adapter for GitHub (R-091): github.com and GitHub Enterprise Server, reached with a GitHub App installation, an OAuth application, a personal access token or a deploy key.
adapter/source/gitlab
Package gitlab is the source adapter for GitLab, on gitlab.com or self-managed (R-091).
Package gitlab is the source adapter for GitLab, on gitlab.com or self-managed (R-091).
cli
Package cli is the command-line client (design 04 §4).
Package cli is the command-line client (design 04 §4).
clientaddr
Package clientaddr decides which address a request came from, for the audit log (R-379, R-380), and carries it on the request's context to the audit writer.
Package clientaddr decides which address a request came from, for the audit log (R-379, R-380), and carries it on the request's context to the audit writer.
config
Package config loads configuration from YAML, environment, and flags (R-271).
Package config loads configuration from YAML, environment, and flags (R-271).
console
Package console embeds the built console assets into the binary (R-253).
Package console embeds the built console assets into the binary (R-253).
core/address
Package address changes where a configured app is reached (R-162, R-163, R-165).
Package address changes where a configured app is reached (R-162, R-163, R-165).
core/appdelete
Package appdelete deletes an app: settles its storage (R-204), archives it and starts its teardown.
Package appdelete deletes an app: settles its storage (R-204), archives it and starts its teardown.
core/applimit
Package applimit decides how many apps a person may own (R-244, issue #131).
Package applimit decides how many apps a person may own (R-244, issue #131).
core/approval
Package approval is deploy approval (R-154 – R-159): whether a deploy needs somebody's sign-off, and the request, approval, rejection and expiry of one.
Package approval is deploy approval (R-154 – R-159): whether a deploy needs somebody's sign-off, and the request, approval, rejection and expiry of one.
core/assertion
Package assertion mints the identity assertions the proxy passes to apps, and publishes the keys that verify them.
Package assertion mints the identity assertions the proxy passes to apps, and publishes the keys that verify them.
core/assist
Package assist is which AI adapter performs each AI function (R-259), and the administrative functions built on that: drafting access and policy, searching the audit log, and answering from the reference (R-343 … R-346).
Package assist is which AI adapter performs each AI function (R-259), and the administrative functions built on that: drafting access and policy, searching the audit log, and answering from the reference (R-343 … R-346).
core/audit
Package audit writes the append-only event log.
Package audit writes the append-only event log.
core/audit/ocsf
Package ocsf encodes native audit lines as OCSF events (design 12 §6.2, R-384).
Package ocsf encodes native audit lines as OCSF events (design 12 §6.2, R-384).
core/auditstream
Package auditstream pushes the audit log to audit sinks as it is written (R-382, R-383, design 12 §5).
Package auditstream pushes the audit log to audit sinks as it is written (R-382, R-383, design 12 §5).
core/authz
Package authz evaluates the two authorization planes.
Package authz evaluates the two authorization planes.
core/autodeploy
Package autodeploy is the service behind an app's automatic deploy settings and its webhook (R-141, R-142).
Package autodeploy is the service behind an app's automatic deploy settings and its webhook (R-141, R-142).
core/bootstrap
Package bootstrap creates the first administrative account on a fresh install.
Package bootstrap creates the first administrative account on a fresh install.
core/capacity
Package capacity is what GET /capacity shows: each runtime's room, beside what Pando has committed to apps on it (R-242, R-243, R-245).
Package capacity is what GET /capacity shows: each runtime's room, beside what Pando has committed to apps on it (R-242, R-243, R-245).
core/clock
Package clock provides the time source core depends on.
Package clock provides the time source core depends on.
core/cluster
Package cluster is what lets several Pando processes serve one install against one database (issue #72).
Package cluster is what lets several Pando processes serve one install against one database (issue #72).
core/deploy
Package deploy runs the deployment pipeline: everything after the plan boundary (design 05 §3, steps 8-16).
Package deploy runs the deployment pipeline: everything after the plan boundary (design 05 §3, steps 8-16).
core/detection
Package detection runs the detection job for an app and records the result.
Package detection runs the detection job for an app and records the result.
core/disklimit
Package disklimit holds apps to their disk limits (R-403, issue #130).
Package disklimit holds apps to their disk limits (R-403, issue #130).
core/edge
Package edge runs what routing adapters need in front of Pando (R-174).
Package edge runs what routing adapters need in front of Pando (R-174).
core/edgecert
Package edgecert issues the edge's certificates when the edge cannot issue its own (R-169, R-174; notes-kubernetes-runtime-issue-72.md, "Certificates with several replicas").
Package edgecert issues the edge's certificates when the edge cannot issue its own (R-169, R-174; notes-kubernetes-runtime-issue-72.md, "Certificates with several replicas").
core/events
Package events is the catalog of things Pando tells subscribers about (R-364, issue #50, design 11).
Package events is the catalog of things Pando tells subscribers about (R-364, issue #50, design 11).
core/idle
Package idle stops, and later deletes, apps nobody uses (R-393 – R-398, issue #131).
Package idle stops, and later deletes, apps nobody uses (R-393 – R-398, issue #131).
core/idp
Package idp is external identity: the providers an administrator connects, redirect sign-in through them, linking their identities to accounts, the groups they sync, and SCIM provisioning (R-043, R-045, R-047, R-048, R-050).
Package idp is external identity: the providers an administrator connects, redirect sign-in through them, linking their identities to accounts, the groups they sync, and SCIM provisioning (R-043, R-045, R-047, R-048, R-050).
core/imageregistry
Package imageregistry is the install's image registry: where a build is pushed when the runtime pulls rather than imports (issue #72, PR 5, docs/design/notes-image-registry-issue-72.md).
Package imageregistry is the install's image registry: where a build is pushed when the runtime pulls rather than imports (issue #72, PR 5, docs/design/notes-image-registry-issue-72.md).
core/logstream
Package logstream shares one live log stream per app part between everyone watching it on a replica (O-51).
Package logstream shares one live log stream per app part between everyone watching it on a replica (O-51).
core/observe
Package observe shares what a runtime reports about an app between the requests that ask for it at the same moment (issue #72).
Package observe shares what a runtime reports about an app between the requests that ask for it at the same moment (issue #72).
core/oci
Package oci reads what a registry says about an image, before anything is pulled.
Package oci reads what a registry says about an image, before anything is pulled.
core/planner
Package planner turns a spec plus host policy plus adapter capabilities into a bundle plan, or into a plan-time error.
Package planner turns a spec plus host policy plus adapter capabilities into a bundle plan, or into a plan-time error.
core/policy
Package policy evaluates host policy.
Package policy evaluates host policy.
core/reconciler
Package reconciler runs the loop that converges observed state toward pinned specs.
Package reconciler runs the loop that converges observed state toward pinned specs.
core/retention
Package retention removes what Pando keeps only for a while: old deploys, scans, sessions, notifications, idempotency keys, sign-in flows, the event outbox, and what deleted apps left behind (issue #72, R-224).
Package retention removes what Pando keeps only for a while: old deploys, scans, sessions, notifications, idempotency keys, sign-in flows, the event outbox, and what deleted apps left behind (issue #72, R-224).
core/screening
Package screening turns an AI adapter's proposed amendments into changes to a draft spec, or refuses them.
Package screening turns an AI adapter's proposed amendments into changes to a draft spec, or refuses them.
core/security
Package security turns a scanner's findings into a number, and that number into a decision.
Package security turns a scanner's findings into a number, and that number into a decision.
core/source
Package source fetches an app's source and exposes it read-only.
Package source fetches an app's source and exposes it read-only.
core/sourceconn
Package sourceconn is the install's source connections (R-091; O-3 as re-resolved with issue #127): which connection reads a repository, what it reads it with, and the OAuth authorizations that give a connection its token.
Package sourceconn is the install's source connections (R-091; O-3 as re-resolved with issue #127): which connection reads a repository, what it reads it with, and the OAuth authorizations that give a connection its token.
core/spec
Package spec defines the AppSpec: the sole record of how an app runs.
Package spec defines the AppSpec: the sole record of how an app runs.
core/specgate
Package specgate decides whether somebody may write a spec revision, for the parts of a spec that app.spec.edit alone does not cover: an app's egress rules (R-182 – R-184) and automatic deploys on an app whose deploys need approval (R-158).
Package specgate decides whether somebody may write a spec revision, for the parts of a spec that app.spec.edit alone does not cover: an app's egress rules (R-182 – R-184) and automatic deploys on an app whose deploys need approval (R-158).
core/state
Package state holds sqlc-generated queries and repository types.
Package state holds sqlc-generated queries and repository types.
core/state/statetest
Package statetest gives integration tests a database of their own, quickly.
Package statetest gives integration tests a database of their own, quickly.
core/subscription
Package subscription delivers Pando's events to the people who asked for them: webhooks and notification channels, retried until they arrive or plainly fail (issue #50, R-366 – R-374, design 11).
Package subscription delivers Pando's events to the people who asked for them: webhooks and notification channels, retried until they arrive or plainly fail (issue #50, R-366 – R-374, design 11).
core/tokenkey
Package tokenkey holds the key API token digests are made with (R-063).
Package tokenkey holds the key API token digests are made with (R-063).
core/update
Package update knows whether a newer Pando has been released (R-349–R-352).
Package update knows whether a newer Pando has been released (R-349–R-352).
core/upgrade
Package upgrade replaces the running Pando with a newer release (R-355 – R-361): checked, backed up, swapped by a helper, and put back on its own when the new version does not come up.
Package upgrade replaces the running Pando with a newer release (R-355 – R-361): checked, backed up, swapped by a helper, and put back on its own when the new version does not come up.
core/work
Package work runs work held in Postgres on a bounded number of goroutines (issue #72, O-32).
Package work runs work held in Postgres on a bounded number of goroutines (issue #72, O-32).
detect
Package detect works out how to build and run an app from its source.
Package detect works out how to build and run an app from its source.
detect/registryprobe
Package registryprobe looks for images a project already publishes.
Package registryprobe looks for images a project already publishes.
ecr
Package ecr mints an Amazon ECR registry password from an AWS access key.
Package ecr mints an Amazon ECR registry password from an AWS access key.
egress
Package egress is what an egress rule means: how an entry is written, what it matches, and whether a set of rules lets a connection out (R-181 – R-187).
Package egress is what an egress rule means: how an entry is written, what it matches, and whether a set of rules lets a connection out (R-181 – R-187).
errs
Package errs defines the error envelope crossing every API boundary.
Package errs defines the error envelope crossing every API boundary.
hash
Package hash derives and verifies password and token hashes with argon2id.
Package hash derives and verifies password and token hashes with argon2id.
hostagent
Package hostagent is the forwarding agent that stands on each app host of a multi-host Docker install where Pando's own container stands on one host (O-45, design 06 §4, notes-multi-host-docker-issue-72.md).
Package hostagent is the forwarding agent that stands on each app host of a multi-host Docker install where Pando's own container stands on one host (O-45, design 06 §4, notes-multi-host-docker-issue-72.md).
httpapi
Package httpapi is the REST surface: chi handlers and nothing else.
Package httpapi is the REST surface: chi handlers and nothing else.
id
Package id generates prefixed, sortable, opaque identifiers: app_01HQ8..., spec_..., usr_...
Package id generates prefixed, sortable, opaque identifiers: app_01HQ8..., spec_..., usr_...
log
Package log threads a single structured logger through context.
Package log threads a single structured logger through context.
mcp
Package mcp exposes Pando's service layer as MCP tools.
Package mcp exposes Pando's service layer as MCP tools.
openapi
Package openapi writes Pando's HTTP API as an OpenAPI 3.1 document, read from the handlers that serve it.
Package openapi writes Pando's HTTP API as an OpenAPI 3.1 document, read from the handlers that serve it.
proxy
Package proxy is the identity-aware reverse proxy: the single enforcement point for every request to every app (R-023).
Package proxy is the identity-aware reverse proxy: the single enforcement point for every request to every app (R-023).
reference
Package reference assembles Pando's own documentation from Pando.
Package reference assembles Pando's own documentation from Pando.
registrylimit
Package registrylimit says what to do when a registry refuses an image because this server has downloaded too many.
Package registrylimit says what to do when a registry refuses an image because this server has downloaded too many.
secret
Package secret provides Value, a wrapper that refuses to render.
Package secret provides Value, a wrapper that refuses to render.
telemetry
Package telemetry is the metrics Pando exports about itself (R-399, issue #126): pushed over OTLP to a collector the operator names, stored, graphed and alerted on there and nowhere in Pando (R-016, R-245).
Package telemetry is the metrics Pando exports about itself (R-399, issue #126): pushed over OTLP to a collector the operator names, stored, graphed and alerted on there and nowhere in Pando (R-016, R-245).
telemetry/telemetrytest
Package telemetrytest reads back what Pando recorded, for tests asserting that a piece of work is measured (R-399).
Package telemetrytest reads back what Pando recorded, for tests asserting that a piece of work is measured (R-399).
Package migrations embeds the SQL migrations into the binary.
Package migrations embeds the SQL migrations into the binary.
test
load command
Command load seeds a Pando install to one of the issue #72 scale tiers, drives console, API and proxy traffic through its load balancer in steps, and reports where it stopped keeping up.
Command load seeds a Pando install to one of the issue #72 scale tiers, drives console, API and proxy traffic through its load balancer in steps, and reports where it stopped keeping up.

Jump to

Keyboard shortcuts

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