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

apptown

module
v1.0.0-rc.12 Latest Latest
Warning

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

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

README

Flokkit AppTown

AppTown gives your team a ready-made place to build small web apps with AI coding agents, in the browser or from a desktop agent via MCP. Each app follows a way of working you choose, with consistent checks and deployment. That makes a growing collection of apps easier to maintain and change. You run AppTown yourself, on your own computer or server.

1.0 release candidate · Tour · Install on a server · Release notes · Apache-2.0

Why

AppTown started at home, vibe coding games with the kids. Agents could quickly bring ideas to life, but getting the games online was frustrating. "Why can't my friend see it?" "Now I want it to be multiplayer!" "What's Git?" There were deployment credentials, permissions, hosting and DNS to set up. Once the games were running, keeping them secure and up to date became another job.

Teams face the same problem with internal tools. An app might take an afternoon to build, but someone still has to look after it months later, often after the person who made it has moved on.

Shared conventions and a record of what changed help the next person understand the app and keep it useful.

What you get

For the people using it

  • People who don't use a coding agent work entirely in the browser. They describe what they want, an agent makes it in a container on your server using the model key you provide. They open a preview and try it. Nothing to install, no API keys, and no deployment tools to configure.
  • People who already use a coding agent keep using their own. They connect it to AppTown and push their work as a change. AppTown then checks that work itself: it runs the tests and checks that the change follows your project's rules. They can bring in existing apps too.
  • In a team, you decide who approves changes and who can release them.

For you, keeping it all running

  • You choose the language, framework, checks and agent guidance as a way of working. You can have several, such as one for Python web apps and one for static sites. Each project adopts one, so people working on similar apps share the same conventions.
  • AppTown manages HTTPS, databases and object storage, with backups on supported deployment targets.
  • Library updates and way-of-working updates come to you as changes that are already built and tested. Someone on the project accepts them before they take effect.
  • There's a record of who asked for what, what was checked, who approved it and what's running now.
  • It's ordinary software underneath: a Git repository and a container image you can take anywhere.

Try it now

On an Apple Silicon Mac with Docker Desktop, or Linux with Docker Engine:

curl -fsSL https://apptown.dev/try | sh

The first start takes a few minutes, then AppTown opens in your browser. Create the administrator, add an Anthropic or OpenRouter API key on the Home page, and start a project. Give Docker 4 CPUs, at least 8 GB of memory and 30 GB of free disk. You can read the script first.

The trial is for your own computer: it has full control of your Docker. The desktop trial explains what it does, and how to stop or remove it. To run it for a team, see Install on a server.

More screenshots are in the tour.

What it's good for

Small web apps a team or household runs for itself: internal tools, dashboards, small APIs, static sites and browser games.

It works best with Go, Django, Rails and plain web front ends, deployed to a Docker host. Other languages and deploy targets work too, but are less tested: see toolchains and supported platforms.

It isn't for mobile apps, large multi-team systems, or hosting for paying customers at scale, and it doesn't replace your Git host. Single sign-on and high availability aren't in 1.0.

Install on a server

One or more admins run AppTown for everyone else. They invite people, connect the servers or services that will run the apps, add the AI model key, and choose the way of working new projects start with. Each project sets its own approval rules. Administrators can also approve changes.

On one Linux server with Docker (Compose 2.23 or later) and a domain name:

mkdir -p /opt/apptown && cd /opt/apptown
curl -fsSLO https://apptown.dev/compose.yaml
echo APPTOWN_DOMAIN=apptown.example.com > .env
docker compose up -d

First point apptown.example.com, *.preview.apptown.example.com and *.main.apptown.example.com at the server, and open ports 80 and 443. One server suits a small team that trusts everyone who writes projects. The agents' code runs in containers on the machine that holds AppTown's records, and a container is not a strong sandbox. A split install puts the agents and the apps on other machines, and takes more setup. Running AppTown covers both, and which one to choose.

The command line

The apptown command line works with any AppTown, from your own computer. On macOS or Linux, with Homebrew:

brew install flokkit/tap/apptown

The tap carries final releases only. The CLI is also bin/apptown in each release archive. Connecting a coding agent says how to give it a token.

Read more

What is here

This repository contains the Go server, web frontend, command-line tools and built-in ways of working. PostgreSQL stores AppTown's records, and the server embeds the web frontend.

For development, start with the package map and code navigation. The documentation index covers the product and its design.

From source

Building AppTown from the repository, for working on it, is in CONTRIBUTING.md. To run it, use a release: Running AppTown.

Development

make dev-api      # go run backend on 127.0.0.1:7777
make dev-web      # vite dev server on :5173 with /api proxied

Run make tools to install the check tools, including the pinned sqlc version, then make check.

Subsystems declare their database schemas. The server embeds their combined schema from internal/apptown/dbschema/schema.sql. Named queries live under each subsystem's internal/*sql. After editing a query or schema, run make generate-sql and commit the generated Go alongside the SQL. Local checks and CI use sqlc diff to reject stale output. See schema ownership.

