Solidstar is an almost drop-in replacement of Datastar with Solid reactivity under the hood, enabling interoperability between hypermedia-driven frontend logic and Solid components.
Quick Start • Stackblitz • Comparison • Guide • API Docs • Changelog • Discord
// index.tsx
import { customElement } from "solid-element";
import { signals } from "solidstar";
customElement("my-counter", () => (
<button onClick={() => signals.count++}>{signals.count}</button>
));
index.html
<script type="module" src="index.tsx"></script>
<div data-signals-count="0" data-text="$count"></div>
<my-counter></my-counter>
Tip
Try it out on Stackblitz!
npx giget@latest gh:solidstarjs/solidstar/template#solid my-app
cd my-app
npm install
npm run dev
Note
Use Datastar directly instead, if you do not need Solid components!
<script type="module" src="https://cdn.jsdelivr.net/gh/solidstarjs/solidstar@0.2.2/bundles/solidstar.js"></script>
Import solidstar/core
instead of solidstar
to optimize your bundle.
export * from "solidstar/core";
import { load } from "solidstar/core";
import * as Plugins from "solidstar/plugins";
// Specify the plugins you want
load(
Plugins.Class,
Plugins.Signals,
Plugins.Text
);
Tip
Try it out on https://bundlejs.com!
You can use Typescript declaration merging, to declare available signals in your app.
declare module "solidstar" {
interface Signals {
count: number;
optionalText?: string;
foo: {
bar: number;
}
}
}
Subject | Datastar | Solidstar |
---|---|---|
Size (Gzipped) | 10.7 KiB | 14.7 KiB |
Solid interoperability | ❌ | ✅ |
Access signals via import | Use a plugin | import { signals } from "solidstar" |
Extendable signals type | ❌ | Learn how |
Recommended component helpers | ⏸️ Work-in-progress (ion) | Solid, Solid Element |
Recommended install method | No bundler, Local copy, CDN | npm, bundler required for Solid components |
Bundle customization | 💲 Bundler | Learn how |
Advanced debugging tool | 💲 Datastar Inspector Optimized for hypermedia |
Solid Developer Tools Optimized for Solid components |
Latest signals technology | ✅ (Alien signals) | ⏸️ Work-in-progress |
Computed's run lazily | ✅ | ❌ |
Supports data-on-signal-patch | ✅ | ❌ (Currently) |
Optimized for MPAs | ✅ | ❌ |
Solidstar's signals
object is based on Solid's createMutable. Accessing undefined signals behaves slightly different compared to Datastar's implementation:
Code | Datastar | Solidstar |
---|---|---|
$null |
"" |
undefined |
$null.length |
0 |
Throws error |
$null.title.length |
Throws error | Throws error |
Tip
Use the optional chaining operator to prevent errors when accessing optional signals:
$null?.title?.length