Replies: 20 comments 72 replies
-
|
What specific improvements are being planned for the handling of props, JSX attributes, and destructuring in SolidJS 2.0? Will this include simplifications for working with spread, binding, conditional logic, or destructuring directly within JSX? |
Beta Was this translation helpful? Give feedback.
-
|
@kachurun Thinking on what is possible and not being concerned initially with migration is exactly how I approach this. This isn't about fear of change. The problem with this stuff is it isn't a new problem, and in so many of the "solutions" aren't new. Many even predate Solid itself. So much so I find myself explaining why certain things don't work repeatedly. I'm happy to have the conversation over and over in hopes we gleam something new from it. We discuss this stuff on the discord all of the time. Solid's approach while novel from a popularity standpoint when I started was not that unique. Tools tried decorators + classes (very popular circa 2015). Tools tried purely Signals. Solid was actually created largely with the expectation everyone would use stores, and evolved from there. However we did something right to get this far. Obviously I'm biased as these are opinions I've formed using Signals the past 15 years. More than happy to look at specific concerns. Props as accessors have some issues worth talking about perhaps: https://www.reddit.com/r/solidjs/s/9hJ75MIpnh There is a non-compiled destructure helper in Solid Primitives that returns functions. If that is preferred way of setting defaults we can talk about. Something like: const { cond, class: className } = toAccessors(props, { cond: true });But that doesn't help with rest params as having an object of accessors won't spread properly. So still 2 helpers needed. It isn't all that different than |
Beta Was this translation helpful? Give feedback.
-
|
Resumability didn't make it into the plan? 🥲 |
Beta Was this translation helpful? Give feedback.
-
|
@ryansolid Do you have any plans to improve animation support in Solid? Something like Svelte’s API, which makes declarative animations easy and integrated, or even something similar to what Astro offers? |
Beta Was this translation helpful? Give feedback.
-
Any pointers on where to learn? |
Beta Was this translation helpful? Give feedback.
-
|
I know this convo is old and stale by now but I was thinking today that it would be really nice for Like, if we could pull off an API option that just allows us to do the same thing as the primitive without the promises/issues around the interface PermissionsStore {
workspaces: Record<Workspace['id], Workspace['role']>
repositories: Record<Repository['id], Repository['role']>
}
const [store, setStore] = createStore<PermissionsStore>({
workspaces: {},
repositories: {}
}, {
cache: true,
storage: 'session'
})Ran into this today going back into browser land. If there is already a way to do that which I'm ignorant of...please enlighten me! 🙏 |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Since a new release is being seriously discussed. I'd like to know the thoughts of HMR. I came across this thread: #2419 Will HMR be seriously tackled and resolved? So that it matches React? Many thanks! |
Beta Was this translation helpful? Give feedback.
-
|
I'm considering using SolidJS (just client side use of "Core" and some Solid Primitives) for a long term project. When the time comes to update the code from 1.x to 2.0, where do you expect (at this point in time) the required migration effort to land on a scale from "two core method signatures changed" vs. "due to conceptual changes in how things should be done in 2.0 you need to rewrite large swaths of code"? I watched parts of the excellent Signals 2.0: The Future of Signals stream and (from my currently very limited knowledge of SolidJS) it sounds like 2.0 will land more on the "simpler" side of that spectrum. Obviously there are things one can already do to make this easier, eg. from what I've gathered using Thanks |
Beta Was this translation helpful? Give feedback.
-
|
I'm loving Solid so far, especially when used to author webcomponents. Whatever changes v2 may bring, my wishlist is pretty short all things considered:
|
Beta Was this translation helpful? Give feedback.
-
|
Are we still in the "experimental" stage today? Are there any more recent updates? |
Beta Was this translation helpful? Give feedback.
-
|
can we expect universal rendering 2.0 breaking changes? React 19 added changes to the reconciler, changes can be expected for evolution @ryansolid |
Beta Was this translation helpful? Give feedback.
-
|
太棒了,我觉得solid以后会是前端框架看齐的标杆。 |
Beta Was this translation helpful? Give feedback.
-
|
Nice! |
Beta Was this translation helpful? Give feedback.
-
|
if I want to use solid2 experimental tag, where is the docs I should rely on? can't see a version switcher on the website. |
Beta Was this translation helpful? Give feedback.
-
|
Any update on solidjs v2 release candidate in 2026 Q1? |
Beta Was this translation helpful? Give feedback.
-
|
Now, after dividing the effects into two phases, should I duplicate the conditional logic in the calculation function and the application function? // 1.x (single function effect)
createEffect(() => {
const enabledVal = enabled();
if (enabledVal) el().title = name() + count();
}); |
Beta Was this translation helpful? Give feedback.
-
|
First of all, thanks for all the work on Solid 2.0. I’m very excited about the new version, but I have a few concerns about some of the upcoming changes. 1. The single-function
|
Beta Was this translation helpful? Give feedback.
-
|
Found the time to read all RFCs and build my opinion and early review and comments. It's a great job, guys, and I really like the overall direction of Solid 2.0. The strongest part of this release, in my opinion, is the broader effort to simplify the API surface and remove redundant concepts. Solid 1.x had too many places where the API felt more fragmented than necessary. Solid 2.0 seems to be moving in a much healthier direction. What I like the most: First of all, I like the DOM and API cleanup. I really like the removal of things like I also like the renaming and cleanup around helpers such as The unified I like derived writable state. Allowing a signal-like primitive to be derived from a function is a very appealing idea and removes a lot of boilerplate for “derived but locally writable” cases. Also, it's great that Related to that, the change with derived signals makes the boundary between signals and memos less obvious than before: So if signals can also be function-derived, then why do we even need to have The async changes are great if they work as I expect. Removing One question I would really like clarified is whether async memo composition works through the graph now and whether this code will finally work: const count = createMemo(async () => await fetchCount());
const double = createMemo(() => count() * 2);
return (
<Loading fallback={<p>loading...</p>}>
<p>{double()}</p>
</Loading>
);If the reactive graph correctly propagates suspension here so that I also like the idea of automatic batching and microtask scheduling overall. In general, I expect rendering and effects to happen once the graph settles, not eagerly after every setter call. However, the fact that a signal read immediately after a setter still returns the previous committed value until I understand the motivation behind renaming The split I also really like removing The store changes are also very strong. Draft-based store updates by default are a huge DX win, and writing updates like this: const [store, setStore] = createStore({ ... });
const handleClick = () => {
setStore(s => {
s.user.name = "John";
});
};is far more natural than path setters. One thought I had, though, is that if updates are already batched by microtasks by default, it becomes tempting to ask whether stores could eventually support direct mutation as the primary model, more like const store = createStore({ ... });
const handleClick = () => {
store.user.name = "John";
};The derived store APIs The unclear part of the proposals for me is the whole First, the generator-based const [name, setName] = createOptimistic("Alice");
const updateName = action(function* (next) {
setName(next);
yield api.saveName(next);
});it is not obvious what should happen after the action completes. Does the value revert back to "Alice" because the optimistic transition ended? If not, then how exactly does this example differ from a normal signal? This area of the RFC actually feels more like optional syntactic sugar for optimistic UI than something that clearly belongs in the core framework. Or at least it needs clearer documentation so that its value can be properly evaluated. Right now, this is the area that feels most like something I would expect to come from So overall, my impression is very positive. Keep going, guys, and thank you for your efforts! 🎉 |
Beta Was this translation helpful? Give feedback.
-
|
@ryansolid solidjs 2.0 will support mobile development? (https://lynxjs.org/) check this vue-lynx (https://vue.lynxjs.org/) you have seperated everything more like a modular approch? Then the way web and mobile app renders different . if we can get solid js support for lynx then it would be amazing part because other js based frameworks are too complicated!! If you can separate the core and make it more modular then it will open new opportunities to produce better developer experience. Then import thing is it has to be come from the design first The way lynx works is really interesting because they are using dual thread architecture |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hello everyone. I'd like to officially announce the beginning of our journey to Solid 2.0. We've done a lot of prototyping over the last few months and feel like we've gotten to a place where we can official start the process of developing Solid 2.0!!
For Solid 2.0 we are looking at features in a few key areas:
If you don't know what all of these are that's ok. This will take several months to complete and include multiple phases, the first we just entered as of today. You will be able to track the progress on the #next branch of the repo and on npm.
Experimental (2.0.0-experimental.x) - COMPLETE
This is where are today where we have an idea of what the client-side behavior is and are testing and finding holes with our assumptions. This phase is largely self-guided and will break even significantly between versions. It's even possible for previously published experimental versions to break due to dependency updates. Consider only the latest release of all related packages as truth.
The goal of this phase is to re-implement the equivalent of all client, ssr, and hydration for non-experimental 1.0 features, as well as implement any new features we feel are core to the experience. This requires a lot of experimentation and benchmarking. We are being aggressive during this phase so it may even include breaking changes that will never get into the final release. It is possible there will be performance regressions. This is about capability.
Alpha (2.0.0-alpha.x) - SKIPPED
This is the next stage when we feel the core behavior is presentable. This is when we will be writing up the formal RFCs and asking for more community feedback in terms of designs. The project should work with its base features end to end at this point but there are still opportunities for APIs and behaviors to wildly change between releases. We will use the feedback from the RFCs to hopefully bridge any gaps.
The goal of this stage is to have important core projects (Router/Start), infrastructure, and examples working with the 2.0 stuff to vet that the approach handles all the cases.
Beta (2.0.0-beta.x) - CURRENT
When we are content with the design and proposed implementation we will run a wider beta so that ecosystem libraries can try the new stuff. This is also when focus will be put on migration efforts(code mods) and documentation. At this point the API should be mostly stable but it will be possible that some behavior changes need to be tweaked. The goal of this phase will be to have the popular libraries like UI Components such as Kobalte, etc... and agnostic projects like Tanstack working with the 2.0 updates.
RC (2.0.0-rc.x)
These will be release candidates ready for final release.
Timeline
Given that we are in the experimental stage timeline is not available currently. It is really going to depend on how much help and feedback we get and how well we are able to address it. I will continue to reach out and provide updates to the community as the process continues. If you want to get involved in the day to day. Come the #next channel in Solid's discord. That is where all the relevant conversations are happening.
And with that, I want say it is a really exciting time and I hope you all join us on this journey to push the boundaries of frontend at their foundations.
Best,
@ryansolid and the SolidJS Core Team
Beta Was this translation helpful? Give feedback.
All reactions