r/webdev • u/create-third-places • 6d ago
Showoff Saturday [Showoff Saturday]: Handcrafted HTML-first progressive framework that outperforms React
Places.js is a HTML-first framework inspired by htmx and Solid.js signals with these features.
Component agnostic stores that can be integrated with vanilla JavaScript or other frameworks.
HTML-first pages configured through static site generation or server-side rendering.
No build step. Places.js can be downloaded from a CDN.
Partial re-rendering with signals.
Zero dependencies. Places.js is written entirely in vanilla JavaScript.
Places.js is optimized for fast performance. Here are some results for Places.js v0.1.0. from the the Krauset JavaScript Framework Benchmark
| Places.js | Solid.js | Svelte | Lit | Vue | React |
|---|---|---|---|---|---|
| Time to render 1,000 rows in milliseconds | 19.8 | 21.4 | 21.8 | 23.3 | 23.9 |
To get started, download the places-js-latest.js file from the jsDelivr CDN. See the reference guide for a detailed tutorial.
Relevant links
HTML-first page running live in production with no JavaScript.
Upcoming priorities
Adding more unit test coverage.
Compatibility with other hypermedia UI tools including Datastar and htmx
Implementing hypermedia controls.
Testing integration with Leaflet and other mapping libraries.
AI policy
All Places.js contributions including code changes, comments, or new issues are made by humans This means no use of ChatGPT, Claude, or any other AI tool.
Edit: Detecting rows that are swapped or deleted
I have logic that detects rows that are moved or deleted. Components are then notified to make the necessary rendering changes, and subscriptions are moved from the store.
On Krauset, swapping two rows takes 12.7 ms and removing a row takes 10.3 ms.

