Skip to content

eser/stack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

501 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

eserstack - The Portability Solution for Your Code! πŸš€

JSR @eser codecov Build Pipeline Built with the Deno Standard Library

eser stack javascript toolkit

Step into a world where you never have to deal with portability and platform issues. Whether you're targeting web browsers, serverless platforms, chatbots, CLI, or multiple platforms simultaneously, eserstack ensures your code runs flawlessly everywhere.

πŸ“– Overview

eserstack is a JavaScript toolkit designed to uphold best practices and enhance portability across different platforms.

Beyond being a toolkit, eserstack advocates for a philosophy that emphasizes writing code driven by algorithms, design and patterns, not by platform-specific implementation details.

While eserstack offers you a layer of abstraction that isolates you from the platforms, you can focus on your implementation. Don't worry about the rest, your solution will excel across diverse environments.

Every component of eserstack is designed to work in harmony, strives to offer you an intuitive and delightful development experience.

🌟 Why choose eserstack?

eserstack is meticulously designed for developers who:

  • Seek Portability: If you've ever felt the need for a JavaScript/TypeScript framework that seamlessly works across web browsers, Deno, Supabase, Netlify, AWS Lambda and Cloudflare Workers, eserstack is your answer. See the full list of supported platforms

  • Love Functional Programming: eserstack not only supports but encourages a functional programming approach. This means you can write your code once and run it on various platforms without modifications. Dive into our functional programming tools

  • Want Enhanced Testability: With the removal of hard-coded dependencies and the promotion of loose coupling, eserstack enhances the testability of your codebase, ensuring that your applications run as expected. Explore our dependency injection system

  • Desire a Unified Approach: Instead of juggling multiple libraries and tools, eserstack provides a unified toolkit where each component works seamlessly with the others, ensuring a smoother development experience. Check out our component set

  • Prioritize Best Practices: If you've been struggling with maintaining best practices in your development process, eserstack is here to guide you. With built-in support for principles like 12factor and dependency injection, you can ensure that your code remains clean, maintainable, and scalable. Learn more about our best practices approach

πŸ“‚ Components

Component Set

Core

Component Description Latest Version
🧩 @eser/primitives Result types, Option, and base constructors JSR
πŸ“‘ @eser/standards Cross-runtime standards, formatters, i18n, and runtime abstraction JSR
⚑ @eser/functions Monadic workflows, tasks, trigger adapters (CLI, HTTP, MCP) JSR
🧱 @eser/fp Functional programming combinators JSR
βš™οΈ @eser/di Dependency injection container JSR
πŸ““ @eser/directives Ground rules adhered to by the ecosystem -

Infrastructure

Component Description Latest Version
πŸ” @eser/config Load configurations from .env files and environment JSR
πŸ“’ @eser/events Event bus and pub/sub system JSR
πŸ“ @eser/logging Hierarchical logging with OpenTelemetry integration JSR
πŸ’Ύ @eser/cache Caching abstractions JSR
🌐 @eser/http HTTP client and server utilities JSR
🐚 @eser/shell CLI framework, shell execution, and completions JSR
πŸ”‘ @eser/crypto Cryptographic hashing via Web Crypto API JSR

Data & Parsing

Component Description Latest Version
〰️ @eser/parsing Parsing tools for strings and streams JSR
πŸ”„ @eser/formats Bidirectional format conversion (JSON, YAML, CSV, TOML, JSONL) JSR
🌊 @eser/streams Composable I/O streams with Span-based formatting and renderers JSR
βš™οΈ @eser/collector Module export collector and manifest generator JSR
πŸ—„οΈ @eser/cs Config storage β€” Kubernetes ConfigMap/Secret sync JSR

Web & UI

Component Description Latest Version
βš›οΈ @eser/jsx-runtime JSX runtime for server-side rendering JSR
βš™οΈ @eser/app-runtime Application lifecycle and module management JSR
🌐 @eser/laroux Laroux.js framework-agnostic core JSR
πŸ–₯️ @eser/laroux-server Laroux.js HTTP server and SSR runtime JSR
βš›οΈ @eser/laroux-react Laroux.js React client runtime and hydration JSR
πŸ“¦ @eser/laroux-bundler Laroux.js build tooling, CSS, and asset processing JSR
πŸ“¦ @eser/bundler General-purpose bundler utilities JSR

Tooling

Component Description Latest Version
πŸ€– @eser/ai AI provider interface β€” cloud APIs and local agents JSR
πŸ”§ @eser/codebase Codebase validation, scaffolding, and release management JSR
πŸ”„ @eser/workflows Workflow engine for tool pipelines JSR
πŸ“¦ @eser/registry Recipe registry, distribution protocol, and handlers JSR
🧰 @eser/kit Kit β€” recipes, templates, project creation JSR
πŸ–₯️ @eser/cli Terminal client β€” ai, kit, codebase, workflows, and more JSR
πŸ§ͺ @eser/testing Testing utilities and helpers JSR

Visit the respective component page for detailed usage instructions.

Our Goal / The Bigger Picture

We strive to run the following code seamlessly across all platforms we support:

import * as standardsRuntime from "@eser/standards/runtime";

const home = (ctx: standardsRuntime.Context) => {
  return ctx.results.jsx(<h1>Hello there!</h1>);
};

const profile = (ctx: standardsRuntime.Context) => {
  const slug = ctx.input.param("id");
  const db = ctx.di`db`;

  ctx.logger.info(`Visiting the profile of ${slug}!`);

  return ctx.results.json(
    db.query("SELECT * FROM users WHERE slug=:slug", { slug }),
  );
};

const router = (ctx: standardsRuntime.Context) => {
  switch (true) {
    case ctx.route.match("/"):
      return home(ctx);
    case ctx.route.match("/:id"):
      return profile(ctx);
    default:
      return ctx.results.notFound();
  }
};

const app = new standardsRuntime.Runtime();
app.di.register("db", new DatabaseConnection());
app.listen(router); // or app.execute(fn);

Platform Support

Since the reason we started to build this project is the feeling of a lack of a JavaScript/TypeScript framework that is portable across many platforms, we're always looking for the widen this list. By adhering to WinterCG guidelines and TC39 standards, we strive to provide a framework that is portable across all these platforms.

  • Deno
  • Node.js
  • Web Browsers
  • Service Workers
  • Deno Deploy
  • Cloudflare Workers
  • Supabase Functions
  • Netlify
  • AWS Lambda
  • Google Cloud Functions
  • Azure Functions
  • Telegram Bots
  • Discord Bots
  • Slack Bots

...and all other platforms that comply with the WinterCG guidelines.

πŸš€ Jumpstart

Ensure that Deno 2.4 or higher is installed on your system first.

Install the CLI

# Install script (macOS/Linux)
curl -fsSL https://eser.run/install | sh

# Or via npm
npm install -g eser

# Or run without installing
npx eser <command>

Browse available recipes

$ eser kit list

PROJECTS
  library-pkg          Deno library package with tests and README
  laroux-app           Laroux.js web application with SSR and React
  go-service           Go microservice with hexagonal architecture
  ...

UTILITIES
  fp-pipe              Functional pipe and compose utilities
  ajan-httpfx          Ajan HTTP server framework
  ...

Create a new project

$ eser kit new laroux-app --name my-site

βœ“ Created my-site with 14 file(s)

Add a recipe to an existing project

$ eser kit add fp-pipe

βœ“ Added 1 file(s) from fp-pipe
  β†’ lib/fp/pipe.ts
  βœ“ deno add jsr:@eser/fp@^4.1.0

Contributors


eser

ayhansipahi

wralith

πŸ™‹πŸ» FAQ

Want to report a bug or request a feature?

If you're going to report a bug or request a new feature, please ensure first that you comply with the conditions found under @eser/directives. After that, you can report an issue or request using GitHub Issues. Thanks in advance.

Want to contribute?

It is publicly open for any contribution from the community. Bug fixes, new features and additional components are welcome.

If you're interested in becoming a contributor and enhancing the ecosystem, please start by reading through our CONTRIBUTING.md.

If you're not sure where to begin, take a look at the issues labeled good first issue and help wanted. Reviewing closed issues can also give you a sense of the types of contributions we're looking for and you can tackle.

If you're already an experienced OSS contributor, let's take you to the shortest path: To contribute to the codebase, just fork the repo, push your changes to your fork, and then submit a pull request.

Requirements

Versioning

This project follows Semantic Versioning. For the versions available, see the tags on this repository.

License

This project is licensed under the Apache 2.0 License. For further details, please see the LICENSE file.

To support the project...

Visit my GitHub Sponsors profile at github.com/sponsors/eser

About

The Portability Solution for Your Code! πŸš€ Powered By Deno and JavaScript.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

 

Packages

 
 
 

Contributors