AppRun is a JavaScript library for developing high-performance and reliable web applications using the elm inspired architecture, events and components.

Overview

AppRun Build NPM version Downloads License twitter Discord Chat

AppRun is a JavaScript library for building reliable, high-performance web applications using the Elm-inspired architecture, events, and components.

All the Ways to Make a Web Component - May 2021 Update compares the coding style, bundle size, and performance of 55 different ways to make a Web Component. It put AppRun on the top 1/3 of the list of bundle size and performance.

AppRun Benefits

  • Write less code
  • No proprietary syntax to learn
  • Compiler/transpiler is optional
  • State management and routing included
  • Run side-by-side with jQuery, chartjs, D3, lit-html ...

AppRun is distributed on npm.

npm install apprun

You can also load AppRun directly from the unpkg.com CDN:

<script src="https://unpkg.com/apprun/dist/apprun-html.js"></script>

Or use it as ES module from unpkg.com:

<script type="module">
  import { app, Component } from 'https://unpkg.com/apprun/esm/apprun-html?module';
</script>

Architecture Concept

You can get started with AppRun Docs and the AppRun Playground.

AppRun Book from Apress

Order from Amazon

Create AppRun Apps

Use the AppRun CLI to initialize an esbuild configured project:

npx apprun --init --spa --esbuild

Use the AppRun CLI to initialize a TypeScript and webpack configured project:

npx apprun --init --spa

To initialize a project that targets ES5, use the AppRun CLI with the --es5 flag:

npx apprun --init --spa --es5

AppRun Dev Server

AppRun now has a dev server. It is base on the live-server and supports ES Modules. apprun-dev-server is install by AppRun CLI when using esbuild. Or you can use it directly.

npx apprun-dev-server

See the announcement: A Dev Server Supports ESM

AppRun Dev Tools

To use the AppRun dev-tools, include the dev-tools script.

<script src="https://unpkg.com/apprun/dist/apprun-dev-tools.js"></script>

See the annoucement: AppRun Dev Tools

AppRun Dev Tools connects to the Redux DevTools Extension. To use the dev-tools, install the Redux DevTools Extension. You can monitor the events and states.

app-dev-tools

Contribute

You can launch the webpack dev-server and the demo app from the demo folder with the following npm commands:

npm install
npm start

You can run the unit tests from the tests folder.

npm test

Unit tests can serve as functional specifications.

Finally, to build optimized js files to the dist folder, just run:

npm run build

Have fun and send pull requests.

Contributors

Support

AppRun is an MIT-licensed open source project. Please consider supporting the project on Patreon. 👍 ❤️ 🙏

Thank you for your support

  • Athkahden Asura
  • Alfred Nerstu
  • Gyuri Lajos
  • Lorenz Glißmann
  • Kevin Shi
  • Chancy Kennedy

License

MIT

Copyright (c) 2015-2021 Yiyi Sun

