Skip to main content

aweb server

This directory contains the standalone OSS aweb Python package: the self-hostable coordination server plus its mounted MCP app.

The package includes:

  • the FastAPI server (aweb.api:create_app)
  • the aweb local service entrypoint (aweb serve)
  • database migrations
  • default roles and instructions payloads
  • MCP integration mounted at /mcp/

For the canonical contract, read:

Run Locally

Recommended OSS path: Docker Compose.

cp .env.example .env
echo "AWID_SERVICE_TOKEN=$(openssl rand -hex 32)" >> .env
docker compose up --build -d
curl http://localhost:8000/health

That stack runs aweb, awid, Postgres, and Redis together. It publishes aweb on localhost:8000 and AWID on localhost:8010 by default.

Direct uv mode is also supported:

Generate the shared secret once and keep it outside the repository:

AWID_TOKEN_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/aweb/awid-service-token"
mkdir -p "$(dirname "$AWID_TOKEN_FILE")"
if [ ! -s "$AWID_TOKEN_FILE" ]; then
  umask 077
  openssl rand -hex 32 > "$AWID_TOKEN_FILE"
fi

In the AWID service terminal:

cd ../awid
uv sync
AWID_TOKEN_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/aweb/awid-service-token"
export AWID_SERVICE_TOKEN="$(tr -d '\r\n' < "$AWID_TOKEN_FILE")"
uv run awid

In the aweb service terminal:

cd ../server
uv sync
export AWID_REGISTRY_URL=http://localhost:8010
AWID_TOKEN_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/aweb/awid-service-token"
export AWID_SERVICE_TOKEN="$(tr -d '\r\n' < "$AWID_TOKEN_FILE")"
export APP_ENV=development
uv run aweb serve

Runtime Inputs

HTTP request compression

The server advertises Accept-Encoding: gzip on every HTTP response, including GET /health and errors. It accepts gzip request bodies before logging, body hashing and authentication. Sign the original uncompressed bytes. Both the compressed input and decoded body have a hard 1 MiB limit; an oversized gzip request returns 413, invalid or truncated gzip returns 400, and an unsupported Content-Encoding returns 415. Concatenated gzip members share the same limits. The decoded request has no Content-Encoding or Transfer-Encoding header and has a corrected Content-Length.

Absent or identity encoding keeps the existing plain-body behavior, including larger writes. Clients should compress only after discovering the advertisement from that server's /health, and send the body plain if either its original or compressed byte count exceeds 1 MiB. A large plain request can still meet an upstream firewall's content filter; compression does not remove that limitation.

Embedding hosts can use aweb.request_compression.RequestDecompressionFastAPI with the usual FastAPI constructor arguments. It wraps the completed middleware stack, including framework error handling. Alternatively, wrap a completed ASGI stack with RequestDecompressionMiddleware from the same module. Place it outside logging, rate limiting and authentication; using add_middleware alone misses framework-generated 500s. Nested wrappers are safe, advertise once, and leave websocket and lifespan traffic untouched.

Common environment variables:

  • AWEB_DATABASE_URL or DATABASE_URL
  • AWEB_REDIS_URL or REDIS_URL
  • AWID_REGISTRY_URL
  • AWID_SERVICE_TOKEN required >=32-byte trusted caller secret shared with the configured home AWID registry
  • AWEB_HOST
  • AWEB_PORT
  • AWEB_DASHBOARD_JWT_SECRET

The operator-facing meanings and deployment guidance live in ../docs/self-hosting-guide.md.

Bootstrap Flow

Point the CLI at the self-hosted server:

export AWEB_URL=http://localhost:8000

Supported OSS bootstrap paths:

# Guided BYOD bootstrap in a TTY on a self-hosted server
aw init --url "$AWEB_URL"
aw mail inbox
aw chat pending

# Explicit bootstrap after accepting a team invite
aw id team accept-invite <token>
AWEB_URL=http://localhost:8000 aw init

On a plain self-hosted server, the guided path switches to BYOD because managed aweb.ai onboarding is not available. Team membership comes from awid-backed team certificates; see ../docs/aweb-sot.md for the canonical connect/auth contract.

If you need to create the team first:

export AWID_REGISTRY_URL=http://localhost:8010
aw id create --name <name> --domain <domain> --registry "$AWID_REGISTRY_URL"
aw id team create --namespace <namespace> --name <team> --registry "$AWID_REGISTRY_URL"
aw id team invite --namespace <namespace> --team <team>

See ../docs/aweb-sot.md for the lifecycle contract and ../docs/self-hosting-guide.md for the operator runbook.

Release to PyPI

Release the aweb Python package through the repository's release skill and driver. The driver owns planning, exact-byte staging, publication, tagging, registry verification, and the receipt; do not start a release by pushing a server-vX.Y.Z tag.

Identity Boundary

Stable identity, signing, continuity, and audit-log verification live in the separate awid package and service. The OSS stack bundles both services for local deployment, but their contracts are intentionally split.

Metadata

Release files for aweb 1.27.26

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aweb 1.27.26
File Size Uploaded
aweb-1.27.26.tar.gz 351.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aweb 1.27.26
File Interpreter ABI Platform
aweb-1.27.26-py3-none-any.whl Python 3 none any Details

Total release size: 718.7 kB

Release files / aweb-1.27.26.tar.gz

Download URL aweb-1.27.26.tar.gz
Size 351.2 kB
Tags Source
SHA-256 checksum
How to use checksums
5ee638584ec668c1d072d53679dd3a9fb154b3b3ea24f5c740e0f89bfcddfd72
BLAKE2b-256 checksum
How to use checksums
bc939ac54b10016ae1e1fe29f412b2ccc20f10c16d9302c000e00432c37b2802
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / aweb-1.27.26-py3-none-any.whl

Download URL aweb-1.27.26-py3-none-any.whl
Size 367.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
338fc09622a71caf6c02a390c5138127db69110b8418c69ac6b186e3e3af8adf
BLAKE2b-256 checksum
How to use checksums
605bdb9b15de320dc330dc1a0e493dd14628a874aa65093b865937e38671f033
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

1.27.26 This release

2 release files

1.27.8

2 release files

1.27.7

2 release files

1.27.6

2 release files

1.27.5

2 release files

1.27.4

2 release files

1.27.3

2 release files

1.27.2

2 release files

1.27.1

2 release files

1.26.5

2 release files

1.26.1

2 release files

1.26.0

2 release files

1.25.7

2 release files

1.25.4

2 release files

1.25.3

2 release files

1.25.2

2 release files

1.25.0

2 release files

1.24.4

2 release files

1.24.3

2 release files

1.24.2

2 release files

1.24.1

2 release files

1.24.0

2 release files

1.23.0

2 release files

1.22.1

2 release files

1.22.0

2 release files

1.21.3

2 release files

1.21.2

2 release files

1.21.1

2 release files

1.21.0

2 release files

1.20.8

2 release files

1.18.6

2 release files

1.18.5

2 release files

1.18.4

2 release files

1.18.3

2 release files

1.18.2

2 release files

1.18.1

2 release files

1.17.0

2 release files

1.16.0

2 release files

1.15.0

2 release files

1.14.0

2 release files

1.13.0

2 release files

1.12.0

2 release files

1.11.0

2 release files

1.10.3

2 release files

1.10.2

2 release files

1.10.1

2 release files

1.10.0

2 release files

1.9.0

2 release files

1.8.9

2 release files

1.8.8

2 release files

1.8.7

2 release files

1.8.6

2 release files

1.8.5

2 release files

1.8.4

2 release files

1.8.3

2 release files

1.8.2

2 release files

1.8.1

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.3

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page