DolphinLink.Bootstrapper 0.1.0

dotnet add package DolphinLink.Bootstrapper --version 0.1.0
                    
NuGet\Install-Package DolphinLink.Bootstrapper -Version 0.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DolphinLink.Bootstrapper" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DolphinLink.Bootstrapper" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="DolphinLink.Bootstrapper" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DolphinLink.Bootstrapper --version 0.1.0
                    
#r "nuget: DolphinLink.Bootstrapper, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DolphinLink.Bootstrapper@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DolphinLink.Bootstrapper&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=DolphinLink.Bootstrapper&version=0.1.0
                    
Install as a Cake Tool

CI NuGet NuGet .NET 8 License

Control your Flipper Zero from C# — over USB, via a simple NDJSON RPC.

[ Flipper Zero ]                    [ Your App ]
   C FAP daemon   ←— USB CDC 1 —→   .NET client
   (on-device)                       Bootstrapper auto-installs & launches the FAP
                                      Blazor WASM variant works straight from the browser

Why?

The Flipper Zero is an incredibly capable piece of hardware — IR blaster, Sub-GHz radio, NFC reader, RFID reader, GPIO pins, iButton, a display, and more, all in one pocket device. But to make it do something custom, you need to write C. And C is unforgiving: manual memory management, no standard library to speak of, a steep learning curve, and a slow edit-flash-test loop that can turn a simple idea into a multi-day exercise.

DolphinLink removes that barrier. Instead of writing C firmware, you keep the Flipper running its stock firmware and talk to it from a host application using modern C# over USB. The daemon is already written — you just call methods.

This matters because:

  • C# developers can finally build real hardware projects without touching embedded C. You get async/await, strong types, NuGet packages, full IDE support, and a debugger — with actual Flipper hardware responding on the other end.
  • The barrier to entry drops dramatically. An idea that would take days to implement as a FAP can become an afternoon's work in C#.
  • It spreads what Flipper can do. The more people can build with it, the more creative and unexpected the use cases become. DolphinLink is a bet that opening the hardware to a wider audience leads to things nobody has thought of yet.

Real-world use cases

Use case What you do
Home automation / IoT Use the Flipper as a programmable RF, IR, and NFC bridge — send raw Sub-GHz signals, replay IR remotes, scan NFC tags, all from your .NET app or Home Assistant integration.
Security research tooling Script signal capture and replay workflows in C# with full control over timing, frequency, and raw payloads. Integrate with existing .NET analysis pipelines.
Hardware prototyping Wire sensors to the GPIO pins and read them from C#. Use the ADC, control the 5 V rail, watch for pin changes — Flipper becomes a capable USB dev board you can script.
Education Learn how IR, Sub-GHz, NFC, and RFID actually work by writing code that talks to real hardware, watching the raw NDJSON in the built-in RPC console, and reading the open wire protocol spec.

What it is

Sub-project Language Role
RPC Daemon C (FAP) Runs on-device. Translates NDJSON commands into Flipper SDK calls. Uses USB CDC interface 1, leaving interface 0 free for qFlipper.
RPC Client C# / .NET 8 Async, strongly-typed API for all 47 commands. Code-generated from JSON schemas.
Bootstrapper C# / .NET 8 Installs and launches the daemon FAP automatically via the Flipper's native protobuf RPC, then hands you a ready-to-use client.

A Blazor WASM app (src/DolphinLink.Web) talks to the Flipper directly from a Chromium browser over the Web Serial API — no drivers, no install.


What it is NOT

  • Not affiliated with Flipper Devices Inc. This is an independent hobbyist project.
  • Not a replacement for qFlipper. It runs alongside it (on CDC interface 1); qFlipper keeps working normally.
  • Not a full Flipper API. BLE, BadUSB, U2F, UART emulation, and app-protocol features are out of scope.
  • Not production-hardened. Treat it as a solid foundation, not a battle-tested SDK.

