pupa-backend
FastAPI / LangGraph backend that powers the Pupa
iOS / macOS client. Speaks plain AG-UI
over a single POST / SSE stream; pair-once auth keeps a long-lived token in
each device's Keychain. Runs locally next to the client, or in the cloud
(Railway + Postgres).
Install
Install from PyPI with uv (isolated tool venv, puts
the pupa-backend CLI on your PATH):
uv tool install pupa-backend # latest
uv tool install pupa-backend==0.0.72 # pin to match your app
Quick start
pupa-backend run # start the backend on :8004
pupa-backend pair # mint a QR pairing code for your iPhone
pupa-backend status # is it running?
pupa-backend service-install # run as launchd / systemd background service
LLM credentials (AWS Bedrock, Anthropic, or any OpenAI-compatible endpoint) live
in your shell environment, never in the config file. Configuration is written by
pupa-backend setup to ~/.pupa-backend/config.yml.
Auth model
The backend requires auth by default — the only client credential is a
paired-device token in the iOS Keychain. Set PUPA_API_KEY server-side, run
pupa-backend pair for an 8-char code, and pair from the app. For a same-laptop
dev loop only, PUPA_AUTH_DISABLED=1 skips auth entirely (never on a reachable
backend).
Documentation
Full docs, architecture, deploy runbook, and contributing guide live in the GitHub repository:
License
Metadata
Release files for pupa-backend 0.0.100
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pupa_backend-0.0.100.tar.gz | 594.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pupa_backend-0.0.100-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 841.5 kB
Release files / pupa_backend-0.0.100.tar.gz
| Download URL | pupa_backend-0.0.100.tar.gz |
|---|---|
| Size | 594.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fc26129765419d5f17a570adefb70a29aad8c7fc516f29d47b327097264f65f8
|
|
BLAKE2b-256 checksum How to use checksums |
216536e52b10c9f02a9ab209c3d616b6a2ab5673300cf5fbc9fe3189baead8f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency logRelease files / pupa_backend-0.0.100-py3-none-any.whl
| Download URL | pupa_backend-0.0.100-py3-none-any.whl |
|---|---|
| Size | 247.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
79e31eb0060c60cda3b657550773128625330890bad31f81f4c053fb1e1ba359
|
|
BLAKE2b-256 checksum How to use checksums |
8d72f46fa73e32d439d7e54a66d362bd969c5821d4a669af408434bc6b27f68b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency log