Skip to main content

Traversal

Concurrent DAG execution for Python, powered by Rust. Free, MIT licensed, in-process, and built for ordinary Python functions and tool calls.

Traversal owns dependencies, readiness, concurrency limits, and structured node outcomes. Your functions own the work. Use an external scheduler to start runs. No service, account, telemetry, or Python runtime dependency is required.

Install

python -m pip install 'traversal==0.1.0'

This first release includes graph execution, local run history, explicit JSON result reuse and guarded resume. Conventional CPython 3.11–3.14 is CI-tested. Release wheels target Linux x86_64 (glibc 2.28+), macOS Apple Silicon, and Windows x86_64. Source builds require Rust and Maturin.

A graph in a few lines

from traversal import Graph

graph = Graph("report")
source = graph.add("source", lambda: 5)
left = graph.add("left", lambda n: n * 2, source)
right = graph.add("right", lambda n: n + 3, source)
total = graph.add("total", sum, [left, right])

plan = graph.compile(total)
print(plan.describe())
report = plan.run(max_concurrency=2).raise_for_status()
print(report.outputs["total"])  # 18

Left and right are independently eligible after source completes. Total waits for both. Only requested targets and their ancestors run. Nested lists, tuples, and dictionary values can contain Node references. after=[node] adds an ordering dependency without passing a result. after is a reserved API keyword.

Async functions run on the event loop; ordinary functions use a bounded thread pool. Inside an event loop, use await plan.arun(). Rust scheduling does not bypass the GIL for CPU-bound Python. Cancellation stops new admission and drains blocking work; tasks should set their own I/O timeouts.

Inspect report.states, report.outputs, and report.failures. Failures include exception type, message and traceback. Independent branches continue; descendants of a failed node are blocked. Calling raise_for_status() is optional.

Plans freeze topology and binding containers. Arbitrary Python objects remain references; shared mutation requires caller coordination. Reports retain all successful intermediate outputs until released. Rerunning performs work again: there is no exactly-once guarantee for external actions.

Remember runs and reuse results

from traversal import Cache, Graph, History

history = History(".traversal/runs.sqlite")
graph = Graph("totals", version="1", store=history)
source = graph.add("source", lambda: [1, 2, 3], cache=Cache("input-v1"))
total = graph.add("total", sum, source, cache=Cache("sum-v1"))
plan = graph.compile(total)
first = plan.run().raise_for_status()
print(history.latest(graph="totals"))
print(plan.explain_run(previous=first.run_id))
second = plan.resume(first.run_id)  # Reuses compatible JSON results.

Cache is an explicit declaration that a computation is safe to repeat or skip. Its key must cover changing code, inputs and configuration. All ancestors need keys for downstream reuse. Previously started non-cache work requires a named rerun decision during resume; unknown external effects are never silently replayed. History is opt-in and local. Default records omit task payloads and error messages; caching explicitly opts into bounded JSON result storage. No pickle.

See the complete API and boundaries.

Install the agent skill

The version-matched skill ships in the wheel:

python -m traversal skill --output ~/.codex/skills/traversal

Use your agent's skill directory, or export to any new directory. The command refuses to overwrite an existing folder. The canonical skill teaches PyPI setup, graph construction, execution, and failure inspection. Its examples are executed in CI against the installed wheel. A standalone download is also available in the CI run's traversal-skill artifact.

Develop

Install Rust and uv, then:

uv sync --locked --no-install-project
uv run --no-sync maturin develop --release
uv run --no-sync pytest
cargo test --locked -p traversal-core

Rust topology/state and PyO3 bindings are separate crates. Python adapters have no third-party runtime dependency. PyPy, free-threaded CPython, process pools, distributed workers, connectors and calendar scheduling are outside this release.

Owner: Trevor Ewert / KWIP LLC. MIT license.

Download files

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

Source Distribution

traversal-0.1.0.tar.gz (46.0 kB view details)

Uploaded Source

Built Distributions

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

traversal-0.1.0-cp314-cp314-win_amd64.whl (163.5 kB view details)

Uploaded CPython 3.14Windows x86-64