How it works

  • A small C daemon (FAP) runs on the Flipper under stock firmware and exposes an NDJSON RPC over USB CDC interface 1.
  • CDC interface 0 stays free for qFlipper — you can use both at the same time.
  • The Bootstrapper uses the Flipper's native protobuf RPC to upload the daemon FAP to the SD card and launch it automatically — no manual steps.
  • The Blazor WASM variant uses the browser's Web Serial API to connect directly from Chrome or Edge — nothing to install.
  • The wire protocol is plain newline-delimited JSON, documented in full in PROTOCOL.md — easy to implement in any language.

Supported subsystems

Subsystem Commands Streams
System device info, power, RTC, region, reboot, frequency check
GPIO read, write, ADC, 5 V rail pin change watch
IR TX decoded, TX raw receive
Sub-GHz TX, RSSI RX
NFC tag scan
RFID (LF) card read
iButton key read
Storage info, list, read, write, mkdir, remove, stat
Notifications LED, RGB LED, vibro, speaker, backlight
UI / Screen draw text / rect / line, flush, acquire, release
Input button events

Interactive docs & playground

Try it live → Requires Chrome or Edge (Web Serial API). Connect your Flipper and everything runs in the browser — no install.

Reading this inside the web app? Use the sidebar to jump directly to the Playground, Docs, and Demos pages.

The web app is both a demo and an interactive API reference:

  • Playground — schema-driven browser of every command and stream. Fields are auto-generated with the right input types (enum dropdowns, hex inputs, file pickers). Fill in the fields, hit Send, and see the typed response — or start a stream and watch live events scroll in. The RPC console at the bottom of every page shows the raw NDJSON traffic with timestamps, round-trip times, and optional pretty-print.
  • Docs — the full documentation rendered in-app: Architecture, Wire Protocol, Schema Reference, and Diagnostics.
  • Demos
    • LED color picker — full HSV picker and RGB sliders; every change is sent to the Flipper's RGB LED in real time.
    • Screen canvas — draw lines, rectangles, and text on a 128×64 preview, then push it to the Flipper display.
    • Flipper Gamepad — play Snake using the Flipper's physical D-pad buttons, streamed live over USB.

Programmatic Access — Quick Start

No code needed to explore the API — the Playground covers that. When you're ready to integrate the Flipper into your own C# application:

1. Install

dotnet add package DolphinLink.Bootstrapper

Or, if you only need the client without the auto-install flow:

dotnet add package DolphinLink.Client

The Bootstrapper uploads the daemon FAP if it isn't already on the SD card, launches it, and returns a connected client — all in one call. COM3 is the system port (native RPC / qFlipper), COM4 is the daemon port (opens after the FAP starts).

using DolphinLink.Bootstrapper;

var result = await Bootstrapper.BootstrapAsync("COM3", "COM4");
await using var flipper = result.Client;

3. Call commands

// Read a GPIO pin
bool level = await flipper.GpioReadAsync(GpioPin.Pin1);
Console.WriteLine($"Pin 1: {level}");

// Flash the RGB LED green
await flipper.LedSetRgbAsync(0, 255, 0);
await Task.Delay(400);
await flipper.LedSetRgbAsync(0, 0, 0);

// Stream IR receive events
await foreach (var e in flipper.IrReceiveStartAsync())
{
    Console.WriteLine($"IR: {e.Protocol} addr={e.Address} cmd={e.Command}");
}

Bring your own language

The wire protocol is plain NDJSON over USB CDC — one JSON object per line. If you want a client in Python, Java, Go, Rust, or anything else:

  1. Read PROTOCOL.md — the full wire format fits on one page.
  2. Browse schema/ — every command, field type, and enum is machine-readable JSON.
  3. Use the C# client in src/DolphinLink.Client/ as a reference implementation.
  4. Ask an LLM to generate the host library. Point it at PROTOCOL.md, the schema files, and the C# source — it has everything it needs.

Testing caveat

Not every command has been tested end-to-end on real hardware. If you run into a bug or unexpected behavior, please open an issue — reports are very welcome.


Reference

Wire protocol PROTOCOL.md
Architecture & threading ARCHITECTURE.md
Schema format & codegen SCHEMA.md
Diagnostics DIAGNOSTICS.md
Command & enum schemas schema/

License

Licensed under the Apache License 2.0.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0 95 3/25/2026