Skip to main content

Synchronized audio player for Sendspin servers

Project description

sendspin

pypi_badge

Connect to any Sendspin server and instantly turn your computer into an audio target that can participate in multi-room audio.

Sendspin CLI includes three apps:

When using an explicit app (daemon, serve, or player), put it immediately after sendspin. For example, use sendspin daemon --name Kitchen, not sendspin --name Kitchen daemon.

Screenshot of the Sendspin terminal player

A project from the Open Home Foundation

Quick Start

Run directly with uv:

Start client

uvx sendspin

Host a Sendspin party

uvx sendspin serve --demo
uvx sendspin serve /path/to/media.mp3
uvx sendspin serve https://retro.dancewave.online/retrodance.mp3

Installation

With uv:

uv tool install sendspin

Support for Chromecast devices requires installation of extra dependencies:

uv tool install 'sendspin[cast]'

Install as daemon (Linux):

curl -fsSL https://raw.githubusercontent.com/Sendspin/sendspin-cli/refs/heads/main/scripts/systemd/install-systemd.sh | sudo bash

With pip:

pip install sendspin
Install from source
git clone https://github.com/Sendspin-Protocol/sendspin.git
cd sendspin
pip install .

After installation, run:

sendspin

The player will automatically connect to a Sendspin server on your local network and be available for playback.

Updating

To update to the latest version of Sendspin:

If installed with uv:

uv tool upgrade sendspin

If installed with pip:

pip install --upgrade sendspin

If installed as systemd daemon:

The systemd daemon preserves your configuration during updates. Simply upgrade the package:

# Upgrade sendspin (the daemon installer uses uv by default)
uv tool upgrade sendspin

# Or if you installed with pip
pip install --upgrade sendspin

# Restart the service to use the new version
sudo systemctl restart sendspin

Your client name, audio device selection, and other settings in /etc/default/sendspin are preserved during the update.

Note: You do not need to uninstall and reinstall when updating. Your configuration (client name, audio device, delay settings) is stored separately and will be preserved.

Configuration Options

Sendspin stores settings in JSON configuration files that persist between sessions. All command-line arguments can also be set in the config file, with CLI arguments taking precedence over stored settings.

Configuration File

Settings are stored in ~/.config/sendspin/:

  • settings-tui.json - Settings for the interactive TUI client
  • settings-daemon.json - Settings for daemon mode
  • settings-serve.json - Settings for serve mode

Example configuration file (TUI/daemon):

{
  "player_volume": 50,
  "player_muted": false,
  "static_delay_ms": -100.0,
  "last_server_url": "ws://192.168.1.100:8927/sendspin",
  "name": "Living Room",
  "client_id": "sendspin-living-room",
  "audio_device": "2",
  "audio_format": "flac:48000:24:2",
  "log_level": "INFO",
  "listen_port": 8927,
  "use_mpris": true,
  "use_hardware_volume": true,
  "hook_set_volume": "/usr/local/bin/set-avr-volume",
  "manufacturer": "Acme Corp",
  "product_name": "Living Room Speaker"
}

Example configuration file (serve):

{
  "log_level": "INFO",
  "listen_port": 8927,
  "name": "My Sendspin Server",
  "source": "/path/to/music.mp3",
  "clients": ["ws://192.168.1.50:8927/sendspin", "ws://192.168.1.51:8927/sendspin"]
}

Available settings:

Setting Type Mode Description
player_volume integer (0-100) TUI/daemon Player output volume percentage
player_muted boolean TUI/daemon Whether the player is muted
static_delay_ms float TUI/daemon Extra playback delay in milliseconds
last_server_url string TUI/daemon Server URL (used as default for --url)
name string All Friendly name for client or server (--name)
client_id string TUI/daemon Unique client identifier (--id)
audio_device string TUI/daemon Audio device index, name prefix, or ALSA device name (--audio-device)
audio_format string TUI/daemon Preferred audio format (--audio-format, e.g., flac:48000:24:2)
log_level string All Logging level: DEBUG, INFO, WARNING, ERROR, CRITICAL
listen_port integer daemon/serve Listen port (--port, default: 8927)
use_mpris boolean TUI/daemon Enable MPRIS integration (default: true)
use_hardware_volume boolean TUI/daemon Control hardware/system output volume instead of software volume (--hardware-volume true/false). Default: on for daemon (if available), off for TUI
hook_set_volume string TUI/daemon Script to run for external volume control (--hook-set-volume). Receives the effective volume 0-100 as the last argument
hook_start string TUI/daemon Command to run when audio stream starts
hook_stop string TUI/daemon Command to run when audio stream stops
manufacturer string TUI/daemon Manufacturer name reported in the client hello (--manufacturer)
product_name string TUI/daemon Product name reported in the client hello (--product-name); defaults to auto-detected OS/platform name
source string serve Default audio source (file path or URL, ffmpeg input)
source_format string serve ffmpeg container format for audio source
clients array serve Client URLs to connect to (--client)

Settings are automatically saved when changed through the TUI. You can also edit the JSON file directly while the client is not running.

Server Connection

By default, the player automatically discovers Sendspin servers on your local network using mDNS. You can also connect directly to a specific server:

sendspin --url ws://192.168.1.100:8080/sendspin

List available servers on the network:

sendspin servers list

Client Identification

If you want to run multiple players on the same computer, you can specify unique identifiers:

sendspin --id my-client-1 --name "Kitchen"
sendspin --id my-client-2 --name "Bedroom"
  • --id: A unique identifier for this client (optional; defaults to sendspin-<hostname>, useful for running multiple instances on one computer)
  • --name: A friendly name displayed on the server (optional; defaults to hostname)

Audio Output Device Selection

By default, the player uses your system's default audio output device. You can list available devices or select a specific device:

List available audio devices:

sendspin audio-devices list

This displays all audio output devices with their IDs, channel configurations, and sample rates. The default device is marked.

Select a specific audio device by index:

sendspin --audio-device 2

Or by name prefix:

sendspin --audio-device "MacBook"

Or by raw ALSA device name (Linux):

sendspin --audio-device dmixer

This is useful for ALSA plugin devices (dmix, plug, etc.) that may not appear in the numbered PortAudio device list (though they may be shown in the ALSA devices section on Linux). For example, in a dual mono setup where two daemons share a single sound card via dmix, each daemon can target a different ALSA device that routes to a specific channel:

# Room 1: left channel via dmix
sendspin daemon --name "Living Room" --audio-device living_room

# Room 2: right channel via dmix
sendspin daemon --name "Kitchen" --audio-device kitchen

This requires an /etc/asound.conf with dmix and plug devices that route to the appropriate channels. See your ALSA documentation for details on configuring dmix.

This is particularly useful when running sendspin daemon on headless devices or when you want to route audio to a specific output.

Preferred Audio Format

By default, the player negotiates the best audio format with the server from the list of formats supported by your audio device (preferring FLAC over PCM). You can specify a preferred format to prioritize:

sendspin --audio-format flac:48000:24:2

The format string uses the pattern codec:sample_rate:bit_depth:channels:

  • codec: flac (compressed, preferred) or pcm (uncompressed)
  • sample_rate: Sample rate in Hz (e.g., 44100, 48000, 96000)
  • bit_depth: Bits per sample (16 or 24)
  • channels: Channel count (1 for mono, 2 for stereo)

The specified format is validated against the audio device on startup. If the device doesn't support it, the player will exit with an error.

System Volume Control

On Linux with PulseAudio/PipeWire, Sendspin can control your system output volume directly. Volume adjustments (keyboard shortcuts, server commands) change the system volume. The current system volume is read on startup — the player_volume and player_muted settings are only used when hardware volume is disabled.

Hardware volume is on by default in daemon mode and off by default in TUI mode. To override:

sendspin --hardware-volume true             # Enable for TUI
sendspin daemon --hardware-volume false     # Disable for daemon

If your real volume control lives on another device, you can hand volume changes off to a script instead:

sendspin daemon --hook-set-volume /usr/local/bin/set-avr-volume

The script receives the effective output volume as its last argument in the range 0-100. When the player is muted, Sendspin calls the script with 0 and keeps the last logical player_volume persisted separately so unmuting restores the previous level.

Because Sendspin cannot read back external device state from the hook, startup volume comes from the persisted player_volume and player_muted settings. Those settings are updated whenever Sendspin successfully applies a new volume through the hook. When hook_set_volume is configured, it takes precedence over PulseAudio/PipeWire hardware volume control.

Adjusting Playback Delay

The player supports adjusting playback delay to compensate for audio hardware latency or achieve better synchronization across devices.

sendspin --static-delay-ms -100

Note: Based on limited testing, the delay value is typically a negative number (e.g., -100 or -150) to compensate for audio hardware buffering.

Daemon Mode

To run the player as a background daemon without the interactive TUI (useful for headless devices or scripts):

sendspin daemon

The daemon runs in the background and logs status messages to stdout. It accepts the same connection and audio options as the TUI client:

sendspin daemon --name "Kitchen" --audio-device 2

In daemon mode without --url, the client listens for incoming server connections and advertises itself via mDNS. The --name option (or name setting) is used as the friendly name in the mDNS advertisement, making it easy for servers to identify this client on the network.

Use --manufacturer and --product-name to override the device identity reported to the server in the client hello. This is useful when running the daemon in a container or on a custom device where the auto-detected OS name is not meaningful:

sendspin daemon --name "Living Room" --manufacturer "Acme" --product-name "Living Room Speaker"

Hooks

You can run external commands when audio streams start or stop. This is useful for controlling amplifiers, lighting, or other home automation:

sendspin --hook-start "./turn_on_amp.sh" --hook-stop "./turn_off_amp.sh"

Or with inline commands:

sendspin daemon --hook-start "amixer set Master unmute" --hook-stop "amixer set Master mute"

--hook-set-volume is separate from these stream lifecycle hooks. It is intended for external volume controllers and receives the effective output volume as its last argument.

Hooks receive these environment variables:

  • SENDSPIN_EVENT - Event type: "start" or "stop"
  • SENDSPIN_SERVER_ID - Connected server identifier
  • SENDSPIN_SERVER_NAME - Connected server friendly name
  • SENDSPIN_SERVER_URL - Connected server URL. Only available if client initiated the connection to the server.
  • SENDSPIN_CLIENT_ID - Client identifier
  • SENDSPIN_CLIENT_NAME - Client friendly name

Visualizer

The TUI includes a real-time audio spectrum visualizer that displays frequency data received from the server. This uses the experimental visualizer@_draft_r1 role. The spectrum data is computed on the server and sent via sendspin to the TUI.

Toggle it by pressing v in the TUI. Your preference is saved in settings and remembered on next launch.

Debugging & Troubleshooting

If you experience synchronization issues or audio glitches, you can enable detailed logging to help diagnose the problem:

sendspin --log-level DEBUG

This provides detailed information about time synchronization. The output can be helpful when reporting issues.

Install as Daemon (systemd, Linux)

For headless devices like Raspberry Pi, you can install sendspin daemon as a systemd service that starts automatically on boot.

Install:

curl -fsSL https://raw.githubusercontent.com/Sendspin/sendspin-cli/refs/heads/main/scripts/systemd/install-systemd.sh | sudo bash

The installer will:

  • Check and offer to install dependencies (libportaudio2, uv)
  • Install sendspin via uv tool install
  • Prompt for client name and audio device selection
  • Create systemd service and configuration

Manage the service:

sudo systemctl start sendspin    # Start the service
sudo systemctl stop sendspin     # Stop the service
sudo systemctl status sendspin   # Check status
journalctl -u sendspin -f        # View logs

Configuration: Edit /etc/default/sendspin to change client name, audio device, or delay settings.

Uninstall:

curl -fsSL https://raw.githubusercontent.com/Sendspin/sendspin-cli/refs/heads/main/scripts/systemd/uninstall-systemd.sh | sudo bash

Sendspin Party

The Sendspin client includes a mode to enable hosting a Sendspin Party. This will start a Sendspin server playing a specified audio file or URL in a loop, allowing nearby Sendspin clients to connect and listen together. It also hosts a web interface for easy playing and sharing. Fire up that home or office 🔥

# Demo mode
sendspin serve --demo
# Local file
sendspin serve /path/to/media.mp3
# Remote URL
sendspin serve https://retro.dancewave.online/retrodance.mp3
# Without pre-installing Sendspin
uvx sendspin serve /path/to/media.mp3
# Connect to specific clients
sendspin serve --demo --client ws://192.168.1.50:8927/sendspin --client ws://192.168.1.51:8927/sendspin

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

sendspin-6.0.0.tar.gz (106.0 kB view details)

Uploaded Source

Built Distributions

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

sendspin-6.0.0-cp313-cp313-win_amd64.whl (109.6 kB view details)

Uploaded CPython 3.13Windows x86-64

sendspin-6.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (114.0 kB view details)

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

sendspin-6.0.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (115.7 kB view details)

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

