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.

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.12.tar.gz (96.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.12-cp314-cp314-win_amd64.whl (460.8 kB view details)

Uploaded CPython 3.14Windows x86-64

camas-0.1.12-cp314-cp314-musllinux_1_2_x86_64.whl (862.8 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

camas-0.1.12-cp314-cp314-musllinux_1_2_aarch64.whl (849.3 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

camas-0.1.12-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (867.4 kB view details)

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

camas-0.1.12-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (837.9 kB view details)

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

camas-0.1.12-cp314-cp314-macosx_11_0_arm64.whl (564.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

camas-0.1.12-cp313-cp313-win_amd64.whl (454.3 kB view details)

Uploaded CPython 3.13Windows x86-64

camas-0.1.12-cp313-cp313-musllinux_1_2_x86_64.whl (857.1 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

camas-0.1.12-cp313-cp313-musllinux_1_2_aarch64.whl (840.4 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

camas-0.1.12-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (862.3 kB view details)

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

camas-0.1.12-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (830.5 kB view details)

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

camas-0.1.12-cp313-cp313-macosx_11_0_arm64.whl (564.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

camas-0.1.12-cp312-cp312-win_amd64.whl (454.3 kB view details)

Uploaded CPython 3.12Windows x86-64

camas-0.1.12-cp312-cp312-musllinux_1_2_x86_64.whl (862.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

camas-0.1.12-cp312-cp312-musllinux_1_2_aarch64.whl (846.3 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

camas-0.1.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (868.2 kB view details)

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

camas-0.1.12-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (836.4 kB view details)

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

camas-0.1.12-cp312-cp312-macosx_11_0_arm64.whl (566.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

camas-0.1.12-cp311-cp311-win_amd64.whl (452.4 kB view details)

Uploaded CPython 3.11Windows x86-64

camas-0.1.12-cp311-cp311-musllinux_1_2_x86_64.whl (818.2 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

camas-0.1.12-cp311-cp311-musllinux_1_2_aarch64.whl (810.9 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

camas-0.1.12-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (824.2 kB view details)

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

camas-0.1.12-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (799.3 kB view details)

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

camas-0.1.12-cp311-cp311-macosx_11_0_arm64.whl (562.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: camas-0.1.12.tar.gz
  • Upload date:
  • Size: 96.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.12.tar.gz
Algorithm Hash digest
SHA256 292c54d270fc04a58c112c99242ae0a6a6213a4072de8d408620163a72ebac4a
MD5 b6bbf9652c8fac9908222f58bdf006ec
BLAKE2b-256 a12884102053cc7abb894dfed56c70499537208701d4ffe3bf20bb0057b0e48d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: camas-0.1.12-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 460.8 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.12-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 3d6ba4a54c31243db79f5c2549eb8912c85dce92eff13cc499b0e08a46c003dd
MD5 2c58ff6d8ff6e34f8289340dfdd93d24
BLAKE2b-256 6c390323f2af7149c4937c51477735e5e8326e151b45fb10266be1be01027753

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 eac37b52d443376aa05c488e72e86dc8be87052f859779da9d5bf1a280abe0f8
MD5 43ad7134aa639ba9ce9cd51838583d10
BLAKE2b-256 aff04602d819129f38ff5a92dd1b566074264f232ee17dad92f83561330a4508

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4766d728f04ac333380de85fc7e652f1a047c0c6bcb05419cdddd07400be047d
MD5 b9ef1263d5b1e76c12e12a7c637b3b70
BLAKE2b-256 e630742f6d2554242eed729c92059c0f6706eabce2e61549dc063138bec09851

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.12-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.12-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.12-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c29a12fd4880c0715deb04370543545fbf681666adb92c288b024d5f6900e188
MD5 f7f071a1b14ce209c10a2072e66f6eb6
BLAKE2b-256 552df21d80dd88354b3ebe42553f65c1239dccfdc582d531c06a634dc69c4aba

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5576dfb0e5e7616401fee674ac25aae24f1ff97f0fcdec6c2169b61e10e2fe95
MD5 9fc4db612489da58590e8d18006de6e2
BLAKE2b-256 2683019c5fdbdfcbd0174cb143e65fb9c7d66d93bd3c82c97829080912adce67

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 430aff21406248398d9f38e14477ee876ff6cfd7e1e8d43b01ae484f6e438484
MD5 96dc3c13ded43028bb5a8558393f5725
BLAKE2b-256 01c27ead3ef49a0f2a4122b7452ac288537af4a745ec4f55c36c523f3e8893ff

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: camas-0.1.12-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 454.3 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.12-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 23e67093257ef955988fa7ad66ac4d7e153d5c30028534df7c01d84adb557065
MD5 233994a6e4380485861d00bbdc8d2a03
BLAKE2b-256 6802655fc0cf9fe11308b894420b217fa67e72a56ed3795512f94d712fcc5620

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4d17b849aff4420500a08aed9696ca5293e56cdcf7d757579ae47a4f500ae797
MD5 dcdf97cd9230cc33527a930942a4654c
BLAKE2b-256 9ce9c3a30827f5b54c1a4f0f806530ec2287f4fa133b640b4b16edbdbe357601

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4615cbc68a09118b34b91242ba4851dc22949a5123dbfaff22f3976d8697e1df
MD5 f03e5abfa0793262286d52584d88c8c4
BLAKE2b-256 5be568f0bd7426ebc8dbe81934e9d5beaf3809bcae834c0cc0752bfe04f5a44b

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.12-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.12-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.12-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b6cae71cfde8b138204e8d6aede87f2d51badb94fa9e0e900461ba95371ac115
MD5 dfe4b333cd0f9d65555dc4e0c9a83d48
BLAKE2b-256 4453cf117cdc22c226a2b24986dc67abfc29cd15e9012d70c45a410145e735de

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d5f177004583a26cd97aecbc1abb5be73083ef1b611b95cf87b78e00b53dbc76
MD5 5bc293ca1c5938537a8ece88a3b19d35
BLAKE2b-256 8b2c86e97e422a0b005f94921fd971eb4860b161f61d8c45eced180768b69f8b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c821a54a4b491f5b57b53676a4192f2745989cd16ba788d29891a912a4f95d6
MD5 20b040ca614f21bd23e0a889082f910d
BLAKE2b-256 fe49dbe20526f40a0baccb1875723e132f4fb0a8d2436712d24d4e72a1ea7f0c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: camas-0.1.12-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 454.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.12-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 16234424e7d70c00a81309334977a609b0751e94260bde9121f42e5042cb8bcb
MD5 67d6945438d05e756140cf26e268a583
BLAKE2b-256 79bf8d0f7e2af34deb0fd06cf5a097f4269453b6202e0ceff0a85c02cc442a05

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a684d2b16c2a6ce8553245a976894a2f6fcb604b41662478963d5657339a5f4c
MD5 9637a5da0598209a1dec60f2240d547f
BLAKE2b-256 d87a404b0c261d964ae1d50b9216f75dbadfefaace34a97e2a18d3f76168de37

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 23d2e9a19a51352d35872def96459c976bb5feac28c1317fe164747e72fba0df
MD5 1d2c6ba3f81aaadef39c6521c1169656
BLAKE2b-256 357b1415436dcc9673676c9fdba84a64056577898b911305d5acada74fb568e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.12-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.12-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.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 593e46095ee6efecba715d6da75db145d0bed52bbcf4593c6e28c4382fbcc102
MD5 43aacd35731908ee6182969ebcf6fb8a
BLAKE2b-256 c625e4eba77d5c632c8ea83950f52878df21135da142d0d4bdf3cf9173c1acbd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7d556a6dea929d04a50833213ba4d4ebf59f5e6748f2a068cf4235d0798b8a50
MD5 947543ad51e21af3faa344d3cee45cda
BLAKE2b-256 227711251001819761241a6287d865cae063a490b5949442045d0a95bf55c7ac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e98c159aeeb47dd3b933746923d1378aae268cb8bb1dc3b6239e419a19da06b4
MD5 842bb8d87d2177cbff0ca7f47fe25ee7
BLAKE2b-256 9f75d2adb55510c14894ff46e3f31aa452d3c32986c4d12ca2e6bb82708eb9a8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: camas-0.1.12-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 452.4 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.12-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d3bb1882a00d4acba828cb51c3c3c7f6f43904cd34377bd6bfa7d35275901f00
MD5 230b26fe40803632dc605bf348d0074d
BLAKE2b-256 d934e5b072452c7909c49d00858089665b39eeb5f0430e4bf91eb39648c44a3a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e27947eea4b7665e8695047537023bc8da94b8e46ecfab63f56b96d3d4197cb6
MD5 71334e067fa986c7e4907b9abc723a2f
BLAKE2b-256 84ad3ebebeec9ac3b21e3108addc473a53ec9d6608f17f3817992f111dec2618

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 893c223b31b3486f88ba649d5b9f272a6d35a71453f34669b77a3cddc30a5e30
MD5 96e8f004382494c929fc1c644861dfd5
BLAKE2b-256 77d16acfa11b241859236c880a5f7722a2a7255a27517993bd62877fc643407d

See more details on using hashes here.

Provenance

The following attestation bundles were made for camas-0.1.12-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.12-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.12-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2762dfb66d9f8ab0b58fb52646c6c335793a2bfec3cf3e40730abff559b24578
MD5 87d0bdaceb2e7abf447bc77057b61288
BLAKE2b-256 af448ae4d84736ffb21c1f9ad0eeeab3c8ea949e30d37b4fac43f46a63ea0753

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d83e9d37fca8ec58436897a4b6b07996b1c185c488e776ffa307453b13ce6ffa
MD5 9a440a3e78608ef5c1f31f1774708e60
BLAKE2b-256 6e17b37723f1bf144d5e2757efd44bd99b0b21768451d2a0db50b131dc42849a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for camas-0.1.12-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9145c8cc2bbec9eb05dc8a1ea718b6e8622100617d36a87fe78b61ca022d38e4
MD5 47e22ce9d880aba41aa404468a4f566b
BLAKE2b-256 094d9173d879ab802ea287e16d72f8ffa4513b67405b812d4b1a0fc2dfaf5fdf

See more details on using hashes here.

Provenance

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