Skip to main content

tf_tree

crates.io docs.rs PyPI CI Licence

A transform tree: it stores time-stamped poses between named frames and answers "where was frame A relative to frame B at time t?". Use it in a control loop, across processes on one host, or in a dataloader with no robot attached.

It is faster than ROS tf2 (below) but is not tf2: no ROS dependency and no drop-in tf2_ros::Buffer, only a one-way /tf ingest bridge (0008). Linux first: shared memory and frozen .tft files are Linux-only (shm feature); the in-process engine is portable.

0.0.x promises nothing between releases. Pin exactly (CHANGELOG.md).

Install

  • Rust: cargo add tf_tree
  • Python: pip install transform_tree, then import tf_tree
  • CLI (tf_tree, alias tft): a binary from the latest release, or cargo install --path crates/tf_tree_cli --features shm
  • C ABI, C++ header, ROS 2 bridge: just c-abi-check, just cpp-check, just ros-build

Quickstart

Python, from scratch (just quickstart runs this). Stamps are integer nanoseconds; a pose is [qw, qx, qy, qz, x, y, z].

import tf_tree

tree = tf_tree.build([("map", "base"), ("base", "cam")])
tf_tree.push(tree, "base", "map", 1_000, [1, 0, 0, 0, 1.0, 2.0, 3.0])
tf_tree.push(tree, "base", "map", 2_000, [1, 0, 0, 0, 3.0, 4.0, 5.0])

plan = tree.plan("map", "base")   # compile the route once, reuse it
print(plan.at(1_500)[:3, 3])      # -> [2. 3. 4.]

Rust:

use tf_tree::{Capacity, EdgeCfg, Iso3, Quat, Stamp, TreeBuilder, Vec3};

let tree = TreeBuilder::new()
    .static_edge("base_link", "lidar_top", &Iso3::IDENTITY)   // (parent, child)
    .dynamic_edge("odom", "base_link", EdgeCfg::new(Capacity::history(100.0, 10.0)))
    .build()
    .expect("layout");
let odom = tree.frame("odom").expect("declared");
let base_link = tree.frame("base_link").expect("declared");
let lidar_top = tree.frame("lidar_top").expect("declared");

let w = tree.claim(base_link, odom).expect("unclaimed");   // (child, parent)
let at_x = |x| Iso3::new(Quat::IDENTITY, Vec3::new(x, 0.0, 0.0));
w.push(1_000_000_000, &at_x(0.0)).expect("monotonic");
w.push(1_010_000_000, &at_x(1.0)).expect("monotonic");

let plan = tree.plan(odom, lidar_top).expect("connected");
let g = tree.guard();
let t: Stamp = Stamp::from_nanos(1_005_000_000);
let pose = plan.at(&g, t).expect("in range");
assert!((pose.t.x - 0.5).abs() < 1e-12);

From a recorded bag

MCAP only (for .db3, run ros2 bag convert first):

tft doctor --from-bag drive.mcap                 # what is wrong with this /tf traffic
tft freeze --from-bag drive.mcap -o drive.tft    # index it
tree = tf_tree.open_file("drive.tft")   # an mmap; open per worker, after fork/spawn
poses = tree.plan("base_link", "lidar_top").at(stamps_ns, layout="quat_twist")  # (N, 13)

Against tf2

In-process, one thread, same interpolation, tf2 called natively; 4-core EPYC-Milan, not core-pinned. Both agree to 7e-15 on 50,000 recorded queries.

tf_tree tf2
Lookup, depth 3 94 ns 253 ns 2.7×
Lookup, depth 15 1193 ns 7337 ns 6.2×
Publish 9.4 ns 114 ns 12.1×

Without LTO the lookup gap is 1.8×; through the C ABI, 1.5×. Method: tf2.md; sources: EVIDENCE.md.

Not for

Need Why See
Drop-in tf2_ros::Buffer gated, not scheduled PHASE7.md
Covariance, multi-parent frames, loop closure cut 0009
Transforms across hosts not started PROJECT.md §4
Shared memory or .tft off Linux not implemented SUPPORT.md
A viewer, point-cloud deskewing deliberately absent PHASE5.md §8

Status

Phase Status
1 Engine: arena, seqlock buffers, plans, SE(3) math Implemented
2 Shared memory across processes Implemented, with gaps
3 Python bindings Implemented
4 C ABI, C++ wrapper, ROS 2 ingest, derivatives Implemented, with gaps
5 Frozen .tft, bag ingestion, diagnostics, tf_tree top Mostly implemented
6–8 Continuous time, tf2 shim, multi-host Not started

The §0.0 tables in PHASE2, PHASE4 and PHASE5 win over this one.

Shared memory is not a sandbox

