Skip to content

High-performance JavaScript micro framework.

License

Notifications You must be signed in to change notification settings

maxmilton/stage1

Repository files navigation

Build status Coverage status NPM version NPM bundle size (minified + gzip) Licence

stage1

High-performance JavaScript micro framework.

Warning: This is alpha software. Test thoroughly before using in production. Please report any bugs you find!

Originally a fork of the excellent https://github.com/Freak613/stage0 project.

TODO

  • Add documentation about:
    • Internal use of innerHTML — potencial risk of XSS etc.; never use h and html functions with untrusted input
    • New DOM utility functions
      • createFragment
      • create
      • append
      • prepend
      • onRemove
    • New reactive store feature
    • Differences from the original stage0 project:
      • There are now 2 runtime modes:
        • New precompiled runtime mode for ultimate performance. Compiles templates at build-time via a bun macro that minifies templates, generates metadata, and then includes minimal runtime code in your JS bundle. Currently only works with Bun.build.
        • The regular mode is still availiable which generates metadata when your JS is run in the browser. Regular mode can be used with or without a build process.
      • Ref nodes are now marked with @ rather than #
      • h is now function h(template: string): S1Node e.g., h('<p>@key<p>')
      • html is available to use as a string template literal tag function e.g., html`<p>@key<p>` (regular mode only)
      • view.collect is now a collect function that needs to be imported seperately
      • Extra DOM utils
      • New reactive store factory can be imported from stage1/store
      • Improved TypeScript support
      • Reduced size and improved load and runtime performance
      • Import paths:
        • Other than reconcilers and the store, everything is a named export from stage1
        • Reconcilers all export a reconcile function
        • /keyed --> /reconcile/keyed
        • /reconcile --> /reconcile/non-keyed
        • /reuse-nodes --> /reconcile/reuse-nodes
    • Ref names must be lowercase because some browsers normalise element attribute names when rendering HTML
  • Add API and usage documentation
    • The regular mode h() function does not support skipping minification in whitespace sensitive HTML blocks like <pre> and <code> because it would be too slow. The precompiled mode compile() macro does however. Same for the other compile options.
  • Add more tests
  • Add examples
  • Set up benchmarking + compare to stage0 and other JS frameworks
  • Submit to https://github.com/krausest/js-framework-benchmark

Browser support

Note: Internet Explorer is not supported.

Minimum browser version required:

  • Chrome 26
  • Edge 13
  • Firefox 22
  • Safari 8
  • Opera 15

Some optional features require a higher browser version:

SSR (server-side rendering) is not supported and is not the intended use of this library.

Build environment JS runtime support

The default runtime requires bun version 1.0.20 or above.

The browser bundle does not have any specific build requirements.

Bugs

Please report any bugs you encounter on the GitHub issue tracker.

Changelog

See releases on GitHub.

License

MIT license. See LICENSE.


© 2024 Max Milton

About

High-performance JavaScript micro framework.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •