Skip to main content

cypd: Cython wrapper for libpd

A Cython-based Python wrapper for libpd (Pure Data as an embeddable audio library) with built-in audio support via miniaudio.

Features

  • Full libpd API: Comprehensive access to libpd functionality including patches, messaging, arrays, MIDI, and callbacks
  • Built-in audio: Integrated miniaudio backend for easy audio playback
  • Flexible architecture: Use the built-in audio or integrate your own audio system
  • Thread-safe audio: Audio processing runs in a separate thread with proper nogil handling
  • Modern build system: Uses scikit-build-core with CMake

Installation

pip install cypd

Build from source

Prerequisites

  • Python 3.10+
  • uv (recommended) or pip
  • CMake 3.15+
  • C compiler (clang/gcc)
# Clone the repository
git clone https://github.com/shakfu/cypd.git
cd cypd

# Build libpd and miniaudio dependencies
./scripts/setup.sh

# Install with uv
uv sync

# Or install with pip
pip install -e .

Quick Start

Using the built-in audio

from cypd import audio

# Play a patch for 4 seconds
audio.play("my_patch.pd", "/path/to/patches", duration_ms=4000)

Manual control

import cypd
from cypd import audio

# Initialize libpd
cypd.init()
cypd.init_audio(1, 2, 44100)  # 1 input, 2 outputs, 44100 Hz

# Initialize audio backend
audio.init_audio(44100, 1, 2)

# Open a patch
patch_id = cypd.open_patch("my_patch.pd", "/path/to/patches")

# Start audio and enable DSP
audio.start()
cypd.dsp(True)

# Let it play
audio.sleep(4000)  # 4 seconds

# Cleanup
cypd.dsp(False)
audio.stop()
audio.terminate()
cypd.close_patch(patch_id)

Sending messages to Pure Data

import cypd

cypd.init()
patch_id = cypd.open_patch("my_patch.pd", ".")

# Send a bang
cypd.send_bang("my_receiver")

# Send a float
cypd.send_float("frequency", 440.0)

# Send a symbol
cypd.send_symbol("my_receiver", "hello")

# Send a list
cypd.send_list("my_receiver", 1, 2, 3, "foo", "bar")

# Send a typed message
cypd.send_message("my_receiver", "set", 1, 2, 3)

cypd.close_patch(patch_id)

Receiving messages from Pure Data

import cypd

def my_float_callback(receiver, value):
    print(f"Received float {value} from {receiver}")

def my_bang_callback(receiver):
    print(f"Received bang from {receiver}")

cypd.init()
cypd.set_float_callback(my_float_callback)
cypd.set_bang_callback(my_bang_callback)

# Subscribe to a sender
cypd.subscribe("my_sender")

# ... run your patch ...

cypd.unsubscribe("my_sender")

MIDI

import cypd

cypd.init()
patch_id = cypd.open_patch("my_synth.pd", ".")
cypd.init_audio(1, 2, 44100)

# Send MIDI note on (channel, pitch, velocity)
cypd.noteon(0, 60, 100)  # Middle C, velocity 100

# Send MIDI note off
cypd.noteon(0, 60, 0)  # velocity 0 = note off

# Control change
cypd.controlchange(0, 1, 64)  # Modulation wheel

# Pitch bend
cypd.pitchbend(0, 0)  # Center position

cypd.close_patch(patch_id)

Array access

import cypd

cypd.init()
patch_id = cypd.open_patch("with_array.pd", ".")

# Get array size
size = cypd.array_size("my_array")
print(f"Array size: {size}")

# Resize array
cypd.resize_array("my_array", 1024)

cypd.close_patch(patch_id)

API Reference

Initialization

  • init() - Initialize libpd
  • init_audio(in_channels, out_channels, sample_rate) - Initialize audio rendering
  • release() - Shutdown libpd and release resources

Patches

  • open_patch(name, dir) - Open a patch, returns patch ID
  • close_patch(patch_id) - Close a patch
  • add_to_search_path(path) - Add to abstraction search path
  • clear_search_path() - Clear the search path

Audio

  • get_blocksize() - Get pd's block size (always 64)
  • dsp(on) - Enable/disable DSP processing

Messaging

  • send_bang(receiver) - Send a bang
  • send_float(receiver, value) - Send a float
  • send_symbol(receiver, symbol) - Send a symbol
  • send_list(receiver, *args) - Send a list
  • send_message(receiver, msg, *args) - Send a typed message
  • subscribe(source) - Subscribe to messages from a sender
  • unsubscribe(source) - Unsubscribe from a sender
  • exists(receiver) - Check if a receiver exists

Callbacks

  • set_print_callback(func) - Set print hook
  • set_bang_callback(func) - Set bang receive hook
  • set_float_callback(func) - Set float receive hook
  • set_symbol_callback(func) - Set symbol receive hook
  • set_list_callback(func) - Set list receive hook
  • set_message_callback(func) - Set typed message receive hook