Processes sharing an arena trust each other: a read-write participant can corrupt it (PHASE2.md §3.10; SECURITY.md). A read-only participant (the default for readers) cannot, and a crashed or hung one cannot wedge the others.

fork() is the sharp edge: a child's inherited handles report ChildDetached. Python's multiprocessing forks by default on Linux, so open the arena inside the worker or use spawn. A frozen .tft survives a fork.

Layout

crates/: tf_tree_math, tf_tree_arena, tf_tree_core, tf_tree (facade), tf_tree_ipc, tf_tree_c, tf_tree_bridge, tf_tree_ingest, tf_tree_py, tf_tree_bench, tf_tree_tf2_sys, tf_tree_cli. ros/ holds the ROS 2 packages. tf_tree_py, tf_tree_tf2_sys and ros/ sit outside the cargo workspace and have their own just recipes. Five crates publish: tf_tree, tf_tree_core, tf_tree_math, tf_tree_arena, tf_tree_ipc. MSRV 1.87.

Docs: docs/README.md · CONTRIBUTING.md · SUPPORT.md · SECURITY.md · CODE_OF_CONDUCT.md

Licence

Dual MIT / Apache-2.0, at your option. See NOTICE.

Metadata

Release files for transform-tree 0.0.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for transform-tree 0.0.9
File Size Uploaded Provenance Actions
transform_tree-0.0.9.tar.gz 630.3 kB With provenance Details for transform_tree-0.0.9.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for transform-tree 0.0.9
File Actions
transform_tree-0.0.9-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details for transform_tree-0.0.9-cp314-cp314t-win_amd64.whl
transform_tree-0.0.9-cp314-cp314t-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64 Details for transform_tree-0.0.9-cp314-cp314t-manylinux_2_28_x86_64.whl
transform_tree-0.0.9-cp314-cp314t-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64 Details for transform_tree-0.0.9-cp314-cp314t-manylinux_2_28_aarch64.whl
transform_tree-0.0.9-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details for transform_tree-0.0.9-cp314-cp314t-macosx_11_0_arm64.whl
transform_tree-0.0.9-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details for transform_tree-0.0.9-cp39-abi3-win_amd64.whl
transform_tree-0.0.9-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details for transform_tree-0.0.9-cp39-abi3-musllinux_1_2_x86_64.whl
transform_tree-0.0.9-cp39-abi3-musllinux_1_2_aarch64.whl CPython 3.9 abi3 Linux musl 1.2+ ARM64 Details for transform_tree-0.0.9-cp39-abi3-musllinux_1_2_aarch64.whl
transform_tree-0.0.9-cp39-abi3-manylinux_2_28_x86_64.whl CPython 3.9 abi3 Linux glibc 2.28+ x86-64 Details for transform_tree-0.0.9-cp39-abi3-manylinux_2_28_x86_64.whl
transform_tree-0.0.9-cp39-abi3-manylinux_2_28_aarch64.whl CPython 3.9 abi3 Linux glibc 2.28+ ARM64 Details for transform_tree-0.0.9-cp39-abi3-manylinux_2_28_aarch64.whl
transform_tree-0.0.9-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details for transform_tree-0.0.9-cp39-abi3-macosx_11_0_arm64.whl
transform_tree-0.0.9-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details for transform_tree-0.0.9-cp39-abi3-macosx_10_12_x86_64.whl

Total release size: 8.3 MB

Release files / transform_tree-0.0.9.tar.gz

Download URL transform_tree-0.0.9.tar.gz
Size 630.3 kB
Tags Source
SHA-256 checksum
How to use checksums
b50615c7ae8107c151bb0932e04200f2b383873740e0326e92c0242e26ab8f17
BLAKE2b-256 checksum
How to use checksums
bd1d9fe529294999d80715c3ee3dd8786b5d0dff64f3a9c57f8a53ec240eaf58
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / transform_tree-0.0.9-cp314-cp314t-win_amd64.whl

Download URL transform_tree-0.0.9-cp314-cp314t-win_amd64.whl
Size 583.3 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
6b524d4654a1ca7a0a960ef128f1b0ff4184ec5e8a69b3e3703c19329cbd3f28
BLAKE2b-256 checksum
How to use checksums
5a34058b2caf5bf9d79904837ff60f2554eb4425aad441df796fee47683bf8a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / transform_tree-0.0.9-cp314-cp314t-manylinux_2_28_x86_64.whl

Download URL transform_tree-0.0.9-cp314-cp314t-manylinux_2_28_x86_64.whl
Size 729.0 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
4a4bf6cf283025721046c717f369a5aae33c11df39d3f30b25ec337326912b79
BLAKE2b-256 checksum
How to use checksums
7d0adb7c32654307c9e30a9f76d4967d2b1231a8aced291a73d2b8e00cbffaca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / transform_tree-0.0.9-cp314-cp314t-manylinux_2_28_aarch64.whl

