Skip to content

About

Flutter/Dart framework for building VST® 3 plugins with Flutter UI and pure Dart audio processing. Provides the interface between Dart audio processing code and the Steinberg VST® 3 SDK C++ infrastructure.

Topics

Resources

Stars

51 stars

Watchers

0 watching

Forks

Latest commit

 

History

37 Commits

Folders and files

Repository files navigation

flutter_vst3 Toolkit

Build professional VST® 3 plugins and hosts with Flutter UI and pure Dart audio processing.

VST Compatible

VST® is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries.

This toolkit enables developers to create professional VST® 3 audio plugins with modern Flutter UIs while leveraging the power of pure Dart for real-time audio processing. Zero C++ knowledge required.

Architecture Overview

VST® 3 Plugin Architecture with Native Dart Executable

The toolkit compiles Dart code to native machine code executables that communicate with the VST® 3 wrapper via IPC (Inter-Process Communication). This provides true native performance without requiring the Dart runtime in the DAW.

graph TB
    subgraph "DAW Integration"
        DAW1[Ableton Live]
        DAW2[FL Studio]
        DAW3[Reaper]
        DAW4[Other VST® 3 Hosts]
    end
    
    subgraph "flutter_vst3 Toolkit"
        subgraph "VST Creation"
            FR[flutter_reverb<br/>Flutter VST® Plugin]
            ECHO[echo<br/>Flutter VST® Plugin]
            FVST[flutter_vst3<br/>VST® Building Framework]
        end
        
        subgraph "VST Hosting"
            DVH[dart_vst_host<br/>Load & Control VSTs]
            DVG[dart_vst_graph<br/>Audio Routing & Mixing]
        end
        
        subgraph "Native Bridge"
            NL[C++ VST® 3 Implementation<br/>Built via CMake]
            PL[VST® 3 Plugin Wrapper<br/>+ IPC to Dart Executable]
        end
    end
    
    subgraph "External VSTs"
        VST1[TAL Reverb]
        VST2[Other VST® 3 Plugins]
    end
    
    %% VST Creation Flow
    FR --> FVST
    ECHO --> FVST
    FVST --> PL
    PL --> NL
    
    %% VST Hosting Flow  
    VST1 --> DVH
    VST2 --> DVH
    DVH --> DVG
    DVG --> NL
    
    
    %% DAW Integration
    NL --> DAW1
    NL --> DAW2
    NL --> DAW3
    NL --> DAW4
    
    style FR fill:#e1f5fe
    style ECHO fill:#e1f5fe
    style FVST fill:#e1f5fe
    style DVH fill:#fff3e0
    style DVG fill:#fff3e0
    style NL fill:#f3e5f5
    style PL fill:#f3e5f5
Loading

Native Executable Implementation

sequenceDiagram
    participant DAW
    participant VST3[VST® 3 Plugin (C++)]
    participant IPC[Binary IPC Protocol]
    participant DART[Dart Native Executable]
    participant UI[Flutter UI Window]
    
    Note over VST3,UI: Plugin Initialization
    VST3->>DART: Spawn dart_processor executable
    DART->>VST3: ACK ready
    VST3->>UI: Create Flutter window
    UI->>DART: Connect parameter binding
    
    Note over DAW,UI: Audio Processing
    DAW->>VST3: Process audio buffer
    VST3->>IPC: Send binary audio data
    IPC->>DART: Deserialize & process
    DART->>IPC: Return processed audio
    IPC->>VST3: Binary response
    VST3->>DAW: Return processed buffer
    
    Note over DAW,UI: Parameter Changes (3-way binding)
    DAW->>VST3: Set parameter
    VST3->>DART: Send parameter update
    DART->>UI: Notify UI of change
    UI->>UI: Update knobs/sliders
Loading

Package Overview

🎛️ VST® 3 Plugin Creation

Primary Purpose: Build VST® 3 plugins with Flutter UIs that compile to .vst3 bundles

  • flutter_vst3 - Complete framework that auto-generates all C++ VST® 3 boilerplate from Dart
  • vsts/flutter_reverb - Example VST® 3 reverb plugin with native sliders (no standalone Flutter app)
  • vsts/echo - Example VST® 3 echo/delay plugin with Flutter UI
  • Native Executable Compilation - Dart compiles to native machine code (no runtime required)

🎧 VST® Hosting Packages

Primary Purpose: Load and control existing VST® 3 plugins from Dart applications

  • dart_vst_host - High-level API for loading and controlling VST® 3 plugins
  • dart_vst_graph - Audio graph system for routing and mixing VST® plugins

🔧 Native Infrastructure

  • VST® 3 native components - C++ implementation using Steinberg VST® 3 SDK (built via CMake)
  • Plugin wrappers - VST® 3 plugin wrappers that host Dart audio processing

