Skip to content

⚡ The Storm Stack monorepo contains utility applications, tools, and various libraries to create modern and scalable web applications.

License

Notifications You must be signed in to change notification settings

storm-software/storm-stack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Storm Stack


At a high-level, ⚡ Storm Stack is a toolchain system that generates code and other artifacts during the build and deploy processes via TypeScript transformers and static code analysis. Many modern code generation tools require you to explicitly define the structure and behavior of your code in separate schema files and/or configurations, which can be time-consuming and error-prone. Some tools even require you to learn a new SDL or write boilerplate code to wire everything together. Storm Stack does not require any extra work - you just write your code the way you normally would, and Storm Stack does the rest.

The goal is to allow the developer to focus on the actual application/business logic, rather than the specifics around technologies, frameworks, or cloud providers. This is achieved by using a set of powerful tools and extensible plugins that are designed to work together.

Storm Stack is largely built on top of Deepkit, so our projects benefit from access to very small bytecode type definitions at runtime. This means you have builtin serialization, deserialization, or validation logic without writing any additional code (with greatly improved performance and reduced bundle sizes when compared to popular packages like Zod, Yup, class-validator, and Valibot).

The Storm Stack monorepo contains the Storm Stack engine package and various plugins and tools to help developers using the toolchain. More details can be found below in the Features section.

Note

Some features of Storm Stack are opinionated to meet the needs of Storm Software; however, it should be simple to customize the behavior to fit any specific requirements you may have. If you believe any plugins include logic that should be split out into separate packages, please feel free to submit a pull request or open an issue, and we will be happy to discuss it.

💻 Visit stormsoftware.com to stay up to date with this developer


github Nx NextJs Commitizen friendly semantic-release documented with docusaurus GitHub Workflow Status (with event)

Important

This repository, and the apps, libraries, and tools contained within, is still in it's initial development phase. As a result, bugs and issues are expected with it's usage. When the main development phase completes, a proper release will be performed, the packages will be available through NPM (and other distributions), and this message will be removed. However, in the meantime, please feel free to report any issues you may come across.

Table of Contents


Features

The core functionality of Storm Stack is built around the concept of a "stack" of tools and services that work together seamlessly. This includes everything from code generation and transformation to deployment and monitoring.

The following sections outline some of the features/publishable content included in this repository.

Engine

The Storm Stack Engine is an actual class that drives the Storm Stack pipeline's commands; however, the phrase is also often used to describe the base packages containing the core architecture (primarily the @storm-stack/core and @storm-stack/cli packages).

The @storm-stack/core package includes the Storm Stack engine - used to drive the Storm Stack pipeline's commands.

The following features are included in the package:

  • The Engine class - responsible for orchestrating the various stages of the Storm Stack pipeline. This can be used as a sort of API for driving the processes from an external tool or service.
  • Extensible architecture that allows for easy integration of new tools and services.
  • Utilities and helpers for working with the Storm Stack ecosystem.
  • Various build plugins (supported by unplugin) that allow you to benefit from Storm Stack's features, such as code generation, transformation, and deployment, while using an external build system.

Some of the supported build systems with existing plugins are:

This package provides a binary to interact with the Storm Stack engine via a command-line interface.

The following features are included in the package:

  • Inclusion of required commands and options for Storm Stack development.
  • Utilities for managing local project dependencies and scripts.
  • Integration with the Storm Stack ecosystem for seamless project management.

Plugins

The following Storm Stack plugin packages are included in this repository:

A plugin to generate TypeScript definitions, apply static parameter values, and encourage best practices for managing environment configuration in Storm Stack applications.

The plugin provides a set of utilities for working with configuration files, including:

  • TypeScript definition generation for configuration schemas.
  • $storm.env.<parameter> object is used to apply static configuration values at build time with automatic type generation for improved type safety.
  • Logic to determine all used environment configurations so that they can be validated and documented later.
  • Best practice recommendations for organizing and managing configuration.
  • The storm:env builtin runtime module, which contains the StormEnv type definition and related utilities for working with configuration parameters at runtime.