Download URL transform_tree-0.0.9-cp314-cp314t-manylinux_2_28_aarch64.whl
Size 673.5 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
597816829376f3cad53bf3eb97f3197874a4d6c731303cfa3c04f0595891812f
BLAKE2b-256 checksum
How to use checksums
ef0b4e1fe7aee71d3367f054a93a56b33078212bf27c1df8427b49efb82fc253
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / transform_tree-0.0.9-cp314-cp314t-macosx_11_0_arm64.whl

Download URL transform_tree-0.0.9-cp314-cp314t-macosx_11_0_arm64.whl
Size 581.5 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5a706e59600afccde30cac1e23e44288519b03a90308aec84b241ba169821247
BLAKE2b-256 checksum
How to use checksums
50f85110f7627dc4b5a0f60c8e7fb54c5e9ce4fe4ed2e949dc47f1e572e17729
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / transform_tree-0.0.9-cp39-abi3-win_amd64.whl

Download URL transform_tree-0.0.9-cp39-abi3-win_amd64.whl
Size 597.7 kB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
ae76a38be490d33defe04dbe1c63a3d584736d640dcba2d74dcc34e35eccd94a
BLAKE2b-256 checksum
How to use checksums
e9deee91c192c8bf8c7c28ce4388b654df8a3dd0d18851377266e31861d3620b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / transform_tree-0.0.9-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL transform_tree-0.0.9-cp39-abi3-musllinux_1_2_x86_64.whl
Size 951.9 kB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
044c6d88b29481c2226974e3d49c8dcbf1703b5dc6e463660ff4bd645bfd841d
BLAKE2b-256 checksum
How to use checksums
d4fdb954b1713c5e605d12ac48115feb258d11fdd413ffde1d98be4eeb7ef37b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / transform_tree-0.0.9-cp39-abi3-musllinux_1_2_aarch64.whl

Download URL transform_tree-0.0.9-cp39-abi3-musllinux_1_2_aarch64.whl
Size 859.9 kB
Tags CPython 3.9 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
59ef6fdb7f235bd2ba2409a059f641b345c24594bf069f8bbced3d97775fd852
BLAKE2b-256 checksum
How to use checksums
cd087c199de74fd34a3e76353929b2d2d5a1453bede5fcf04d720241634d64f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / transform_tree-0.0.9-cp39-abi3-manylinux_2_28_x86_64.whl

Download URL transform_tree-0.0.9-cp39-abi3-manylinux_2_28_x86_64.whl
Size 737.7 kB
Tags CPython 3.9 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
a2fdb97902f34a85e16c292d934b592558796202e6d3b8f6a7df72fdb0e7052e
BLAKE2b-256 checksum
How to use checksums
7610ea7568f781aaeabc9887a6f747a312a924180c3ba8c6823a9d0aaaca2e70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / transform_tree-0.0.9-cp39-abi3-manylinux_2_28_aarch64.whl

Download URL transform_tree-0.0.9-cp39-abi3-manylinux_2_28_aarch64.whl
Size 682.1 kB
Tags CPython 3.9 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
7e8cb6734403ca37d9f006f56925c01463d2b4f6014bda8cbaecae5d6ca25107
BLAKE2b-256 checksum
How to use checksums
3db7492e23a303405385104dee7929eccf12f558164d2921c9616100253cef0e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / transform_tree-0.0.9-cp39-abi3-macosx_11_0_arm64.whl

Download URL transform_tree-0.0.9-cp39-abi3-macosx_11_0_arm64.whl
Size 592.0 kB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b2907eb9f1c5b30efc6d6d6e0b06726d3090caf351461a05965e464f284ae590
BLAKE2b-256 checksum
How to use checksums
c20ffe474ebfc6b85ebaf929b487997261b7394e96999e3eaf45d50ecd0daff8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / transform_tree-0.0.9-cp39-abi3-macosx_10_12_x86_64.whl

Download URL transform_tree-0.0.9-cp39-abi3-macosx_10_12_x86_64.whl
Size 641.0 kB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
ee59d3bbec1f58d869adaa1e5759983beb36049e3dffe9f53bc0c9bba39857ac
BLAKE2b-256 checksum
How to use checksums
8956211adfbce189249521742218569c910991e19143694fc38f0dfdc0d1d488
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Security for transform-tree 0.0.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 12 files in this release have been uploaded with provenance metadata.

Select from 12 files

Attestation for transform_tree-0.0.9.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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