keepup
Project page · Package · Changes
Four badges, not six checks. These answer what somebody deciding whether to
install asks: does it run on my Python, is there a known vulnerability in what
it pulls in, what will I get, and may I use it. quality, build and codeql
are housekeeping and live on the Actions page -- six badges in a row stop being
read at all.
A badge shows; it does not require. What keeps a red check from being merged is
a branch rule, not a picture -- see doc/keepup.md.
An admin framework over FastAPI. You give it settings; it gives you an application with a panel, a plugin runtime, users, a database layer, an audit, metrics and coordination between replicas already wired.
from keepup import KeepupSettings, create_app
app = create_app(KeepupSettings(title="Your product", project_name="yours"))
That is a running application with a working panel at /selfcare: the shell,
the themes and eight administrative sections ship inside the package, so there
is nothing to copy into your tree to see them.
Installed as keepup-admin; imported as keepup. The name keepup on PyPI
belongs to an unrelated project from 2015 that installs a script and no module,
so the import name is free.
What it gives you
| Application assembly | create_app(settings) — FastAPI, middleware, lifespan, static mounts |
| Plugin runtime | features as plugins; routes are data, not decorators |
| Panel | the shell, visual themes, and the catalogue of sections with role grants |
| Users | local accounts, roles, panel sessions, sign-in through an external provider |
| Database | a SQLAlchemy layer with a pool, table declarations for two dialects |
| Replicas | distributed locks, a message bus, a cluster registry, performance settings in one place |
| Observability | audit of incoming requests, an event log, metrics, log shipping |
What it does not decide for you
The framework carries no product. Anything it cannot know arrives through
KeepupSettings: your name and version, where your logs are shipped, which
fields of a request are secret, what a password must look like, which tables
belong to you, which origins may read your answers.
Where a default would have to guess, it closes rather than opens. Metrics are not served without credentials, no origin is allowed cross-origin, the audit keeps field names and not values, and there is no collector address, no signing key and no password anywhere in the source. An application says what it needs open; the package does not decide that on its behalf.
What is public
A module that an application may import from declares __all__. Everything
else is internal and may change without notice — including any name starting
with an underscore, whatever module it sits in.
keepup/tests/public_interface_tests.py holds this to the applications in the
repository: a name taken out of the framework and not declared public fails the
run, and the failure says what to do about it.
Requirements
Python 3.11 or newer. PostgreSQL in production; SQLite works and is meant for
development. pip install keepup-admin[postgres] adds the driver the bus
between replicas needs.
Tests
pip install -e ".[test]"
pytest tests/
Install first, then test. Pointing pytest at the checkout does not work on
its own: import keepup has to resolve, and the directory a clone lands in is
called keepup-admin, so nothing is named keepup until the package is
installed. The test extra carries what the suite needs beyond the package —
notably cryptography, which the framework itself never imports and the OIDC
tests sign tokens with.
The suite runs against SQLite with no network, needs no application beside the
package, and holds a coverage floor declared in pyproject.toml. Checks that
genuinely need a consumer of the framework find one by trait and skip with a
reason when there is none, so a skip here always says what is missing.
Every one of these runs on push and on a pull request; see .github/workflows/.
security.yml also runs weekly, because that check goes red without anybody
touching the repository — an advisory gets published against a version that was
fine yesterday.
Licence
Apache 2.0. See LICENSE, and NOTICE for the attribution that clause 4(d)
asks to travel with a derivative.
The panel's front end also ships five third-party bundles -- Tailwind, Feather,
AOS, Chart.js and its date adapter. All five are MIT and stay under their own
terms; minification stripped their headers, so their notices live in
THIRD-PARTY.md.
Metadata
Release files for keepup-admin 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| keepup_admin-0.2.0.tar.gz | 481.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| keepup_admin-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.0 MB
Release files / keepup_admin-0.2.0.tar.gz
| Download URL | keepup_admin-0.2.0.tar.gz |
|---|---|
| Size | 481.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4e6e82f0bec29ca46f32e41f9377671880d5f868f521bbe9f369b99ad6167197
|
|
BLAKE2b-256 checksum How to use checksums |
eef441834c34cd744a55d4925031fcc8469103a85ff000a208d60899f45ae171
|
| 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 29, 2026.
Transparency logRelease files / keepup_admin-0.2.0-py3-none-any.whl
| Download URL | keepup_admin-0.2.0-py3-none-any.whl |
|---|---|
| Size | 528.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
175e8eb44ee90962590118ddab99c27d0897521070d86e0d2db3059a0b3d69dc
|
|
BLAKE2b-256 checksum How to use checksums |
20d0aa08ead945ba2d9699396c8ca9e86f18b6f863ee8a9de955cf384f355abd
|
| 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 29, 2026.
Transparency log