Skip to main content

Fast Python monorepo manager powered by Rust and UV

Project description

pascal

PyPI version CI License: MIT

Fast Python monorepo manager powered by Rust and UV.

Pascal handles workspace scaffolding, dependency wiring, and UV workspace sync — so you can focus on code, not configuration.

Documentation · Installation · Quickstart · Commands

Heavily inspired by Polylithpackages map to Polylith's components, apps to its bases, brought to the Python/UV ecosystem with a minimal footprint.


Installation

uv tool install pascal-cli   # recommended
pipx install pascal-cli
pip install pascal-cli
pascal --version

Quickstart

# Bootstrap a workspace
mkdir shop && cd shop
pascal init shop

# Add a library and an app
pascal create package cart
pascal create app storefront

# Wire them together
pascal add cart --to storefront
uv sync

# Validate and inspect
pascal check
pascal info
pascal test

Workspace layout

After the quickstart above, your workspace looks like this:

shop/
  pascal.toml          # workspace manifest
  pyproject.toml       # UV workspace root — managed by pascal
  uv.lock              # lockfile — commit to git
  packages/
    cart/
      pyproject.toml
      src/cart/__init__.py
      tests/test_cart.py
  apps/
    storefront/
      pyproject.toml   # depends on cart
      src/storefront/__init__.py
      src/storefront/main.py
      tests/test_storefront.py

pascal.toml

[workspace]
name = "shop"
python = "3.12"
description = "My Python monorepo"

# Optional — pascal auto-discovers from packages/ and apps/ if omitted
packages = ["packages/cart"]
apps     = ["apps/storefront"]

apps/storefront/pyproject.toml (after pascal add cart --to storefront)

[project]
name = "storefront"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = ["cart"]

[project.scripts]
storefront = "storefront.main:main"

[tool.uv.sources]
cart = { workspace = true }

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

Command reference

Command Description
pascal init [name] Bootstrap a new workspace
pascal create package <name> Scaffold a reusable library
pascal create app <name> Scaffold a deployable app
pascal add <pkg> --to <app> Add a workspace package as a dependency
pascal info Print workspace overview
pascal deps [--graph] Show the dependency tree
pascal check Validate workspace health
pascal diff [--since <ref>] Show changed packages since a git ref
pascal test [--changed] [name] Run tests via UV
pascal build <app> Build an app wheel
pascal run <app> [-- args] Run an app entry-point
pascal sync Regenerate UV workspace config

Development

Prerequisites

Tool Purpose
Rust ≥ 1.75 Compile the binary
pre-commit Git hook runner (uv tool install pre-commit)
maturin (optional) Test PyPI packaging locally

Build

git clone https://github.com/sandeep-selvaraj/pascal
cd pascal
cargo build

Test

cargo test          # unit + integration
cargo test --lib    # unit tests only
cargo test --test integration  # integration tests only

Integration tests in tests/integration.rs spawn the real binary against tempfile directories — no mocking.

Lint and format

cargo fmt
cargo clippy -- -D warnings

Pre-commit hooks

Install once after cloning:

pre-commit install

Every git commit will then run cargo fmt and cargo clippy automatically.

Test PyPI packaging

pip install maturin
maturin build
pip install target/wheels/*.whl
pascal --version

Serve docs locally

pip install zensical
zensical serve

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pascal_cli-0.1.0.tar.gz (44.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pascal_cli-0.1.0-py3-none-win_amd64.whl (1.3 MB view details)

Uploaded Python 3Windows x86-64

pascal_cli-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

pascal_cli-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

pascal_cli-0.1.0-py3-none-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

pascal_cli-0.1.0-py3-none-macosx_10_12_x86_64.whl (1.1 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file pascal_cli-0.1.0.tar.gz.

File metadata

  • Download URL: pascal_cli-0.1.0.tar.gz
  • Upload date:
  • Size: 44.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pascal_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 bd5955541995421c5272e7e195465b47a9eb05058cdc14b952b451110b592ba9
MD5 238be5f7f3821bb80b9f8e365c1d51ff
BLAKE2b-256 71951fafe88a0386e6a93b78f5fc7ea71a65b0d8f4dea4d762979b6366c16692

See more details on using hashes here.

Provenance

The following attestation bundles were made for pascal_cli-0.1.0.tar.gz:

Publisher: release.yml on sandeep-selvaraj/pascal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pascal_cli-0.1.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: pascal_cli-0.1.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pascal_cli-0.1.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 220b90e588fcead54db5debe69833fee457961258eb32be01e387a58b7516de1
MD5 676208129666fd6831af18f9b62ee673
BLAKE2b-256 6e066ca8baeeb55f176ba4272e126329c4497de0d6a1333a17a602e492da17b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pascal_cli-0.1.0-py3-none-win_amd64.whl:

Publisher: release.yml on sandeep-selvaraj/pascal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pascal_cli-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pascal_cli-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2c54320ee1a3754d48e36b9f41ecd40b6e316de928144d15b715bb66eedd1e9e
MD5 de446e5b95f98c94572958955da93dce
BLAKE2b-256 327c9ef1c53f1ec4a5e73b64f67f2fa057acce2053ac2d84fdc4aa6fb7a975ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for pascal_cli-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on sandeep-selvaraj/pascal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pascal_cli-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pascal_cli-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1c1c7db955d2ca864480748866928c8cfea6231566c2b7e044afa4b7b5c9358d
MD5 88fe68048f4adfb9a6faeed741b0a0ee
BLAKE2b-256 5c1f1c6e23bfe0878cd0f76b9b6afce5ddcbd675c166ad4d0abb4962ba1488f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pascal_cli-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on sandeep-selvaraj/pascal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pascal_cli-0.1.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pascal_cli-0.1.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4c907ceef67166bb7230b4176ac5ff5172c898abd67660df645562e47d70aaec
MD5 44cb249d66eca4b299bab87ccde56c0f
BLAKE2b-256 8f6891d34d71cdd40956a549b8bf84f4938edffcc7d36a5fd09fa1bd4abff0f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pascal_cli-0.1.0-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on sandeep-selvaraj/pascal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pascal_cli-0.1.0-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pascal_cli-0.1.0-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e8d5cbb6b058aa56a692d1bb1f68f923d7f2a76c61903f8c01965415c0210f4c
MD5 4dc5f8977b0ceb7c8aecf5b917e1adce
BLAKE2b-256 775eeb7afde2a53e34456b7e3b9cceab5137a2bd5d0adb549dde992730618c8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pascal_cli-0.1.0-py3-none-macosx_10_12_x86_64.whl:

Publisher: release.yml on sandeep-selvaraj/pascal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page