Key Features

Flutter UI + Dart Audio Processing

  • ✅ Beautiful Flutter UIs - Modern, reactive plugin interfaces
  • ✅ Pure Dart DSP - Write audio algorithms in familiar Dart syntax
  • ✅ Hot Reload - Instant UI updates during development
  • ✅ 3-Way Parameter Binding - DAW ↔ Flutter UI ↔ C++ parameters stay in sync
  • ✅ Zero C++ Required - Framework auto-generates all VST® 3 boilerplate

Native Performance

  • ✅ Native Machine Code - Dart compiles to native executables
  • ✅ No Runtime Overhead - No Dart VM or JIT in production
  • ✅ Process Isolation - Plugin crashes won't affect DAW
  • ✅ Small Binary Size - Minimal footprint in DAW

Cross-Platform Support

  • ✅ macOS - Universal binaries (Intel + Apple Silicon)
  • ✅ Windows - Native Windows VST® 3 support
  • ✅ Linux - Full Linux VST® 3 support (X11 desktop backend for GUI; run with GDK_BACKEND=x11)

Quick Start

Prerequisites

# macOS / Linux: Download Steinberg VST® 3 SDK & build native libraries
./setup.sh

# Windows (Command Prompt or PowerShell):
.\setup.bat   # or .\setup.ps1

Tip

If running .ps1 scripts in PowerShell gives an execution policy error, simply run .\setup.bat and .\build.bat, or allow local scripts once via Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.

Building Your First VST® Plugin

  1. Build the example plugins:

macOS / Linux:

# Build Flutter Reverb VST® 3 (default)
make

# Build specific plugins:
make reverb           # Build flutter_reverb.vst3
make echo             # Build echo.vst3

# Build, then copy to the folder VST3 hosts scan
make deploy           # Echo and Reverb
make deploy-echo      # Echo only (or: make -C vsts/echo deploy)
make deploy-reverb    # Reverb only (or: make -C vsts/flutter_reverb deploy)

Windows (PowerShell or Command Prompt):

:: Build Flutter Reverb VST® 3 (default)
./build.bat

:: Build specific plugins:
./build.bat reverb
./build.bat echo

:: Build native libraries only (dart_vst_host & dart_vst_graph)
./build.bat native

:: Build, then copy plugins to the user VST3 folder (%LOCALAPPDATA%\Programs\Common\VST3\)
.\build.bat deploy
.\build.bat deploy-echo
.\build.bat deploy-reverb

:: Clean build artifacts
.\build.bat clean

Note

.\build.bat deploy copies plugins to the standard user directory C:\Users\<user>\AppData\Local\Programs\Common\VST3\. It does not require Administrator privileges.

  1. Test in your DAW:
  • macOS: ~/Library/Audio/Plug-Ins/VST3/
  • Windows: C:\Users\<user>\AppData\Local\Programs\Common\VST3\
  • Linux: ~/.vst3/

Important

Linux GUI Requirement: The standard VST3 windowing backend on Linux uses X11. Any application or host running VST3 plugins with a graphical interface on Linux must be launched with the GDK_BACKEND=x11 environment variable (e.g. GDK_BACKEND=x11 flutter run), otherwise the GUI will not be displayed on Wayland desktop sessions.

Creating Your Own VST® Plugin

  1. Define parameters with Flutter UI bindings:
// lib/src/my_parameters.dart
class MyParameters {
  /// Controls the output volume (0% = silence, 100% = full volume)
  double gain = 0.5;
  
  /// Adds warmth to the signal (0% = clean, 100% = saturated)
  double warmth = 0.0;
}
  1. Implement your audio processor:
// lib/src/my_processor.dart
class MyProcessor {
  void processStereo(List<double> inputL, List<double> inputR,
                    List<double> outputL, List<double> outputR,
                    MyParameters params) {
    for (int i = 0; i < inputL.length; i++) {
      outputL[i] = inputL[i] * params.gain;
      outputR[i] = inputR[i] * params.gain;
    }
  }
}
  1. Create Flutter UI with parameter binding:
// lib/my_ui_main.dart
import 'package:flutter/material.dart';
import 'package:flutter_vst3/ui.dart';

void main() {
  runApp(const MaterialApp(home: MyPluginUI()));
}

class MyPluginUI extends StatefulWidget {
  const MyPluginUI({super.key});

  @override
  State<MyPluginUI> createState() => _MyPluginUIState();
}

class _MyPluginUIState extends State<MyPluginUI> {
  static const gainParam = 0;
  final VST3ParameterBinding _binding = VST3ParameterBinding.getInstance();

  void _rebuild() => setState(() {});

  @override
  void initState() {
    super.initState();
    _binding.addListener(_rebuild);
    _binding.loadInitialParameters();
  }

