Skip to main content

A minimal juce-based plugin host using nanobind

Project description

minihost

minihost is a headless audio plugin host for VST3, AudioUnit, and LV2 plugins. Built on JUCE, it provides both a C API for embedding in audio applications and a Python API via nanobind.

Features

  • Load VST3 plugins (macOS, Windows, Linux)
  • Load AudioUnit plugins (macOS only)
  • Load LV2 plugins (macOS, Windows, Linux)
  • Headless mode (default) - no GUI dependencies, uses JUCE's juce_audio_processors_headless module
  • Plugin chaining - connect multiple plugins in series (synth -> reverb -> limiter)
  • Audio file I/O via miniaudio -- read WAV/FLAC/MP3/Vorbis, write WAV (16/24/32-bit)
  • Real-time audio playback via miniaudio (cross-platform)
  • Real-time MIDI I/O via libremidi (cross-platform)
  • Virtual MIDI ports - create named ports that DAWs can connect to (macOS, Linux)
  • Standalone MIDI input - monitor raw MIDI messages without a plugin (MidiIn class)
  • Process audio with sample-accurate parameter automation
  • Single and double precision processing
  • MIDI input/output support
  • Transport info for tempo-synced plugins
  • State save/restore for presets and per-program state
  • Thread-safe parameter access
  • Change notifications (latency, parameter info, program, non-parameter state)
  • Parameter gestures for automation bracketing
  • Bus layout validation and sidechain support
  • Track name/color metadata forwarding to plugins
  • Latency and tail time reporting

Requirements

  • CMake 3.20+
  • C++17 compiler
  • JUCE framework (automatically downloaded if not present)

Platform-specific

  • macOS: Xcode command line tools
  • Windows: Visual Studio 2019+ or MinGW
  • Linux: Install the following development libraries:
    sudo apt install libasound2-dev libfreetype-dev libfontconfig1-dev \
        libwebkit2gtk-4.1-dev libgtk-3-dev libgl-dev libcurl4-openssl-dev
    

Building

macOS / Linux

# Clone the repository
git clone https://github.com/shakfu/minihost.git
cd minihost

# Build (JUCE will be downloaded automatically)
make

# Or with a custom JUCE path
cmake -B build -DJUCE_PATH=/path/to/JUCE
cmake --build build

# Disable headless mode (enables GUI support)
cmake -B build -DMINIHOST_HEADLESS=OFF
cmake --build build

Windows

# Clone the repository
git clone https://github.com/shakfu/minihost.git
cd minihost

# Download JUCE
python scripts/download_juce.py

# Configure and build
cmake -B build
cmake --build build --config Release

JUCE Setup

JUCE is downloaded automatically by make (macOS/Linux). You can also download it manually:

# Cross-platform (recommended) - works on Windows, macOS, Linux
python scripts/download_juce.py

# Unix only (bash)
./scripts/download_juce.sh

To use a different version or existing installation:

# Download specific version (macOS/Linux)
JUCE_VERSION=8.0.6 python scripts/download_juce.py

# Download specific version (Windows PowerShell)
$env:JUCE_VERSION="8.0.6"; python scripts/download_juce.py

# Or point to existing JUCE
cmake -B build -DJUCE_PATH=/path/to/your/JUCE

Command Line Interface

The minihost command provides a CLI for common plugin operations:

# Install (from source)
uv sync

# Available commands
minihost --help
usage: minihost [-h] [-r SAMPLE_RATE] [-b BLOCK_SIZE]
                {scan,info,params,midi,play,process} ...

Audio plugin hosting CLI

positional arguments:
  {scan,info,params,midi,play,process}
                        Commands
    scan                Scan directory for plugins
    info                Show plugin info
    params              List plugin parameters
    midi                List or monitor MIDI ports
    play                Play plugin with real-time audio/MIDI
    process             Process audio through plugin (offline)

options:
  -h, --help            show this help message and exit
  -r, --sample-rate SAMPLE_RATE
                        Sample rate in Hz (default: 48000)
  -b, --block-size BLOCK_SIZE
                        Block size in samples (default: 512)

