Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

trueppm-api

PyPI version PyPI downloads CI License

Django REST + WebSocket backend for TruePPM — projects, tasks, critical-path scheduling, agile boards and sprints, offline sync, and real-time collaboration.

Is this package for you?

Most people should not pip install this directly. If you want to run TruePPM, start from the quickstart guide (docker compose up) or the Helm chart — both wire up PostgreSQL, Valkey, the web frontend, and a Celery worker for you.

This package exists on PyPI for two narrower audiences:

  • Downstream projects that depend on the OSS backend as a library — most notably TruePPM Enterprise (proprietary, separate repo), which pins an exact trueppm-api release instead of a git submodule or path dependency. See Using this as a dependency.
  • Operators who want to run the API standalone — against Postgres/Valkey you already manage, without Docker Compose or the bundled frontend. See Standalone quickstart.

If neither of those is you, the linked quickstart is a better starting point.

Requirements

  • Python 3.11+
  • PostgreSQL 16+, with the ltree, pg_trgm, and btree_gist extensions installable by the connecting role (migrations run CREATE EXTENSION IF NOT EXISTS for each — the role needs CREATEDB/superuser on a fresh database, or ask your DBA to pre-create the extensions)
  • Valkey 8+ (or Redis 7+, wire-compatible) — backs the WebSocket channel layer and the Celery broker/result backend
  • A Celery worker, if you want anything that runs off the request/response cycle: async schedule recalculation, notifications, MS Project/Jira/CSV import jobs. The API serves reads and writes without one, but background jobs will queue and never run.
  • S3-compatible object storage, in production only, for task attachments. Local disk storage is the dev default and is explicitly refused at boot in trueppm_api.settings.prod unless you opt in (fine for local/single-node evaluation, not for anything you intend to keep).

Install

# Development — precompiled psycopg wheel, no compiler or system libpq needed
pip install "trueppm-api[binary]"

# Production — links against the system libpq, so OS security patches reach
# the driver without a new release of this package
pip install "trueppm-api[c]"

Extras:

Extra Use it for
binary Local dev / quick-start psycopg (precompiled wheel, bundles its own libpq)
c Production psycopg (compiled against the system libpq)
dev Test tooling (pytest, mypy, ruff, testcontainers) — installed from a source checkout, not by consumers
fuzz Schemathesis, for OpenAPI-schema-driven fuzz testing — installed from a source checkout, not by consumers

Pick one of binary/c. The base install already pulls plain psycopg, whose pure-Python core binds to libpq via ctypes at runtime — that only works if a system libpq is already installed and discoverable, so binary (bundles its own) or c (links the one you installed) is the reliable path.

Standalone quickstart

This runs the API by itself against Postgres/Valkey instances you already have — no Docker Compose, no frontend. Five minutes if those two services are already up.

pip install "trueppm-api[binary]"

export DJANGO_SETTINGS_MODULE=trueppm_api.settings.dev
export TRUEPPM_ALLOW_DEV_SETTINGS=1  # dev settings refuse to import without this
export SECRET_KEY="$(python3 -c 'import secrets; print(secrets.token_urlsafe(48))')"
export DATABASE_URL="postgres://trueppm:trueppm@localhost:5432/trueppm"
export REDIS_URL="redis://localhost:6379"

django-admin migrate
django-admin createsuperuser
django-admin runserver 0.0.0.0:8000

Then:

  • http://localhost:8000/api/v1/health/ — liveness check, no auth
  • http://localhost:8000/api/docs/ — interactive Swagger UI (served from [sidecar] static assets, so it works offline / behind a strict CSP)
  • http://localhost:8000/admin/ — Django admin, using the superuser you just created

trueppm_api.settings.dev hardcodes ALLOWED_HOSTS = ["*"] and open (AllowAny) API permissions, so it refuses to even import without TRUEPPM_ALLOW_DEV_SETTINGS=1 set (or a test runner active) — that guard is what the env var above satisfies. Do not use it past localhost. For anything reachable over a network, switch to trueppm_api.settings.prod, which enforces ALLOWED_HOSTS, a real SECRET_KEY, and durable attachment storage at import time — it refuses to boot rather than silently run insecure. manage.py (the entry point the full repo uses) is a thin wrapper around django-admin that defaults DJANGO_SETTINGS_MODULE to trueppm_api.settings.dev; installed via pip you use django-admin directly, as above, and set the setting explicitly.

For the full experience — the React frontend, a Celery worker, WebSocket broadcasts, seeded demo data — use the Docker Compose quickstart instead; it runs this same package, wired up for you.

