Skip to content

Realynx/FL-Automation

Repository files navigation

FL Automate

FruityLink SDK

Write C# plugins that run inside FL Studio.
The open-source plugin system and FL Studio control surface behind FL Automate.

NuGet Discord MIT license .NET 9 FL Studio 2025/2026

Website · Pricing · Discord · Getting started · Docs

🌱 1.5% of FL Automate AI usage goes to carbon creditsfl-automate.com/#pricing


FruityLink lets a plain C# class library run inside FL Studio and drive it programmatically — tempo, piano-roll notes, patterns, playlist clips, mixer, plugin parameters, native menus and toolbar buttons, even your own UI embedded in FL's window chrome.

The FL Automate AI assistant is a separate, closed-source plugin built on this SDK. Everything it can do in FL Studio, your plugin can do too.

Quickstart

The SDK is on NuGet — start a plugin from any C# class library with one command:

dotnet add package FruityLink.Plugins.Abstractions

That's the whole plugin contract (FruityLink.Core comes along transitively). Embedding your own UI inside FL Studio? Also grab FruityLink.Ui.Avalonia.Hosting or FruityLink.Ui.Wpf.Hosting.

Implement one interface:

public sealed class MyPlugin : IFlPlugin
{
    public string Id => "my-plugin";
    public string Name => "My Plugin";
    public string Description => "Logs the current tempo.";
    public string Version => "1.0.0";

    private IDisposable? _cmd;

    public Task EnableAsync(IPluginContext ctx, CancellationToken ct = default)
    {
        _cmd = ctx.Menu.AddCommand(FlNativeMenu.Tools, "Log tempo",
            onInvoke: () => _ = Task.Run(async () =>
                ctx.Log($"tempo = {await ctx.Fl.GetTempoAsync()} BPM")));
        return Task.CompletedTask;
    }

    public Task DisableAsync(CancellationToken ct = default)
    {
        _cmd?.Dispose();
        return Task.CompletedTask;
    }
}

Drop the build output into <host-dir>\plugins\MyPlugin\ and enable it from Tools ▸ FL Plugins. Rebuild and it hot-reloads. Full example: samples/HelloFl.

What you get

  • INativeFlControl — a typed, safe control surface: channels, patterns, notes, mixer, playlist, transport, markers, projects, arrangements, plugin params, automation.
  • Native menu + toolbar integration — commands and toggles in FL's own UI.
  • UI embedding — host Avalonia, WPF, or any HWND inside a real FL editor form.
  • Hot reload + isolation — each plugin loads in its own collectible AssemblyLoadContext from a shadow copy.
  • Fail-safe by design — FL functions are resolved by signature scan and refused rather than guessed; plugins never see raw memory primitives.

Documentation

Building

dotnet build FruityLink.Sdk.slnx                                  # managed SDK + sample
cmake -S native/bridge -B native/bridge/build -A x64              # native bridge (MSVC, x64)
cmake --build native/bridge/build --config Release

License

MIT © Realynx

Made for producers who script. FL Automate pricing — 🌱 1.5% of AI usage funds carbon credits.

About

Fruity Loops C# dotnet DAW Plugin system. Complete programmatic control over FruityLoops DAW. (Fruity Loops is trade marked by Image Line)

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages