A Datastar plugin that provides property binding to sync element properties with reactive signals.
Datastar is a hypermedia-focused framework that brings reactive signals and declarative DOM manipulation to your HTML. It includes a built-in data-attr plugin for setting HTML attributes, but HTML attributes and DOM properties are not the same thing.
While data-attr works great for HTML attributes (like class, id, href), many DOM interactions require setting properties directly on elements instead. For example:
- Input
valueproperty (vs. thevalueattribute which only sets initial value) - Checkbox
checkedproperty (vs. thecheckedattribute which only sets initial state) - Element
disabledproperty for real-time form control - Custom properties on web components
This plugin fills that gap by providing a data-prop attribute that binds reactive signals directly to element properties — a concise shorthand for data-effect="el.prop = $signal" that also supports setting multiple properties at once via object syntax.
data-prop |
data-effect |
data-bind __prop |
|
|---|---|---|---|
| Binding direction | One-way (signal → property) | One-way (signal → property) | Two-way (signal ↔ property) |
| Syntax | data-prop:volume="$vol" |
data-effect="el.volume = $vol" |
data-bind:vol__prop.volume__event.change |
| Multiple props at once | ✅ via object syntax | Manual (multi-statement) | ❌ one at a time |
| Event-less properties | ✅ | ✅ | ❌ __event mandatory |
| Use case | Concise property push | Arbitrary JS side-effects | Two-way on custom elements |
npm install @mbolli/datastar-attribute-propThis plugin requires an import map to resolve the datastar module. Set up your HTML like this:
<script type="importmap">
{
"imports": {
"datastar": "https://cdn.jsdelivr.net/gh/starfederation/datastar@1.0.0-preview/bundles/datastar.js"
}
}
</script>
<script type="module">
// Import the plugin - it will auto-register with datastar
import 'https://cdn.jsdelivr.net/npm/@mbolli/datastar-attribute-prop@1/dist/index.js';
</script>Note: Using @1 will automatically use the latest v1.x.x version.
This plugin adds a prop attribute to Datastar that allows you to bind reactive signals directly to element properties (not HTML attributes).
<input data-prop:value="$mySignal" />This binds the value property of the input element to the mySignal signal.
<input data-prop="{ value: $mySignal, disabled: $isDisabled }" />This binds multiple properties at once using an object.
Run the automated tests:
pnpm testOr open index.html locally in a browser to interactively test the plugin with Datastar. The demo includes examples of:
- Single property binding (value, disabled, checked)
- Multiple property binding
- Different input types
- Dynamic updates
This project uses automated releases via GitHub Actions. When you push to main:
- Tests run automatically - Build and tests must pass
- Version bumping - Add to your commit message:
[major]for breaking changes (1.0.0 → 2.0.0)[minor]for new features (1.0.0 → 1.1.0)- Default: patch for bug fixes (1.0.0 → 1.0.1)
- Automatic publishing - Package is published to npm
- GitHub Release created - With auto-generated release notes
MIT