Every environment variable this package reads, including production-only ones (object storage, OIDC single sign-on, OpenTelemetry, rate limits) is documented at docs.trueppm.com/administration/configuration. SECRET_KEY, DATABASE_URL, and REDIS_URL above are the only three with no safe default outside of trueppm_api.settings.dev.

Using this as a dependency

Pin an exact release the same way you'd pin any other PyPI package:

# pyproject.toml
[project]
dependencies = [
    "trueppm-api==0.4.0b7",
]
pip install "trueppm-api[c]==0.4.0b7"

import trueppm_api; trueppm_api.__version__ reflects the installed distribution version (read from package metadata, not a hand-maintained string), so it always agrees with pip show trueppm-api.

trueppm_api.settings.base is written to be extended: a downstream project's own settings module can do from trueppm_api.settings.base import * and layer additional INSTALLED_APPS, middleware, or DRF settings on top, the same pattern trueppm_api.settings.prod itself uses. This is how TruePPM Enterprise adds its portfolio-governance apps without forking the OSS backend.

Versioning and releases

The version number tracks the whole TruePPM platform release, not this package independently. 0.4.0b7 on PyPI corresponds to git tag v0.4.0-beta.7 in the trueppm-suite monorepo — the same release that produced the api/web Docker images and the Helm chart at that version. There is no separate changelog or release cadence for trueppm-api alone; see the root CHANGELOG.md for what changed in any given release.

Every v* tag publishes this package to PyPI automatically (CI job api:publish:pypi), alongside the Docker images and the Helm chart. @trueppm/web is not published to npm — it is an application bundle, not a library (see the root README's Published artifacts table). As of #3943, this job authenticates via PyPI Trusted Publishing (GitLab OIDC) and signs PEP 740 attestations, the same as trueppm-scheduler and trueppm-mcp — there is no static upload token on the publish path. That release job is unproven until the next v* tag, so versions through 0.4.0-beta.3 predate it and were published with a static token, with no attestation. Pre-release versions (aN/bN/rcN) are real releases of whatever that tag shipped, not throwaway snapshots — TruePPM is pre-1.0 and ships its entire release line as alphas/betas/RCs, per SECURITY.md.

Before 1.0, breaking changes to this package's Python API (settings shape, model fields, management commands) can happen between releases without a deprecation window — the published contract that is stable pre-1.0 is the HTTP/WebSocket API surface, documented at docs.trueppm.com/api/stability. If you're pinning this package as a library dependency rather than talking to a running instance over HTTP, expect to read the changelog on every bump.

Documentation

Tests

From a source checkout:

cd packages/api
pip install -e ".[binary,dev]"
pytest

Most tests need a real PostgreSQL (for ltree/pg_trgm queries) — the repo's docker compose up provides one; testcontainers[postgres] (a dev extra) can also spin one up ephemerally.

License

Apache 2.0 — see LICENSE. Copyright MacroDream, LLC and contributors — see NOTICE.

Metadata

Release files for trueppm-api 0.4.0b7

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

Source distribution (sdist)

Source distribution for trueppm-api 0.4.0b7
File Size Uploaded Provenance Actions
trueppm_api-0.4.0b7.tar.gz 5.0 MB With provenance Details for trueppm_api-0.4.0b7.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for trueppm-api 0.4.0b7
File Interpreter ABI Platform Actions
trueppm_api-0.4.0b7-py3-none-any.whl Python 3 none any Details for trueppm_api-0.4.0b7-py3-none-any.whl

Total release size: 8.1 MB

Release files / trueppm_api-0.4.0b7.tar.gz

Download URL trueppm_api-0.4.0b7.tar.gz
Size 5.0 MB
Tags Source
SHA-256 checksum
How to use checksums
ee06357aa2d6781851e671b52b9d916b46b5470c50de1bae8568098d300ee432
BLAKE2b-256 checksum
How to use checksums
096bbcf944fdd92242b3d442620f0ff80d4d49044c131d26f67610673a47f41d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.11.15

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 GitLab CI/CD, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / trueppm_api-0.4.0b7-py3-none-any.whl

Download URL trueppm_api-0.4.0b7-py3-none-any.whl
Size 3.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
e41ad62c7884a8efe9bf2e0ff8d78db53bc999b6a4e0012ed7170262cec332bd
BLAKE2b-256 checksum
How to use checksums
bff2b16ef553d17d623c86149fef50bc5b918ab4d93534b49f0453f9c8e826b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.11.15

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 GitLab CI/CD, verified by PyPI on Oct 9, 2026.

Transparency log

Security for trueppm-api 0.4.0b7

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.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for trueppm_api-0.4.0b7.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitLab CI/CD, verified by PyPI on Oct 9, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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