SolidTV: The Fastest TV App Framework
By Chris Lorenzo · Published May 27, 2026 · 7 min read
I'm excited to officially announce SolidTV — a fork of the well established and popular LightningJS renderer, rebuilt for teams that need to ship 60fps TV apps on hardware that was never going to be fast.
I've spent multiple years building TV apps at scale. SolidTV is the framework I wish I'd had when I started with Lightning 2. What originally started as a "SolidJS integration with LightningJS Renderer" has become so much more… Rebranding became necessary as many folks don't know what LightningJS is.
Why fork?
I love what LightningJS started. But over the last year, the gap between what the upstream team was shipping and what my apps needed kept growing. I filed issues. I proposed patches. I watched them sit. At some point, "keep waiting" stops being a strategy. With AI, changes happen so fast... Owning the renderer means I can ship code at the speed of a startup rather than a large corporation who ships once a quarter. I had a lot of ideas for the LightningJS renderer, so I forked.
Doubled the FPS
The headline result, measured on a XumoTV:
Upstream LightningJS 3
~30 FPS
SolidTV
60+ FPS
That's not a microbenchmark. That's the same app, the same hardware, swapped renderer.
How? Three things, applied relentlessly:
- Killed the per-frame waste. The upstream update loop was doing real work every frame for nodes that hadn't changed. I re-walked the tree, split the children update loop on actual update type, and added translate-only and scale-only fast paths so static and lightly-animated subtrees cost almost nothing.
- Cut the garbage. Render loops that allocate stutter due to GC. I made the animation
map lazy-init, slimmed
GlyphLayout, made the texture upload queue allocation-light, and stopped re-resolving defaults on cache hits. - Cached aggressively. SDF text layout is now cached (with
wordBreak,maxLines, andoverflowSuffixin the key). Image decode overlaps with GPU upload. Transformcontainresults are memoized. The renderer stops recomputing things that didn't change.
That was just the beginning
A quick tour through the commit log:
Text rendering
- SDF text layout cache and a slimmed glyph layout — a major win on text-heavy screens.
- Cap-height centering and a new optical-center baseline mode, designed for mixed-case UI labels that look centered, not just measure centered.
verticalAlignthat works withoutmaxHeight(flex-friendly), plus proper baseline-anchored layout includinglineGap.- Baked node color into canvas text textures so emoji keep their colors through tint.
Shaders & visuals
- New RadialProgress shader, self-animating via
durationand a countdown — no per-frame JS needed. - New single-pass Blur shader.
- Border defaults to outside (centering with borders Just Works now).
- Gradient parity between WebGL and Canvas;
roundedWithBorderfixed on Canvas. - Bordered shader precision fixes for asymmetric borders.
- Chrome shader varying-pack compatibility for older WebGL stacks.
SVG
- DPR-aware rasterization, source-region crop, zero-copy upload.
- Stage
pixelRatio < 1now correctly preserved through the texture-dimension contract.
Animations
adaptiveDurationso animations stay correctly timed across variable frame rates.- Simple animation merge to reduce animation overhead.
Inspector & DX
componentNameandcomponentLocationso custom element nodes show up properly in the inspector.- Inspector allowed in non-dev environments.
- Alpha-update no longer leaks into text node opacity.
x,y,w,hmirrored on text nodes.
What's next?
Solid 2.0. SolidTV builds on SolidJS, and Solid 2.0 is around the corner. The new reactivity model lines up almost spookily well with how a TV scene graph wants to update — fewer wasted invalidations, tighter signal granularity, less framework overhead per node. I'll have more to say once it lands, but if you're building TV apps and you haven't looked at Solid yet, now is a great moment.
Try it
If you've been fighting LightningJS performance on real hardware, give SolidTV a shot with the demo app benchmark.
- Docs & site: solidtv.dev
- Renderer:
@solidtv/renderer - Framework:
@solidtv/solid - GitHub: github.com/solid-tv/solid