Commands

minihost info - Show plugin info

minihost info /path/to/plugin.vst3          # full info (loads plugin)
minihost info /path/to/plugin.vst3 --probe  # lightweight metadata only
minihost info /path/to/plugin.vst3 --json   # JSON output

By default shows full runtime details (sample rate, channels, latency, buses, presets). Use --probe for fast metadata-only mode without fully loading the plugin.

minihost scan - Scan directory for plugins

minihost scan /Library/Audio/Plug-Ins/VST3/
minihost scan ~/Music/Plugins --json

minihost params - List plugin parameters

minihost params /path/to/plugin.vst3
minihost params /path/to/plugin.vst3 --json

minihost midi - List or monitor MIDI ports

minihost midi                          # list all MIDI ports
minihost midi --json                   # list as JSON
minihost midi -m 0                     # monitor MIDI input port 0
minihost midi --virtual-midi "Monitor" # create virtual port and monitor

minihost play - Play plugin with real-time audio/MIDI

# Connect to MIDI input port 0
minihost play /path/to/synth.vst3 --midi 0

# Create a virtual MIDI port (macOS/Linux)
minihost play /path/to/synth.vst3 --virtual-midi "My Synth"

minihost process - Process audio/MIDI offline

# Process audio through effect
minihost process /path/to/effect.vst3 -i input.wav -o output.wav

# With parameter control
minihost process /path/to/effect.vst3 -i input.wav -o output.wav --param "Mix:0.5"

# Render MIDI through synth
minihost process /path/to/synth.vst3 -m song.mid -o output.wav --tail 3.0

# With preset and bit depth
minihost process /path/to/synth.vst3 -m song.mid -o output.wav --preset 5 --bit-depth 16

# Sidechain processing (second -i is sidechain)
minihost process /path/to/compressor.vst3 -i main.wav -i sidechain.wav -o output.wav

Global Options

Option Description
-r, --sample-rate Sample rate in Hz (default: 48000)
-b, --block-size Block size in samples (default: 512)

Python API

uv sync
import numpy as np
import minihost

plugin = minihost.Plugin("/path/to/plugin.vst3", sample_rate=48000)

input_audio = np.zeros((2, 512), dtype=np.float32)
output_audio = np.zeros((2, 512), dtype=np.float32)
plugin.process(input_audio, output_audio)

Real-time Audio Playback

import minihost
import time

plugin = minihost.Plugin("/path/to/synth.vst3", sample_rate=48000)

# Use as context manager for automatic start/stop
with minihost.AudioDevice(plugin) as audio:
    # Plugin is now producing audio through speakers
    # Send MIDI programmatically
    audio.send_midi(0x90, 60, 100)  # Note on: C4, velocity 100
    time.sleep(1)
    audio.send_midi(0x80, 60, 0)    # Note off
    time.sleep(0.5)

# Or manual control
audio = minihost.AudioDevice(plugin)
audio.start()
audio.send_midi(0x90, 64, 80)  # E4 note on
time.sleep(0.5)
audio.send_midi(0x80, 64, 0)   # E4 note off
audio.stop()

Real-time MIDI I/O

import minihost

# Enumerate available MIDI ports
inputs = minihost.midi_get_input_ports()
outputs = minihost.midi_get_output_ports()
print(f"MIDI Inputs: {inputs}")
print(f"MIDI Outputs: {outputs}")

# Connect MIDI when creating AudioDevice
with minihost.AudioDevice(plugin, midi_input_port=0) as audio:
    # MIDI from port 0 is now routed to the plugin
    pass

# Or connect dynamically
audio = minihost.AudioDevice(plugin)
audio.connect_midi_input(0)
audio.start()
# ...
audio.disconnect_midi_input()
audio.stop()

# Create virtual MIDI ports (appear in system MIDI, DAWs can connect)
audio = minihost.AudioDevice(plugin)
audio.create_virtual_midi_input("minihost Input")
audio.create_virtual_midi_output("minihost Output")
audio.start()
# Other apps can now send MIDI to "minihost Input"
# and receive MIDI from "minihost Output"