Layout

  • cmd/apptownd — entrypoint (apptownd [flags])
  • internal/<x> — libraries that know nothing of AppTown (console, deploy, database, ...)
  • internal/apptown/<x> — AppTown's subsystems (workflow, deployment, identity, ...); see design/architecture/domains.md
  • internal/apptown — the App: composes the subsystems, serves the HTTP API
  • web — React/TS frontend (Vite), embedded into the binary from web/dist
  • design — architecture and workflow spec documents

Licence

Apache License 2.0; see LICENSE and NOTICE. The code is free to use, change and run, commercially too. The names "Flokkit" and "AppTown" are not part of the licence: a fork may use the code, not the names.

Directories

Path Synopsis
cmd
apptown command
AppTown is the CLI for a apptownd instance — the invocation surface for humans and agents alike.
AppTown is the CLI for a apptownd instance — the invocation surface for humans and agents alike.
apptown-gate command
Command apptown-gate runs AppTown access gate in front of a restored copy.
Command apptown-gate runs AppTown access gate in front of a restored copy.
apptown-worker command
apptown-worker runs an AppTown's tasks on a machine that shares no files with it (design/operations/workers.md).
apptown-worker runs an AppTown's tasks on a machine that shares no files with it (design/operations/workers.md).
apptownd command
internal
access
Package access owns who may do what (design/subsystems/ authorization-capabilities.md): the capability catalog and the stock roles as compiled data, the words for scopes and subjects, and, in the slices that follow, the decision rule, grants and the directory.
Package access owns who may do what (design/subsystems/ authorization-capabilities.md): the capability catalog and the stock roles as compiled data, the words for scopes and subjects, and, in the slices that follow, the decision rule, grants and the directory.
apptown
Package apptown assembles the application and its transports.
Package apptown assembles the application and its transports.
apptown/adoption
Package adoption owns a project's recorded ways of working: revisions, guidance imports, installed policies, lanes, extensions and pack memberships.
Package adoption owns a project's recorded ways of working: revisions, guidance imports, installed policies, lanes, extensions and pack memberships.
apptown/adoption/internal/adoptionsql
Package adoptionsql contains generated private Adoption queries.
Package adoptionsql contains generated private Adoption queries.
apptown/adrs
Package adrs owns architecture decision records and their lifecycle.
Package adrs owns architecture decision records and their lifecycle.
apptown/adrs/internal/adrssql
Package adrssql contains the generated ADR record-store queries.
Package adrssql contains the generated ADR record-store queries.
apptown/agentenv
Package agentenv prepares the workspace and capabilities AppTown gives an agent.
Package agentenv prepares the workspace and capabilities AppTown gives an agent.
apptown/agentharness/pi
Package pi renders AppTown's public configuration for the Pi harness.
Package pi renders AppTown's public configuration for the Pi harness.
apptown/agentharness/pi/pitest
Package pitest helps a test's stand-in for pi answer as pi run through its capture (pi.CapturedArgv) does.
Package pitest helps a test's stand-in for pi answer as pi run through its capture (pi.CapturedArgv) does.
apptown/attention
Package attention composes current, authorized operational observations.
Package attention composes current, authorized operational observations.
apptown/audit
Package audit owns required append-only operation receipts.
Package audit owns required append-only operation receipts.
apptown/audit/internal/auditsql
Package auditsql contains generated queries private to audit.
Package auditsql contains generated queries private to audit.
apptown/changeactions
Package changeactions coordinates Change admission and its optional provenance across HTTP, MCP and console callers.
Package changeactions coordinates Change admission and its optional provenance across HTTP, MCP and console callers.
apptown/changeadds
Package changeadds reads what a change brings into its app that main does not have, from declarations only: the secrets secretspec.toml declares, the services and app parts .apptown/app.yaml declares, and for an uplift the ways of working its recorded adoption target brings.
Package changeadds reads what a change brings into its app that main does not have, from declarations only: the secrets secretspec.toml declares, the services and app parts .apptown/app.yaml declares, and for an uplift the ways of working its recorded adoption target brings.
apptown/changeconsole
Package changeconsole is a chat that works a change: how its work reaches the change, how it ends, and what AppTown tells it.
Package changeconsole is a chat that works a change: how its work reaches the change, how it ends, and what AppTown tells it.
apptown/complaint
Package complaint records reports about problems using AppTown itself.
Package complaint records reports about problems using AppTown itself.
apptown/complaint/internal/complaintsql
Package complaintsql is the generated record store for the complaints box: sqlc output over queries.sql, private to internal/apptown/complaint.
Package complaintsql is the generated record store for the complaints box: sqlc output over queries.sql, private to internal/apptown/complaint.
apptown/conformance
Package conformance owns reviews, recorded assessments, exception decisions, confirmations, fixes and the current/historical projections over them.
Package conformance owns reviews, recorded assessments, exception decisions, confirmations, fixes and the current/historical projections over them.
apptown/conformance/internal/conformancesql
Package conformancesql is the generated record store for the conformance subsystem: sqlc output over queries.sql, private to internal/apptown/conformance.
Package conformancesql is the generated record store for the conformance subsystem: sqlc output over queries.sql, private to internal/apptown/conformance.
apptown/conversation
Package conversation owns AppTown chat scope, provenance and accounting over the generic console runtime.
Package conversation owns AppTown chat scope, provenance and accounting over the generic console runtime.
apptown/datalayout
Package datalayout owns the data directory's layout marker and the offline, journaled relocation of a whole-AppTown backup restored into a different path.
Package datalayout owns the data directory's layout marker and the offline, journaled relocation of a whole-AppTown backup restored into a different path.
apptown/dataprotection
Package dataprotection owns the answer to what data a deployment holds, whether it has been copied and witnessed coming back, and which data effects a restore or a removal may perform.
Package dataprotection owns the answer to what data a deployment holds, whether it has been copied and witnessed coming back, and which data effects a restore or a removal may perform.
apptown/dataprotection/internal/protectionsql
Package protectionsql contains the generated queries private to DataProtection.
Package protectionsql contains the generated queries private to DataProtection.
apptown/dbschema
Package dbschema embeds the assembled application DDL and owns checked migrations.
Package dbschema embeds the assembled application DDL and owns checked migrations.
apptown/dependency
Package dependency owns the dependency catalog (design/architecture/ contracts.md): the kinds an app may declare it needs (`needs:` in `.apptown/app.yaml`; [s3, postgres]`), each with the local emulator, the cloud template and the register connector that can fulfil it.
Package dependency owns the dependency catalog (design/architecture/ contracts.md): the kinds an app may declare it needs (`needs:` in `.apptown/app.yaml`; [s3, postgres]`), each with the local emulator, the cloud template and the register connector that can fulfil it.
apptown/dependency/internal/dependencysql
Package dependencysql contains Dependency's private generated persistence queries.
Package dependencysql contains Dependency's private generated persistence queries.
apptown/deployment
Package deployment owns targets, named placements, releases, attempts and their settlement, together with bundles, retained resources, needs and reconciliation records.
Package deployment owns targets, named placements, releases, attempts and their settlement, together with bundles, retained resources, needs and reconciliation records.
apptown/deployment/internal/deploymentsql
Package deploymentsql contains the generated queries private to Delivery.
Package deploymentsql contains the generated queries private to Delivery.
apptown/deployment/internal/releasesql
Package releasesql contains generated queries for deployment release persistence.
Package releasesql contains generated queries for deployment release persistence.
apptown/evals
Package evals answers "is this model profile, or this pack version, better or worse than what projects run now?" (design/subsystems/conformance.md, stock/docs/guides/packs-and-what-if.md).
Package evals answers "is this model profile, or this pack version, better or worse than what projects run now?" (design/subsystems/conformance.md, stock/docs/guides/packs-and-what-if.md).
apptown/evals/internal/evalssql
Package evalssql contains generated queries private to evals.
Package evalssql contains generated queries private to evals.
apptown/httpapi
Package httpapi translates HTTP requests into domain operations.
Package httpapi translates HTTP requests into domain operations.
apptown/identity
Package identity owns who exists and what they hold: accounts and groups, the grants that carry roles and capabilities, sessions, personal tokens, change tickets and OAuth connections.
Package identity owns who exists and what they hold: accounts and groups, the grants that carry roles and capabilities, sessions, personal tokens, change tickets and OAuth connections.
apptown/identity/internal/accesssql
Package accesssql is the generated record store for the access domain: sqlc output over queries.sql, private to internal/access.
Package accesssql is the generated record store for the access domain: sqlc output over queries.sql, private to internal/access.
apptown/inference
Package inference owns runtime model admission, private provider access and accounting.
Package inference owns runtime model admission, private provider access and accounting.
apptown/instancebackup
Package instancebackup is a whole-AppTown backup and restore (stock/docs/guides/apptown-backups.md): one archive, encrypted with a passphrase, holding the built-in database's dump, the data directory (without pgdata and cache, with the deployment backups kept on disk) and a manifest; and its restore onto a fresh host, where each built-in deployment is filled from its own newest whole set.
Package instancebackup is a whole-AppTown backup and restore (stock/docs/guides/apptown-backups.md): one archive, encrypted with a passphrase, holding the built-in database's dump, the data directory (without pgdata and cache, with the deployment backups kept on disk) and a manifest; and its restore onto a fresh host, where each built-in deployment is filled from its own newest whole set.
apptown/instanceupdate
Package instanceupdate owns authenticated release availability.
Package instanceupdate owns authenticated release availability.
apptown/integration
Package integration owns provider bindings, service-kind definitions and project attachments.
Package integration owns provider bindings, service-kind definitions and project attachments.
apptown/integration/internal/integrationsql
Package integrationsql contains generated queries owned by Integration.
Package integrationsql contains generated queries owned by Integration.
apptown/jobs
Package jobs binds application operations to River's durable queue.
Package jobs binds application operations to River's durable queue.
apptown/jobs/internal/jobsql
Package jobsql contains generated queries private to jobs.
Package jobsql contains generated queries private to jobs.
apptown/maintenance
Package maintenance owns the periodic host cleanup policy.
Package maintenance owns the periodic host cleanup policy.
apptown/mcpapi
Package mcpapi presents AppTown operations as MCP tools.
Package mcpapi presents AppTown operations as MCP tools.
apptown/model
Package model selects model patterns from project and instance settings and limits concurrent agent work per provider binding.
Package model selects model patterns from project and instance settings and limits concurrent agent work per provider binding.
apptown/model/internal/modelsql
Package modelsql contains generated SQL bindings private to model.
Package modelsql contains generated SQL bindings private to model.
apptown/modelcall
Package modelcall is the vocabulary of AppTown's own model calls: narratives, approval briefs, pack assistance, checks and the eval judge.
Package modelcall is the vocabulary of AppTown's own model calls: narratives, approval briefs, pack assistance, checks and the eval judge.
apptown/operations
Package operations owns the ledger of long actions someone asked for (design/subsystems/deployment.md, "Protecting data off-host"): a data copy, a restore drill, a rehearsal, a restored copy, a restore of a set, a take-down, a project's purge.
Package operations owns the ledger of long actions someone asked for (design/subsystems/deployment.md, "Protecting data off-host"): a data copy, a restore drill, a rehearsal, a restored copy, a restore of a set, a take-down, a project's purge.
apptown/operations/internal/operationssql
Package operationssql contains the generated queries private to the operations ledger.
Package operationssql contains the generated queries private to the operations ledger.
apptown/preview
Package preview owns disposable previews of a change, a run or a release: the checked requests a person makes, the trusted boots of a run's preview step and a chat's rehearsal, where each boots (this machine, or the worker when AppTown has one), what each serves, opening a running one for probing, discarding them, and the AI models keys previews are given.
Package preview owns disposable previews of a change, a run or a release: the checked requests a person makes, the trusted boots of a run's preview step and a chat's rehearsal, where each boots (this machine, or the worker when AppTown has one), what each serves, opening a running one for probing, discarding them, and the AI models keys previews are given.
apptown/preview/internal/previewsql
Package previewsql contains the generated queries private to Preview.
Package previewsql contains the generated queries private to Preview.
apptown/project
Package project owns the project record: its identity, its display words, the group that owns it, its release domain and its model profile.
Package project owns the project record: its identity, its display words, the group that owns it, its release domain and its model profile.
apptown/project/internal/projectsql
Package projectsql contains generated, Project-owned database queries.
Package projectsql contains generated, Project-owned database queries.
apptown/project/repositorylayout
Package repositorylayout repairs the absolute local repository references a whole-AppTown backup carries when it is restored into a different data directory.
Package repositorylayout repairs the absolute local repository references a whole-AppTown backup carries when it is restored into a different data directory.
apptown/projectlifecycle
Package projectlifecycle owns project setup, adoption settlement and the namespace reservations shared by creation, rename and purge.
Package projectlifecycle owns project setup, adoption settlement and the namespace reservations shared by creation, rename and purge.
apptown/remediation
Package remediation is the queue that fixes findings: one governed Change per project at a time, worked by a declared pool of workers, verified by a review, with "stuck" as a named state a person sees.
Package remediation is the queue that fixes findings: one governed Change per project at a time, worked by a declared pool of workers, verified by a review, with "stuck" as a named state a person sees.
apptown/remediation/internal/remediationsql
Package remediationsql is the generated record store for the remediation facade: sqlc output over queries.sql, private to internal/apptown/remediation.
Package remediationsql is the generated record store for the remediation facade: sqlc output over queries.sql, private to internal/apptown/remediation.
apptown/repositoryedit
Package repositoryedit owns versioned application-declaration edits and their repository effects.
Package repositoryedit owns versioned application-declaration edits and their repository effects.
apptown/schema
Package schema parses and validates AppTown YAML documents (Workflow, Policy).
Package schema parses and validates AppTown YAML documents (Workflow, Policy).
apptown/schema/schematest
Package schematest holds the workflow language's checks that the runners' own tests call: only tests import it.
Package schematest holds the workflow language's checks that the runners' own tests call: only tests import it.
apptown/scm
Package scm owns admitted merge operations and their durable outcomes.
Package scm owns admitted merge operations and their durable outcomes.
apptown/scm/internal/scmsql
Package scmsql contains generated queries private to scm.
Package scmsql contains generated queries private to scm.
apptown/secret
Package secret owns stored values, application secret declarations, deployment profiles and bindings, and runtime provider resolution.
Package secret owns stored values, application secret declarations, deployment profiles and bindings, and runtime provider resolution.
apptown/secret/internal/secretsql
Package secretsql is the generated record store for the secrets subsystem: sqlc output over queries.sql, private to internal/apptown/secret.
Package secretsql is the generated record store for the secrets subsystem: sqlc output over queries.sql, private to internal/apptown/secret.
apptown/tasks
Package tasks owns execution attempts (design/operations/workers.md).
Package tasks owns execution attempts (design/operations/workers.md).
apptown/tasks/internal/taskssql
Package taskssql contains generated queries private to tasks.
Package taskssql contains generated queries private to tasks.
apptown/usage
Package usage stores observed model usage.
Package usage stores observed model usage.
apptown/usage/internal/usagesql
Package usagesql contains generated queries private to usage.
Package usagesql contains generated queries private to usage.
apptown/verification
Package verification composes AppTown checks over existing operation owners.
Package verification composes AppTown checks over existing operation owners.
apptown/workcommands
Package workcommands composes preparation and effects around Workflow commands.
Package workcommands composes preparation and effects around Workflow commands.
apptown/workflow
Package workflow owns Changes, Runs, Steps and their database-backed lifecycle.
Package workflow owns Changes, Runs, Steps and their database-backed lifecycle.
apptown/workflow/internal/workflowsql
Package workflowsql contains Work's private generated PostgreSQL queries.
Package workflowsql contains Work's private generated PostgreSQL queries.
apptown/workflowexec
Package workflowexec orchestrates workflow step execution and agent drafting.
Package workflowexec orchestrates workflow step execution and agent drafting.
apptown/wow
Package wow owns the Ways of Working catalog: guidance blocks and versions, packs and immutable publications, workflows and system bindings, library policies, reusable change definitions and stock publishing.
Package wow owns the Ways of Working catalog: guidance blocks and versions, packs and immutable publications, workflows and system bindings, library policies, reusable change definitions and stock publishing.
apptown/wow/internal/wowsql
Package wowsql is the private generated record store for Ways of Working.
Package wowsql is the private generated record store for Ways of Working.
backuparchive
Package backuparchive writes and reads a passphrase-protected archive: a gzip-compressed tar inside age encryption (https://age-encryption.org), with a passphrase recipient (scrypt).
Package backuparchive writes and reads a passphrase-protected archive: a gzip-compressed tar inside age encryption (https://age-encryption.org), with a passphrase recipient (scrypt).
check
Package check judges a declared check against a source tree.
Package check judges a declared check against a source tree.
clock
Package clock is where an owner's real clock comes from.
Package clock is where an owner's real clock comes from.
clock/clocktest
Package clocktest holds a clock for tests that must see how often an operation reads its owner's clock.
Package clocktest holds a clock for tests that must see how often an operation reads its owner's clock.
console
Package console owns the record of a chat: pi's session files (console.md §5a: terminal = presentation, session files = record) read through one parser, and the transcript projected from them as chat bubbles, with the hand-back signal and the submit verification the runtime relies on.
Package console owns the record of a chat: pi's session files (console.md §5a: terminal = presentation, session files = record) read through one parser, and the transcript projected from them as chat bubbles, with the hand-back signal and the submit verification the runtime relies on.
console/consoletest
Package consoletest is the fake agent runtime: it stands in for pi in a container, remembers what it was started with, and writes the session record the way pi does so the console reads replies out of it.
Package consoletest is the fake agent runtime: it stands in for pi in a container, remembers what it was started with, and writes the session record the way pi does so the console reads replies out of it.
console/pi
Package pi runs a console's agent for real: pi's interactive TUI inside a Docker container, under tmux, with apptownd holding a disposable tmux client over a host PTY.
Package pi runs a console's agent for real: pi's interactive TUI inside a Docker container, under tmux, with apptownd holding a disposable tmux client over a host PTY.
containerresult
Package containerresult reads what a command in a container answers without relying on its standard output arriving.
Package containerresult reads what a command in a container answers without relying on its standard output arriving.
containerresult/containerresulttest
Package containerresulttest lets a test's stand-in Docker daemon answer the calls of a container result read (containerresult.Run and RunIn) without knowing their steps: the test says what the command answers, and the daemon keeps its stdout to itself, as a daemon that lost it would.
Package containerresulttest lets a test's stand-in Docker daemon answer the calls of a container result read (containerresult.Run and RunIn) without knowing their steps: the test says what the command answers, and the daemon keeps its stdout to itself, as a daemon that lost it would.
database
Package database owns PostgreSQL handles and checked query/transaction mechanics.
Package database owns PostgreSQL handles and checked query/transaction mechanics.
dbtest
Package dbtest supplies isolated PostgreSQL clones for database-backed tests.
Package dbtest supplies isolated PostgreSQL clones for database-backed tests.
deploy
Package deploy runs a described application on a target and says what it saw: the app contract, the driver contract every target kind implements, and the drivers themselves in the packages under this one.
Package deploy runs a described application on a target and says what it saw: the app contract, the driver contract every target kind implements, and the drivers themselves in the packages under this one.
deploy/appcontract
Package appcontract owns AppTown's native .apptown/app.yaml declaration, parsing, validation, and preparation of independent execution inputs.
Package appcontract owns AppTown's native .apptown/app.yaml declaration, parsing, validation, and preparation of independent execution inputs.
deploy/digitalocean
Package digitalocean is the DigitalOcean App Platform target driver (design/subsystems/deployment.md §12A): the renderer, the reconciler, the managed-database need module and the account inventory, with every collaborator injected.
Package digitalocean is the DigitalOcean App Platform target driver (design/subsystems/deployment.md §12A): the renderer, the reconciler, the managed-database need module and the account inventory, with every collaborator injected.
deploy/digitalocean/dofake
Package dofake supplies the DigitalOcean HTTP API fixture shared by driver tests and assembled AppTown deployment tests.
Package dofake supplies the DigitalOcean HTTP API fixture shared by driver tests and assembled AppTown deployment tests.
deploy/docker
Package docker is the container runtime AppTown drives: which daemon a command talks to (AppTown's own, or an attached host's over SSH), the command itself, and the small questions asked of a daemon (is a container running, what is an image's digest, where is a port reachable).
Package docker is the container runtime AppTown drives: which daemon a command talks to (AppTown's own, or an attached host's over SSH), the command itself, and the small questions asked of a daemon (is a container running, what is an image's digest, where is a port reachable).
deploy/docker/dockerfake
Package dockerfake models the small Docker daemon contract used by tests.
Package dockerfake models the small Docker daemon contract used by tests.
deploy/docker/dockertest
Package dockertest runs the docker CLI against this machine's own daemon for tests that set up, inspect or clean up containers, images and networks the code under test does not.
Package dockertest runs the docker CLI against this machine's own daemon for tests that set up, inspect or clean up containers, images and networks the code under test does not.
deploy/portainer
Package portainer is the Portainer target driver (design/subsystems/ deployment.md §8.2): the intranet rail given its name.
Package portainer is the Portainer target driver (design/subsystems/ deployment.md §8.2): the intranet rail given its name.
deploy/portainer/portainerfake
Package portainerfake projects external provider facts for tests using real AppTown deployment owners.
Package portainerfake projects external provider facts for tests using real AppTown deployment owners.
deploy/portainer/portainertest
Package portainertest reads what a Portainer stack serves, for tests that check a release rendered the admitted hosts and certificate input.
Package portainertest reads what a Portainer stack serves, for tests that check a release rendered the admitted hosts and certificate input.
deploy/s3bucket
Package s3bucket is the s3-bucket target: a static-only app published to a bucket of an S3-compatible store (DigitalOcean Spaces first) and served from the bucket's website address (design/subsystems/deploy-targets.md, "Bucket websites").
Package s3bucket is the s3-bucket target: a static-only app published to a bucket of an S3-compatible store (DigitalOcean Spaces first) and served from the bucket's website address (design/subsystems/deploy-targets.md, "Bucket websites").
deploy/s3bucket/s3fake
Package s3fake is an in-memory S3-compatible store for the s3bucket driver's tests and assembled AppTown tests: the API, path-style, and each bucket's website address.
Package s3fake is an in-memory S3-compatible store for the s3bucket driver's tests and assembled AppTown tests: the API, path-style, and each bucket's website address.
deploy/staticsite
Package staticsite is a static release as files a host serves as they are (design/subsystems/deploy-targets.md, "Bucket websites"): the site's files from its release image, plus the two files AppTown's file server would otherwise compute, and the witness that a public address serves exactly this publication.
Package staticsite is a static release as files a host serves as they are (design/subsystems/deploy-targets.md, "Bucket websites"): the site's files from its release image, plus the two files AppTown's file server would otherwise compute, and the witness that a public address serves exactly this publication.
dind
Package dind runs private Docker daemons: one privileged docker:dind container per owner, reached as dind on the owner's own network, with the owner's work tree at the same path (/work) as in the owner's container.
Package dind runs private Docker daemons: one privileged docker:dind container per owner, reached as dind on the owner's own network, with the owner's work tree at the same path (/work) as in the owner's container.
diskspace
Package diskspace reads how full a filesystem is and decides whether new disk-heavy work may start on it.
Package diskspace reads how full a filesystem is and decides whether new disk-heavy work may start on it.
diskspace/diskspacetest
Package diskspacetest provides an owned fake daemon for disk probes.
Package diskspacetest provides an owned fake daemon for disk probes.
dockerbuild
Package dockerbuild is how AppTown builds an image on a Docker daemon: with that daemon's own builder named explicitly, the extra certificates as the build's secret and the label that says AppTown made the image.
Package dockerbuild is how AppTown builds an image on a Docker daemon: with that daemon's own builder named explicitly, the extra certificates as the build's secret and the label that says AppTown made the image.
dockerlabel
Package dockerlabel is the one list of the label keys AppTown puts on the containers, networks, volumes and images it makes, and reads back to find and own them.
Package dockerlabel is the one list of the label keys AppTown puts on the containers, networks, volumes and images it makes, and reads back to find and own them.
durable
Package durable writes a file so that a crash leaves either the old file or the whole new one under its name, never a partial one.
Package durable writes a file so that a crash leaves either the old file or the whole new one under its name, never a partial one.
enum
Package enum holds the storage and JSON codec shared by small state enums: a uint8 whose values run 1..n, each spelled by one word.
Package enum holds the storage and JSON codec shared by small state enums: a uint8 whose values run 1..n, each spelled by one word.
execfile
Package execfile writes a file that is about to be executed: a fake docker or git a test puts on PATH, a hook, a helper script.
Package execfile writes a file that is about to be executed: a fake docker or git a test puts on PATH, a hook, a helper script.
execution
Package execution runs bounded processes.
Package execution runs bounded processes.
execution/executionfake
Package executionfake is an in-memory TaskDriver for tests of callers.
Package executionfake is an in-memory TaskDriver for tests of callers.
execution/executiontest
Package executiontest is the conformance suite every TaskDriver passes.
Package executiontest is the conformance suite every TaskDriver passes.
fault
Package fault classifies errors by what the caller can do about them, so every transport answers the same failure the same way.
Package fault classifies errors by what the caller can do about them, so every transport answers the same failure the same way.
flagenv
Package flagenv reads a program's flags from the environment: every flag is also APPTOWN_ plus its name in capitals with - as _ (-db-url is APPTOWN_DB_URL).
Package flagenv reads a program's flags from the environment: every flag is also APPTOWN_ plus its name in capitals with - as _ (-db-url is APPTOWN_DB_URL).
gate
Package gate is AppTown access gate: a small reverse proxy that is the only public component of a restored copy of production data.
Package gate is AppTown access gate: a small reverse proxy that is the only public component of a restored copy of production data.
gitexec
Package gitexec runs the git binary for one local repository.
Package gitexec runs the git binary for one local repository.
gitexec/gittest
Package gittest runs git for tests through gitexec, so a test's git behaves like AppTown's own (no optional locks, the folder in PWD) and a failure stops the test with git's own words.
Package gittest runs git for tests through gitexec, so a test's git behaves like AppTown's own (no optional locks, the folder in PWD) and a failure stops the test with git's own words.
gitlab
Package gitlab implements the provider protocol and Git credential transport.
Package gitlab implements the provider protocol and Git credential transport.
gitlab/gitlabtest
Package gitlabtest is a fake GitLab for tests of code that reaches GitLab through internal/gitlab.
Package gitlabtest is a fake GitLab for tests of code that reaches GitLab through internal/gitlab.
hostmem
Package hostmem reads the memory of the machine this process runs on, as the kernel reports it to this process: its total and what is available.
Package hostmem reads the memory of the machine this process runs on, as the kernel reports it to this process: its total and what is available.
ids
Package ids is a record's identity: a UUIDv7 minted when the record is made (design/decisions/mergeable-forge-data.md).
Package ids is a record's identity: a UUIDv7 minted when the record is made (design/decisions/mergeable-forge-data.md).
ids/idstest
Package idstest gives tests readable, stable record ids, so a test can still say "change 7" where a fixture needs an id it did not mint.
Package idstest gives tests readable, stable record ids, so a test can still say "change 7" where a fixture needs an id it did not mint.
localtls
Package localtls is a certificate authority for one computer's own addresses: it makes and keeps a CA whose name constraints permit only localhost names and loopback addresses, and issues a certificate for whichever of those a client asks for.
Package localtls is a certificate authority for one computer's own addresses: it makes and keeps a CA whose name constraints permit only localhost names and loopback addresses, and issues a certificate for whichever of those a client asks for.
numbered
Package numbered is the friendly reference to a change or a run, "<slug>#<n>": the project's current slug and the record's number within it.
Package numbered is the friendly reference to a change or a run, "<slug>#<n>": the project's current slug and the record's number within it.
oci
Package oci publishes, copies, tags and confirms container images in OCI registries, by digest.
Package oci publishes, copies, tags and confirms container images in OCI registries, by digest.
oidclogin
Package oidclogin verifies external authentication evidence.
Package oidclogin verifies external authentication evidence.
oidclogin/oidcfake
Package oidcfake supplies a disposable signed external issuer for adapter and cross-owner tests.
Package oidcfake supplies a disposable signed external issuer for adapter and cross-owner tests.
openrouter
Package openrouter is a small client for OpenRouter's key management API (https://openrouter.ai/docs: provisioning keys).
Package openrouter is a small client for OpenRouter's key management API (https://openrouter.ai/docs: provisioning keys).
openrouter/openrouterfake
Package openrouterfake is an in-memory OpenRouter key management API for tests: create, list, read, change and delete keys under /api/v1/keys, authenticated by one provisioning key.
Package openrouterfake is an in-memory OpenRouter key management API for tests: create, list, read, change and delete keys under /api/v1/keys, authenticated by one provisioning key.
poll
Package poll waits for a condition that nothing announces: a container turning healthy, a daemon starting to answer.
Package poll waits for a condition that nothing announces: a container turning healthy, a daemon starting to answer.
poll/polltest
Package polltest is poll's converse for tests: the check that something does not happen for a while, and the bound for a wait whose length is not what a test checks.
Package polltest is poll's converse for tests: the check that something does not happen for a while, and the bound for a wait whose length is not what a test checks.
progress
Package progress owns bounded, ephemeral progress feeds.
Package progress owns bounded, ephemeral progress feeds.
routinechange
Package routinechange classifies bounded changes to dependency declarations.
Package routinechange classifies bounded changes to dependency declarations.
stamp
Package stamp represents an optional timestamp consistently in SQL and JSON.
Package stamp represents an optional timestamp consistently in SQL and JSON.
stockupdate
Package stockupdate reads and writes the files AppTown's stock travels in: a ways-of-working update and a tool versions update.
Package stockupdate reads and writes the files AppTown's stock travels in: a ways-of-working update and a tool versions update.
stockupdate/stockbuild
Package stockbuild writes the update files a release ships (internal/stockupdate reads them): scripts/stock-files.go at build, and tests.
Package stockbuild writes the update files a release ships (internal/stockupdate reads them): scripts/stock-files.go at build, and tests.
stockupdate/stockupdatetest
Package stockupdatetest writes the update files a release ships, from the repository's stock/, for tests that start apptownd or apptown-worker as executables: their production loader reads them as it would a release's.
Package stockupdatetest writes the update files a release ships, from the repository's stock/, for tests that start apptownd or apptown-worker as executables: their production loader reads them as it would a release's.
strs
Package strs holds the small string helpers that were copied into many packages: cutting a message to a length for logs, errors and UI, and picking the first value that says something, naming a commit, and encoding a value as JSON without a silent stand-in.
Package strs holds the small string helpers that were copied into many packages: cutting a message to a length for logs, errors and UI, and picking the first value that says something, naming a commit, and encoding a value as JSON without a silent stand-in.
telemetry
Package telemetry builds OpenTelemetry providers that export over OTLP.
Package telemetry builds OpenTelemetry providers that export over OTLP.
telemetry/otlpfake
Package otlpfake is an in-process OTLP/HTTP receiver for tests.
Package otlpfake is an in-process OTLP/HTTP receiver for tests.
testinputs
Package testinputs makes the repository files a test hands to a child process inputs of that test's cached result.
Package testinputs makes the repository files a test hands to a child process inputs of that test's cached result.
testreport
Package testreport reads the machine-readable report a test runner writes: how many tests passed, failed and were skipped, and which were skipped.
Package testreport reads the machine-readable report a test runner writes: how many tests passed, failed and were skipped, and which were skipped.
toolversions
Package toolversions reads a tool versions list (stock/tool-versions.yaml, shipped as a tool versions update) and owns the one a process uses: Versions answers its current list as an immutable Snapshot, the images AppTown runs for itself among it (the shell guidance checks run in, the df behind disk reads, the static server of release images, the private Docker daemon).
Package toolversions reads a tool versions list (stock/tool-versions.yaml, shipped as a tool versions update) and owns the one a process uses: Versions answers its current list as an immutable Snapshot, the images AppTown runs for itself among it (the shell guidance checks run in, the df behind disk reads, the static server of release images, the private Docker daemon).
trailer
Package trailer is the one list of the trailer keys AppTown writes on the commits it makes, and the one way to write them.
Package trailer is the one list of the trailer keys AppTown writes on the commits it makes, and the one way to write them.
trust
Package trust is the certificates a process trusts beyond the system's own, by use.
Package trust is the certificates a process trusts beyond the system's own, by use.
trust/trusttest
Package trusttest makes certificate authorities for tests of what trusts them (internal/trust): one signs an HTTPS server that a test reaches from this process or from a container, and its certificate is a bundle a test installs as the process's trust.
Package trusttest makes certificate authorities for tests of what trusts them (internal/trust): one signs an HTTPS server that a test reaches from this process or from a container, and its certificate is a bundle a test installs as the process's trust.
version
Package version says what build a binary is.
Package version says what build a binary is.
wiregen
Package wiregen writes TypeScript declarations for Go values that are sent as JSON, following encoding/json's own rules: field names from json tags, "-" skipped, omitempty and omitzero fields optional, embedded structs flattened, and a type that encodes itself (a MarshalJSON) mapped to a TypeScript type the caller names.
Package wiregen writes TypeScript declarations for Go values that are sent as JSON, following encoding/json's own rules: field names from json tags, "-" skipped, omitempty and omitzero fields optional, embedded structs flattened, and a type that encodes itself (a MarshalJSON) mapped to a TypeScript type the caller names.
worker
Package worker is the execution side of a separated AppTown (design/operations/workers.md): a small program on a machine that shares no files with AppTown, which runs tasks on its own Docker daemon for one registered installation.
Package worker is the execution side of a separated AppTown (design/operations/workers.md): a small program on a machine that shares no files with AppTown, which runs tasks on its own Docker daemon for one registered installation.
worker/workertest
Package workertest starts a apptown-worker in the test process, over real mutual TLS, for tests of AppTown's worker path.
Package workertest starts a apptown-worker in the test process, over real mutual TLS, for tests of AppTown's worker path.
yamlkeys
Package yamlkeys holds a published JSON Schema to the Go types a YAML parser decodes into: every key the parser accepts is a schema property, every property is a key the parser accepts, and a type the parser reads strictly is closed in the schema.
Package yamlkeys holds a published JSON Schema to the Go types a YAML parser decodes into: every key the parser accepts is a schema property, every property is a key the parser accepts, and a type the parser reads strictly is closed in the schema.
Package stock is the stock AppTown ships: workflows, guidance, policies, packs, the change catalog, starters, toolchain files, scanner and need definitions, and the tool versions list.
Package stock is the stock AppTown ships: workflows, guidance, policies, packs, the change catalog, starters, toolchain files, scanner and need definitions, and the tool versions list.
docs
Package docs is AppTown's own documentation, embedded in apptownd: the guides, the integration pages and the API description.
Package docs is AppTown's own documentation, embedded in apptownd: the guides, the integration pages and the API description.
Package web embeds the built frontend (web/dist) into the apptownd binary.
Package web embeds the built frontend (web/dist) into the apptownd binary.

Jump to

Keyboard shortcuts

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