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.13.tar.gz (102.4 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.13-cp314-cp314-win_amd64.whl (476.2 kB view details)

Uploaded CPython 3.14Windows x86-64

camas-0.1.13-cp314-cp314-musllinux_1_2_x86_64.whl (889.3 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

camas-0.1.13-cp314-cp314-musllinux_1_2_aarch64.whl (875.1 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

camas-0.1.13-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (894.2 kB view details)

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

camas-0.1.13-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (864.2 kB view details)

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

camas-0.1.13-cp314-cp314-macosx_11_0_arm64.whl (581.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

camas-0.1.13-cp313-cp313-win_amd64.whl (469.1 kB view details)

Uploaded CPython 3.13Windows x86-64

camas-0.1.13-cp313-cp313-musllinux_1_2_x86_64.whl (884.0 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

camas-0.1.13-cp313-cp313-musllinux_1_2_aarch64.whl (868.3 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

camas-0.1.13-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (889.4 kB view details)

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

camas-0.1.13-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (855.9 kB view details)

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

camas-0.1.13-cp313-cp313-macosx_11_0_arm64.whl (581.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

camas-0.1.13-cp312-cp312-win_amd64.whl (469.3 kB view details)

Uploaded CPython 3.12Windows x86-64

camas-0.1.13-cp312-cp312-musllinux_1_2_x86_64.whl (889.4 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

camas-0.1.13-cp312-cp312-musllinux_1_2_aarch64.whl (873.0 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

camas-0.1.13-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (895.3 kB view details)

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

camas-0.1.13-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (862.1 kB view details)

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

camas-0.1.13-cp312-cp312-macosx_11_0_arm64.whl (582.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

camas-0.1.13-cp311-cp311-win_amd64.whl (467.2 kB view details)

Uploaded CPython 3.11Windows x86-64

camas-0.1.13-cp311-cp311-musllinux_1_2_x86_64.whl (844.6 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

camas-0.1.13-cp311-cp311-musllinux_1_2_aarch64.whl (837.1 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

camas-0.1.13-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (851.5 kB view details)

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

camas-0.1.13-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (823.5 kB view details)

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

camas-0.1.13-cp311-cp311-macosx_11_0_arm64.whl (580.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: camas-0.1.13.tar.gz
  • Upload date:
  • Size: 102.4 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.13.tar.gz
Algorithm Hash digest
SHA256 73877e40f96e07b12a0f070137ccb16b771eb4aaa635bc0d8301d40bdf2cf09b
MD5 e6eb55a0ed70715d3834a3966e645c28
BLAKE2b-256 6c8df59cc18cf56d0b80faf4f8fbec576669badb9a7c8a73a1f04b6695555511

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13.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.13-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: camas-0.1.13-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 476.2 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.13-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 cb1064bbf34ad1149a19a0d7f451e8d09e63d07f91be9b0fe0c7b634a822c244
MD5 0f4ceaad7c4a5bb354cd4cd51af4cd3b
BLAKE2b-256 77b931c99b6e4d7edf088c65ded0b145f44c9ab675178168026401e6e7a99c3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d727b537cb71e4b3ed932434e00100aa0905ce108c9806166fa228d9441c8a74
MD5 be35802fe0d3f508dde69a37931d94fd
BLAKE2b-256 939c61fa234eb32eefc5016304de14e4d59060f06e88681a86e379addc06521b

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 be8b87b57000ecfa5e51a1dfeba9832d29ebdb4433ed4c1c4eeb2bfe34d60fbc
MD5 5240757ccb1cbd4458e10a75656178f4
BLAKE2b-256 985bc99178cdcd47c42354d58f153f3a644874f576031e929d080d1d2bd4bea1

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-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.13-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a48b287e224e416ac37120bba07e3352421def84c2e3d3cd1bd2d67072de44d3
MD5 d6c4a9bfd46e802e703024d343a0f61b
BLAKE2b-256 14cf454c1c65c1106f35cb266198f4a23c3fcf12052bb56593f407ef753fcb4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d225065e8c2ede5871440750186d1e7260b3b7d45ce47160881ddbd1cad63eec
MD5 34e9a4897ee2230f1ef2a3a1ac73c432
BLAKE2b-256 7513dfc20542cc9d36b1e7e41c4c556f0d017418413d6512ddc502a6ab5337c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a804a455d1ad917850cdcac753756c673a040a41929322f1bfd01b70c0aed970
MD5 aaf501a0cc416a876039d0807fb578ac
BLAKE2b-256 e4548d9c6e6b11247b8c558e1b89b0ac25ad9191323f05ce836a5319419bdd4d

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: camas-0.1.13-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 469.1 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.13-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 04ca534d9bb50b6e47b492facb39107df7281a5e1348aabc6134c18cf3bc0b8e
MD5 7453801f963ed375c51ae8de5917b8b5
BLAKE2b-256 f9459b124167213b9b896f445980a0d614590a9f61017f86cfff43b916b5b099

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 23d33b45a532edfa89b0db6f7f72dd9d708e9cda4e46c00830334f913ada3ace
MD5 eaef24cf814aa69b4494c3496a7c845c
BLAKE2b-256 b5c15916247363099d07911edbd678471cf1b670da1bae2a84b997f0199c4501

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 902a2a0cb99908256d8545f333c485cb11c8069de3a7f683018497ec3d4ba7fe
MD5 1d8419a3eec0dac21b28f5a307e8a301
BLAKE2b-256 10c87143647a903c6f851774ed7c6e6f45f09ed47fed384e68c6fc92733de23d

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-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.13-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 82c1a8b484011382a0427d9559fc9f7cc3c6934fa4e0b0a89e53df8e88b58178
MD5 ffadbbb5fc6698ea86619f79cf57fae6
BLAKE2b-256 be891b818d5710232f16ea95c93a545e76ab21dd5d6e51c485c92523e4ee9f92

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9cd563dbe9f5bc75e7efa6aee36b9543f2a1e632a39000c2a002e53b0689ea98
MD5 61f1f23fc4bf8199ef293312d790ce88
BLAKE2b-256 9821196b3f37cd428e41f3b5090029a575811cd630a32d7ccd2e25a9ab621b49

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b6a68780d94ce438e4c5ab23db25e0ea559074e0eb6c3b3b68dc3fbd53b3571
MD5 5a0f631d2ce89a70916ca0881e0736e9
BLAKE2b-256 a9360355d450f6e50a0b9870475515883b0e134c840b42be9af0fdbf0b121a80

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: camas-0.1.13-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 469.3 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.13-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e62004cab9c3a8db84c065372f0cc07e42c68a099031be5a409cfed9388d2a53
MD5 0d4a8e1f3b2b6cb9526d4837463de4dd
BLAKE2b-256 03a38e9b63c8e8669fa0d31f40c23fedd79e152db6abc797b8f5a0a14b3d1813

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bb4f7aa358566836cc5babb814e564affcbcad4eef66e3b832f46e44f12f11a7
MD5 35fea136da7022ec3c0413c109685e7a
BLAKE2b-256 75a2e4e160684b87833cac0668ca0b9e8b26c3ccab7fae5eb2d60cdc2eb89d4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 182b674da8e0fb7d3218a2ddc495c4550f748f941fa3640068f16865879965ce
MD5 8eb996b7830716dc09867be989a0f453
BLAKE2b-256 a8f55470a1cf2ed0bba017169a84edc5f5004430d4a36e67d39ed161c73adec7

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-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.13-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b9f45066670e0ce5d627cddb5efe3953df019bad1f570ebbdc70f4f6399c655c
MD5 8e6a949fb69a0be15985068706fa4f30
BLAKE2b-256 b23072eea3eb07d6b075175de447405ccfada4d54cab3c183d9fa080ad8a164b

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5e699cf43001b2c54aa11052bf089d03e3b34a79d37a5fff9b0b9604e3d5d8ab
MD5 444b4fde1c22e1774d25e598002db595
BLAKE2b-256 be1c54d99221461f9e65b853b7e6869e866b55807481fb93228b8a46e4b787b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 24bf0e1e542ade4809eb4812b1f030cfc6b0fc4e27d27d7169a9d77e43ec7bf4
MD5 2e5987ae46a0a605826a1e86b396df08
BLAKE2b-256 a7117729118a740b78123ddb239cdcb0db5a5f6fda62119d369a5e3c73831508

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: camas-0.1.13-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 467.2 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.13-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 10fe4490beb262bb48eb5e9e15bfaf73d8aab5e96be78d4b77f7a724653d0531
MD5 bc487d3d8931e208b3810f83b1cbe3a8
BLAKE2b-256 4218e9e546828a3ac11a6c5087e622ed0d6f765b24a7bee1f246cc019e6c93b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 065c0ba9cfdfe489adb33e8ec6ad4c1c12e28ce3d184c257c7e867ee451cc392
MD5 f71cae61374d34eaaf86d9917b17246e
BLAKE2b-256 0efed56d2e608e5c39694d38764149902b1d84a19cd08d17dc59a1fcf906c8c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e6a87415f133f4d7a350042211a7f3dbfc42626de802eff36ed448cb3d22f857
MD5 c6bf431d2b9b0e877da6b20c451d3294
BLAKE2b-256 6d1a60297489012ad26a3c81813165a4fee1e92d8521d1a538944231ff7a025e

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-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.13-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 500caa9675884e146bd736544367fad7eb08897d8c4b68ff8a06aa664bd391da
MD5 d1d8ff2bc8bda8cd017fc6e8ada6e04e
BLAKE2b-256 43830bdaf8a0e5ef0216a46798fe00302b763c2959e43393e3bf8344a6ba2f13

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6f2c7563cfef29c0038d91ba75cb7e10cb6c7516ccfe6c92c6ce994f45300172
MD5 988ec4482f53ccd929779368be5aaf5c
BLAKE2b-256 41d6cd270d1664e3b088c27359d3f7f251c48801993630e3e80f758146a5fe7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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.13-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for camas-0.1.13-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b7b08ac4aa5516b8a37b792f8b086f77acd233ab525806136b3ed829a569acd3
MD5 e88257ac234db6ba9b634a273d6cecfb
BLAKE2b-256 4afc6e8dd485f093aaa1c1706a173e7fbb42f3a4fd773aa8aa80c4b45557759d

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.13-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