Standalone MIDI Input

Monitor MIDI messages without loading a plugin:

import minihost

def on_midi(data: bytes):
    status = data[0]
    if status & 0xF0 == 0x90 and data[2] > 0:
        print(f"Note On: {data[1]} vel={data[2]}")

# Open hardware MIDI port
with minihost.MidiIn.open(0, on_midi) as midi_in:
    input("Press Enter to stop...\n")

# Or create a virtual MIDI port
with minihost.MidiIn.open_virtual("My Monitor", on_midi) as midi_in:
    input("Press Enter to stop...\n")

Audio File I/O

import minihost

# Read audio files (WAV, FLAC, MP3, Vorbis)
data, sample_rate = minihost.read_audio("input.wav")
# data shape: (channels, samples), dtype: float32

# Write WAV files (16, 24, or 32-bit)
minihost.write_audio("output.wav", data, sample_rate, bit_depth=24)

# Get file info without decoding
info = minihost.get_audio_info("song.wav")
print(f"{info['channels']}ch, {info['sample_rate']}Hz, {info['duration']:.2f}s")

MIDI File Read/Write

import minihost

# Create a new MIDI file
mf = minihost.MidiFile()
mf.ticks_per_quarter = 480

# Add events
mf.add_tempo(0, 0, 120.0)  # 120 BPM at tick 0
mf.add_note_on(0, 0, 0, 60, 100)    # C4 note on at tick 0
mf.add_note_off(0, 480, 0, 60, 0)   # C4 note off at tick 480

# Save to file
mf.save("output.mid")

# Load existing MIDI file
mf2 = minihost.MidiFile()
mf2.load("input.mid")

# Read events
events = mf2.get_events(0)  # Get events from track 0
for event in events:
    if event['type'] == 'note_on':
        print(f"Note {event['pitch']} vel {event['velocity']} at {event['seconds']:.2f}s")

MIDI File Rendering

Render MIDI files through plugins to produce audio output:

import minihost

plugin = minihost.Plugin("/path/to/synth.vst3", sample_rate=48000)

# Render to numpy array
audio = minihost.render_midi(plugin, "song.mid")
print(f"Rendered {audio.shape[1] / 48000:.2f} seconds of audio")

# Render directly to WAV file
samples = minihost.render_midi_to_file(plugin, "song.mid", "output.wav", bit_depth=24)

# Stream blocks for large files or real-time processing
for block in minihost.render_midi_stream(plugin, "song.mid", block_size=512):
    # Process each block (shape: channels, block_size)
    pass

# Fine-grained control with MidiRenderer class
renderer = minihost.MidiRenderer(plugin, "song.mid")
print(f"Duration: {renderer.duration_seconds:.2f}s")

while not renderer.is_finished:
    block = renderer.render_block()
    print(f"Progress: {renderer.progress:.1%}")

Plugin Chaining

Chain multiple plugins together for serial processing:

import minihost
import time

# Load plugins (all must have same sample rate)
synth = minihost.Plugin("/path/to/synth.vst3", sample_rate=48000)
reverb = minihost.Plugin("/path/to/reverb.vst3", sample_rate=48000)
limiter = minihost.Plugin("/path/to/limiter.vst3", sample_rate=48000)

# Create chain
chain = minihost.PluginChain([synth, reverb, limiter])
print(f"Total latency: {chain.latency_samples} samples")
print(f"Tail length: {chain.tail_seconds:.2f} seconds")

# Real-time playback through chain
with minihost.AudioDevice(chain) as audio:
    audio.send_midi(0x90, 60, 100)  # Note on to synth
    time.sleep(2)
    audio.send_midi(0x80, 60, 0)    # Note off
    time.sleep(1)  # Let reverb tail fade

# Offline processing
import numpy as np
input_audio = np.zeros((2, 512), dtype=np.float32)
output_audio = np.zeros((2, 512), dtype=np.float32)
chain.process(input_audio, output_audio)