MIDI

  • noteon(channel, pitch, velocity) - Send note on
  • controlchange(channel, controller, value) - Send control change
  • programchange(channel, value) - Send program change
  • pitchbend(channel, value) - Send pitch bend
  • aftertouch(channel, value) - Send aftertouch
  • polyaftertouch(channel, pitch, value) - Send poly aftertouch

Arrays

  • array_size(name) - Get array size
  • resize_array(name, size) - Resize an array

Audio Module (cypd.audio)

  • init_audio(sample_rate, channels_in, channels_out) - Initialize miniaudio
  • start() - Start audio playback
  • stop() - Stop audio playback
  • terminate() - Shutdown audio
  • is_running() - Check if audio is running
  • sleep(milliseconds) - Sleep for duration
  • play(patch, dir, duration_ms, ...) - Convenience function to play a patch
  • get_version() - Get miniaudio version string

Development

# Run tests
make test

# Build
make build

# Clean
make clean

Architecture

The project consists of two Cython extension modules:

  • _libpd: Core libpd wrapper providing the full API
  • _audio: Miniaudio-based audio backend

The _audio module obtains a function pointer to libpd_process_float from _libpd at runtime, ensuring both modules share the same libpd instance (avoiding issues with static library symbol duplication).

License

See LICENSE file.

Acknowledgments

  • libpd - Pure Data as an embeddable library
  • miniaudio - Single-file audio playback and capture library
  • Pure Data - The original visual programming language for audio

Metadata

Release files for cypd 0.1.0

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

Built distributions (wheels)

Table of built distributions (wheels) for cypd 0.1.0
File
cypd-0.1.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
cypd-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
cypd-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
cypd-0.1.0-cp314-cp314-macosx_15_0_arm64.whl CPython 3.14 CPython 3.14 macOS 15.0+ ARM64 Details
cypd-0.1.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
cypd-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
cypd-0.1.0-cp313-cp313-macosx_15_0_arm64.whl CPython 3.13 CPython 3.13 macOS 15.0+ ARM64 Details
cypd-0.1.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
cypd-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
cypd-0.1.0-cp312-cp312-macosx_15_0_arm64.whl CPython 3.12 CPython 3.12 macOS 15.0+ ARM64 Details
cypd-0.1.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
cypd-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
cypd-0.1.0-cp311-cp311-macosx_15_0_arm64.whl CPython 3.11 CPython 3.11 macOS 15.0+ ARM64 Details
cypd-0.1.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
cypd-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
cypd-0.1.0-cp310-cp310-macosx_15_0_arm64.whl CPython 3.10 CPython 3.10 macOS 15.0+ ARM64 Details
cypd-0.1.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
cypd-0.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
cypd-0.1.0-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details

Total release size: 19.5 MB

Release files / cypd-0.1.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL cypd-0.1.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
2b86964ff33744943bd56bf67fccf2d487ad64a7ea6dd59f6b1bb2b216869a44
BLAKE2b-256 checksum
How to use checksums
79fbb9b0c9ff6bb192847ae2deb7b0ed418a883a31d2f969b4668bcdd2969487
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL cypd-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 884.8 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c99c9fbb4e7393b1f3df416ac4eb432cf19f7f71146804f8778a91ef50bb66dc
BLAKE2b-256 checksum
How to use checksums
a8e82a1f853dce1157718283fd44423023b7ec639e41d153f8d375f98c575502
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL cypd-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3914e483736fb1692ad65959bb580771e623265ec76265dd3f760510114872c3
BLAKE2b-256 checksum
How to use checksums
834c2d01be8f8933e80cf1f94c53a61e0cddbe70d57bdfa7b911ba8bf6338b9d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp314-cp314-macosx_15_0_arm64.whl

Download URL cypd-0.1.0-cp314-cp314-macosx_15_0_arm64.whl
Size 893.0 kB
Tags CPython 3.14 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
1c6860e4b9ff5ddbed1565ca4e86701698f489efca32ac368f5b76a5154d7f43
BLAKE2b-256 checksum
How to use checksums
5d44fb39290f29650115b23957592c6355b2452ade613a938595c3b48ce114d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL cypd-0.1.0-cp314-cp314-macosx_11_0_arm64.whl
Size 871.6 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e6f21613aeaf990456c4d8e18742fa141af7c5cdbc92279be0cd67cfca6d27d7
BLAKE2b-256 checksum
How to use checksums
1ade4f266b51ddcaa7079af9f75415cf922709132fc45e76a2b9271b26dd1f5f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL cypd-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f9fb28c4ebac48d6977979693b812b959ac33c369110a5743564d0edd434953a
BLAKE2b-256 checksum
How to use checksums
03f236ff770caab57102577c9015a4037f9ca1d13cc9be5cfffa480e383a1576
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp313-cp313-macosx_15_0_arm64.whl