  @override
  void dispose() {
    _binding.removeListener(_rebuild);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Slider(
        value: _binding.getParameter(gainParam),
        onChangeStart: (_) => _binding.beginEdit(gainParam),
        onChanged: (value) => _binding.setParameter(gainParam, value),
        onChangeEnd: (_) => _binding.endEdit(gainParam),
      ),
    );
  }
}
  1. CMake automatically generates everything else!

Building a VST® Host Application

import 'package:dart_vst_host/dart_vst_host.dart';
import 'package:dart_vst_graph/dart_vst_graph.dart';

void main() async {
  // Initialize host
  final host = VstHost();
  await host.initialize();
  
  // Load VST plugin (including Flutter-based VSTs!)
  final plugin = await host.loadPlugin('flutter_reverb.vst3');
  
  // Create audio graph
  final graph = VstGraph();
  final pluginNode = graph.addVstNode(plugin);
  final mixerNode = graph.addMixerNode();
  
  // Connect nodes
  graph.connect(pluginNode.output, mixerNode.input1);
  
  // Start processing
  await graph.start();
}

Project Structure

flutter_vst3_toolkit/
├── flutter_vst3/           # Framework for building VST® 3 plugins with Flutter
│   ├── lib/
│   │   ├── flutter_vst3.dart   # DSP worker API
│   │   ├── ui.dart             # Flutter editor API
│   │   └── src/
│   │       ├── vst3_worker_loop.dart      # DSP worker over shared memory
│   │       └── parameter_binding.dart     # Editor ↔ DAW parameters
│   ├── native/             # C++ templates and CMake helpers
│   └── scripts/            # Plugin generation scripts
├── vsts/
│   ├── flutter_reverb/     # Example reverb with Flutter UI
│   └── echo/              # Example echo with Flutter UI
├── dart_vst_host/         # VST® 3 hosting API for Dart
├── dart_vst_graph/        # Audio graph system
├── vst3sdk/               # Steinberg VST® 3 SDK
└── Makefile              # Build automation

Development Workflow

VST® Plugin Development

  1. Design UI in Flutter with hot reload
  2. Implement audio processing in pure Dart
  3. Test with flutter test; plugins with a Flutter entrypoint can also use flutter run
  4. Build and deploy VST® 3: make deploy-echo
  5. Load in DAW and test

Parameter Binding System

The framework provides automatic 3-way parameter binding:

  • DAW → Flutter UI: Parameter changes in DAW update Flutter UI
  • Flutter UI → DAW: UI interactions update DAW parameters
  • Flutter UI → Processor: UI changes update audio processing

Examples in Production

Flutter Reverb Plugin

  • Full reverb algorithm in pure Dart
  • Real-time parameter updates
  • Ships as standard .vst3 bundle

Echo Plugin

  • Delay/echo effect with feedback
  • Bypass control
  • Parameter automation support

Testing

# Run all tests
make test             # macOS / Linux
build.bat test        # Windows (or .\build.ps1 test)

# Test individual packages
(cd flutter_vst3 && flutter test)
(cd vsts/echo && flutter test)
(cd dart_vst_host && dart test)
(cd dart_vst_graph && dart test)

# Interactive testing with example plugins
# (On Linux, set GDK_BACKEND=x11 so native VST3 GUIs can be displayed)
# Reverb has no standalone app: build with make deploy-reverb and load in a VST3 host.
# On Linux:
(cd vsts/echo && GDK_BACKEND=x11 flutter run)

Contributing

This toolkit is designed for professional audio development. Contributions should maintain:

  • No duplication: Use existing components
  • No placeholders: Implementation must be complete
  • Pure FP style: Immutable data, pure functions
  • Flutter-first: Leverage Flutter's UI capabilities
  • Clear documentation: All public APIs documented

Legal Notice

This project is not affiliated with, endorsed by, or sponsored by Steinberg Media Technologies GmbH. VST® is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries.

The flutter_vst3 Toolkit interfaces with the Steinberg VST® 3 SDK under the terms of the VST® 3 SDK License Agreement. Users must comply with the Steinberg VST® 3 SDK License Agreement when distributing VST® 3 plugins.

For more information about VST® 3 licensing: https://steinbergmedia.github.io/vst3_dev_portal/pages/VST+3+Licensing/Index.html

License

See LICENSE file. Commercial use requires compliance with Steinberg VST® 3 licensing terms.


Ready to build the next generation of audio plugins with Flutter and Dart? Start with the examples and unleash your creativity!

About

Flutter/Dart framework for building VST® 3 plugins with Flutter UI and pure Dart audio processing. Provides the interface between Dart audio processing code and the Steinberg VST® 3 SDK C++ infrastructure.

Topics

Resources

Stars

51 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages