Skip to content

Kuroshiro vs. the rest ​

Kuroshiro isn't the only way to run a TRMNL: the device also works with the official trmnl.com cloud, and with a handful of open-source, self-hosted BYOS servers, Terminus being TRMNL's flagship one. Here's how Kuroshiro lines up against the two in depth:

KuroshiroTerminusOfficial TRMNL Cloud
HostingSelf-hosted, one Docker image (NestJS + Vue) + your own PostgresSelf-hosted (Docker/K8s/Raspberry Pi), Ruby/Hanami + Postgres + Redis/SidekiqManaged SaaS, closed source
CostFree, MIT-licensedFree, MIT-licensedFree tier + paid "Developer Edition" for custom plugins; device sold separately
AccountsSingle admin, no loginMulti-user accounts with email verificationCloud account required
Device models & palettesFull official catalog synced daily, plus admin-created custom colour PalettesDevice models & palettes supportedDefines the catalog—sells the hardware
PluginsPoll (multiple named Data Sources, each fetched or a literal value) & Webhook (3 merge strategies)"Extensions"/Exchanges, single- or multi-source polling1,000+ native, community & private plugins
Recipe importImports any trmnl.com Recipe, including serverless-transform ones Terminus's importer rejectsImports via its Extension GalleryNative—it's the source catalog
Screen schedulingPer-Screen day/time Schedule gates rotation eligibilityPlaylist model: weekday/date windows, skip-if-stale TTL, device-grouped playlistsPlaylist Scheduler, group scheduling by time of day
Mashups7 layoutsSupported8 layouts
FirmwareOfficial sync + custom OTA upload, hard-blocked unless the Firmware is compatible with the Device's modelOfficial sync + custom upload, no model-compatibility linkManages its own hardware directly
SensorsDevice-attached Qwiic sensors (CO₂/humidity/pressure/temperature), exposed to Plugin templatesDevice-attached and server-attached (Raspberry Pi) sensors—
Sleep ModePer-Device night window that parks the Device until the window ends, with an optional dedicated sleep ScreenSupportedSupported

The short version: Kuroshiro trades Terminus's multi-user accounts and device-grouped playlists for a simpler single-admin, single-container deployment, while going further than either self-hosted option on per-Device-Model firmware safety and mixed fetch/literal Data Sources within one Plugin.

Every BYOS at a glance ​

TRMNL keeps a feature matrix of BYOS implementations. Here it is with Kuroshiro added, turned on its side so every server fits next to the others.

🟢 supported · 🟡 partially supported · 🔴 not supported or not implemented · ⚪️ unknown

KuroshiroNestJS / VueTerminusRuby / HanamiLaraPaperPHP / LaravelInkerJavaScriptBYOS Next.jsJavaScript / Next.jsBYOS FastAPIPython / FastAPIBYOS DjangoPython / DjangoBYOS PhoenixElixir / Phoenix
Dashboard🟢🟢🟢🟢🟢🟢🔴🔴
Auto-Provisioning🟢🟢🟢🟢🟢⚪️🔴🔴
Devices🟢🟢🟢🟢🟢🟢🟢🟢
JSON Data API🟢🟢🟢🟢🟢🔴🟢🟢
Image Previews🟢🟢🟢🟢🟢🟢🟢🟢
Playlists🟢¹🟢🟢🟢🟢🟢🔴🟢
Plugins🟢🟢🟢🟢🔴🟢🔴🔴
Recipes🟢🟢🟢🟢🟢⚪️🔴🔴
Sensors🟢🟢🔴🔴🔴🔴🔴🔴
Docker🟢🟢🟢🟢🟢🔴🟢🔴
Test Suite🟢🟢🟢🟢🔴🔴🔴🔴
Maintained🟢🟢🟢🟢🟢🔴🔴🔴
Semantic Versioning🟢🟢🔴⚪️🟢⚪️⚪️⚪️

¹ As a per-Device Rotation of Screens, each gated by its own day/time Schedule, rather than named playlists shared between Devices.

The other servers' columns are TRMNL's own assessment as of October 2026; the Kuroshiro column is ours.

Why it works the way it does ​

Every significant design decision, including the prior-art comparisons behind the table above, is recorded as an Architecture Decision Record. Browse them in docs/adr on GitHub, and the domain language they use in CONTEXT.md.

Released under the MIT License.