sendspin-6.0.0-cp313-cp313-macosx_11_0_arm64.whl (107.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

sendspin-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl (106.9 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

sendspin-6.0.0-cp312-cp312-win_amd64.whl (109.6 kB view details)

Uploaded CPython 3.12Windows x86-64

sendspin-6.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (114.0 kB view details)

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

sendspin-6.0.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (115.7 kB view details)

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

sendspin-6.0.0-cp312-cp312-macosx_11_0_arm64.whl (107.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

sendspin-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl (106.9 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

File details

Details for the file sendspin-6.0.0.tar.gz.

File metadata

  • Download URL: sendspin-6.0.0.tar.gz
  • Upload date:
  • Size: 106.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sendspin-6.0.0.tar.gz
Algorithm Hash digest
SHA256 6e68e98003403e7c786ccb53bd4b2071f2fd67c3a66f5e775949927f23b0ec6c
MD5 677ec7802f1baf1cd7db4b98700f1b82
BLAKE2b-256 9f2b68acfaf9d71ce2b3ef4bce9844c83b95d4130e65776f5520d5e80f9f3091

See more details on using hashes here.

Provenance

The following attestation bundles were made for sendspin-6.0.0.tar.gz:

Publisher: release.yml on Sendspin/sendspin-cli

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

File details

Details for the file sendspin-6.0.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: sendspin-6.0.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 109.6 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 sendspin-6.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0c5b72ec2142300afbeb58e56739651147f24f709f077389486ded65af5c3f11
MD5 4afdd96a3af2c14617d909e6cce44b8b
BLAKE2b-256 340d859e8b1ad76abbdbf50358048110ae7a3f56813812403a20288d6fea50b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for sendspin-6.0.0-cp313-cp313-win_amd64.whl:

Publisher: release.yml on Sendspin/sendspin-cli

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

File details

Details for the file sendspin-6.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sendspin-6.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c5a3586c21f7720e752c0c3e9645c2d84c1beb230c7bce7810577f271b91e716
MD5 05cab27e2162c55a8974e44010032538
BLAKE2b-256 d651071a27491658e289e3c5b2fe2f92e3ef0766cb090189a554b8aa68651e75

See more details on using hashes here.

Provenance

The following attestation bundles were made for sendspin-6.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on Sendspin/sendspin-cli

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

File details

Details for the file sendspin-6.0.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for sendspin-6.0.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 89266c1999a50525da30f023ec4e5c66096b7130b13b2ef2ec9fe90ecf88f919
MD5 51efa9eab2b6af8574a4146e1de73fff
BLAKE2b-256 600c48511d84a974f551e9171ed1d56b66387f93a2bff99b62242d06bb28e190

See more details on using hashes here.

Provenance

The following attestation bundles were made for sendspin-6.0.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: release.yml on Sendspin/sendspin-cli

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

File details

Details for the file sendspin-6.0.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sendspin-6.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0b7590da641746ace33d2d7d47bd40461fe7705120d996c57e5972a1069371ec
MD5 313adbcbbbc96b549bae05ac73c2bd26
BLAKE2b-256 eee8e60bd76df1976eb2dba7b1c5dd52c89f68ac687661deb933d10bbf6049ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for sendspin-6.0.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on Sendspin/sendspin-cli

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

File details

Details for the file sendspin-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for sendspin-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b2fae56258b96127905083cee500f5691cba09adff4d9f5875a53048230deeb8
MD5 e91f3bbcc22f996f205d087925e8f316
BLAKE2b-256 a12bb43bb5fe0edec5877ea54539beecba3a2cceb3f4be8ab8d9fbd769dad1f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for sendspin-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: release.yml on Sendspin/sendspin-cli

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

File details

Details for the file sendspin-6.0.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: sendspin-6.0.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 109.6 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 sendspin-6.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1705d0ebdea88113b86f34768f0decea1aabb08ba88d728c2c84be3e23876826
MD5 e65a9a37c984fdd01cdec2d0a9b036d3
BLAKE2b-256 6a5914e80c50436ea8607e31c194c4236e2df60268549bed56763168c7c50c97

See more details on using hashes here.

Provenance

The following attestation bundles were made for sendspin-6.0.0-cp312-cp312-win_amd64.whl:

Publisher: release.yml on Sendspin/sendspin-cli

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

File details

Details for the file sendspin-6.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sendspin-6.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 55e93a4b7e1fce17ddb8ca9cd75c92817d5561adf32cbe0ebbf16a8d493f046a
MD5 f7c83e0d145187733553ccd6354a0da1
BLAKE2b-256 83518cd2a19cf9456906f0786f5c43fc8b3bcc961b7d3c3286d65c81f680141e

See more details on using hashes here.

Provenance

The following attestation bundles were made for sendspin-6.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on Sendspin/sendspin-cli

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

File details

Details for the file sendspin-6.0.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for sendspin-6.0.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 28712ed17a2feafc643fe836d68ee1eb5f040299b3e868171a7543386da38682
MD5 09f18043ed663ed08cc259f6fe8dbc2e
BLAKE2b-256 6dd57cbcc85fb8539fb010beffcf08c0d4e01b16baf9fa5999b7c43224b4e1cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for sendspin-6.0.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: release.yml on Sendspin/sendspin-cli

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

File details

Details for the file sendspin-6.0.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sendspin-6.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dd2904da392e4d9d970e49fbb6fb693b0ce1375a7d71a9ae51ba8b3f03f82221
MD5 b58a3095f0f3bfbe25a1c2b4fc14c7aa
BLAKE2b-256 27e705a86d58dda51a5b5ed81fcc3879c6eb973073cf1f276d49d1f6fa8d0f61

See more details on using hashes here.

Provenance

The following attestation bundles were made for sendspin-6.0.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on Sendspin/sendspin-cli

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

File details

Details for the file sendspin-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for sendspin-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 6eac5fcecec4828fcccfb4af2b75a72ca60510a8e01d6adcd7a8949525e34104
MD5 699dc297796553a133023ccce1eef147
BLAKE2b-256 91bd9dee81c1ef831d9b2cea9c6e4dfbc419f62c47a32758897f385200ad3afc

See more details on using hashes here.

Provenance

The following attestation bundles were made for sendspin-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: release.yml on Sendspin/sendspin-cli

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