Comments
  • Using

    Using "app.run()" outside view and state

    Hi, @yysun ! First let me congratulate you for this great job.

    I've been experimenting to build my own components using lots of different frameworks outthere to see which one suits best for me. Now that I found AppRun, with this ELM approach (a very good choice of yours!), I think I found what I want.

    My first component is a simple countdown timer, nothing fancy, but usefull and good for my trials. I'm passing to it 2 parameters:

    • init = a number (in seconds) to begin the countdown
    • blink = another number so the counter starts blinking (to advice it's almost ending).

    I`m having some trouble, most likely due my inexperience, on calling app.run( "reset" ) - in fact, this.run( "reset" ) - on Constructor method. My code is like this:

    export default class LwbTimerComponent extends Component {
    
      constructor( { init, blink } ) {
         super();
         this.initCounter = init;
         this.initBlink = blink;
         this.run( "reset" );   //  *** app.ts:30 Assertion failed: No subscriber for event: reset ***
         this.ptTimer = setInterval( () => this.run( "decrease" ), 1000 );
      }
      model = {
         secondsToGo: this.initCounter,
         ...
      }
      view = { ... }
      update = {
        "#LwbTimer": model => model,
        "decrease" : model => { ... },
        "reset": model => { 
             model.secondsToGo = this.initCounter;
             ... 
        },
       "blink": model => { ... },
     }
    }
    

    The compiler is telling me that "Assertion failed: No subscriber for event: reset" on run.app( "reset" ). Clearly I defined "reset" event on update method, but something is missing. What am I doing wrong?

    opened by Kogumelo 17
  • How to extend state in SPA?

    How to extend state in SPA?

    I have just created the basic SPA by doing npx apprun --init --spa. Now I want the app's state to take care of more than just the component name (Home, About, Contact). I may e.g. want to have a counter (+1/-1) on one of the components. In the basic SPA one gets the impression that the component name is the app's state (state = 'Home';), but right now it seems that it's not necessarily so. I'm a bit confused.

    opened by jkleiser 14
  • Stateful components

    Stateful components

    Just started looking at AppRun last night, and really like the design/concept! Very elegant 👍

    I noticed in the documentation that stateful components are "work in progress" - I was wondering if you can elaborate a little bit?

    I'm trying to figure out if this feature (or a planned future feature) satisfies my use-case.

    As far as my understanding, components in AppRun are very different from components in, say, React - I think the best way I can explain my understanding of the conceptual difference is, AppRun components are "components of the application", while React components are "components of the UI".

    While components in AppRun provide a useful abstraction of a self-contained section of the UI state and view, presumably stateful components will provide an abstraction of UI "controls", e.g. components that have an internal state?

    I recently explained it to someone like this:

    There is application state, and there is control state.

    Control state really pertains only to a control while it exists, and becomes completely irrelevant the moment the control disappears from the user's view: whether a date-picker or drop-down was open, where the cursor was located in an input, and so on - no longer relevant once the control is gone.

    We don't need or expect or want such state to persist in the model - most of the time, we don't even care that it exists, for example, we don't typically care if a drop-down is open, we just want a notification when a selection is made.

    Am I right to think this is the purpose of stateful components in AppRun?

    Will we be able to instanciate these components via JSX, similarly to how all components are instanciated in for example React?

    Or where do you see this feature heading?

    Thanks :-)

    opened by mindplay-dk 14
  • Building in strict mode

    Building in strict mode

    Hi, while not a bug, it would be nice if we could get AppRun built in strict mode. As @yysun has indicated in #71, it's a goal. To that end I started taking a look, but thought that I'd throw a few things out for comments:

    1. Improve the creation of apprun.d.ts: Right now, since it's not auto generated from the code, there are situations where the main type file is out of sync with the code. I would suggest that we need to make this file as auto generated as possible. One possible move in this direction would be to move lots of the types into the src/types.ts file that exist right now. We could then convert this into a declaration file and use it to build the src (and then copy over during the build process). Thoughts?

    2. deprecated exports in apprun.d.ts: In the vain of cleaning up the API, there is at least a comment in this file indicating an obsolete API (update). If this is actually the case, we ought to make an effort to deprecate it given the change was made ~2 years ago.

    3. conflicting types: Right now I see that there is an Element type defined - which conflicts with the DOM's definition. We could namespace the types and play well with others or we could change the name to AppRunElement or something of the sort. Preferences?

      There is still lots of combing through the code to clean things up but those seem to me to be some first questions to answer and most of the rest ought to be mechanical.

    Cheers, Peter

    opened by phBalance 12
  • Allow ROUTER_EVENT handler (//) to stop propagation of other event (#SomeComponent)

    Allow ROUTER_EVENT handler (//) to stop propagation of other event (#SomeComponent)

    There are certain cases when firing #SomeComponent event from router should be stoped if no conditions met. Example: User click on link witch leads to restricted area (user profile etc) and login form must be popped first, then on successful login the page should be displayed.

    If I'm able to catch such route in (//) handler and stop #Profile event, I could easily fire #Login event with proper parameter #Profile as returnURL.

    With current router implementation I'm firing the another event (#Login), but #Profile event is fired too.

    opened by ludmiloff 12
  • How to set aria-* attributes

    How to set aria-* attributes

    Hello @yysun, thank you for your effort on building this awesome framework.

    The problem I faced is I'm not able to setup aria-* attributes, aria-label in particular with JSX/TSX syntax. What is strange, I'm able to successfully set data-id attribute which is quite similar. the code to reproduce: <form role="search"><input type="search" className="hsi" aria-label="Search"/></form> do not set aria-label attribute.

    As I see, the jsx/react namespace is bound to apprun itself which correctly create element structure with all attributes, then somehow it is transformed into DOM element without aria-label;

    Can you point me what is wrong.

    UPDATE: vdom-my.ts function updateProps(....) just recognize some attributes like data-id, and tries to set others as attributes to DOM element, but desired behaviour should be to add the attribute to internal attributes map . I'm pretty sure I can prepare a pull request with desired code, at least with aria-* subset.

    opened by ludmiloff 12
  • Consider building ESM for browser.

    Consider building ESM for browser.

    TL;DR: For ES modules to work in a browser, import statements need the .js extension on them. https://github.com/Zoltu/typescript-transformer-append-js-extension/ is a a TypeScript transformer that will do that for you automatically during build.

    For a detailed description of the problem see the Motivation section of https://github.com/Zoltu/typescript-transformer-append-js-extension/. For a solution, see the Usage section of the same repository.

    opened by MicahZoltu 10
  • Does appRun support shared state?

    Does appRun support shared state?

    Does appRun support the concept of an app-wide shared state (with associated actions and vies/getters) , like you have with the likes of vuex, mobx-state-tree. or would it work with a state management library like mobx or mobx-state-tree

    opened by joshua1 9
  • Property className cannot be assigned to Component's wrapper div

    Property className cannot be assigned to Component's wrapper div

    AppRun always wraps up Component in an extra div. It's not so convenient from CSS point of view, but it even less convenient that a developer cannot add any CSS style rules to the wrapping (parent) div by CSS class name, because it looks like the only property Component's parent div handles is Id. If there is no way to remove parent extra div could you add an ability to define className property to the parent div?

    opened by bo-kh 8
  • Can I use other libraries in place of lit-html?

    Can I use other libraries in place of lit-html?

    There are very cool competitors for lit-html - eg. HyperHtml, lighterhtml and uhtml by @WebReflection Do you think I'd be able to use them with AppRun?

    opened by tvardy 7
  • Problem with 'onclick' on SVG elements

    Problem with 'onclick' on SVG elements

    I'm building an SPA that shall make extensive use of SVG. This far I have not been able to get any form of 'onclick' working on my SVG elements. I have tried both $onclick="test" and onclick={e => this.run("test", e)}, in elements like these:

    <circle cx={cx} cy={cy} r={rad} $onclick="test"/>
    <rect x="8" y="8" width="90" height="90" stroke="blue" onclick={e => this.run("test", e)}/>
    

    This, however, works fine: <h1 onclick={e => this.run("test", e)}>TEST</h1> I'm using apprun 2.23.12. Is this a bug?

    opened by jkleiser 7
  • Bump qs from 6.5.2 to 6.5.3

    Bump qs from 6.5.2 to 6.5.3

    Bumps qs from 6.5.2 to 6.5.3.

    Changelog

    Sourced from qs's changelog.

    6.5.3

    • [Fix] parse: ignore __proto__ keys (#428)
    • [Fix] utils.merge`: avoid a crash with a null target and a truthy non-array source
    • [Fix] correctly parse nested arrays
    • [Fix] stringify: fix a crash with strictNullHandling and a custom filter/serializeDate (#279)
    • [Fix] utils: merge: fix crash when source is a truthy primitive & no options are provided
    • [Fix] when parseArrays is false, properly handle keys ending in []
    • [Fix] fix for an impossible situation: when the formatter is called with a non-string value
    • [Fix] utils.merge: avoid a crash with a null target and an array source
    • [Refactor] utils: reduce observable [[Get]]s
    • [Refactor] use cached Array.isArray
    • [Refactor] stringify: Avoid arr = arr.concat(...), push to the existing instance (#269)
    • [Refactor] parse: only need to reassign the var once
    • [Robustness] stringify: avoid relying on a global undefined (#427)
    • [readme] remove travis badge; add github actions/codecov badges; update URLs
    • [Docs] Clean up license text so it’s properly detected as BSD-3-Clause
    • [Docs] Clarify the need for "arrayLimit" option
    • [meta] fix README.md (#399)
    • [meta] add FUNDING.yml
    • [actions] backport actions from main
    • [Tests] always use String(x) over x.toString()
    • [Tests] remove nonexistent tape option
    • [Dev Deps] backport from main
    Commits
    • 298bfa5 v6.5.3
    • ed0f5dc [Fix] parse: ignore __proto__ keys (#428)
    • 691e739 [Robustness] stringify: avoid relying on a global undefined (#427)
    • 1072d57 [readme] remove travis badge; add github actions/codecov badges; update URLs
    • 12ac1c4 [meta] fix README.md (#399)
    • 0338716 [actions] backport actions from main
    • 5639c20 Clean up license text so it’s properly detected as BSD-3-Clause
    • 51b8a0b add FUNDING.yml
    • 45f6759 [Fix] fix for an impossible situation: when the formatter is called with a no...
    • f814a7f [Dev Deps] backport from main
    • 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)
    • @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 decode-uri-component from 0.2.0 to 0.2.2

    Bump decode-uri-component from 0.2.0 to 0.2.2

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    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
  • Bump tmpl from 1.0.4 to 1.0.5

    Bump tmpl from 1.0.4 to 1.0.5

    Bumps tmpl from 1.0.4 to 1.0.5.

    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 tar from 6.1.0 to 6.1.11

    Bump tar from 6.1.0 to 6.1.11

    Bumps tar from 6.1.0 to 6.1.11.

    Commits
    • e573aee 6.1.11
    • edb8e9a fix: perf regression on hot string munging path
    • a9d9b05 chore(test): Avoid spurious failures packing node_modules/.cache
    • 24b8bda fix(test): use posix path for testing path reservations
    • e5a223c fix(test): make unpack test pass on case-sensitive fs
    • 188badd 6.1.10
    • 23312ce drop dirCache for symlink on all platforms
    • 4f1f4a2 6.1.9
    • 875a37e fix: prevent path escape using drive-relative paths
    • b6162c7 fix: reserve paths properly for unicode, windows
    • 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)
    • @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 path-parse from 1.0.6 to 1.0.7

    Bump path-parse from 1.0.6 to 1.0.7

    Bumps path-parse from 1.0.6 to 1.0.7.

    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
High performance JSX web views for S.js applications

Surplus const name = S.data("world"), view = <h1>Hello {name()}!</h1>; document.body.appendChild(view); Surplus is a compiler and runtime to all

Adam Haile 587 Dec 30, 2022
Fully dockered starter kit for Elm with Hasura

elm-hasura-dockered This repo contains a Elm-Hasura starter kit for rapid+typesafe web application development on open source foundations. Elm is grea

Cies Breijs 41 Dec 9, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
High performance personalization & a/b testing example using Next.js, Edge Middleware, and Builder.io

Next.js + Builder.io Personalization & A/B Testing with Edge Middleware This is a fork of Next.js Commerce with Builder.io integrated and using Edge M

Builder.io 7 Sep 6, 2022
Crawler Crypto using NodeJS for performance with Elasticsearch DB for high efficiency.

Coin crawler - Coingecko version Crawler using NodeJS for performance with Elasticsearch DB for high efficiency. Requirements For development, you wil

Minh.N.Pham 1 Jan 20, 2022
High performance and SEO friendly lazy loader for images (responsive and normal), iframes and more, that detects any visibility changes triggered through user interaction, CSS or JavaScript without configuration.

lazysizes lazysizes is a fast (jank-free), SEO-friendly and self-initializing lazyloader for images (including responsive images picture/srcset), ifra

Alexander Farkas 16.6k Jan 1, 2023
High performance JavaScript templating engine

art-template English document | 中文文档 art-template is a simple and superfast templating engine that optimizes template rendering speed by scope pre-dec

糖饼 9.7k Jan 3, 2023
A technology stack solution using the AWS Serverless architecture.Atlas stack for building applications focused on generating value.

Atlas A technology stack solution using the AWS Serverless architecture.Atlas stack for building applications focused on generating value. Description

Atlas 9 Dec 15, 2022
A fast & reliable transaction API for web3 Games, Bridges and other projects

Gelato Relay SDK SDK to integrate into Gelato Multichain Relay Table of Contents Installation Introduction Quick Start Payment Types Request Types Sen

Gelato 17 Dec 31, 2022
NextCollect is a Next.js framework for reliable collection of user behavioral data

Overview NextCollect.js is a framework for server-side user event collection for Next.Js. It is designed from the ground up to work in Serverless envi

Jitsu 23 Jan 3, 2023
chain-syncer is a module which allows you to synchronize your app with any ethereum-compatible blockchain/contract state. Fast. Realtime. Reliable.

Chain Syncer Chain Syncer is a JS module which allows you to synchronize your app with any ethereum-compatible blockchain/contract state. Fast. Realti

Miroslaw Shpak 10 Dec 15, 2022
Open source infrastructure for scalable, reliable native integrations in B2B SaaS products

Open-source infrastructure for native integrations Native, customer-facing integrations for your B2B SaaS made simple, reliable and extensible. Explor

Nango 225 Jan 2, 2023
🔑 Keagate is an open-source, high-performance alternative to popular cryptocurrency payment gateways such as Coinbase Commerce, CoinGate, BitPay, NOWPayments, CoinRemitter, CoinsPaid and more.

⛩️ Keagate – A High-Performance Cryptocurrency Payment Gateway ?? This project is actively in development ?? Table of Contents About the Project Purpo

null 76 Jan 3, 2023
An ultra-high performance stream reader for browser and Node.js

QuickReader An ultra-high performance stream reader for browser and Node.js, easy-to-use, zero dependency. Install npm i quickreader Demo import {Quic

EtherDream 156 Nov 28, 2022
👑 A tiny yet powerful tool for high-performance color manipulations and conversions

Colord is a tiny yet powerful tool for high-performance color manipulations and conversions. Features ?? Small: Just 1.7 KB gzipped (3x+ lighter than

Vlad Shilov 1.2k Jan 3, 2023
A scalable, high-performance feature management and progressive experimentation platform

Introduction & Our Philosophy FeatBit is a scalable, high-performance Feature Management and Progressive Experimentation platform. Feature Management

null 345 Jan 1, 2023
High performance (de)compression in an 8kB package

fflate High performance (de)compression in an 8kB package Why fflate? fflate (short for fast flate) is the fastest, smallest, and most versatile pure

null 1.4k Dec 28, 2022
startupDB is an Express middleware function implementing a high-performance in-memory database

startupDB startupDB is a database designed to create REST APIs. It is implemented as an Express middleware function and allows for easy implementation

Jeroen de Vries 8 Jul 26, 2022