Started using SolidJS when 1.7 was current, been through enough version updates to know what breaks and what doesn't. Here's the brutal truth: it's fast as hell, but you'll spend weekends building things that just exist for React. The official ecosystem page makes everything look great, but reality is messier.
Build Tools: Actually Good
The build setup doesn't suck, which is saying something. Vite integration works out of the box and HMR doesn't break every 10 minutes like some frameworks I could mention. TypeScript support is solid (pun intended) – the JSX compilation actually understands what you're doing.
What works:
- Vite - Fast dev server, builds don't take forever
- SolidStart - Meta-framework that actually works (when it wants to)
- TypeScript - First-class support, IntelliSense doesn't lie to you
- Rollup - Library packaging works fine
- esbuild - Does the heavy lifting, you won't notice it
Build times are genuinely faster than equivalent React setups. We're talking 3-second rebuilds vs 45 seconds with Create React App. The Solid DevTools crash Chrome more often than my hopes of using a stable dev environment. Maybe 1 in 15 sessions if you're lucky. When they don't crash, signal flow debugging is actually useful.
UI Libraries: Kobalte or DIY
Kobalte is your best friend. It's basically Radix for SolidJS and actually implements accessibility correctly. Everything else? Good luck.
The realistic options:
- Kobalte - Headless, accessible, actually maintained. Use this.
- Hope UI - Complete library, looks decent, but customization can be a pain
- SUID - Material-UI port that works but feels like a translation layer
- Solid UI - Newer, smaller, might work for your use case
The ugly truth? You'll build half your components from scratch because the ecosystem has 3 decent libraries and 47 abandoned experiments. Spent 3 days on a fucking date picker because everything either broke accessibility or shit the bed on mobile Safari.
State Management: Signals Are Pretty Great
SolidJS's built-in signals and stores handle most cases without the Redux ceremony. Solid Primitives fills gaps with utilities you'd expect to be built-in.
State options:
- Built-in signals & stores - Covers 90% of what you need
- Solid Primitives - Reactive utilities like debouncing, storage
- TanStack Query - Server state that actually works
- Zustand - Framework-agnostic, if you want familiar patterns
The reactivity model is genuinely better than useEffect hell. Once you get signals, going back to React feels like working with stone tools. But debugging runaway effects is still a nightmare – they just happen at compile time instead of runtime.
Forms: Limited and Frustrating
This is where you'll miss React Hook Form the most. Felte is decent but has weird quirks with validation timing. Modular Forms is newer and type-safe but the API feels overengineered.
Form reality:
- @felte/solid - Most mature, but validation can be wonky
- @modular-forms/solid - Type-safe, complex API
- Roll your own - What most of us end up doing
Used Felte in production and it works, but the validation timing will make you question your life choices. Error states randomly disappear when you need them most, like they're playing hide-and-seek with your sanity.
Animation: Basically CSS or Tears
React spoiled us with Framer Motion. SolidJS? You get Motion One (5.8kb, hardware accelerated) or you write CSS keyframes like it's 2015.
Animation options:
- Motion One for Solid - Works for basic stuff
- AutoAnimate - One-line layout animations
- CSS animations - What you'll actually use
- WAAPI - Direct browser APIs when desperate
Designer wanted complex page transitions that looked "smooth and modern." Ended up writing 200 lines of CSS and vanilla JS because Motion One shit the bed trying to sync state changes. Three days of debugging why animations stuttered on Safari, only to discover it was a z-index issue. Motion One works fine for button hovers and spinners, anything complex and you're back to CSS hell.
Routing: Solid Router Does the Job
Solid Router is solid (sorry). It's not React Router but it handles nested routes, data loading, and doesn't randomly break your app state.
Routing features that work:
- Nested route definitions (actually work)
- Data loading at route level
- File-based routing in SolidStart
- TypeScript route parameters (when configured right)
- Server-side rendering support
The data loading patterns take some getting used to if you're coming from React Router, but the route data functions are more predictable than useEffect chains.
Testing: Solid Testing Library Gets the Job Done
Solid Testing Library follows the React Testing Library patterns, so your existing test knowledge transfers. Vitest is the recommended runner and it's genuinely fast.
Testing stack:
- Vitest - Fast test runner, Vite integration
- @solidjs/testing-library - DOM testing utilities
- Playwright - E2E testing (better than Cypress)
- MSW - API mocking that doesn't suck
Setup requires manual config because there's no Create React App crutch, but SolidStart gives you sane defaults. Spent a morning getting source maps working because Vitest decided to be special about TypeScript paths. Once you fight through the config hell, test runs are consistently under 2 seconds for a 300+ test suite, which is nice.
Deployment: Works Everywhere
SolidJS builds to static assets, so it deploys anywhere. SolidStart gives you adapters for major platforms when you need SSR.
Deployment platforms:
- Netlify - Static hosting, edge functions work
- Vercel - Edge runtime support is solid
- Cloudflare Pages - Fast edge deployment
- Any CDN - Static builds work everywhere
Cloudflare Pages deployment is usually under 2 minutes unless their CDN is having a bad day. No Docker hell, no webpack configs that break randomly, just git push and pray. Bundle sizes stay sane (around 45kb for a decent-sized app) which is a fucking miracle compared to React's bloat.
Production Reality Check
Yandex switched from React to SolidJS in 2022. CodeSandbox and Netlify use it in production. It's not a toy, but you need to know what you're signing up for:
The good:
- Build times that don't make you hate life
- Bundle sizes that won't break mobile users
- Performance that makes React look sluggish
- Reactivity that actually makes sense
- TypeScript support that works correctly
The frustrating:
- Smaller talent pool for hiring (good luck finding senior SolidJS devs)
- You'll build more custom components than you want
- Animation ecosystem is basically nonexistent
- Some third-party libraries just don't have SolidJS versions
- DevTools crash more often than they should
Current Status and What's Coming
SolidJS 2.0 is in development with compilation improvements, but it's still experimental. The current stable version is 1.9.x, which won't randomly break your shit in production.
The community is growing but Reddit discussions still revolve around "should I use this instead of React?" The Discord server is active and Ryan Carniato actually responds to questions.
Look, SolidJS is fucking fast and signals make sense, but you'll spend extra weekends building shit that React developers get for free. If you value performance over the comfort of 50 different form libraries, and your team won't mutiny when they can't find Stack Overflow answers, go for it. If you need to ship yesterday and can't afford to explain your framework choice to every contractor, stick with React's bloated ecosystem.