traversal-0.1.0-cp314-cp314-manylinux_2_28_x86_64.whl (307.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

traversal-0.1.0-cp314-cp314-macosx_11_0_arm64.whl (269.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

traversal-0.1.0-cp313-cp313-win_amd64.whl (162.5 kB view details)

Uploaded CPython 3.13Windows x86-64

traversal-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl (307.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

traversal-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (267.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

traversal-0.1.0-cp312-cp312-win_amd64.whl (163.0 kB view details)

Uploaded CPython 3.12Windows x86-64

traversal-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl (307.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

traversal-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (268.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

traversal-0.1.0-cp311-cp311-win_amd64.whl (165.5 kB view details)

Uploaded CPython 3.11Windows x86-64

traversal-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl (310.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

traversal-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (272.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: traversal-0.1.0.tar.gz
  • Upload date:
  • Size: 46.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for traversal-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1c92282539a4e8b502db4f6f45d1f4ace2d110ff9f51470405ac29c1a08805c7
MD5 5bb925b510cf750a14929dbae9e00779
BLAKE2b-256 dc2c0682ecb357b8e1d62e090f9175fe1d97b458aceb91a0780b7aa2580a222a

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on kwip-info/traversal

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

File details

Details for the file traversal-0.1.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: traversal-0.1.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 163.5 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for traversal-0.1.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 d282b7882c4c9e7fc8761910c7e8241d09a14d72ee4d1724eaf209d26b43dfed
MD5 8f63fe12e823a117bbd3fe29e67f0356
BLAKE2b-256 91684eef218735abad1195dfd2af3b089c5e3bc10360bbfc48c9df366c56f94c

See more details on using hashes here.

Provenance

The following attestation bundles were made for traversal-0.1.0-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on kwip-info/traversal

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

File details

Details for the file traversal-0.1.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for traversal-0.1.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 441699decc985353697a3aed82f02d5ad52e7f1730e49a98d3ea351919f425dd
MD5 975ffe44151aade7cb044e0754bf0877
BLAKE2b-256 8f4f9ef59ab155c8f6217588eb6f97978458eb0b3fc87b7f4382970ce8e0d9a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for traversal-0.1.0-cp314-cp314-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on kwip-info/traversal

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

File details

Details for the file traversal-0.1.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for traversal-0.1.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 07da7fce634680891eb8aa00beadcd64f1827e1c7e1edd45bcf3d0c1ecc26585
MD5 35fe3e3f8fde0449f543a79460b14495
BLAKE2b-256 c53a34a62d117c81883e7776173948709396883ed24f88c8efa179a75c8670ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for traversal-0.1.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on kwip-info/traversal

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

File details

Details for the file traversal-0.1.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: traversal-0.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 162.5 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for traversal-0.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 03de02904196eb7bc7a4931a1b32355f673312d8e528d613a0694a8cc86cd651
MD5 318f13a00ec3d3d3543db25aa0f90a76
BLAKE2b-256 a2484ff399e735ed3ce9b1073f1e71c61210e494fb55ef02f7044dabd82a1738

See more details on using hashes here.

Provenance

The following attestation bundles were made for traversal-0.1.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on kwip-info/traversal

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

File details

Details for the file traversal-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for traversal-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 854f0a871d3e7a2bb86947f5791f58f0755fb09cbd22a7bd8932eef695d6e185
MD5 e21b8674896d01ec1103e250d7e60dc5
BLAKE2b-256 45a99b619affbb44e8ac3365295f073d110a5ec0715a9afdf9620d33274788da

See more details on using hashes here.

Provenance

The following attestation bundles were made for traversal-0.1.0-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on kwip-info/traversal

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

File details

Details for the file traversal-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for traversal-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b46916fdbff4cd9be73380985f4088c23e664ed89f5d19cf446c9415e9541924
MD5 3fb40a3344ae24f2d5485a55bb356b8f
BLAKE2b-256 fef8fa1c43eba5dbea41bb606c9a89642332f01f420be395f0ede2d1021c7dae

See more details on using hashes here.

Provenance

The following attestation bundles were made for traversal-0.1.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on kwip-info/traversal

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

File details

Details for the file traversal-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: traversal-0.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 163.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for traversal-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8099b509f1280b8d7b527519b4a363d034b36cf673c933d674e73311865d71e7
MD5 4cb9bb7f32254913746b406090176409
BLAKE2b-256 2fe7f891a5feb016953a0cd8b943c1dec98a871a65c0b1a32be266c70c5ba735

See more details on using hashes here.

Provenance

The following attestation bundles were made for traversal-0.1.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on kwip-info/traversal

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

File details

Details for the file traversal-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for traversal-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5f61dd002f336199875b7f552d1dc9384d8349a5d02656656410291d8eb6908c
MD5 342e8c2012fce7925f8d685441aba7c8
BLAKE2b-256 4d05deb17581bed98c13e457fb473deb5d31eb06556a89f84ce5d453a808d1d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for traversal-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on kwip-info/traversal

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

File details

Details for the file traversal-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for traversal-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cc75746e577c7e7429266e505c23dc4af04f93e58d5068ab47b93b2a05b8f536
MD5 52429191ca263dd118fafda571405140
BLAKE2b-256 8d53edad0efc5220e0514429c2f4c5a70d1f354bdaad750588ebe710f7f878b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for traversal-0.1.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on kwip-info/traversal

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

File details

Details for the file traversal-0.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: traversal-0.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 165.5 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for traversal-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 dbcb2b9eae4f24397697f5add17b24e24cc219cc88f5dd3960b76792e98cd58a
MD5 e6d01f1b0d3e9f2db6a3e69e25ef5140
BLAKE2b-256 40987d95f7c58557207d35a4c4eccfc96197f6a072617d5256ab8c9f0f5ccce4

See more details on using hashes here.

Provenance

The following attestation bundles were made for traversal-0.1.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on kwip-info/traversal

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

File details

Details for the file traversal-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for traversal-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cada49731bb1039e1125319efe235d83d7e048a07e4daa479ea2d651649d21ee
MD5 a1d9d0d5136e770f97daea2c21d42adf
BLAKE2b-256 c2ecee5d3c20cdbe5ec54b0c6019c9ce4be8e7f03c756bc4ec5d5a562bd41b8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for traversal-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on kwip-info/traversal

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

File details

Details for the file traversal-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for traversal-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f0ae2e02765a3317cb76e2a37a2fd26ab699e72092cdbc8a1efcaaa161cdfbdd
MD5 d3b6eee829d350d1d8afd006836109b6
BLAKE2b-256 074dc6bbad8c8bdb1ab98376585a5c51ae554f94141e4bbd33c178eadbc15f71

See more details on using hashes here.

Provenance

The following attestation bundles were made for traversal-0.1.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on kwip-info/traversal

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

Release history Release notifications | RSS feed

This release

0.1.0 This release

13 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page