Skip to main content

Parallel and sequential task-tree runner with matrix expansion and effects plugins.

Project description

camas-sketch-by-jph

Camas

A task runner with parallel execution, matrix expansion, MCP, and pluggable output effects.

  • For developers: live tree view that updates in place as tasks stream
  • For CI/CD: one definition drives both local runs and CI
  • For LLMs: a closed edit→validate→run loop over structured MCP

 

demo

Example

from camas import Parallel, Sequential

ci = Sequential(
  Parallel(
    "ruff format . --check",
    "npx prettier ."
  ),
  Parallel(
    "ruff check .",
    "mypy .",
    "npx eslint src/",
    "pytest",
    "npx tsc --noEmit"
  ),
)

The animated tree above is from a live test fixture — see the walkthrough.

Install

[!TIP] Add extras with PEP 621, e.g. camas[github_checks]

pipx:

pipx install camas

uv:

uv tool install camas

Nix:

nix run github:JPHutchins/camas                     # default
nix run github:JPHutchins/camas#with-github-checks  # adds httpx for the GitHubChecks effect
nix run github:JPHutchins/camas#with-check          # adds ty for `camas --check`
nix run github:JPHutchins/camas#all                 # both extras

Then scaffold a starter tasks.py in your project root:

camas --init

The starter demonstrates leaf tasks, Sequential/Parallel composition, a matrix, a Config default task, and the optional PEP 723 standalone block — cross-platform placeholder commands ready to be swapped for your real ones.

--init also creates a gitignored .camas/ directory beside tasks.py. Camas writes run logs and a per-leaf timing cache there, so camas --list can annotate tasks with an estimated duration; delete the directory to opt out. Rename or relocate it with Config(camas_dir=...).

Why camas?

camas is not a build system. camas is for the specific job of running structured trees of shell commands.

Python task runners† just Task Mage camas
Project scope Python projects only Any Any Go projects only Any
Definition language pyproject.toml TOML or @task decorator justfile DSL YAML Go Python (typed AST)
Inline anonymous parallel groups No No No (must be a named task) No Yes
Parallel execution poe yes; Invoke / taskipy no [parallel] attr deps: (parallel) mg.Deps(...) Parallel(...)
Matrix expansion No No for: + parallel:true Go loops matrix=
CLI matrix override (e.g. --PY 3.13) No No No No Yes
Live tree output No No prefixed / group modes No Termtree (default)
Pluggable output renderers No No 3 built-ins No --effects
Type checking on task definitions Partial No Editor schema Yes (Go) mypy / pyright
First release / status 2013–2020, stable 2016, stable 2017, stable 2017, stable 2026, alpha
Ecosystem Moderate (Python) Large Large Moderate None yet

poethepoet, Invoke, taskipy — pyproject.toml-bound runners that assume a Python project.

If you need... Reach for
Reproducible, hermetic builds Nix
Incremental file-based builds (skip when inputs unchanged) Task
Simple project command menu just
Parameterized tasks (--env=staging, prompts, vars) Task
Go project, build logic in Go Mage
Inline parallel/sequential trees with a live view camas
Pluggable output effects (live tree locally, summary in CI) camas
Matrix runs across versions/platforms, overridable from the CLI camas

CI integration

The renderer is swappable, not the tree. Run the same tasks.py locally with the live Termtree and in CI with Status — one flag changes the output, the pipeline definition is unchanged.

On GitHub Actions, no flag is needed. Camas detects GITHUB_ACTIONS=true and defaults --effects to (Status(output_mode="github"),) — collapsed workflow groups, ISO timestamps with millisecond precision, ANSI colors preserved.

Under an AI coding agent, no flag is needed either. Camas detects agents (the CLAUDECODE env var, or set CAMAS_AGENT=1) and defaults to the line-oriented Status renderer instead of the live Termtree, whose cursor-redraw frames bloat captured output. Prefer the camas mcp server over the CLI from an agent; a Config default_effects always overrides the detection.

