A Decade of SolidJS
Ryan Carniato

Ryan Carniato @ryansolid

About: Frontend performance enthusiast and Fine-Grained Reactivity super fan. Author of the SolidJS UI library and MarkoJS Core Team Member.

Location:
San Jose, California
Joined:
Jun 25, 2019

A Decade of SolidJS

Publish Date: Apr 24
183 26

As of today, it has been 7 years since I open-sourced SolidJS. It wasn't for noble reasons. I wasn't trying to show people the way. I wasn't trying to change the world. I just had one of those itches to scratch. It irked me some of the dialog I had seen online about fine-grained reactivity (not that anyone called it that back then). Something didn't sit right with me, and while I could have sat back in my armchair and continued being that old man shouting at the clouds, I decided I wanted to enter a benchmark to prove otherwise.

And thanks to that we have SolidJS today. Well, that and the next 7 years of mine and several other people's lives. But the story starts several years before that.


Journey into Open Source

SolidJS wasn't my first Open Source project. I got my start under the guidance of the company (Vidigami) I worked for 13 years ago. They maintained and built their libraries out in the open and I admit I could have cared less. I was so comfortable with my workflow from years of working in .NET in Visual Studio that if code didn't have IntelliSense with direct links to documentation I found it tedious. And no. Back in 2012, Sublime Text Editor did not have that capability.

Pretty early on, my very patient boss (and creator of Knockback) sat me down and was like, "You know Ryan, if you don't know how something works you can always just go into the modules and look at the source code." Obvious. I know. But suddenly a whole new world opened up to me. I had flashbacks to when I first learned to make websites in the late 90s by clicking View Source.

Still, I wasn't jumping to create PRs. I didn't feel any ownership until I was tasked with updating our application to use Web Components. And that is when I finally made open source work for me. I found libraries with the polyfills I needed. I made some of my own internally. And I used that experience to create my first libraries: component-register a way of authoring web components using functional composition instead of classes, and webcomponent-router a nested router that used light/shadow DOM projections.


React's Monumental Rise

So skip forward a couple of years and it is Fall 2015. And I'd recently seen Ryan Florence's React Hype talk:

I saw the stock ticker demo and I kept thinking, "Who sends the whole page of data over and over again from the server? React is super fast here, but you've already lost."

I had no idea how I was going to solve this with my beloved KnockoutJS. I knew it didn't matter but I couldn't let it go. I watched early React talks from Pete Hunt and the gang and I thought "How could this possibly be the best thing we can be doing?" And yet Knockout was a dead project and everywhere I looked people were flocking to React.


Humble Beginnings

Over the summer of 2015, shortly after my daughter was born, I started playing with building the reactive library that would become SolidJS. I found myself up all hours of the night and my mind kept going back to this problem space. For the most part, it was something that I'd tinker with occasionally at the end of my work day, and it wasn't until the holidays I finally consolidated it.

It took another few months to finish up a basic renderer. I committed in a private BitBucket called "framework" and that was where SolidJS found its first home. Honestly, it looked a lot like Vue (with like "s-if" bindings) except like Knockout I used composable Signals instead of configuration objects. It also didn't have a VDOM. I used the same approach Knockout did fine-grained data-bindings.

I sought out every benchmark I could find. In some it was fast but in others (including Ryan's) it was slow, or complicated to write. I spent the next 2 years trying many approaches to understand what was performant and what was not. I refined APIs (including switching to JSX) until sometime in early 2018 when Solid reached a point where it outperformed all the popular solutions in every benchmark I could find. I was finally ready to officially submit it. To do that I needed to publish the library and I did so on April 24th, 2018.

And sure enough, SolidJS's initial version jumped straight to the front of the JS Framework Benchmark. Of course, I was politely told by the maintainers that I had cheated. So it took a few more tries to solve common problems generically. It took almost a year until my birthday in 2019 for SolidJS to legitimately reach the front of the pack.


Taking things Seriously

Now I probably would have just dropped it then and gone back to grumbling from my chair about the good old days of Knockout. But something happened between open-sourcing the project and reaching my goal. Dan Abramov came on stage October 26th, 2018 and unveiled Hooks to the world:

I never thought React would promote composable primitives. It looked just like SolidJS. I had chosen JSX ultimately as our templating language for portability as it fit well with our function components. Solid Components are just functions that run once and have no internal state so unlike React, Classes never made any sense for us.

And here Dan was on stage showing something that looked almost identical. Now I had a new mission: show that this fine-grained model was capable of doing everything you could do with a VDOM, without one. I knew performance wasn't a barrier, so it was a question of whether the model was powerful enough. I may have started this journey inspired by Web Components, and nerd-sniped by a performance demo, but now I had something real to show.

So I implemented Suspense, Transitions, HMR, SSR, Hydration, and Streaming over the next 2 years. These problems were similar but required completely different solutions than those used for a VDOM. While we didn't invent any of these concepts no one had solved them in a Fine-Grained model.


Spreading the Word

Admittedly, I had done zero marketing. I had written some technical blog posts but I did not know how to market the project. I hadn't even joined any social media platforms since Facebook which I had stop using back in 2008. So when I joined Twitter December 2019 I had no idea what I was getting into.

I tried to engage people on Twitter and realized very quickly people had no idea what I was saying. They treated me like I was crazy. It was like they'd fact-check me, pulling in the experts. I tried to put ideas out to other framework authors and was mostly shot down immediately. There were a few exceptions, like Dominic Gannaway (creator of Inferno) but it was clear to me every solution was quite content with the space they had carved out for themselves. And more so Solid threatened that.

It wasn't with the React folks that I felt the hostility from as much as the smaller libraries. They contended that what they could do wasn't possible with JSX and there was a clear decision you needed to make between DX experiences. React had educated the ecosystem in a certain way and all the others re-enforced those boundaries, and I sought to tear them down. There was no reason we couldn't have all of the above and do it better than how things were done.

The average developer had gone through a few years of JavaScript fatigue which was very much still a fresh topic at the time, so a new framework was the last thing anyone wanted. People were angry. I got accused of doing it to try to move up the ranks at the large company I worked for. This was eBay at the time, where ironically I was working on a different JS framework, Marko, as my day job.

So yeah, I ran into some friction and I wasn't so versed in social media to understand what HTMX came to know. Memes win the day regardless of whether you have anything of substance to say.

To be fair, I didn't see what I was doing as self-promotion. I was building and learning in public. I'd write articles and do long un-markettable live streams. I didn't feel that I created something, as much as I discovered something obvious if you just laid out everything in front of you.

Signals and fine-grained rendering were capable of everything you could do with a VDOM with similar or even better DX. A problem you could solve by diffing could probably be solved better by not diffing. Everyone was so intent on carving their own space that they didn't stop to ask if the boundaries were something we artificially made.


Finding Allies

I started SolidJS very much on my own. I added Spectrum and Gitter chats and found support by sharing my ideas, but it wasn't until David Di Biase reached out that I found someone willing to put time into making the project successful. We brought on others over time as they were available to work on projects. Alexandre, Milo, Ryan, Dan, Nikhil to begin with and so many others afterwards.

We used our OpenCollective to sponsor two hackathons(SolidHack) to bring in missing parts of the ecosystem like component libraries. We funneled our donations into the Solid Fellowship program to support important initiatives like Dev Tools and Documentation. We found friends in content creators who were open to newer ideas. People like Jason Lengstorf, Theo Browne, Jack Herrington. I started speaking at conferences and meeting people from around the world who would advocate for Solid like Daniel and Atila.

But most of all we just kept doing what we were doing. We released 1.0 in the Summer of 2021. This would kick off a revolution that I never could have predicted when I first started.


Signals Everywhere

In 2015, no one would be caught dead saying "Knockout always had it right." Hell, few people would have said that in 2018 or even 2020. It is because this has so little to do with Knockout other than inspiring the creation of SolidJS. In 2025 you would be hard-pressed to find a popular frontend library that doesn't work or is in the process of migrating to work the way SolidJS does. In 2018 there were zero, and now almost every notable framework other than React has jumped on board. So what happened?

It didn't happen overnight. My shouting out into the void caught the particular attention of one audience. Framework authors. It was my articles on SolidJS that got me hired by eBay, and it was those articles many published incidentally through a primarily Angular publication (thanks @layzee) that got my writing in front of the folks on the Angular team. This would start a multi-year conversation with Pawel Kozlowski that would ultimately lead to Angular Signals.

I convinced Misko Hevery that Signals were what he was missing to achieve true Resumability in Qwik. We'd nerd sniped Jason Miller (Preact) and crew around some of the performance we were getting with Signals. After early pushback, convinced Evan You (Vue) and Rich Harris (Svelte) that Fine-Grained rendering was the future, as they'd go on to create Svelte Runes, and Vue Vapor. Vue on its way to giving up its Virtual DOM, and Svelte giving up its all-compiler approach to doing runtime reactivity. And now both are nearly indistinguishable in output from SolidJS. Hell, there is even a TC-39 proposal for Signals now for the browser.

The only audience that wasn't convinced was React, but to be fair this solution was never for them. It was born out of not accepting all the conclusions they had made. I've learned an immeasurable amount from React over the years, but you don't evolve if you don't challenge baseline assumptions.


Another Decade of SolidJS

Open-source is a funny thing. Over the last 5 years, I've been fortunate enough to find support from companies like eBay, Netlify, and Sentry to work full-time on it, but it didn't start that way for me and it isn't a possibility for everyone. It takes time it takes patience, and it is often thankless. People are critical of it the same way they are of a paid product, without realizing most people aren't receiving any financial compensation for their efforts. It means that can't judge a project's health or people's dedication to these projects in the same way.

At this point, this project has been a significant part of my life. It is almost funny to read comments on Hacker News (they never change) that at this point worry about me deciding to drop the project. How long did they wait for React to be around to jump on the bandwagon back in 2015... less than 2 years? Have we just gotten older as an industry? Are those who preached change now so afraid of it?

As for SolidJS's future, there is a discussion that now Svelte and Vue have changed themselves to be nearly identical, are we just done? Did we succeed at what I originally set out to do?

We did succeed at that. But for me, I accomplished that goal 6 years ago. The rest of this is inertia catching up with the inevitable. My whole perspective has grown and changed over the last several years. We don't live in a vacuum and we constantly learn from what is around us. We haven't sat still waiting for everyone to catch up.

The difference in time between SolidJS being released and other solutions getting here is the same amount of time between the initial release of jQuery and React. This journey is still early. Picture if we had the same sort of resources React has had over the years to explore this direction. I had to work hard to prove that we could do everything other solutions could. What if we instead put that effort towards unlocking capabilities unique to the model that other solutions haven't even imagined?

That keeps me busy and gives the project direction. There are still ways to make Web Development better and that energizes me. If what we accomplished as a small force in a hostile environment is impressive, imagine what we can accomplish with that many more people living and working in this space. This is only the beginning of the journey.

While it is true most developers that will pick up a frontend framework have no idea of what goes into building one. They might even think syntax is the most defining feature. At some point someone has to create the actual technology and that is an effort worth exploring and investing in.

Comments 26 total

  • Nevo David
    Nevo DavidApr 24, 2025

    This is crazy inspiring - sticking with something for years just to see it actually move the whole space forward. Makes me want to double down on my own ideas even if nobody cares yet.

  • Scott Lott
    Scott LottApr 24, 2025

    So happy to be here to watch this story unfold! Amazing work Ryan, I hope I can get SolidJS into all my projects moving forward!

  • Mahmoud Harmouch
    Mahmoud HarmouchApr 24, 2025

    Something didn't sit right with me,

    Same here. But, for me, it's the entire JavaScript ecosystem that feels fundamentally broken.

    And thanks to that we have SolidJS today.

    Yes, signals all the way, by the way!

    So I implemented Suspense, Transitions, HMR, SSR, Hydration, and Streaming over the next 2 years.

    That's impressive. Those are core features of modern frontend development, building all of them shows deep expertise and long-term vision. Keep it up!

    They treated me like I was crazy. It was like they'd fact-check me, pulling in the experts.

    That just proves how far ahead you were. True innovation often looks like madness until it works.

    The average developer had gone through a few years of JavaScript fatigue

    That's why I am skipping the JS ecosystem altogether because it doesn't make any sense, especially TypeScript. As a rule of thumb, It's better to build with a cleaner, more predictable stack, WASM all the way.

    Thanks for the article. Time to invent something beyond signals, written in Rust, of course.

    Till next time 👋!

    • Ryan Carniato
      Ryan CarniatoApr 25, 2025

      Have you checked out Leptos. Always like to give my guy Greg a shoutout for his great work. I think WASM has some interesting potential in the long term. Unfortunately it is several years off being able to be the general solution. That being said in terms of raw performance in the browser it isn't being held back. It's too bad that the loading characteristics are a bit prohibitive.

      • Mahmoud Harmouch
        Mahmoud HarmouchApr 25, 2025

        Have you checked out Leptos. Always like to give my guy Greg a shoutout for his great work.

        Yup! I'm building reusable components for Leptos as well. Like Dioxus, it follows a reactive paradigm using signals. However, Leptos is a lot more rigid and not as flexible as Dioxus. The reason for that is Leptos is heavily focused on squeezing out every bit of performance, often at the expense of developer experience.

        For example, I struggled quite a bit while adding support for Leptos in the Open SASS components. In one issue, I mentioned how difficult it was to make the view! macro more flexible; It was a real pain building a complex UI in Leptos. It's definitely doable, but not without friction.

        It's too bad that the loading characteristics are a bit prohibitive.

        Yeah, there's still room for improvement in the WASM space. But it's definitely the way forward!

  • Miha Mulec
    Miha MulecApr 25, 2025

    I get what you're saying with self promotion & reaching a larger audience through meme's and such, but I think your route was very valid as well.

    Your approach was authentic to you (or seems that way) & so it found the right audience for you/Solid i.e. people that wanted to go in-depth & try out "something different". This, I think, is much more important than reaching a larger audience, that wouldn't fit as well.

    Also as someone who found your livestreams early in their dev journey I found the wealth of knowledge you shared in them incredibly inspiring, they helped me grow into the kind of dev I am today :)

    My point is, I (and a lot of others) think you're rockin it & can't wait to see whats comming next!

  • Sergiy Yevtushenko
    Sergiy YevtushenkoApr 25, 2025

    Congratulations! Amazing work and absolutely enormous efforts to make it happen. 🎉

  • Peter Mbanugo
    Peter MbanugoApr 25, 2025

    This is inspiring, thanks for sharing.
    This was funny to read:

    React had educated the ecosystem in a certain way and all the others re-enforced those boundaries, and I sought to tear them down. There was no reason we couldn't have all of the above and do it better than how things were done.

    As someone who started advocating to devs to try other solutions beyond React (e.g. HTMX and now Solid), I find that most devs are not willing to think outside of their Udemy course or traditional stack. They're either fanboys of Next.js and does/use whatever three letter acronym they decide is the best, or they just want to use what's popular and would get them employed.

  • Rense Bakker
    Rense BakkerApr 25, 2025

    Svelte and Vue are not doing the same thing. While state management is one of the most important things in modern frameworks, it's not the only thing that's important. Personally I will never go back to writing horrible diarrhea like <div *ngIf="crap">shit<div> in a markup language. It violates every developer principle that I can think of and I don't understand why large groups of developers keep going back to it and even producing more poop like htmx.

    • Ryan Carniato
      Ryan CarniatoApr 25, 2025

      This is a common misconception. I'm not just talking about state management with Signals. I'm talking about the approach to rendering, like how DOM updates are determined, and scheduled. Things like VDOM vs Dirty Checking vs Fine-Gained updates. Things like per element creation vs cloning. Use of intermediate structures versus not.

      The compiled output of both Svelte 5 and Vue Vapor looks eerily similar to the compiled output of SolidJS, a large departure from how they worked previously.

      As I said in the closing people overindex on syntax but at this point we are just seeing different syntax compiling to the same output in these cases. The truth is before SolidJS, Vue and Svelte were more like React. And ironically although Solid's syntax is closer to React it was the least architecturally like React of the bunch.

      I'm not saying that syntax isn't important, but I've always been someone who cares about UX (what the end user gets) more than anything else. So when they are basically getting the same code, I call it as I see it.

      • Rense Bakker
        Rense BakkerApr 27, 2025

        Ok, yes I can see the relation between state management and rendering, maybe in that regard my initial statement was a bit blunt, but I do care about syntax and for me it makes solidjs stand out from the rest.

        I am glad that you say UX is important to you though, because I expect a framework to play a big part in solving UX for me (reduce bundle size, resource usage, etc).

        Btw, for someone who says they find UX more important than anything else, the DX of SolidJS is pretty good 😉

  • Tito
    TitoApr 25, 2025

    Congratulations Ryan! and many thanks, Love your projects, dedication, and the way you share and think your ideas/concepts out loud while full of kindness. Also, the community, its leadership and related projects are source of inspiration and admiration. Lot to learn and share ahead!

  • csm
    csmApr 25, 2025

    @ryansolid
    Back then, what was running in your mind when you got started on this project?
    Like, if I start a project that for sure is a big, impossible looking one,and I have zero knowledge on the subject matter.
    How were you were able to work on it consistently until you reach that point where we start to feel it to be something real and important.
    And what was your approach to learning something that you don't know and is totally a big, new, over-the-head going thing!

    Just eager to know!

    • Ryan Carniato
      Ryan CarniatoApr 25, 2025

      I didn't realize how big of a thing I was biting off. Web software was a bit simpler back then. I'd been doing a lot of destructive refactoring at work.. ie work that involved deleting more code than writing code. So I was like can I make something like Knockout that was simpler. Do I need all these features?
      It always kept each part of the scope manageable for me. I saw each piece as a bunch of independent libraries not a single thing. Like if I didn't like the reactivity I could swap it.. if I didn't like templating I could replace it. At times I used existing libraries for certain pieces.
      Although a few years later, my earliest article talks a bit about this process: medium.com/@ryansolid/b-y-o-f-part...
      Honestly, for me it was just about starting small and seeing what was possible. I may have had a goal in mind but I kept an open mind to what it would look like.

      • csm
        csmApr 25, 2025

        Thank you. It just opened something in my mind!
        Thank you!

  • Darko Bozhinovski
    Darko BozhinovskiApr 25, 2025

    Keep on rocking 🤘

    You've done some amazing work so far, and here's to the next 10 🍻

    btw, the whole story reminds me a bit of the story of Linux. More precisely, the famous Torvalds / Tanenbaum debate. How it started, and where it ultimately ended up 😁

  • Abraham
    AbrahamApr 25, 2025

    I love this! Well done. I'm going to try SolidJS because of this origin story 😁

    On another note this reminds me of rendering methods for desktop apps, windows went from GDI manual work to GDI+ and WPF and today's MAUI. Legitimately can see how they're working on separating the visible tree and the logical tree, this you get to also see on things like GTK and QT.

    But beautiful journey here's to many more!

  • Emily Marigold Klassen
    Emily Marigold KlassenApr 25, 2025

    Well, I can't say that I had the same experience of patience with our boss at Vidigami, but I was at a fairly different place in my life and career. I'm happy for you man, you've gone far.

    • Ryan Carniato
      Ryan CarniatoApr 25, 2025

      I think this was the only place he was patient. I did not think he was patient at all at the time. In fact, I was a little terrified of him. But in hindsight that aspect around open source he let me push back on way longer than he should have. And once he left a year or so later I was left holding the bag on all this stuff so if I hadn't started down that path I wouldn't have been able to manage things afterwards.

      Thanks Emily.

  • Lubos from Hey API
    Lubos from Hey APIApr 26, 2025

    I’m a huge proponent of SolidJS and swear by it at Hey API. What do you think needs to be done today/in the next couple years for Solid to become The JavaScript Framework™?

  • Alex Lohr
    Alex LohrApr 26, 2025

    I was disillusioned with most frameworks when I first found out about Solid. Then I had a closer look at the inner workings and to my surprise found something unreasonably sensible.

    Ryan even answered some of my first questions himself. That's when I joined the community and I cannot possibly understate how wonderful a community it is.

    I am looking forward to 2.0. The road ahead seems promising.

  • Basarat Ali Syed
    Basarat Ali SyedApr 27, 2025

    The reason why I advocated for solid is two fold. Fine Reactivity (like mobx) and TSX.

    Lack of focus on tsx still sets solidjs apart.

    If you’re not levering the Microsoft effort on TypeScript/ TSX, you're tackling a simpler problem (reactivity) and a harder problem (dev tooling) all by yourself 😂

    Well done solid. You did it right 🌹

  • Lars Gyrup Brink Nielsen
    Lars Gyrup Brink NielsenApr 28, 2025

    Thanks for the shout out, Ryan. I always believed in you and that you would accomplish something with Solid. Keep going strong!

  • Dev Geos
    Dev GeosApr 29, 2025

    This is inspiring.
    I've also been developing lonely Mod-css for a few years. And it started out as a result of dissatisfaction with Bootstrap and Tailwind. I wanted more possibilities and more flexibility to customize my components quickly.

    The major difficulty in these projects is the lack of support. Working on your vision without a large audience can be discouraging in the long run. But I'm a bit like you, the desire to follow through with my ideas to check if I'm not crazy takes over every time.

    From this, I had the idea for another project derived from the first one to create and configure reusable components. Like the first one, I want to simplify the creation of components in a fun and intuitive way, "JavaScript object like". The basic engine is ready, I will see if it meets the needs of a concrete project....

    Thank you for this long and brilliant testimony, it's encouraging.
    (Sorry for my bad English)

  • Beingana Jim Junior
    Beingana Jim JuniorMay 1, 2025

    I remember when Solid was still in its early stages, I was 15 years and also playing around with my Virtual Dom library trying to understand the inner working of UI frameworks. Solid js concepts used to fascinat me considering how game changing they were. Always wished to contribute to it. I guess it's high time I did contribute to it and fulfill my childhood dream.

    Nice work Ryan. It's efforts of people like you that keep inspiring us to build open source.

Add comment