# Process with MIDI (MIDI goes to first plugin)
midi_events = [(0, 0x90, 60, 100)]
chain.process_midi(input_audio, output_audio, midi_events)

# Render MIDI file through chain
audio = minihost.render_midi(chain, "song.mid")
minihost.render_midi_to_file(chain, "song.mid", "output.wav")

# Access individual plugins in chain
for i in range(chain.num_plugins):
    plugin = chain.get_plugin(i)
    print(f"Plugin {i}: {plugin.num_params} params")

C API Usage

#include "minihost.h"

// Load a plugin
char err[256];
MH_Plugin* plugin = mh_open("/path/to/plugin.vst3",
                            48000.0,  // sample rate
                            512,      // max block size
                            2, 2,     // in/out channels
                            err, sizeof(err));

// Process audio
float* inputs[2] = { in_left, in_right };
float* outputs[2] = { out_left, out_right };
mh_process(plugin, inputs, outputs, 512);

// Process with MIDI
MH_MidiEvent midi[] = {
    { 0, 0x90, 60, 100 },   // Note on at sample 0
    { 256, 0x80, 60, 0 }    // Note off at sample 256
};
mh_process_midi(plugin, inputs, outputs, 512, midi, 2);

// Parameter control
int num_params = mh_get_num_params(plugin);
float value = mh_get_param(plugin, 0);
mh_set_param(plugin, 0, 0.5f);

// State save/restore
int size = mh_get_state_size(plugin);
void* state = malloc(size);
mh_get_state(plugin, state, size);
mh_set_state(plugin, state, size);

// Cleanup
mh_close(plugin);

Real-time Audio Playback

#include "minihost_audio.h"

// Open audio device for real-time playback
MH_AudioConfig config = { .sample_rate = 48000, .buffer_frames = 512 };
MH_AudioDevice* audio = mh_audio_open(plugin, &config, err, sizeof(err));

// Start playback
mh_audio_start(audio);

// Plugin is now producing audio through speakers
// Send MIDI, adjust parameters, etc.

// Stop and cleanup
mh_audio_stop(audio);
mh_audio_close(audio);
mh_close(plugin);

Real-time MIDI I/O

#include "minihost_midi.h"

// Enumerate available MIDI ports
int num_inputs = mh_midi_get_num_inputs();
int num_outputs = mh_midi_get_num_outputs();

for (int i = 0; i < num_inputs; i++) {
    char name[256];
    mh_midi_get_input_name(i, name, sizeof(name));
    printf("MIDI Input %d: %s\n", i, name);
}

// Connect MIDI to audio device
MH_AudioConfig config = {
    .sample_rate = 48000,
    .midi_input_port = 0,   // Connect to first MIDI input
    .midi_output_port = -1  // No MIDI output
};
MH_AudioDevice* audio = mh_audio_open(plugin, &config, err, sizeof(err));

// Or connect/disconnect dynamically
mh_audio_connect_midi_input(audio, 1);
mh_audio_disconnect_midi_input(audio);

// Create virtual MIDI ports (appear in system MIDI, DAWs can connect)
mh_audio_create_virtual_midi_input(audio, "minihost Input");
mh_audio_create_virtual_midi_output(audio, "minihost Output");

Plugin Chaining

Chain multiple plugins together for processing (e.g., synth -> reverb -> limiter):

#include "minihost_chain.h"

// Load plugins
MH_Plugin* synth = mh_open("/path/to/synth.vst3", 48000, 512, 0, 2, err, sizeof(err));
MH_Plugin* reverb = mh_open("/path/to/reverb.vst3", 48000, 512, 2, 2, err, sizeof(err));
MH_Plugin* limiter = mh_open("/path/to/limiter.vst3", 48000, 512, 2, 2, err, sizeof(err));

// Create chain (all plugins must have same sample rate)
MH_Plugin* plugins[] = { synth, reverb, limiter };
MH_PluginChain* chain = mh_chain_create(plugins, 3, err, sizeof(err));

