Tiny (2 KB) turboboosted JavaScript library for creating user interfaces.

Overview

RE:DOM logo
Develop web applications with 100% JavaScript and web standards. 🚀


Version Build Status JavaScript Semi-Standard Style License Backers on Open Collective Sponsors on Open Collective Join the chat
Follow @pakastin Follow @redomjs

RE:DOM is a tiny (2 KB) UI library by Juha Lindstedt and contributors, which adds some useful helpers to create DOM elements and keeping them in sync with the data.

Because RE:DOM is so close to the metal and doesn't use virtual dom, it's actually faster and uses less memory than almost all virtual dom based libraries, including React (benchmark).

It's also easy to create reusable components with RE:DOM.

Another great benefit is, that you can use just pure JavaScript, so no complicated templating languages to learn and hassle with.

Supporting RE:DOM

RE:DOM is an MIT-licensed open source project with its ongoing development made possible entirely by the support of these awesome backers.

If you'd like to join them, please consider:

Installation

# Using npm
npm install redom

# Using Yarn
yarn add redom

Documentation

To check out live examples and docs, visit RE:DOM.

Questions

For questions and support please use community chat.

Tools

Performance

Issues

Please make sure to read the Issue Reporting Checklist before opening an issue. Issues not conforming to the guidelines may be closed immediately.

Changelog

Detailed changes for each release are documented in the release notes.

Contribution

Please make sure to read the Contributing Guide before making a pull request.
Thank you to all the people who already contributed to RE:DOM!

License

MIT

Copyright (c) 2016-present, Juha Lindstedt and contributors

Comments
  • Feedback

    Feedback

    Gonna do it here instead of mail because formatting code and stuff :).

    Nice to see this coming up! I'll definitely enjoy participating on this, I like goofing around with implementing things half way, but I'm still not sure if I'd roll it out as is.

    Performance

    Benchmark numbers on my hardware:

    Benching REDOM <div> with multiple child nodes
    10692ns per iteration (93529 ops/sec)
    

    This is a regression from my implementation (it was 6500ns btw, not 5200ns, turns out I had a bug that made all tags into <div>s which simplified all the bindings). Passing a function as an argument is powerful, but unless you do it as a reference to a function it also can be costly when you are using curry or other function builders.

    I made a PR with my benchmarking tool thing, poor as it may be. It might be a good idea to test things for performance regressions when deciding whether not a particular feature should make it in.

    My benchmark was fast because I only used the function call once (to set the class), and it was delegated as the last variant on the if/else branch as to not slow down text and element nodes, which should make up for the bulk of the markup. The trio of String / Node / Function worked pretty well, which brings me to the next point...

    Verbosity

        div(
            h1(setClass('doom'), 'Hello ', b('DOOM'), '!'),
            p('Bacon ipsum dolor amet meatloaf meatball shank porchetta \
                picanha bresaola short loin short ribs capicola fatback beef \
                ribs corned beef ham hock.')
        );
    

    Became:

        div(
            children([
                h1(className('redom'), text('Hello '), children([
                    b(children([
                        text('RE:DOM')
                    ]))
                ]), text('!')),
                p(
                    text('Bacon ipsum dolor amet meatloaf meatball shank porchetta \
                        picanha bresaola short loin short ribs capicola fatback beef \
                        ribs corned beef ham hock.')
                )
            ])
        )
    

    That's way more verbose. While I typically prefer things explicit over implicit (I do code in Rust after all), I don't particularly like verbosity that doesn't add much, those things belong in the realms of XML and Java 😅.

    • The fact that text() is a curry while functions such as b() produce an element got me confused since they both are abstractions of the same type of an object - a Node. It also means I can't use element functions directly as arguments, and I can't use text() calls as children.
    • I had to break things into more lines because the sheer number of brackets and parens made it difficult to keep track of things.

    Components

    I've been goofing around with how to do components with functions for dbmon, my last attempt was this:

        function cell() {
            var elapsed = span();
            var popover = div(setClass('popover-content'));
            var el = td(
                elapsed,
                div(setClass('popover left'), popover, div(setClass('arrow')))
            );
    
            function mount(parent) {
                return el;
            }
    
            mount.update = function (data) {
                el.className = data.elapsedClassName;
                elapsed.textContent = data.formatElapsed;
                popover.textContent = data.query;
            };
    
            return mount;
        }
    

    Which I'm not very happy with. Having a this to bind elements you create like you'd do in FRZR components is very handy, and the functional alternative isn't very clean since variable declarations are statements and not expressions in JS.

    I like your example more:

    const login = form(
      children(el => [
        el.email = input(props({ type: 'email' })),
        el.pass = input(props({ type: 'pass' })),
        el.submit = button(text('Sign in'))
      ]),
      events({
        onsubmit (el, e) {
          e.preventDefault();
    
          console.log(el.email.value, el.pass.value);
        }
      })
    );
    

    But it has some problems. I'm not a fan of sticking random members on elements - you might get name conflicts if you are unaware, and the concept is not future proof as the standard can expand and something you've been using as a custom member can become a thing in the future, thus introducing breakage.

    Actually using something akin to FRZR components would be an option here, with the views being created a function curry: div(attach(Component)) or div(mount(Component)).

    Other things.

    • I've figured that the function passed in could return a child. This made the hasChildren for textContent specialization simpler, and can be used to implement the component mounting.

    • One idea I had for creating a references would involve a curry such as:

      var el = div('Hello ', ref('name', text('Bar')), '!');
      el.refs.name.textContent = 'World!';
      

      This would not be necessary should we use more FRZR-like components, but it's an idea. It also scopes are custom props to a single object (refs) instead of polluting the member space.


    I can roll out a PR with roughly the same implementation I've had before to see how you like it.

    enhancement 
    opened by maciejhirsz 100
  • a tiny DOM NODE.js library ... or also as NO-NODE.js standalone??

    a tiny DOM NODE.js library ... or also as NO-NODE.js standalone??

    import { el, mount } from 'redom';

    results in: Uncaught SyntaxError: Unexpected token import

    so is there a "standalone" edition without the whole module f**k ?

    question 
    opened by Neohiro79 30
  • Switched to arrow functions

    Switched to arrow functions

    This PR changes all the function ... statements to arrow functions, and I also inserted brackets around all arrow function parameter names for more consistent styling.

    opened by ghost 23
  • [BUG] setChildren with a element with children

    [BUG] setChildren with a element with children

    Hi,

    think i found another bug ; ). (Sorry for playing around with strange corner cases :D).

    The following code

    const {
      mount,
      el,
      setChildren,
    } = redom;
    
    const myElem = el('div');
    const mySelect = el('select', [
      el('option', { value: '1' }, 'one'),
      el('option', { value: '2' }, 'two'),
      el('option', { value: '3' }, 'three'),
    ]);
    setChildren(myElem, mySelect);
    
    mount(document.getElementById('app'), myElem);
    

    results in this html:

    <div>
      <select>
        <option value="2">two</option>
      </select>
      <option value="1">one</option>
      <option value="3">three</option>
    </div>
    

    JSFiddle to play with: Example

    Am i doing something wrong ?

    Cheers

    Marc

    bug 
    opened by ghost 23
  • No mount events when mounting into Shadow DOM

    No mount events when mounting into Shadow DOM

    Hi!

    Love this library. Found a little quirk though today.. I've been using ShadowRoots to create safe containers for styles etc, and have been using Redom to populate the root with elements (which works fine):

    const myRootEl = document.createElement("div");
    const myRoot = myRootEl.createShadowRoot();
    
    function MyCustomElement() {
      this.el = el("div", "Hello there");
      this.onmount = function() {
        console.log("Mounted..");
      }
    }
    
    const myElement = new MyCustomElement();
    mount(myRoot, myElement);
    

    In my example ^, "Mounted.." is never logged. If I were to change the mount line to mount(myRootEl, myElement) (so that it mounts to a "real" element), the log comes.

    This problem may become more prevalent as the Shadow DOM API is implemented by more browsers, but it has been in Chrome for some time. Are there any plans to fix this? Would you accept a PR if you're too busy?

    bug 
    opened by perry-mitchell 23
  • ES modules

    ES modules

    At first, Thank You for a great job! <3

    How do you look at the idea of adding native ES modules support to the source code? Browsers that support modules will also support full ES6 syntax(which is used in the source code). It will look like hyperHTML/esm.

    What is needed for this?

    • Add '*.js' to all imports paths;
    • Replace module field in a package.json with src/index.js(instead of dist version).
    suggestion 
    opened by pas1ko 20
  • el(tagName, ...args) & svg(tagName, ...args) should be more DRY..

    el(tagName, ...args) & svg(tagName, ...args) should be more DRY..

    SVG elements don't allow writing to properties and namespace is needed when creating them. Otherwise they are pretty much the same.. There should be a way to share parts between el() and svg() to be more DRY..

    enhancement 
    opened by pakastin 19
  • v4

    v4

    v4 checklist:

    • [ ] .js –> .mjs
    • [ ] Create better middleware system
    • [ ] Separate list, listpool, place and router
    • [ ] Simplify test system
    • [ ] Probably new websites, too
    • [x] #104
    roadmap 
    opened by pakastin 16
  • [Question] How to show/hide elements without display: none

    [Question] How to show/hide elements without display: none

    1. What a simple/right way to show or hide single elements on page without changing their style? For example, simple form with input fields, which depends on some user actions. I'm not sure that inserting all of this inputs with display: none to page is a good idea. I know about place, but create components for each single elements (like an input element) is not a best solution. And now we're returning to this issue.
    <form>
      <input id="1">
      <input id="2">
      <input id="3">
      <input id="4">
    </form
    

    How to show/hide inputs with id 2-4? display: none/block? this.input.style.display = "none/block" - use it every time when i want to display/hide it?

    1. How to insert multiple elements to page with place without div (or any other) container.
    class MultipleElements {
      constructor() {
        this.el = el("div",
          el("input"),
          el("input"),
          el("input"),
        )
      }
    }
    
    this.el = el("form", 
      this.elements = place(MultipleElements),
      this.button = el("button", "Submit")
    )
    
    mount(document.body, this.el)
    
    this.elements.update(true)
    
    

    Here div container not needed, but i don't know how to add this inputs without it.

    Thanks for answer.

    bug question 
    opened by MrSorcus 16
  • Fragments

    Fragments

    Is it possible to create a component in, RE:DOM, that consists of two or more top-level elements?

    class AandB {
      constructor() {
        this.el = [el("element-a"), new ComponentB()];
    

    These are called "fragment", "multi-root component", "containerless" etc in other frameworks.

    help wanted 
    opened by vp2177 15
  • [BUGFIX] Fix el fn query argument type and update corresponding return type

    [BUGFIX] Fix el fn query argument type and update corresponding return type

    This is how typescript resolves the types on this pr: redomElTypes

    ~The only one case not having a nice element resolution is the aEl. Reason is, because the this.el definition in the function cannot be recognized by typescript, I previously decided to just fallback to HTMLElement in this case, but I think we should actually change this case to RedomComponent.~

    Edit: we removed Function as a valid query argument type so the aEl case has to be typed by the consumer manually.


    Used code for type testing:

    import { el } from '.'
    
    class TdComponent {
        el = el('td')
    }
    
    const els = {
        tableEl: el(document.createElement('table')),
        tdComponent: el(TdComponent),
        divEl: el('div'),
        aEl: el(function() {
            this.el = el('a')
        }),
        buttonEl: el(function() {
            return {
                el: el('button')
            } 
        }),
        inputEl: el('input')
    }
    
    opened by katywings 14
  • Bump rollup from 2.79.0 to 3.9.1

    Bump rollup from 2.79.0 to 3.9.1

    Bumps rollup from 2.79.0 to 3.9.1.

    Release notes

    Sourced from rollup's releases.

    v3.9.1

    3.9.1

    2023-01-02

    Bug Fixes

    • Sort keys in generated dynamic namespace objects (#4780)
    • Do not consider Array.group to be side effect free as the specs have changed (#4779)

    Pull Requests

    v3.9.0

    3.9.0

    2022-12-28

    Features

    • Support ES2022 arbitrary module namespace identifiers (#4770)
    • Add optional version property to plugin type (#4771)

    Pull Requests

    v3.8.1

    3.8.1

    2022-12-23

    Bug Fixes

    • Reduce memory footprint when explicitly passing cache: false (#4762)
    • Fix a crash when preserving modules and reexporting namespaces (#4766)

    Pull Requests

    ... (truncated)

    Changelog

    Sourced from rollup's changelog.

    3.9.1

    2023-01-02

    Bug Fixes

    • Sort keys in generated dynamic namespace objects (#4780)
    • Do not consider Array.group to be side effect free as the specs have changed (#4779)

    Pull Requests

    3.9.0

    2022-12-28

    Features

    • Support ES2022 arbitrary module namespace identifiers (#4770)
    • Add optional version property to plugin type (#4771)

    Pull Requests

    3.8.1

    2022-12-23

    Bug Fixes

    • Reduce memory footprint when explicitly passing cache: false (#4762)
    • Fix a crash when preserving modules and reexporting namespaces (#4766)

    Pull Requests

    3.8.0

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump marked from 4.1.0 to 4.2.5

    Bump marked from 4.1.0 to 4.2.5

    Bumps marked from 4.1.0 to 4.2.5.

    Release notes

    Sourced from marked's releases.

    v4.2.5

    4.2.5 (2022-12-23)

    Bug Fixes

    • fix paragraph continuation after block element (#2686) (1bbda68)
    • fix tabs at beginning of list items (#2679) (e692634)

    v4.2.4

    4.2.4 (2022-12-07)

    Bug Fixes

    v4.2.3

    4.2.3 (2022-11-20)

    Bug Fixes

    v4.2.2

    4.2.2 (2022-11-05)

    Bug Fixes

    v4.2.1

    4.2.1 (2022-11-02)

    Bug Fixes

    v4.2.0

    4.2.0 (2022-10-31)

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump terser from 5.15.0 to 5.16.1

    Bump terser from 5.15.0 to 5.16.1

    Bumps terser from 5.15.0 to 5.16.1.

    Changelog

    Sourced from terser's changelog.

    v5.16.1

    • Properly handle references in destructurings (const { [reference]: val } = ...)
    • Allow parsing of .#privatefield in nested classes
    • Do not evaluate operations that return large strings if that would make the output code larger
    • Make collapse_vars handle block scope correctly
    • Internal improvements: Typos (#1311), more tests, small-scale refactoring

    v5.16.0

    • Disallow private fields in object bodies (#1011)
    • Parse #privatefield in object (#1279)
    • Compress #privatefield in object

    v5.15.1

    • Fixed missing parentheses around optional chains
    • Avoid bare let or const as the bodies of if statements (#1253)
    • Small internal fixes (#1271)
    • Avoid inlining a class twice and creating two equivalent but !== classes.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump tape from 5.6.0 to 5.6.1

    Bump tape from 5.6.0 to 5.6.1

    Bumps tape from 5.6.0 to 5.6.1.

    Changelog

    Sourced from tape's changelog.

    v5.6.1 - 2022-09-19

    Commits

    • [eslint] fix indentation 2151e06
    • [meta] add auto-changelog 86cbbd1
    • [eslint] enforce no-use-before-define f8a8a7f
    • [meta] fix repo URLs a9ae3c2
    • [Tests] stackTrace: use the common getDiag utility 298cb80
    • [eslint] enable func-style 98b9623
    • [New] bin/tape: include the exact arg when there are no glob results; use require on --require files 6a1ce43
    • [eslint] clean up config a bit 67ad201
    • [meta] create FUNDING.yml 5b4752f
    • [Refactor] bin/tape: make it a bit more functional, for easier v5 backporting fbdbfc9
    • [Deps] update glob, object-inspect, resolve, string.prototype.trim 6a3c200
    • [Dev Deps] update @ljharb/eslint-config, array.prototype.flatmap, es-value-fixtures, falafel 934d49b
    • [Tests] fix no_only tests on Windows f35f71b
    • Revert "[Tests] handle a broken error cause in node 16.9/16.10" 23fac16
    • [Robustness] test observably looks up exec on the object 4575ca4
    • [meta] add SECURITY.md 7b0c901
    • [meta] add missing npmrc config 5d11d84
    • [Deps] update object.assign 3327fdd
    • [readme] fix version badge 74e6c9e
    • Merge tag 'v4.16.0' 4a44a7e
    Commits
    • 996b2a0 v5.6.1
    • 5d11d84 [meta] add missing npmrc config
    • 86cbbd1 [meta] add auto-changelog
    • 3327fdd [Deps] update object.assign
    • 67ad201 [eslint] clean up config a bit
    • 98b9623 [eslint] enable func-style
    • f8a8a7f [eslint] enforce no-use-before-define
    • 298cb80 [Tests] stackTrace: use the common getDiag utility
    • 2151e06 [eslint] fix indentation
    • a9ae3c2 [meta] fix repo URLs
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump shell-quote from 1.7.2 to 1.7.3

    Bump shell-quote from 1.7.2 to 1.7.3

    Bumps shell-quote from 1.7.2 to 1.7.3.

    Changelog

    Sourced from shell-quote's changelog.

    1.7.3

    • Fix a security issue where the regex for windows drive letters allowed some shell meta-characters to escape the quoting rules. (CVE-2021-42740)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump async from 2.6.3 to 2.6.4

    Bump async from 2.6.3 to 2.6.4

    Bumps async from 2.6.3 to 2.6.4.

    Changelog

    Sourced from async's changelog.

    v2.6.4

    • Fix potential prototype pollution exploit (#1828)
    Commits
    Maintainer changes

    This version was pushed to npm by hargasinski, a new releaser for async since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(v3.29.0)
Owner
RE:DOM
Tiny (2 KB) turboboosted JavaScript library for creating user interfaces
RE:DOM
:fire: An extremely fast, React-like JavaScript library for building modern user interfaces

Inferno is an insanely fast, React-like library for building high-performance user interfaces on both the client and server. Description The main obje

Inferno 15.6k Dec 31, 2022
A declarative, efficient, and flexible JavaScript library for building user interfaces.

Solid is a declarative JavaScript library for creating user interfaces. It does not use a Virtual DOM. Instead it opts to compile its templates down t

Ryan Carniato 24.5k Jan 4, 2023
🌙 The minimal & fast library for functional user interfaces

Moon The minimal & fast library for functional user interfaces Summary ?? Small file size (2kb minified + gzip) ⚡ Blazing fast view rendering ?? Purel

Kabir Shah 6k Jan 2, 2023
🙋‍♀️ 3kb library for tiny web apps

3kb library for tiny web apps. Sometimes, all you want to do is to try and do something—No boilerplate, bundlers, or complex build processes. Lucia ai

Aiden Bai 699 Dec 27, 2022
Ember.js - A JavaScript framework for creating ambitious web applications

Ember.js is a JavaScript framework that greatly reduces the time, effort and resources needed to build any web application. It is focused on making yo

Ember.js 22.4k Jan 4, 2023
The tiny framework for building hypertext applications.

Hyperapp The tiny framework for building hypertext applications. Do more with less—We have minimized the concepts you need to learn to get stuff done.

Jorge Bucaran 18.9k Jan 1, 2023
Frontend framework for creating reactive UIs using direct DOM manipulation. (WIP)

Cosmos Framework A frontend framework for creating reactive UIs using direct DOM manipulation. (Heavily WIP) How to get started with Cosmos Framework

CosmicMedia 5 Nov 6, 2022
A small jQuery plugin that will automatically cast a shadow creating depth for your flat UI elements

#Flat Shadow by Pete R. A small jQuery plugin that will automatically cast a shadow creating depth for your flat UI elements Created by Pete R., Found

Pete R. 482 Dec 18, 2022
🙌 Check if a Discord user is sponsoring you/someone on GitHub and give them roles!

Discord: Is User Sponsor? A bot that gives roles if a user is supporting you on GitHub! Uses Discord OAuth and Discord GitHub integration to get user'

EGGSY 18 Jun 27, 2022
jCore - JavaScript library for building UI components

JavaScript library for building UI components

iOnStage 11 Jan 21, 2022
KioskBoard - A pure JavaScript library for using virtual keyboards.

KioskBoard - Virtual Keyboard A pure JavaScript library for using virtual keyboards. Current Version 2.0.0 * Documentation and Demo https://furcan.git

Furkan MT 177 Dec 29, 2022
A JavaScript UI Library with JQuery like syntax

A JavaScript UI Library with JQuery like syntax. (Beta)

Sijey 5 Jan 16, 2022
Our original Web Component library.

Polymer ℹ️ Note: This is the current stable version of the Polymer library. At Google I/O 2018 we announced a new Web Component base class, LitElement

Polymer Project 21.9k Jan 3, 2023
Simple and elegant component-based UI library

Simple and elegant component-based UI library Custom components • Concise syntax • Simple API • Tiny Size Riot brings custom components to all modern

Riot.js 14.7k Jan 4, 2023
ENS Avatar resolver library for both nodejs and browser.

ens-avatar Avatar resolver library for both nodejs and browser. Getting started Prerequisites Have your web3 provider ready (web3.js, ethers.js) [Only

Ethereum Name Service (ENS) 27 Dec 30, 2022
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

Supporting Vue.js Vue.js is an MIT-licensed open source project with its ongoing development made possible entirely by the support of these awesome ba

vuejs 201.6k Jan 7, 2023
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

vue-next This is the repository for Vue 3.0. Quickstart Via CDN: <script src="https://unpkg.com/vue@next"></script> In-browser playground on Codepen S

vuejs 34.6k Jan 4, 2023
Relay is a JavaScript framework for building data-driven React applications.

Relay · Relay is a JavaScript framework for building data-driven React applications. Declarative: Never again communicate with your data store using a

Facebook 17.5k Jan 1, 2023
A rugged, minimal framework for composing JavaScript behavior in your markup.

Alpine.js Alpine.js offers you the reactive and declarative nature of big frameworks like Vue or React at a much lower cost. You get to keep your DOM,

Alpine.js 22.5k Jan 2, 2023