Skip to content

FPP 10.0

Latest

Choose a tag to compare

@github-actions github-actions released this 21 Aug 18:08
· 41 commits to master since this release
10.0
370e62e

FPP 10.0

FPP 10.0 is the largest release in the project's history: 1,440 commits since 9.5, from 22 contributors, over roughly a year of development. It moves to a new OS foundation, replaces the entire media stack, and reaches further into the hardware than any previous release.

Thank you to everyone who wrote code, filed issues, ran betas on live displays, updated plugins, and answered questions on the forums through five public betas. This release is the result of that.


At a Glance

  • New 64-bit (arm64) images for Pi 3/4/5, Zero 2 W, CM4/CM5 and PocketBeagle 2 — more headroom for large shows
  • Debian 13 "Trixie" base, with a new Linux kernel on every platform
  • All-new media engine — PipeWire + GStreamer replace VLC and SDL, with multi-zone audio, per-output volume and EQ, AES67 and Opus RTP streaming
  • Faster boot — fppd starts about 8 seconds sooner on a single-core BeagleBone
  • Per-port pixel protocols — TM18xx, 400 kHz and 16-bit parts, with the WS2811-compatible family listed by name
  • Four new self-PWM LED panel chips, 1/64 scan support, and several independent matrices from one cape
  • Plugins load and unload at runtime — no more fppd restart to install or remove one
  • Dark mode across the entire web UI
  • Basic / Advanced / Experimental UI levels, so the interface shows only what you need
  • New 3D Virtual Display, with three.js transform controls
  • Calendar view of the schedule
  • Redesigned playlist editor — clearer sections, inline help, and mass-select
  • Significant security hardening — command injection, buffer overflows and a config-backup password leak all fixed
  • Faster pixel processing — 4.6× faster panel frame prep, leaving more CPU for the UI and more pixels per controller

Platform & Operating System

  • Debian 12 → Debian 13 "Trixie": newer kernel, newer libraries, reworked boot sequence
  • A new Linux kernel on every platform, with current Wi-Fi drivers, performance work and hardware fixes
  • Native arm64 images for all 64-bit-capable Pi's and PocketBeagle 2
  • PocketBeagle 2 and PocketBeagle 2 Industrial supported, including EEPROM-based board detection
  • 32-bit images still built for older and 32-bit-only boards
  • chrony replaces ntpsec for time synchronisation, with a LAN gateway fallback
  • Fan control: fan-on temperature, adjustable trip points, and fan presence detection
  • One flash implementation for Pi, BeagleBone and BeagleBone 64 — NVMe, eMMC, SSD and SD, with a failed flash no longer reported as successful
  • Storage page appears automatically when booting from SD with larger local storage available

Boot time

Mostly aimed at single-core boards, where these sit on the critical path to fppd and the web UI:

  • DHCP no longer drags in systemd-hostnamed and polkit just to set a hostname FPP already wrote itself
  • rsyslog deferred off the boot path; atd and ufw no longer ship enabled
  • Twelve unused PHP extensions no longer loaded — about 1.6 MB back per web worker
  • The spoken IP announcement now yields to fppd, apache and php-fpm instead of competing for the core

Media — Audio

The audio and video pipeline has been rebuilt from the ground up. The VLC and SDL backends are gone.

  • New PipeWire + GStreamer stack, with Simple and Advanced modes
  • Multi-zone audio — define audio groups and route media to several outputs at once
  • Real-time volume and EQ per output, with per-output delay compensation
  • Routing Matrix and a live pipeline Graph Visualizer
  • User-defined sound card aliases — friendly names that survive reboots and USB re-plugs
  • AES67 audio-over-IP output, PTP-synced and standards-compliant
  • Opus RTP streaming, unicast and multicast
  • A null sink for boards with no real sound card
  • Audio card presence monitoring, USB bandwidth checks, and matching UI warnings
  • The PipeWire graph can suspend the sound card when idle

Media — Video

  • Playback rebuilt on GStreamer / KMS — HDMI and DSI output
  • Video output regions — a single video can span two displays
  • Play Media can target any video output, so non-primary slots can drive a display
  • Video straight into a Pixel Overlay model, from any stream rather than only the primary
  • yt-dlp support for playing YouTube URLs

Pixel Strings

  • Per-port pixel protocols now actually apply — the setting was saved by the UI but never read
  • WS2811-compatible parts are listed by name — SK6812, WS2812B, WS2815 and the rest of the 800 kHz family, grouped to match xLights' pixel table. Parts that would be driven wrong rather than merely differently are deliberately left off the list
  • TM18xx support, including TM1814's constant-current preamble and correct idle levels for inverted protocols
  • 400 kHz and longer-bit-cell parts — TM1803, TM1804, UCS1903 and friends. The bit cell is supplied to the PRU at runtime, so no separate firmware image per timing
  • DPIPixels replaces rpi_ws281x on all Pi string outputs, with full string length on capes with latch chips and a variable frame rate per sequence with no reboot
  • Falcon V4 / V5 smart receiver support on BBB48String, refused cleanly on chains that can't support them
  • Fixed the pixel string "Reverse" direction never being saved — a long-standing bug where the dropdown was never read, and cloning a row lost it too

LED Panels

  • Four new self-PWM panel chips: DP3364S, ICND1065L, SM16380SH and ICND2153
  • 1/64 scan panels — scan-specific register tables, rather than stretching a 1/32 table to fit
  • Full-height panel layout — panels that scan every row can use both RGB lanes for halves of the same row; 128x64 and 64x64 1/64 sizes now offered
  • Several independent LED panel matrices on one BBShiftPanel cape — a two-sided display, or two columns flanking a doorway, without a controller for each
  • 16-output support, higher refresh rates, and panels + strings sharing one cape
  • New panel interleave types (DoubleZ), and FBMatrix horizontal flip
  • Vendor panel settings are version-gated so new options can't break FPP 9 players

Performance

  • 4.6× faster panel frame prep on BBBMatrix, via precomputed lookup tables and NEON accumulation
  • Pixel string frame prep tiled and fused for a further speedup
  • Idle panel outputs park the PRUs instead of consuming a core
  • Batched LOR and USB relay serial writes; reduced allocation in the Remap processor
  • More CPU left for the web UI, so pages and test controls stay responsive while a show runs

Networking & MultiSync

  • mDNS / Avahi discovery — FPP instances find each other automatically
  • MultiSync defaults to unicast for new installs; existing users keep multicast through upgrades
  • Option to send sync to all known FPP remotes via unicast
  • E1.31 sync universes, input and output, plus priority handling on incoming bridge data
  • Per-controller UDP output pacing, DSCP marking, and local-drop diagnostics
  • Sync destination changes apply without restarting fppd
  • Sort and save the display order of systems; Pi64 shown correctly in MultiSync
  • FPP now keeps DHCP leases across reboots (a Debian networking change), with sane lease times and a "clear leases" option in FPP Reset Config
  • WLED-Native discovery API, WLED audio-reactive networking, and more ported WLED FX effects