A plugin package that injects a consistent interface into the application for working with dates across some popular JavaScript libraries, such as date-fns, dayjs, luxon, and moment.js. Never feel the pressure to choose a date library again!

This plugin was inspired by (and largely lifted from) date-io, which provides a similar interface for date manipulation. The key difference is that this plugin will inject the date manipulation logic into the application at build time, rather than at runtime, allowing for more consistent and performant code.

Huge thanks to dmtrKovalenko for their work on date-io.

A plugin to provide a set of utilities and best practices for building Node.js applications with Storm Stack.

The following features are included in the package:

  • The $storm context object, which provides access to various utilities and services at runtime.
  • The storm:context builtin runtime module, which contains the StormContext type definition, the useStorm hook to access the context (if using the $storm object feels uncomfortable), and other related utilities.
  • The storm:env builtin runtime module, which can be imported directly to access information about the runtime environment.
  • The storm:request builtin runtime module, which contains the StormRequest class to package information about the incoming request.
  • The storm:response builtin runtime module, which contains the StormResponse class to package information about the outgoing response.
  • The storm:event builtin runtime module, which contains the StormEvent class to package information about events that occur in the application.

A plugin that provides utilities and best practices for building Cloudflare Worker applications with Storm Stack. Key features include:

The following features are included in the package:

  • The $storm context object for accessing runtime utilities and services.
  • Built-in modules for environment, request, result, and event handling tailored for Cloudflare Workers.
  • Preset configuration for seamless deployment to the Cloudflare platform.

A plugin for creating command-line applications using Storm Stack.

The following features are included in the package:

  • CLI scaffolding and context management via the $storm object.
  • Utilities for parsing arguments, handling input/output, and managing CLI commands.
  • Built-in modules for environment and event handling in CLI contexts.

Provides logging functionality for Storm Stack applications by writing log messages to the console.

The following features are included in the package:

  • Console-based log adapter for development and debugging.
  • Integration with the Storm Stack logging system for consistent log formatting.

Enables logging to Sentry for error tracking and monitoring.

The following features are included in the package:

  • Sentry log adapter for capturing errors and events.
  • Configuration options for Sentry DSN and environment.

Provides logging to OpenTelemetry collectors for distributed tracing and monitoring.

The following features are included in the package:

  • OpenTelemetry log adapter for exporting traces and metrics.
  • Integration with Storm Stack's logging and event system.

Allows log messages to be written to a specified storage type (e.g., file system, cloud storage).

The following features are included in the package:

  • Storage log adapter for persistent log management.
  • Configurable storage backends and retention policies.

Development Tools

The following packages are included in this repository to assist with the development/repository management process and are available for use in any application.

A set of base plugins, shared templates, and helpful utilities for extending Storm Stack.

The following features are included in the package:

  • Multiple base plugins for common functionality that could be extended or customized in a personal plugin to meet your specific needs.
  • Shared template files for generating boilerplate code.

An Nx plugin to manage monorepos using Storm Stack for building and deploying applications.

The following features are included in the package:

  • Nx generators and executors tailored for Storm Stack workflows.
  • Enhanced project graph visualization and dependency management.

An ESLint plugin to enforce code quality and best practices in Storm Stack projects.

The following features are included in the package:

  • Custom ESLint rules for Storm Stack conventions.
  • Integration with shared configuration for consistency across packages.

A shared ESLint configuration for Storm Stack repositories.

The following features are included in the package:

  • Predefined rulesets for JavaScript/TypeScript projects.
  • Easy integration with ESLint for consistent code style.

A shared Biome configuration for Storm Stack projects.

The following features are included in the package:

  • Pre-configured Biome settings for formatting and linting.
  • Inclusion of required globals and rules for Storm Stack development.

A shared TSDoc configuration for Storm Stack projects.

The following features are included in the package:

  • Pre-configured TSDoc settings for consistent documentation.
  • Inclusion of required tags and rules for Storm Stack development.

A shared TypeScript configuration for Storm Stack projects.

The following features are included in the package:

  • Pre-configured TypeScript settings for consistent development.
  • Inclusion of required compiler options and rules for Storm Stack development.



Environment Configuration Help