- run: uv run camas check

On other CI providers (or to opt into a specific mode), spell it out:

- run: uv run camas check --effects='(Status(output_mode="errors"),)'

See the OutputMode literal and block_for doctests for the per-mode behavior. The status-modes-demo job renders one CI run per mode for visual comparison.

For per-leaf visibility in the PR Checks panel, add the GitHubChecks effect alongside Status (opt-in extra: camas[github_checks]). Each leaf task becomes its own check run, so reviewers see lint / mypy / pytest pass-or-fail individually instead of one monolithic log.

- run: |
    uv run --extra github_checks camas matrix --effects='(
      Status(output_mode="github"),
      GitHubChecks(sha="${{ github.event.pull_request.head.sha || github.sha }}"),
    )'
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

The job needs permissions: checks: write. Defaults read GITHUB_TOKEN, GITHUB_REPOSITORY, and GITHUB_SHA from the Actions env. The pull_request.head.sha override attaches checks to the PR head rather than the synthetic merge commit. See the github-checks-demo job for a working example.

When to use it. Two things it gives you:

  • SSOT between local dev and CI. Your camas matrix terminal view and the PR Checks panel show the same per-leaf shape (lint [PY=3.10], mypy [PY=3.14], …). The matrix definition lives once in tasks.py; CI doesn't re-encode it in YAML.
  • One runner instead of N. Camas-side parallel matrix on a single runner produces the same per-(cell, leaf) granularity that a GHA matrix gets across N runners — at 1/N the minutes and camas gives you efficient task parallelization pushing that runner to 100% utilization as much as possible. Worth it on paid-runner budgets.

The downside is that fork PRs get a read-only GITHUB_TOKEN from GitHub and can't write checks — usually a non-issue for Enterprise teams where contributors have push to the org repo.

When not to bother. OSS gets free runners — just GHA-matrix them in parallel for faster wall-clock time. The cost is small: you give up either SSOT (matrix definition moves into YAML) or per-leaf-UI granularity (one PR check entry per runner instead of per leaf) — pick one. What is a deal-breaker for OSS is fork PRs: external-contributor PRs return 403 from the Checks API, so per-leaf entries silently don't appear. The github-checks-demo job is marked continue-on-error so it doesn't block CI when that happens, but GitHubChecks isn't a workable OSS solution.

Config

Bind a Config in tasks.py and bare camas (no arguments) runs its default_task:

from camas import Config, Sequential, Task

lint = Task("ruff check .")
test = Task("pytest")
ci = Sequential(lint, test, name="ci")

_ = Config(default_task=ci)

Now camas runs ci, camas --dry-run previews it, and the default's matrix axes stay overridable (camas --PY 3.13). With no Config (or no default_task), bare camas prints the full help — task listing, effects, hints — and exits non-zero.

github_task is the CI counterpart, falling back to default_task when unset; it runs under GITHUB_ACTIONS=true. Paired with the automatic Status effect, one bare camas does the right thing in both places:

_ = Config(
  default_task=ci,                            # bare `camas` locally
  github_task=Sequential(ci, "pytest --cov"), # bare `camas` under GitHub Actions
)

Config is discovered by type, so the binding's name never matters — _ by convention. Defining two is an error.

Time budget (--under)

Once camas has timed a task's leaves (the .camas/ cache, surfaced by camas --list), camas --under=<duration> runs only the leaves whose estimate fits a wall-clock budget — the fast inner-loop subset, picked for you instead of by hand.

camas --under=1s            # budget the Config default task
camas --under=500ms check   # budget a named task or expression

It runs the mutating leaves first, in sequence, then the read-only rest in parallel — so formatters never race a checker over the same files. Mark a leaf that writes the workspace with mutates=True:

fix = Task("ruff check --fix .", mutates=True)
fmt = Task("ruff format .", mutates=True)
lint = Task("ruff check .")
$ camas --under=1s --dry-run
Time budget 1.00s — selected 6 leaf(s), excluded 2 (2 over budget, 0 untimed).
  over budget: pyright ~4.57s, coverage ~20.98s
fix → fmt → (mypy | ty | zuban | pyrefly)

Durations are 1s, 500ms, 2m, 1h, or a bare number of seconds. Leaves with no recorded timing yet are excluded (a budget can't bound them — run the task once normally to time them). The budget is per-leaf: a leaf is selected when its own estimate fits, so the parallel group's wall-clock stays near the budget.

For agents, camas_run exposes the same budget as its under argument (omit task to budget the project default), and the response's budget field reports what was selected and excluded — a tight, time-boxed validate loop over structured MCP.

Effects plugins

Define an Effect in your tasks.py and it's discovered automatically — usable by name from --effects and listed under camas --effects. See examples/effect-plugin/ for a typed Tail effect that streams per-task output as it arrives.

Versioning

The public API is published through versioned namespacescamas.v0 today, camas.v1 and beyond later. Import from a generation to pin the API shape: a name a generation exports is never removed or changed within that generation. The scheme tracks semver — v0 pairs with camas 0.x and is as loose as semver says 0.x is (the surface prefers to grow; breaking changes stay possible until 1.0, made deliberately and noted in releases). At 1.0 a generation freezes: a breaking change forces the next camas.vN, and published generations keep shipping, so a tasks.py or effect plugin pinned to one keeps working across upgrades.

The top-level camas namespace is the unversioned alias for the latest generation: from camas import Task, Sequential, Parallel, Effect, Config re-exports that generation's five headline definers and is kept 1:1 with its package surface. The rest of the public API for a generation — TaskNode, the TaskEvent stream, LeafState, Completion — lives in that generation's submodules, e.g. from camas.v0.task_event import TaskEvent. Everything under camas.core / camas.main is internal — it consumes whatever generations are installed and carries no stability promise.

To pin a minimum camas feature level, use your dependency declaration (camas>=0.x in pyproject.toml, or PEP 723 inline metadata) — the import path covers API shape; the package pin covers feature availability.

Standalone tasks.py (PEP 723)

For a non-Python project that wants a single-file task runner — no pyproject.toml, no venv to manage — give tasks.py a PEP 723 header and a run_cli(globals()) entry point, then run it with any PEP 723-aware tool:

# /// script
# requires-python = ">=3.11"
# dependencies = ["camas>=0.1.8"]
# ///
"""Build tasks for my project."""

from camas import Parallel, Task, run_cli

lint = Task("ruff check .")
test = Task("pytest")
check = Parallel(lint, test)

if __name__ == "__main__":
    run_cli(globals())
uv run tasks.py check     # uv reads the header, builds an ephemeral env, runs
uv run tasks.py --list    # every camas flag still works
pipx run tasks.py test

run_cli(globals()) introspects the module for Task / Sequential / Parallel and Effect bindings — exactly what camas does when it auto-discovers a tasks.py — so the standalone file behaves identically to a discovered one: camas <task> --help, --dry-run, matrix overrides, and --check all work and cite the file. run_cli is part of the stable surface (from camas import run_cli, or from camas.v0 import run_cli to pin the generation); it's imported lazily, so a plain from camas import Task doesn't pull it in.

The header owns version pinning (dependencies = ["camas>=0.1.8"]) and the interpreter floor (requires-python); it's inert to camas --check and to auto-discovery, which read the module the same way with or without it.

Reference

  • examples/ — full project layouts under test coverage. The canonical reference for how to structure tasks.py, use [tool.camas.tasks] in pyproject.toml, drive a matrix from .python-version, or scope a 2-axis matrix from the CLI.
  • src/camas/ — typed Python with thorough docstrings. camas --help and camas <task> --help link back here.
  • camas with no args runs the Config default task (or prints the full help when none is defined); camas <task> --help shows the expanded tree, matrix axes, and override flags.

Walkthrough

The animated tree at the top is generated from this tasks.py:

examples/tauri-app/tasks.py — Rust + TypeScript + Python in one tree
from pathlib import Path

from camas import Config, Parallel, Sequential, Task

src_tauri = Path("src-tauri")
python_sdk = Path("python-sdk")
node = Path("node_modules/.bin")

frontend = Sequential(
    f"{node}/prettier --write .",
    Parallel(
        f"{node}/eslint src/",
        f"{node}/tsc --noEmit",
        f"{node}/vitest run",
    ),
)

backend = Sequential(
    Task("cargo fmt --all", cwd=src_tauri),
    Parallel(
        Task("cargo clippy --all-targets --locked -- -D warnings", cwd=src_tauri),
        Task("cargo test --all-targets --locked", cwd=src_tauri),
    ),
)

sdk = Sequential(
    Task("uv run ruff check --fix .", cwd=python_sdk),
    Task("uv run ruff format .", cwd=python_sdk),
    Parallel(
        Task("uv run mypy .", cwd=python_sdk),
        Task("uv run pytest", cwd=python_sdk),
    ),
)

all = Parallel(frontend, backend, sdk)

fix = Parallel(
    f"{node}/prettier --write .",
    Task("cargo fmt --all", cwd=src_tauri),
    Sequential(
        Task("uv run ruff check --fix .", cwd=python_sdk),
        Task("uv run ruff format .", cwd=python_sdk),
    ),
)

build = Parallel(
    Task("npm run tauri build {FLAG}"),
    matrix={"FLAG": ("-- --debug", "")},
    help="Debug and release builds (FLAG='-- --debug' debug, FLAG='' release)",
)

_ = Config(default_task=all)
$ cd examples/tauri-app

List the tasks

$ camas --list
output
Available tasks from .../tauri-app/tasks.py:
  all       frontend | backend | sdk
  backend   cargo fmt --all, cargo clippy --all-targets --locked -- -D warnings | cargo test --all-targets --locked
  build     Debug and release builds (FLAG='-- --debug' debug, FLAG='' release)  [matrix: FLAG×2 (-- --debug..)]
  fix       node_modules/.bin/prettier --write . | cargo fmt --all | (uv run ruff check --fix ., uv run ruff format .)
  frontend  node_modules/.bin/prettier --write ., node_modules/.bin/eslint src/ | node_modules/.bin/tsc --noEmit | node_modules/.bin/vitest run
  sdk       uv run ruff check --fix ., uv run ruff format ., uv run mypy . | uv run pytest

Preview what all would run

$ camas --dry-run all
output
all ∥
┃ frontend →
┃ ├─ node_modules/.bin/prettier --write .
┃ └─ node_modules/.bin/eslint src/ | node_modules/.bin/tsc --noEmit | node_modules/.bin/vitest run
┃   ┃ node_modules/.bin/eslint src/
┃   ┃ node_modules/.bin/tsc --noEmit
┃   ┃ node_modules/.bin/vitest run
┃ backend →
┃ ├─ cargo fmt --all  (cwd: src-tauri)
┃ └─ cargo clippy --all-targets --locked -- -D warnings | cargo test --all-targets --locked
┃   ┃ cargo clippy --all-targets --locked -- -D warnings  (cwd: src-tauri)
┃   ┃ cargo test --all-targets --locked  (cwd: src-tauri)
┃ sdk →
┃ ├─ uv run ruff check --fix .  (cwd: python-sdk)
┃ ├─ uv run ruff format .  (cwd: python-sdk)
┃ └─ uv run mypy . | uv run pytest
┃   ┃ uv run mypy .  (cwd: python-sdk)
┃   ┃ uv run pytest  (cwd: python-sdk)

Tree-symbol key: ends a Parallel header, ends a Sequential. Children hang off (parallel siblings, run concurrently) or ├─ / └─ (sequential steps, short-circuit on first failure).

Discover a task's matrix axes and override flags

$ camas build --help
output
usage: camas build [-h] [--dry-run] [--effects EFFECTS] [--FLAG VAL[,VAL...]]

Debug and release builds (FLAG='-- --debug' debug, FLAG='' release)

runs the 'build' task:
build ∥
┃ npm run tauri build -- --debug [FLAG=-- --debug]: npm run tauri build -- --debug  FLAG=-- --debug
┃ npm run tauri build  [FLAG=]: npm run tauri build   FLAG=

Matrix axes (override with --AXIS VAL[,VAL...]):
  --FLAG  -- --debug,

Pin the matrix from the CLI

$ camas build --dry-run --FLAG '-- --debug'
output
build ∥
┃ npm run tauri build -- --debug [FLAG=-- --debug]: npm run tauri build -- --debug  FLAG=-- --debug

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

camas-0.1.14.tar.gz (105.6 kB view details)

Uploaded Source

Built Distributions

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

camas-0.1.14-cp314-cp314-win_amd64.whl (478.9 kB view details)

Uploaded CPython 3.14Windows x86-64

camas-0.1.14-cp314-cp314-musllinux_1_2_x86_64.whl (897.4 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

camas-0.1.14-cp314-cp314-musllinux_1_2_aarch64.whl (882.2 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

camas-0.1.14-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (902.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

camas-0.1.14-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (871.2 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

camas-0.1.14-cp314-cp314-macosx_11_0_arm64.whl (588.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

camas-0.1.14-cp313-cp313-win_amd64.whl (472.0 kB view details)

Uploaded CPython 3.13Windows x86-64

camas-0.1.14-cp313-cp313-musllinux_1_2_x86_64.whl (891.7 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

camas-0.1.14-cp313-cp313-musllinux_1_2_aarch64.whl (874.3 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

camas-0.1.14-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (897.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

camas-0.1.14-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (863.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

camas-0.1.14-cp313-cp313-macosx_11_0_arm64.whl (587.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

camas-0.1.14-cp312-cp312-win_amd64.whl (472.0 kB view details)

Uploaded CPython 3.12Windows x86-64

camas-0.1.14-cp312-cp312-musllinux_1_2_x86_64.whl (897.6 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

camas-0.1.14-cp312-cp312-musllinux_1_2_aarch64.whl (879.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

camas-0.1.14-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (903.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

camas-0.1.14-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (869.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

camas-0.1.14-cp312-cp312-macosx_11_0_arm64.whl (588.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

camas-0.1.14-cp311-cp311-win_amd64.whl (469.9 kB view details)

Uploaded CPython 3.11Windows x86-64

camas-0.1.14-cp311-cp311-musllinux_1_2_x86_64.whl (852.5 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

camas-0.1.14-cp311-cp311-musllinux_1_2_aarch64.whl (843.7 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

camas-0.1.14-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (859.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

camas-0.1.14-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (830.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

camas-0.1.14-cp311-cp311-macosx_11_0_arm64.whl (585.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file camas-0.1.14.tar.gz.

File metadata

  • Download URL: camas-0.1.14.tar.gz
  • Upload date:
  • Size: 105.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for camas-0.1.14.tar.gz
Algorithm Hash digest
SHA256 46f6ca636a80c2a993e8b99a1daad5860d75e6baaa429b8a2df87744a023a33b
MD5 a43283b9fb4a3f9ffe5690b48bd14383
BLAKE2b-256 e558e864eb4bbfc33bf2722134e468a815e2ed34b4c330a88cd8372287ba3a75

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14.tar.gz:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: camas-0.1.14-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 478.9 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for camas-0.1.14-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 609b5a736fabecd950e14aebc6d215b41d506519bc83967979612da88f7c5e2f
MD5 ff1979e7a6d43557d6c9ea79660ed629
BLAKE2b-256 74cca2f235affe65018e81fe6de5ddb2b07e83b16fd0a7394e7402e0c5b67fd6

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp314-cp314-win_amd64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f6990f47d68622b81cef71b9ae0467c877ee97f818f84f599e4077fecb948860
MD5 917babd1c55e2c78b84b23a532a6f3fb
BLAKE2b-256 ffbdd71b0fbbb5239af892c1cb2bf1fc42d41c8aa793446df1a4374a9031bff1

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1f6886fa909c4b542c0f9e8677104e23a0955ebde2e500da08933269840972c2
MD5 bba3b5167559b9e93a3d584478949c6b
BLAKE2b-256 b2f4f630a916a423468727033b891a133535efeb1dcd81b95310bc8f899b27fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp314-cp314-musllinux_1_2_aarch64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 029a6f078c9f33da1b87654f218fec680ee753990a83b1af61d0106203898e66
MD5 52312c5a8cbb84794cf26789bf1e3dfa
BLAKE2b-256 18a5ef289003382ad2a019a2dc456903199db4d0aaa57e1884fe209aef0e3783

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2941d1f07db4d4e8842e105c834b04ef312488c6bf60fc5891365c246f8ddeeb
MD5 1085191e452004c9f7b9aeedb00e4002
BLAKE2b-256 74b1b811798e525acb1cc2c9585efce8086442031b2be3042156840dc5f4b003

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c5637e4922d3011eccf44a968dc10d3cc43c58131b980b180e69de81d9e248f5
MD5 0688328d79b5aaec34fdb19e9c96a7b3
BLAKE2b-256 dc0ef153c685ff51cbd17b252efd7f6021153f7139404a1b25c16dd55cd44223

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: camas-0.1.14-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 472.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for camas-0.1.14-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 893b9791ee18959237c2e76f4c5d37b64d6a630e18c4d0fe2ee761fbe2886823
MD5 8e61371565ef2d031609fc45fbe2f8ed
BLAKE2b-256 b2e49e4c1cb89889cc88d6c4b0bb3dc0e6613aaa4202d52431de4d52e4dca4a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp313-cp313-win_amd64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f726c28f0e64c262e35945d605b309a964738674e73b4457cf9009ab0caa2a94
MD5 252cf929b923c1546cb76ee0f70a8b01
BLAKE2b-256 eea8c928e47bfbf3679c1a9a1d0b606bb4e62d2d14b5013ff33e5e4138d918ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 15208184de3fcf0a4fdc659ed4f16fb75e0eb97504a617fde91630a362e70fad
MD5 6574d69f6cb2bfc5022e4b3a1ed0616f
BLAKE2b-256 afe62484df5d8741d283b92eab111d563c83a09298b653df8e1bfbbedcf044ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp313-cp313-musllinux_1_2_aarch64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8e01d2e04b73280a5baf257c6290d6f0995b37275664bc98bb4cc31ef2394a49
MD5 4bae1780c1f3e3bc72b69eba1b8e4b36
BLAKE2b-256 03902827497de0644a2be9a15d6815decf99598918be56f6e4bffab5e5152be8

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 acb5a10be5732832ac8025862a31d8d407041b32e19bb6e4be2247f83ae82149
MD5 77d5d19f271a692129da46efe353093c
BLAKE2b-256 f231bcd4a78b21b7a34412d3f11a44168b38447e926337d0495c2171b03d0a96

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7c34e9a350cc2b9c3b1e9d61db617cd919501b8196f522d7a7b5b1aa67430b11
MD5 11207fd193d90588d9f34566c95775a1
BLAKE2b-256 5c48f1804574bc8e5398079d441cb4633f85087e54cefb67ed9b1d7c662a1af6

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: camas-0.1.14-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 472.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for camas-0.1.14-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 45b627280940c60bccd9b935bf2d74cc3455f66120f81e3d3e9264f0c63ffbd8
MD5 1f0773a9d244eef5f7bc7412664d5f3b
BLAKE2b-256 59c40300042073863bcdfc5a93ea95b56e8e19f3952867d83a81d381ed5d471b

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp312-cp312-win_amd64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 26f2819fc0d99ce082d356bf0b438a54f3d825ba798bc4e54852ee1845e43e39
MD5 0b7a13cb66e12e53dccc6bc7aa2193b6
BLAKE2b-256 8e2fa4a48e89bfd360c45089a5952a4f28ca1353cde0b2c3999b92b4642d6c6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 db0dd441c62c04ca28aac69c69adca1d8e0b1867dfaa9283919c01b9aefef96c
MD5 f8132ec77a82d90708f5d02866840ba9
BLAKE2b-256 ad5477d15cc1849a946145874d3b352be122aeb306983b040e81880f1a886bfa

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 593134bae953bbf9183860b905eb2b185e00abac24b3b7a3c3fead81779da447
MD5 b823753c4ae735d1ea63a2f6adf42013
BLAKE2b-256 850c19f45c889015030c4400226d24a051d8c798669077fad2adc9eea0ccfdb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5289b531ebffa036addb4d8db9293193ba6f0bec78a028bac9d63eb453402a25
MD5 146c4f8a36e14f72ffe3c0846ac2ce01
BLAKE2b-256 c69f32f69e5c7a9a98fd318d18a6bdc62c4af980cd1c5f3b66bd9a3dd013d80d

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2ccb7e0cde2a66d14b4c96cd1f450f2b84d81600178dc5990adb037290d3b52a
MD5 61f93412da8d8d6000d2a9328c1f3621
BLAKE2b-256 c240eb55fda60938b1d727791cceae8ef375900d0f0b7957d9d80100416b020a

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: camas-0.1.14-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 469.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for camas-0.1.14-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6afdb3943ad3e08d943cb05b012891a7bf2a382e200f24bf5c48c49de369467f
MD5 f939beaf907ae0fa917b2f6841978506
BLAKE2b-256 4de4601dc86c54183bd90bb8534b0655ebe37856fc87f288891e08851015a865

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp311-cp311-win_amd64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d2dff9e21fee0ff625e79190ba9f9e08c952baba0402e539b3b024f347412253
MD5 70c820c1a1b695bac18fb55c49ffae7a
BLAKE2b-256 7296f5c5358be5c6c5f9686b2fe44dd33e3d187c3d7d5b4a26cc8bac34c0b660

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 bd012ec38822d856168b9f3b6a757c436068fb2bedb99101b955c93bc4604834
MD5 59376fd88f55802b0dfdb54075ae45f6
BLAKE2b-256 5a8fe00430d9175d6020d2a3e958bf74465918e7087cbce0fb65bb89226d127a

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0849279cc1a26ceff82b4951742c57ff8bdb2e493a591cd5685bb9b47637a7ff
MD5 e3167d2e6510df209f4a469b53945eb7
BLAKE2b-256 3fa8f834f90509536148539fe1633e8c21d6ba96350d5b76a466ba9760924109

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 528cc6a0375f612b0a051af5ac3cae07db7345dd590c79b5c24207161796243e
MD5 3ab5fc5f544366311121f4d3add89756
BLAKE2b-256 f8ed90035b667557a402b0a9edf075ed40479372e7243edebfeea5c05dc7e46a

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: ci.yaml on JPHutchins/camas

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

File details

Details for the file camas-0.1.14-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for camas-0.1.14-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 248400441ec6c00a3b83aa360b76e8eab992c93e997a97c4538f9c38ef88326a
MD5 1ab8fe503a37d64165a7b8ae711010a8
BLAKE2b-256 9525243573da57a1080a907ce4dcdd1aeb879c87a71fdd54cb15eb07c8237f6a

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.14-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: ci.yaml on JPHutchins/camas

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