{"full_name":"solidjs/solid","owner":"solidjs","name":"solid","url":"https://github.com/solidjs/solid","description":"A declarative, efficient, and flexible JavaScript library for building user interfaces.","homepage":"https://solidjs.com","topics":[],"language":"TypeScript","license":"MIT","avatar":"https://avatars.githubusercontent.com/u/79226042?v=4","created_at":"2018-04-24T16:36:27Z","pushed_at":"2026-11-10T09:33:20Z","metrics":{"stars":36358,"forks":1157,"watchers":228,"issues":2019,"prs":1666,"releases":217,"issues_open":null,"issues_closed":null,"prs_open":null,"prs_closed":null,"prs_merged":null,"discussions":825},"growth":{"day":{"stars":5,"forks":0,"base_day":"2026-11-09"}},"history":{"dates":["2026-11-09","2026-11-10"],"stars":[36353,36358],"forks":[1157,1157],"watchers":[228,228],"issues_open":[null,null],"prs_open":[null,null]},"boards":{},"same_owner":[{"full_name":"solidjs/solid-start","name":"solid-start","boards":{}}],"issues":[{"number":1834,"title":"Declarative Shadow DOM","comments":11,"created_at":"2023-08-01T22:27:40Z"},{"number":1877,"title":"Add low-level suspense primitive","comments":8,"created_at":"2023-09-09T11:36:36Z"},{"number":2475,"title":"reconcile: support \"merge\" in objects","comments":6,"created_at":"2025-05-08T09:05:32Z"},{"number":2138,"title":"Cannot use istanbul ignore comments for generated code","comments":5,"created_at":"2024-04-18T21:37:57Z"},{"number":2376,"title":"Hope to provide Keepalive component","comments":3,"created_at":"2024-12-06T19:53:36Z"},{"number":4709,"title":"[2.0 rc.21 / next] renderToStream: a value that fails to serialize inside the write before the first flush still sends the shell and calls onCompleteAll","comments":2,"created_at":"2026-11-07T03:29:58Z"},{"number":4447,"title":"[2.0] Proposal: `independent()` for separate atomic update groups","comments":2,"created_at":"2026-10-30T08:23:14Z"},{"number":1742,"title":"Updating onchange causes sibling to mount/unmount","comments":2,"created_at":"2023-05-28T02:39:40Z"}],"discussions":[{"number":4628,"title":"Sarala: a WYSIWYG Markdown editor built with SolidJS, and keeping 12,000 blocks fast","comments":0,"category":"Show and tell","created_at":"2026-11-02T20:10:34Z"},{"number":4496,"title":"updates to a Input's disabled property causes the value property to reset","comments":0,"category":"General","created_at":"2026-10-30T18:45:48Z"},{"number":4265,"title":"External client-reactivity traces for batching and root disposal","comments":0,"category":"Show and tell","created_at":"2026-10-25T18:31:08Z"},{"number":4257,"title":"Seeking apprentices from a rival reactive religion 🙏","comments":0,"category":"Show and tell","created_at":"2026-10-24T14:28:23Z"},{"number":4236,"title":"Serializing the reactive graph for hydration: a prototype and measurements","comments":2,"category":"Ideas","created_at":"2026-10-23T04:57:59Z"},{"number":4175,"title":"Feedline Labs 2.0 - Solid JS 2.0 Conversion/Rewrite","comments":0,"category":"Show and tell","created_at":"2026-10-20T20:12:52Z"},{"number":4091,"title":"Is SolidJS now a fully AI-driven project?","comments":0,"category":"General","created_at":"2026-10-15T07:32:00Z"},{"number":3905,"title":"Idea: let an unrelated write publish during a refresh by forking only the nodes it overlaps","comments":0,"category":"Ideas","created_at":"2026-10-08T06:55:57Z"}],"latest_release":{"name":"v1.9.0 - LGTM!","tag":"v1.9.0","published_at":"2024-09-24T21:32:04Z","body":"This release like the last is focusing on small quality of life improvements and adjustments that will help us move towards 2.0. So while not the most exciting release to everyone it provides some really important features and fixes to some developers.\r\n\r\nAnd unlike many previous releases the vast majority of the work and features came from PRs from the community. So really all I can say is Looks Good to Me!\r\n\r\n## Better JSX Validation\r\n\r\nWhile still incomplete across templates we've added JSDOM to the compiler to better detect invalid HTML at build time by comparing what we expect the template to be with what a browser would output. This now includes things that are nested we didn't detect before like putting `<a>` inside other `<a>` tags which will lead to the browser \"correcting\" it in less than intuitive ways.\r\n\r\n\r\n## Improved Exports\r\n\r\nWhile each environment in `solid-js/web` has its own methods to be used in the compiler. We are now exporting the client methods from the server to prevent weird import errors. Now these methods will throw if used in this environment but shouldn't break your build.\r\n\r\nAdditionally we have seen some issues in bundlers that incorrectly feed our ESM exports back through the browser field. While this is a known issue they all pointed issues at each other and with no intention of fixing it. We have removed the browser field in this release, meaning some legacy packages may have issues resolving browser if they don't support export conditions.\r\n\r\nThis is regretful but this blocked deployments on several platforms and since this was the only fix at our disposal after two years of attempting to push this issue to the bundlers to no avail, we've moved forward with it.\r\n\r\n## Custom Element improvements\r\n\r\nWe have a few improvements to our custom element support in this release. First off we now detect elements with the `is` attribute as custom elements which means all the special behavior is afforded to them.\r\n\r\nWe've also improved our event handler delegating retargetting to better handle shadow DOM events. There were cases where we skipped over part of the tree.\r\n\r\nFinally we've added the `bool:` attribute namespace to handle explicitly setting certain attributes according to boolean attribute rules. While this isn't necessary for built-in booleans currently we handle most attributes as properties and we lacked a specific override. But now we have it:\r\n\r\n```js\r\n<my-element bool:enable={isEnabled()}></my-element>\r\n```\r\n\r\n## Support for handleEvent Syntax in Non-Delegated Events\r\n\r\nA little known thing is that events actually also support objects instead of functions (See: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener)\r\n\r\nWe(thanks @titoBouzout) realized we can use this mechanism as a way to set advanced rules like `passive` or `capture` on this object as way to handle all current and future event attributes that browsers might add. This way we don't need specific mechanisms like `oncapture:` (which is now deprecated).\r\n\r\nInstead using `on:` you can set the event properties you wish.\r\n\r\n```js\r\n<>\r\n  <div on:click={{\r\n    handleEvent(e) {\r\n      console.log(\"clicked\", e)\r\n    },\r\n    once:true\r\n  }/>\r\n  <div on:wheel={{\r\n    handleEvent(e) {\r\n      e.preventDefault() // only works on not passive events\r\n      e.stopPropagation()  \r\n      console.log(\"wheel stopped?\")\r\n    },\r\n    passive: false\r\n  }} />\r\n</>\r\n```\r\n\r\n## Other Updates\r\n\r\nWe've fixed an issue with lazy images. Apparently, cloneNode doesn't handle them properly so we've updated our heuristic to treat templates with lazy images to be handled with `importNode`.\r\n\r\nWe've improved our Hydration Mismatch Error to output the template of that it can't find the matching ID for. This should make it easier to track down where the hydration errors are occurring. There have been several hydration improvements over the later 1.8 releases so upgrading will likely improve the situation for those who have been facing issu"},"readme":true,"readme_zh":false,"news":[],"stale":false,"snapshot_at":"2026-11-10T09:35:25Z","history_start":"2026-09-06"}