Download URL cypd-0.1.0-cp313-cp313-macosx_15_0_arm64.whl
Size 891.5 kB
Tags CPython 3.13 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
6d08a5f4f1ae56b4951ebf5564a0fccd7be0e854b9961a1d6486ccd13605de82
BLAKE2b-256 checksum
How to use checksums
51f3d100798bc5813fdcb0d033e4123336f89a8dc04811a8b12468e517301f17
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL cypd-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Size 870.8 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f99c83b6bab4e798bc67acb46b0d3e0db969a7466dbce52957f715820021b406
BLAKE2b-256 checksum
How to use checksums
2b569477252079815197a585da691a36dc84d95ed2bd8c5c1ff455ab378dcf2b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL cypd-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
99f958b19a1d0f97b942b86337d3a07bba7e722e10858fa769528f1dd9b5c827
BLAKE2b-256 checksum
How to use checksums
6ddd26d786b436d672be59d3990165b9657918a7a834edd705d19e00c6fdaf1e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp312-cp312-macosx_15_0_arm64.whl

Download URL cypd-0.1.0-cp312-cp312-macosx_15_0_arm64.whl
Size 892.7 kB
Tags CPython 3.12 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
5425501688aed402fa1bb8df230f36f3ac409ab08fcab6ed2900b0c355a437f6
BLAKE2b-256 checksum
How to use checksums
35f8e76bef15b95714c6e2f8ce5446e498b163711794f30fbb4e9ddaa43d5af2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL cypd-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Size 872.3 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b9466de61b91088145e7daca30f5d06398b463fdef2c9233493f73b6ba14931a
BLAKE2b-256 checksum
How to use checksums
083716241b49422dab72e46ebccbafd34b95f3cd6a0ddf95fb7e2295a15f5c53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL cypd-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f7d75889dcf658b9cb3c8879abb6f2ab462630877e806844b8401429cbe4acbf
BLAKE2b-256 checksum
How to use checksums
f522c548719060bbfb022570b8236aba828b1bcd5a41814f68eb89acf6fa8802
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp311-cp311-macosx_15_0_arm64.whl

Download URL cypd-0.1.0-cp311-cp311-macosx_15_0_arm64.whl
Size 892.9 kB
Tags CPython 3.11 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
7dd3553996c8340ad005d3b7cadd6696105bf09116fc5f614eec6ff8e8bb3bc0
BLAKE2b-256 checksum
How to use checksums
ae187d4d9d91e522532668bfbe7a1725f320dc4f7cee35e65cb9532db55f1e32
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL cypd-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Size 875.2 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c0d144c69365d06cc8e682fd14cf85f04898943a661942616cbe9d79f2c85533
BLAKE2b-256 checksum
How to use checksums
c901b86c4c36d2747bc65544d1409300f49bede735ed56236d51135ee98cab0f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL cypd-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
123b6cf3343485a1df21d723d90a589d7466ae3f8096735323bf10b2efeef82e
BLAKE2b-256 checksum
How to use checksums
b46082f5061ed38b18fb033286210f44045b63909b4063f49550cab6daaf0d4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp310-cp310-macosx_15_0_arm64.whl

Download URL cypd-0.1.0-cp310-cp310-macosx_15_0_arm64.whl
Size 893.3 kB
Tags CPython 3.10 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
57b7b11b6f3a682e25c55abef6fc01e24e8115644898184ffed3847ed84d77cf
BLAKE2b-256 checksum
How to use checksums
1c38c345c0bc5374d4bc9040a5006dbc652c8ce6b2536d538b8482fcff9e8323
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL cypd-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Size 875.5 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ec695e0f2f927aab13556529376d75e3d2ac8a4e579f6737d439797340a1dedf
BLAKE2b-256 checksum
How to use checksums
253cf79760e17903758be2eb504ae0cd2109671f06c2c06751b4f65590b43ed4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL cypd-0.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
cd343b0f5dc339074024b8af1f35c875c66b8de93016864a9ed3264a84e135ee
BLAKE2b-256 checksum
How to use checksums
060c656c664538f7cb964529e3b89d04b526fcbf2d8a92f5540418d7e913d76a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / cypd-0.1.0-cp39-cp39-macosx_11_0_arm64.whl

Download URL cypd-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
Size 875.7 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
66f58c109e151d7c73c2e5caeeeda52db81f3624e93151ee57228bc2a68f8590
BLAKE2b-256 checksum
How to use checksums
54d7abbbf1317cf67d8a9bad334ae81cc2d22813b5485744fa9513e97c7462f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Security for cypd 0.1.0

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

19 release files No provenance

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