Pixel Overlays

  • New bulk pixel data API — push a whole frame or image to an overlay model in one request instead of one call per pixel, much faster for animation and for tools like xLights
  • Overlay Model Effect can draw and scroll images on a model, not just solid colours and patterns
  • RGBW support in Pixel Overlay Model systems
  • xLights submodel support, including submodels in OverlayModelContentListUrl
  • Overlay model Text effect supports multi-line text (#2823)

Playback, Playlists & Scheduling

  • Calendar view of the schedule, with additional preview options
  • Playlist item editor redesigned — clearer sections, inline help tooltips
  • Mass-select items in the playlist editor
  • Missing sequence/media indicators shown inline (#2741)
  • Companion media that lives and dies with its playlist entry, with a badge on the entry
  • New Global Pause and a global inter-item delay setting
  • Unscheduled playlists resume after an fppd restart
  • Randomization indicators on playlists

Commands & Automation

  • If / Set Variable commands, plus the Variables and Recurring Tasks pages (Advanced UI level)
  • FPP Commands log their source — UI, MQTT, schedule, plugin or API — for troubleshooting
  • FSEQ Effect Start gains an ifNotRunning option and an option to restart an effect in place instead of starting a duplicate
  • Running effects now composite in trigger-recency order rather than array-index order
  • Reboot and Shutdown available as ordinary commands (Advanced UI mode)
  • %VAR:name% resolved on the /api/command/{cmd} routes
  • ControlChannelOutput passes the channel's value as a parameter the command can act on
  • Command presets can be populated from MultiSync hosts (#2016)
  • A playlist, preset or API call referencing a missing command now warns instead of failing quietly
  • New servo API command; uDMX enhancements

Plugins

  • Plugins load and unload at runtime — installing, updating or removing one no longer requires restarting fppd
  • Plugin API 6 — plugins can register their own HTTP routes and shut down cleanly
  • Dependencies install themselves — apt packages, and Python via pipx/uv, with apt hardening and package-owner tracking
  • Redesigned Plugin Manager: categories, icons, grid view, popularity, search, and a unified plugin.log
  • Open issue and PR counts shown on plugin cards
  • Official / community / unknown plugin history tracked and surfaced in the health check
  • Plugin HTTP routes documented on the API help page
  • Per-plugin reinstall, reinstall-all, and uninstall-all options
  • Plugin min RAM/CPU resource hints; GitHub credentials for private plugin installs
  • Incompatible plugins grouped into a collapsed section

Web UI

  • Dark mode across the entire UI
  • Basic / Advanced / Experimental UI levels, plus a temporary 15-minute Advanced override
  • fppd status pushed over a WebSocket instead of polled
  • New 3D Virtual Display with three.js transform controls
  • Redesigned Testing page — "DMX Tester" is now Channel Fader — plus RGB and RGBW testing, colour fades, a DMX sine-wave generator and a custom colour picker
  • Revamped System Upgrade, Network Settings, Plugin Manager and GPIO input pages
  • New API documentation (Scalar / OpenAPI), including the C++ command APIs
  • Support-bundle download, consolidated logging, and a file manager for config files in development mode
  • Improved system health check, with fan and PipeWire/GStreamer status in system stats
  • Frontend modernised: bootstrap-table replaces tablesorter, jQuery 4.x, FontAwesome 7.x, Bootstrap 5.3.8

Reliability & Diagnostics

  • Main-loop watchdog with phase tracking, to detect and recover from stalls
  • Crash reports resolve to file and line on the device, capture more context, and record installed plugin versions
  • Crash reports can be kept local instead of sent
  • Extensive crash-hardening: malformed config/JSON no longer aborts fppd, GPIO driver exceptions are caught, corrupt sequence files are handled
  • Detailed warning messages with suggested remedies throughout the UI
  • Backups now restore Pixel Overlay Models and the Virtual Display Map — previously dropped silently
  • OS upgrades check for free disk space before starting (#2820)
  • A large audit pass across channel outputs, playlists, the scheduler and status reporting: bounds checking on channel ranges, thread-safe output and port state across config reloads, and safer playlist and schedule lifetimes

Security

  • Fixed command injection vulnerabilities in the web UI (PHP)
  • Fixed a crash-report handling bug that could be used to run unintended commands
  • Fixed buffer overflows in MultiSync ping packet handling and the SetSetting command
  • Fixed a heap buffer overflow and out-of-bounds read in DDP input channel bridging
  • Fixed protected JSON config backups leaking the encryption password in plaintext
  • Fixed certain characters in a setting value being able to inject into the settings page's JavaScript
  • MultiSync control-packet parsing now bounded against remote-supplied lengths
  • Playlist URL steps bound what they send and what a branch step accepts

Under the Hood

  • HTTP layer moved from libhttpserver to drogon
  • Migration to std::thread / mutex throughout, with substantial thread-safety cleanup
  • Playwright UI testing, a Dev Container, and amd64/arm64 Docker matrix builds
  • asan and tsan build targets
  • Distributed compilation via distcc and nocc, with an FPP apt repo
  • SDL3 support with SDL2 fallback

Upgrading to FPP 10

  • Brand new arm64 images are recommended for all 64-bit-capable Pi's (Pi 3, Pi 4, Pi 5, Pi Zero 2 W, Compute Module 4/5) and PocketBeagle 2
  • The original 32-bit images remain available for older/32-bit-only boards (Pi B, B+, Zero, Zero W) and other Beagles
  • Moving from 32-bit to 64-bit requires re-imaging — an in-place OS upgrade cannot switch architectures. Back up your config, flash the new image, restore your config.

Option A — Fresh install (required if moving 32-bit → 64-bit)

  1. Back up your FPP config
  2. Flash the FPP 10 image
  3. Restore your config

Option B — In-place upgrade (only if staying on the same architecture)

  1. Make sure you're fully updated on FPP 9.x (or 8.x) first, or already on a 10.0 beta
  2. About → Upgrade OS → pick the 10.0 image for your board
  3. Let it download, install, and reboot
  4. Delete the fppos file from File Manager → Uploads
  5. If it fails to boot, power-cycle it (some devices need this due to library changes)

Which image do I need?

Board Image
64-bit capable Pi (3/4/5, Zero 2 W, CM4/CM5) FPP-v10.0-Pi64.img.zip
Older/32-bit-only Pi FPP-v10.0-Pi.img.zip
BeagleBone Black/Green/PocketBeagle/Green Gateway FPP-v10.0-BBB.img.zip
PocketBeagle 2 / PocketBeagle 2 Industrial FPP-v10.0-BB64.img.zip

Backwards Compatibility Notes

  • Only in-kernel WiFi drivers are included — some older USB WiFi adapters may no longer work after upgrading
  • VLC and SDL media backends removed — replaced by GStreamer/PipeWire
  • rpi_ws281x driver dropped — Pi string outputs now use DPIPixels
  • "Remote XXXX" FPP commands removed (deprecated since 9.0) — use normal FPP commands with the MultiSync checkbox and a target set
  • "FPD" dongle / PixelNet output removed (deprecated since 9.0)
  • In-app Script Repository Browser deprecated; suggested replacements are shown in its place
  • Debian 12 → 13 library upgrades mean most plugins will need updating or reinstalling
  • FPP now keeps DHCP leases across reboots, which differs from FPP 9 behaviour

Thanks

Code contributions in the FPP 9.0 → 10.0 development cycle came from:

Stuart Ledingham, Daniel Kulp, Daryl C, Jessica Ryan, Justin J. Novack, Bryan Brandau, Joshua Kriegshauser, Chris Pinkham, Greg Hormann, Jared B, Pat Delaney, Scott Hanson, Bill Carriveau, Adam Jacques, Bill Thomson, Rick Harris, Patrick Gianotto, Ken MacMaster, Kyle Grymonprez, Nathan Kulp, Paul (MrPaulAR) and Tran (quactv).

Thanks also to everyone who reported, reproduced, triaged and tested issues on GitHub and the forums — including Daryl, Pat, Stuart, Bob, Ryan, Alex, Daniel, Bryan, Ron, Steve, Randy, Greg, Bill, Neil, Chris, Matt, Pieter, Jonathan, Eric and Andy — and to the plugin authors who updated and marked their plugins compatible ahead of the release.

Full changelog: 9.5...10.0