// Get combined latency
int latency = mh_chain_get_latency_samples(chain);

// Process audio through chain
float* inputs[2] = { in_left, in_right };
float* outputs[2] = { out_left, out_right };
mh_chain_process(chain, inputs, outputs, 512);

// Process with MIDI (MIDI goes to first plugin only)
MH_MidiEvent midi[] = { { 0, 0x90, 60, 100 } };
mh_chain_process_midi_io(chain, inputs, outputs, 512, midi, 1, NULL, 0, NULL);

// Real-time playback through chain
MH_AudioConfig config = { .sample_rate = 48000, .buffer_frames = 512 };
MH_AudioDevice* audio = mh_audio_open_chain(chain, &config, err, sizeof(err));
mh_audio_start(audio);
// ...
mh_audio_stop(audio);
mh_audio_close(audio);

// Cleanup
mh_chain_close(chain);  // Does not close individual plugins
mh_close(synth);
mh_close(reverb);
mh_close(limiter);

Audio File I/O

Read and write audio files without external dependencies:

#include "minihost_audiofile.h"

// Read any supported format (WAV, FLAC, MP3, Vorbis)
char err[1024];
MH_AudioData* audio = mh_audio_read("input.flac", err, sizeof(err));
if (audio) {
    printf("Channels: %u, Frames: %u, Rate: %u\n",
           audio->channels, audio->frames, audio->sample_rate);
    // audio->data is interleaved float32
    mh_audio_data_free(audio);
}

// Write WAV file (16, 24, or 32-bit)
mh_audio_write("output.wav", interleaved_data,
               2, num_frames, 48000, 24, err, sizeof(err));

// Get file info without decoding
MH_AudioFileInfo info;
mh_audio_get_file_info("song.wav", &info, err, sizeof(err));
printf("Duration: %.2f seconds\n", info.duration);

Thread Safety

  • mh_process, mh_process_midi, mh_process_midi_io, mh_process_auto: Call from audio thread only (no locking)
  • All other functions are thread-safe with internal locking
  • Do not call mh_close while another thread is using the plugin

API Reference

Detailed API documentation:

  • C API Reference -- minihost.h, minihost_audio.h, minihost_audiofile.h, minihost_chain.h, minihost_midi.h
  • Python API Reference -- Plugin, PluginChain, AudioDevice, MidiFile, MidiIn, audio I/O, MIDI rendering, automation, VST3 presets
  • Hosting Guide -- practical guide with extended examples

License

GPL3

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

minihost-0.1.2.tar.gz (1.3 MB view details)

Uploaded Source

Built Distributions

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

minihost-0.1.2-cp314-cp314-win_amd64.whl (12.8 MB view details)

Uploaded CPython 3.14Windows x86-64

