npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

deka-dom-el

v0.9.5-alpha

Published

A low-code library that simplifies the creation of native DOM elements/components using small wrappers and tweaks.

Downloads

56

Readme

Alpha | Docs&Examples | NPM | GitHub (Gitea)

Vanilla for flavouring — a full-fledged feast for large projects

// 🌟 Reactive component with clear separation of concerns
document.body.append(
	el(EmojiCounter, { initial: "🚀" }),
);

function EmojiCounter({ initial }) {
	// ✨ - Define reactive data
	const count = S(0);
	const emoji = S(initial);
	const textContent = S(() => `Hello World ${emoji.get().repeat(count.get())}`);

	// 🔄 - UI updates automatically when signals change
	return el().append(
		el("p", { textContent, className: "output" }),

		// 🎮 - Update state on events
		el("button", { textContent: "Add Emoji" },
			on("click", () => count.set(count.get() + 1)),
		),

		el("select", null,
			on.defer(el=> el.value= initial),
			on("change", e => emoji.set(e.target.value)),
		).append(
			el(Option, "🎉"),
			el(Option, "🚀"),
			el(Option, "💖"),
		),
	);
}
function Option({ textContent }){
	return el("option", { value: textContent, textContent });
}

…use simple DOM API by default and library tools and logic when you need them

Deka DOM Elements (dd<el> or DDE)

Creating reactive elements, components, and Web Components using the native IDL/JavaScript DOM API enhanced with signals/observables.

Features at a Glance

  • No build step required — use directly in browsers or Node.js
  • Minimalized footprint — ~10-15kB minified bundle (original goal 10kB), zero/minimal dependencies and small in-memory size (auto-releasing resources as much as possible)
  • Declarative & functional approach support for clean, maintainable code
  • Signals and events for reactive UI
  • Memoization for performance — optimize rendering with intelligent caching
  • ☑️ Optional build-in signals with support for custom reactive implementations (#39)
  • ☑️ Server-side rendering support via jsdom
  • TypeScript support
  • Support for debugging with browser DevTools without extensions
  • ☑️ Enhanced Web Components support

Getting Started

Quick Links

Installation

npm install deka-dom-el --save

…or via CDN / Direct Script:

For CDN links and various build formats (ESM/IIFE, with/without signals, minified/unminified), see the interactive format selector on the documentation site.

<!-- Example with IIFE build (creates a global DDE object) -->
<script src="https://cdn.jsdelivr.net/gh/jaandrle/deka-dom-el/dist/iife-with-signals.min.js"></script>
<script>
	const { el, S } = DDE;
	// Your code here
</script>

<!-- Or with ES modules -->
<script type="module">
	import { el, S } from "https://cdn.jsdelivr.net/gh/jaandrle/deka-dom-el/dist/esm-with-signals.min.js";
	// Your code here
</script>

Why Another Library?

This library bridges the gap between minimal solutions like van/hyperscript and more comprehensive frameworks like solid-js, offering a balanced trade-off between size, complexity, and usability.

Following functional programming principles, dd<el> starts with pure JavaScript (DOM API) and gradually adds auxiliary functions. These range from minor improvements to advanced features for building complete declarative reactive UI templates.

A key advantage: any internal function (assign, classListDeclarative, on, dispatchEvent, S, etc.) can be used independently while also working seamlessly together. This modular approach makes it easier to integrate the library into existing projects.

Understanding Signals

Signals are the reactive backbone of Deka DOM Elements:

Contributing

We welcome contributions from the community! Please see our Contributing Guide for details on how to get started, coding standards, commit guidelines, and the pull request process.

Inspiration and Alternatives

  • vanjs-org/van — World's smallest reactive UI framework
  • adamhaile/S — Simple, clean, fast reactive programming
  • hyperhype/hyperscript — Create HyperText with JavaScript
  • potch/signals — A small reactive signals library
  • AseasRoa/paintor - JavaScript library for building reactive client-side user interfaces or HTML code.
  • pota — small and pluggable Reactive Web Renderer. It's compiler-less, includes an html function, and a optimized babel preset in case you fancy JSX.
  • TarekRaafat/eleva — A minimalist, lightweight, pure vanilla JavaScript frontend runtime framework.
  • didi/mpx — Mpx,一款具有优秀开发体验和深度性能优化的增强型跨端小程序框架
  • mxjp/rvx — A signal based frontend framework
  • jaandrle/dollar_dom_component — Functional DOM components without JSX/virtual DOM (my old library)