If you run into any issues while trying to run any of the monorepo's code locally, please reach out to us on Discord. See the Support section for more information.


Local Development

Once the code is pulled locally, open a command prompt and run pnpm install in the root repo directory (/storm-stack).

More information can be found in the Open System documentation.


Build

Run pnpm build to build the project. The build artifacts will be stored in the dist/ directory. Use the --prod flag for a production build.


Development Server

Run pnpm serve for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.


Testing

Open System uses Jest for unit testing and Cypress for end-to-end testing.


Running Unit Tests

Run pnpm test to execute the unit tests via Jest.

Run pnpm affected:test to execute the unit tests affected by a change.


Running End-to-End Tests

Run pnpm e2e to execute the end-to-end tests via Cypress.

Run pnpm affected:e2e to execute the end-to-end tests affected by a change.


Understand your workspace

Run pnpm graph to see a diagram of the dependencies of the Open System projects.


☁ Nx Cloud

Nx caches the output of any previously run command such as testing and building, so it can replay the cached results instead of rerunning it. Nx Cloud allows you to share the computation cache across everyone in your team and CI.

Nx Cloud - Dashboard

Distributed Computation Caching & Distributed Task Execution

Nx Cloud pairs with Nx in order to enable you to build and test code more rapidly, by up to 10 times. Even teams that are new to Nx can connect to Nx Cloud and start saving time instantly.

Teams using Nx gain the advantage of building full-stack applications with their preferred framework alongside Nx’s advanced code generation and project dependency graph, plus a unified experience for both frontend and backend developers.

Visit Nx Cloud to learn more.


Roadmap

See the open issues for a list of proposed features (and known issues).


Contributing

First off, thanks for taking the time to contribute! Contributions are what makes the open-source community such an amazing place to learn, inspire, and create. Any contributions you make will benefit everybody else and are greatly appreciated.

Please read through the contributing guidelines so you know what to expect in terms of development and code style. We also have a Code of Conduct that we expect all contributors to adhere to. Please read it before contributing.


Pull Requests

Before you submit a pull request (PR), please ensure all lefthook hooks pass. These hooks will run automatically when you commit your changes.


Contributor License Agreement (CLA)

If you have not yet signed the Contributor License Agreement (CLA), add a PR comment containing the exact text:

I have read the CLA Document and I hereby sign the CLA

The CLA‑Assistant bot will turn the PR status green once all authors have signed.


Bug Reports

Please try to create bug reports that are:

  • Reproducible. Include steps to reproduce the problem.
  • Specific. Include as much detail as possible: which version, what environment, etc.
  • Unique. Do not duplicate existing opened issues.
  • Scoped to a Single Bug. One bug per report.

Support

Reach out to the maintainer at one of the following places:


License

This project is licensed under the Apache License 2.0. Feel free to edit and distribute this template as you like. If you have any specific questions, please reach out to the Storm Software development team.

See LICENSE for more information.


FOSSA Status


Contributors

Thanks goes to these wonderful people (emoji key):

Patrick Sullivan
Patrick Sullivan

🎨 💻 🔧 📖 ⚠️
Tyler Benning
Tyler Benning

🎨
Stormie
Stormie

🚧
Add your contributions

This project follows the all-contributors specification. Contributions of any kind welcome!




Storm Software

Fingerprint: 1BD2 7192 7770 2549 F4C9 F238 E6AD C420 DA5C 4C2D

Storm Software is an open source software development organization and creator of Acidic, StormStack and StormCloud.

Our mission is to make software development more accessible. Our ideal future is one where anyone can create software without years of prior development experience serving as a barrier to entry. We hope to achieve this via LLMs, Generative AI, and intuitive, high-level data modeling/programming languages.

Join us on Discord to chat with the team, receive release notifications, ask questions, and get involved.

If this sounds interesting, and you would like to help us in creating the next generation of development tools, please reach out on our website or join our Slack channel!


Storm Software

Visit us at stormsoftware.com

About

⚡ The Storm Stack monorepo contains utility applications, tools, and various libraries to create modern and scalable web applications.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

  •  

Contributors 6