PRPM
The package manager for the PyReact ecosystem.
Create projects, install isolated dependencies, lock versions, and run scripts with a single tool.
Why PRPM?
PyReact projects are Python projects. PRPM builds on that ecosystem instead of creating an incompatible registry:
- it uses the standard
pyproject.tomlas its manifest; - resolves packages from PyPI, including
pyreact-framework; - automatically creates an isolated
.venv; - generates a reproducible
prpm.lock; - provides a familiar experience for npm users;
- remains compatible with
pip, build backends, and Python editors.
Installation
PRPM requires Python 3.9 or newer.
Quick install
The bundled installer sets up the published release from PyPI and verifies the
resulting prpm command:
# Linux, macOS, and Windows Subsystem for Linux
curl -fsSL https://raw.githubusercontent.com/wanbnn/prpm/main/install.sh | bash
# Windows PowerShell
irm https://raw.githubusercontent.com/wanbnn/prpm/main/install.ps1 | iex
Both installers accept the same flags. Install the development version from GitHub:
curl -fsSL https://raw.githubusercontent.com/wanbnn/prpm/main/install.sh | bash -s -- --dev
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/wanbnn/prpm/main/install.ps1))) -Dev
Manual install
Install the latest published release with pip:
python -m pip install prpm
Install the development version directly from GitHub:
python -m pip install git+https://github.com/wanbnn/prpm.git
Set up a local development checkout:
git clone https://github.com/wanbnn/prpm.git
cd prpm
python -m pip install -e ".[dev]"
Quick start
Create and prepare a PyReact application:
prpm create my-app
cd my-app
prpm run dev
The command creates a complete SSR dashboard, installs pyreact-framework
inside .venv, and writes the lockfile. The generated project includes a
development server, interactive API, light and dark themes, static build, and
tests.
For an existing project:
git clone https://github.com/wanbnn/agenticflow.git
cd agenticflow
prpm install
prpm exec agentic-flow
PRPM reads the dependencies already declared in [project].dependencies.
Commands
| Command | Description |
|---|---|
prpm create <name> |
Create and install a PyReact application |
prpm init [-y] |
Initialize a pyproject.toml |
prpm install / prpm i |
Resolve, install, and update prpm.lock |
prpm install --frozen |
Install exactly from the lockfile; ideal for CI |
prpm add <package> |
Install and save a dependency |
prpm add -D <package> |
Install and save a development dependency |
prpm remove <package> |
Remove a dependency |
prpm update [packages] |
Update all or selected dependencies |
prpm list [--all] |
List direct or all dependencies |
prpm run [script] |
List or run scripts |
prpm exec <command> |
Run a binary inside .venv |
prpm test |
Shortcut for the test script |
prpm info <package> |
Query package metadata on PyPI |
prpm lock [--check] |
Generate or validate the lockfile |
prpm login / logout |
Store or remove a token from the keyring |
prpm whoami |
Show the active credential and key |
prpm key <action> |
Generate, show, or rotate the Ed25519 key |
prpm pack |
Build, validate, and sign a wheel and sdist |
prpm publish |
Package and publish to PyPI |
prpm verify <target> |
Verify a local or published release |
prpm doctor |
Show the environment status |
Available aliases are i, rm, up, and ls.
Dependencies
Dependency specifiers follow Python standards:
prpm add httpx
prpm add "fastapi>=0.115,<1"
prpm add -D "pytest>=8"
prpm add "component @ git+https://github.com/user/component.git"
When no version is supplied, PRPM saves the minimum resolved version, such as
httpx>=0.28.1.
Scripts
Declare scripts in the manifest:
[tool.prpm.scripts]
dev = "pyreact dev"
build = "pyreact build"
test = "python -m pytest"
serve = ["python", "-m", "my_app"]
Run them without manually activating .venv:
prpm run build
prpm test -q
prpm exec python --version
Manifest and lockfile
The manifest remains a valid pyproject.toml:
[project]
name = "my-app"
version = "0.1.0"
requires-python = ">=3.9"
dependencies = ["pyreact-framework>=1.0.5"]
[project.optional-dependencies]
dev = ["pytest>=8"]
Commit prpm.lock to version control. It records the exact version, source, and
index-provided hashes for every package. In CI, use:
prpm install --frozen
prpm test
Frozen mode fails before installation if the manifest and lockfile differ.
Publishing packages
PRPM uses PyPI as its registry. Create a token at https://pypi.org/manage/account/token/ and sign in:
prpm login
prpm whoami
The token is entered without terminal echo and stored in the system keyring. It is never written to the project or passed on the command line. The first login also creates an Ed25519 identity:
prpm key show
prpm key rotate
Prepare and verify a release without publishing it:
prpm pack
prpm verify dist
The dist/ directory will contain the wheel, source distribution,
prpm-manifest.json, and prpm-manifest.sig. The manifest records SHA-256
hashes, sizes, dependencies, and the public key; the signature authenticates
that manifest.
Publish with:
prpm publish
PRPM rebuilds the artifacts, runs twine check, validates the signature,
uploads the wheel and sdist, and compares remote hashes through the PyPI API.
Use --no-build for an already packed release or --dry-run to validate the
entire flow without uploading.
TestPyPI is also supported:
prpm login --repository testpypi
prpm publish --repository testpypi
For CI, provide PRPM_PYPI_TOKEN or PRPM_TESTPYPI_TOKEN as a secret
environment variable. When no keyring is available, pack creates an ephemeral
Ed25519 identity for that release.
Verify any published package:
prpm verify prpm
prpm verify "prpm==0.3.0"
Remote verification compares files with PyPI SHA-256 values and validates every
wheel RECORD entry. PyPI remains the authority for maintainer and package-name
ownership.
Development
python -m pip install -e ".[dev]"
python -m pytest
python -m prpm --help
See CONTRIBUTING.md for the contribution workflow and the complete documentation.
License
MIT. See LICENSE.
Metadata
Release files for prpm 0.3.0.post3122647247601
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| prpm-0.3.0.post3122647247601.tar.gz | 43.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| prpm-0.3.0.post3122647247601-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 89.5 kB
Release files / prpm-0.3.0.post3122647247601.tar.gz
| Download URL | prpm-0.3.0.post3122647247601.tar.gz |
|---|---|
| Size | 43.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
31c52d153b935542ad96800b2457c55e43fd2812c8623b4f487d63da9ec3bf01
|
|
BLAKE2b-256 checksum How to use checksums |
a60a99f8d8c2e2372e5033b6542f020f6e7b364605652fb433ddd4aa72aff176
|
| 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 Aug 7, 2026.
Transparency logRelease files / prpm-0.3.0.post3122647247601-py3-none-any.whl
| Download URL | prpm-0.3.0.post3122647247601-py3-none-any.whl |
|---|---|
| Size | 45.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7707a6ee8e51500c1b00bf2f824ce66b54c89f5be7c6193901ae2b0ddfbe1f93
|
|
BLAKE2b-256 checksum How to use checksums |
53f48cb0d81c3c90b257813d34d040e42d9c3ff720c1cc8b22f5bf2a4539195a
|
| 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 Aug 7, 2026.
Transparency log