Dependencies

Every dependency answers the same questions: why does ToneSphere need it, could the standard library, existing code or the native layer do it instead, and is it needed at runtime or only to build. Update this file whenever pyproject.toml changes.

Runtime ([project] dependencies)

Package Why it is needed Could something smaller replace it? Plan
numpy Audio blocks everywhere in the Python control plane and the legacy PortAudio host; ring buffers; test signal analysis No — and the native engine’s buffers are handed to Python as NumPy views for tests and metering Keep
sounddevice PortAudio (via CFFI) for the audio host on Linux and macOS, and on Windows until the native WASAPI backend replaces it On Windows, yes: the native backend. On Linux/macOS it is the backend Keep for Linux/macOS; Windows stops depending on it for audio once M4 lands
pyside6 The desktop UI (Qt). The largest dependency by far Not without replacing the UI; AGENTS.md rules out WinUI/WPF/Electron/.NET. Unused Qt modules are excluded in tonesphere.spec Keep
fastapi The REST/WebSocket control API (tonesphere/api/server.py) The standard library http.server could serve REST, but not WebSockets or request validation without reimplementing both Keep
pydantic Request/response models for the API (tonesphere/api/models.py); a FastAPI requirement anyway No, while FastAPI stays Keep
uvicorn ASGI server that runs the API No, while FastAPI stays Keep
websockets Not imported by ToneSphere directly: uvicorn’s WebSocket protocol implementation for /ws/events (tonesphere.spec hidden import uvicorn.protocols.websockets.auto) uvicorn can use wsproto instead; no smaller Keep
pyyaml Presets and the default config are YAML (core/presets.py, utils/config.py) JSON from the standard library, at the cost of the presets’ human-editable format and every existing preset file Keep

Build and development groups

Group Package Why Notes
dev pytest the test suite  
dev ruff lint  
dev httpx FastAPI’s TestClient backend; never imported directly  
packaging pyinstaller freezes the app for Releases and the MSIX package (tonesphere.spec) Was a runtime dependency; nothing at runtime imports it
packaging pillow generates the Store’s logo sizes (packaging/msix/generate_assets.py) and checks them in tests/test_msix_packaging.py Was a runtime dependency; the application never imports it
native cmake generates the native build (scripts/build_native.py) From PyPI so no system install is needed
native ninja the build tool CMake drives From PyPI

All three groups are in [tool.uv] default-groups, so a plain uv sync still gives a checkout that can test, build and package. The split exists so that the runtime list above is honest, not to add install steps.

Removed

Package Why it was removed
requests Nothing imported it (checked with a repository-wide import search, 2026-09-29)
pedalboard Replaced by the native VST3 host (docs/VST3.md). Its plugin chain was unreachable from the UI, API and CLI, never loaded a real plugin in a test, and made the frozen app a GPLv3 binary

Native and SDK dependencies

These are not Python packages; they are fetched or installed by the build, never committed.

Component Source Licence Used for
EWDK (MSVC build tools, Windows SDK, WDK) Microsoft, official ISO Microsoft EWDK licence (driver development and supporting components; see docs/BUILDING_WINDOWS.md) Compiling the native DLLs and the driver
VST3 SDK 3.8.x github.com/steinbergmedia/vst3sdk, pinned tag, via scripts/fetch_sdks.py MIT The native VST3 host and the test plugin
ASIO SDK 2.3.x steinberg.net, pinned checksum, via scripts/fetch_sdks.py GPLv3 (Steinberg’s open-source option) native/asio/ only — see sdks/README.md
libopus 1.5.2 Xiph’s release tarball, pinned checksum, via scripts/fetch_sdks.py (Windows, built into opus.dll); the system package elsewhere (libopus0 on Debian/Ubuntu, Homebrew opus on macOS) BSD 3-clause The opus network quality, through ctypes (tonesphere/network/opus.py) — no Python binding: none ships libopus for all three platforms, and five C calls need none
Windows-driver-samples (SimpleAudioSample) github.com/microsoft/Windows-driver-samples MS-PL Starting point for driver/windows_virtual_audio/

The native layer must not pull in JUCE, .NET, a GUI toolkit or any framework beyond the two Steinberg SDKs, libopus and the Windows SDK.