minihost-0.1.2-cp314-cp314-manylinux_2_28_x86_64.whl (17.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

minihost-0.1.2-cp314-cp314-macosx_11_0_x86_64.whl (16.0 MB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

minihost-0.1.2-cp314-cp314-macosx_11_0_arm64.whl (15.8 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

minihost-0.1.2-cp313-cp313-win_amd64.whl (12.7 MB view details)

Uploaded CPython 3.13Windows x86-64

minihost-0.1.2-cp313-cp313-manylinux_2_28_x86_64.whl (17.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

minihost-0.1.2-cp313-cp313-macosx_11_0_x86_64.whl (16.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

minihost-0.1.2-cp313-cp313-macosx_11_0_arm64.whl (15.8 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

minihost-0.1.2-cp312-cp312-win_amd64.whl (12.7 MB view details)

Uploaded CPython 3.12Windows x86-64

minihost-0.1.2-cp312-cp312-manylinux_2_28_x86_64.whl (17.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

minihost-0.1.2-cp312-cp312-macosx_11_0_x86_64.whl (16.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

minihost-0.1.2-cp312-cp312-macosx_11_0_arm64.whl (15.8 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

minihost-0.1.2-cp311-cp311-win_amd64.whl (12.7 MB view details)

Uploaded CPython 3.11Windows x86-64

minihost-0.1.2-cp311-cp311-manylinux_2_28_x86_64.whl (17.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

minihost-0.1.2-cp311-cp311-macosx_11_0_x86_64.whl (16.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

minihost-0.1.2-cp311-cp311-macosx_11_0_arm64.whl (15.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

minihost-0.1.2-cp310-cp310-win_amd64.whl (12.7 MB view details)

Uploaded CPython 3.10Windows x86-64

minihost-0.1.2-cp310-cp310-manylinux_2_28_x86_64.whl (17.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

minihost-0.1.2-cp310-cp310-macosx_11_0_x86_64.whl (16.0 MB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

minihost-0.1.2-cp310-cp310-macosx_11_0_arm64.whl (15.8 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file minihost-0.1.2.tar.gz.

File metadata

  • Download URL: minihost-0.1.2.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for minihost-0.1.2.tar.gz
Algorithm Hash digest
SHA256 354a2222cb2b422832f7d26689e471a42b9785bf9bc3913e30270dbb20b6e422
MD5 a9959d12d764bfd5575c090ebdde37e1
BLAKE2b-256 fb0ef34b5587991d012a637e4add452cdeb95065f62f23be9cb4f654205e3a88

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: minihost-0.1.2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 12.8 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for minihost-0.1.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 7a936da890394a31b089b271f1328906a26f68004a157f3c4cbf9c86f2016377
MD5 4385b1d4a65353454f1a63e219dc8214
BLAKE2b-256 78eb9f037ae08d35bf6abe87279147f885d3740f72a7df5449d757a62e5f7f2c

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e6aab508d610adc7f93f7f82b7cb3af0272be012783fbc203fb4adb88bd2bf7b
MD5 0d96f26afc5344a410887ec97c36d947
BLAKE2b-256 eb2b1aec58447993136bad4cc605df39a0e301ad50217857b93725e0e1afe17b

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp314-cp314-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 66fb72a0195d7cddd82f3b9121a082707dd1cbba880d0d579c0bd4391965710d
MD5 e853f98d5fb783fd2e4a4b211f8ac28b
BLAKE2b-256 b68f5f16c07f21a76ae0bda7a0de9cdbcace7a38275c3be72d7bc201c80e97d5

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 97be1af9be1c6c260344173765c81b752c49ecdb9faae1ad57c022070b238e8d
MD5 0e5992be91e99ebf9fea1430cd7f1321
BLAKE2b-256 3d13d439a13b3c423adf35c3095511512b79682703efd9a8ffd15223215a5e38

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: minihost-0.1.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 12.7 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for minihost-0.1.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0d300645f187a5da39388966b8fb1607f655bd5bf3aa58d2f3cedbd8405d9d05
MD5 0588c4f9945fdf8644d3f9e68e8e43af
BLAKE2b-256 54d02e797640fb8d0216acc77f66ead6f6539c4e0b384f9fe3414b2d6a12d208

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 214bac251f2ff089bd525bb28a1c9449f5e4293998fdc28c791e51ebde683aa0
MD5 888269338bf36d3f5e11faf884f2f9f0
BLAKE2b-256 fc1d5a5c0db9631f90721b83f9a138b65894833528ec0a3d51406d48e90fec40

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 75655a9786fadbe10b7d257a93831adaa17edec27ac289f8a1926671653725da
MD5 1228a66f0b3821a0060c2846b3ca8824
BLAKE2b-256 fa722e42a7603819f52589a70089a1fe4e70dc47950bdeaf4699686b4d9d6f63

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 01bd0ac13acaf809350ecb3ea9d60b3d0b52bd87c855c7451a0d2afdfaecb0ba
MD5 61abda9218955f5d1e7b23c879c79716
BLAKE2b-256 8a9ec3c14fb17b12c87fcf5ec85af41d0f32351d2819e33de2aafa49827d8914

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: minihost-0.1.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 12.7 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for minihost-0.1.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 eb78b70884bf094a169d30d8f4f3dd69f350f44b7a2a0cf38b060e84fa093ce7
MD5 c63440e53c4bc90a4ed87efa82fcb5d3
BLAKE2b-256 3e24e10e3a4bddf67e8c7e358f1faab06006130290dc44d30c97375a25fed8df

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d487b1971d363d2de6d8b9689925e86de03c8ae5320c81f33f52c18618c44206
MD5 f3bbb8c43c42fe57be893d3a7b6f3b78
BLAKE2b-256 062bd913cc1613794b2b0c26232d6cef9707616382a68910cbb6c0d1dfd172a6

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 16c4121e9ca6af5082000a5b0d75b21b755644125c8428c454a287747f601f60
MD5 db3afcc657b1b56f87b3672a6325d983
BLAKE2b-256 f85490301a06a78a5327ce8a7dbf2cfed8824daef9c66f61a1909d73994652b3

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 859668095cb073c4583042acbefb779144a33b2eea3e63a1eebf67c7a07d768f
MD5 668a3cfe984472139912ed196e7ce3f2
BLAKE2b-256 32c20f3df510c20cd699b76c53b0f185b85300b314e0f4ec501ddefc510bd565

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: minihost-0.1.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 12.7 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for minihost-0.1.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2c33390dee2d4c5e2b480fd647abfe2a67e50de7e9821ba3148556e9f364a376
MD5 3ca7d1c11baaf953d83cd85c3683e03b
BLAKE2b-256 0c7c81d9c0613fb1bf6490e6ce476b1938f845a1ac63f8501e70ba8f31506364

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d68eb6dae6c625b66bebc7f2a33b35dd274759d83a3d000eaea070dbc98638ae
MD5 6faeae27c0f0453828a167808a4bd589
BLAKE2b-256 eab58ad239e86b054e374e9732c27dad942c966b026b5e1a6fd765ffc50412cc

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 fea51655e60db358379090c80e598047ad54e03671c2f4fe4bbfd0aa24a35f40
MD5 cb98664f56a2cd7c9507e539c05f6c20
BLAKE2b-256 ed96ead9282434ddff7a01fd7ce0f72f523dbbdfd887b1262bcd9bbaf39a6fd1

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d2965793bdb01e3dcc947672881ea8e59b67f8991bde76a2160245e51a857f28
MD5 e334e30563fce52a9cd8c52b0889e512
BLAKE2b-256 707fcc3a84370b975b1b29b652b2ba6fcc45f27dd859e1ee3a259b502a43c514

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: minihost-0.1.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 12.7 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for minihost-0.1.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6497e2a3f651bd6d266152996221419829419c158b7572cae8d71ac21f13eed1
MD5 e52ef58acad15cf9285b00508f97f698
BLAKE2b-256 ae7fb2fcf0c49c35920070ad8c4559ea3b05a3175ec1f96cdc2dfe8f7763b576

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3393548032e2741c6a941e56e729a702e872f99ea9acf1f41984153201372dd8
MD5 402cd2dd780f84d65dc969cea83bbbee
BLAKE2b-256 2dd1213793ffcfd24aaf4f288e723270516368465b3dcd69161882dbe73ca398

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 269fc9a8d427210332008d57cda699c90a2bb23519354fb3e685cf0ab01a07a3
MD5 7ffd1cb092225b50d33d61fc97c56ee0
BLAKE2b-256 409ee381f89221650f0e393033e9b57878055aa92a6722b2ee6fa7bb86d84bfb

See more details on using hashes here.

File details

Details for the file minihost-0.1.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for minihost-0.1.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 41bea56f2955f5b14461453c4c9d8c32fcdc2d7b3875961c90ef7e1562692b1a
MD5 155589de5328ffcda73017cfea2c1317
BLAKE2b-256 1b698e8f5aa1fb95ed79ff360fa05bece704515be81f26c20c4bd050d59dc04f

See more details on using hashes here.

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