- v4.1.56Latest
- v4.1.55
- v4.1.54
- v4.1.53
- v4.1.52
- v4.1.51
- v4.1.50
- v4.1.49
- v4.1.48
- v4.1.47
- v4.1.46
- v4.1.45
- v4.1.44
- v4.1.43
- v4.1.42
- v4.1.41
- v4.1.40
- v4.1.39
- v4.1.37
- v4.1.36
- v4.1.35
- v4.1.34
- v4.1.33
- v4.1.32
- v4.1.31
- v4.1.30
- v4.1.29
- v4.1.28
- v4.1.27
- v4.1.26
- v4.1.25
- v4.1.24
- v4.1.23
- v4.1.22
- v4.1.21
- v4.1.20
- v4.1.19
- v4.1.18
- v4.1.17
- v4.1.16
- v4.1.15
- v4.1.14
- v4.1.13
- v4.1.12
- v4.1.11
- v4.1.10
- v4.1.9
- v4.1.8
- vUnreleased
- v4.1.7
- v4.1.6
- v4.1.5
- v4.1.4
- v4.1.3
- v4.1.2
- 0.7.20
- 0.7.15
- 0.7.13
- 0.7.12
- 0.7.11
- 0.7.9
- 0.7.8
- 0.7.7
- 0.7.6
- 0.7.5
- 0.7.4
- 0.7.3
- 0.7.2
- 0.7.1
- 0.7.0
eserstack - The Portability Solution for Your Code! π
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,
eserstackis your answer. See the full list of supported platformsLove Functional Programming:
eserstacknot 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 toolsWant Enhanced Testability: With the removal of hard-coded dependencies and the promotion of loose coupling,
eserstackenhances the testability of your codebase, ensuring that your applications run as expected. Explore our dependency injection systemDesire a Unified Approach: Instead of juggling multiple libraries and tools,
eserstackprovides a unified toolkit where each component works seamlessly with the others, ensuring a smoother development experience. Check out our component setPrioritize Best Practices: If youβve been struggling with maintaining best practices in your development process,
eserstackis 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 | |
| π @eser/standards | Cross-runtime standards, formatters, i18n, and runtime abstraction | |
| β‘ @eser/functions | Monadic workflows, tasks, trigger adapters (CLI, HTTP, MCP) | |
| π§± @eser/fp | Functional programming combinators | |
| βοΈ @eser/di | Dependency injection container | |
| π @eser/directives | Ground rules adhered to by the ecosystem | - |
Infrastructure
| Component | Description | Latest Version |
|---|---|---|
| π @eser/config | Load configurations from .env files and environment | |
| π’ @eser/events | Event bus and pub/sub system | |
| π @eser/logging | Hierarchical logging with OpenTelemetry integration | |
| πΎ @eser/cache | Caching abstractions | |
| π @eser/http | HTTP client and server utilities | |
| π @eser/shell | CLI framework, shell execution, and completions | |
| π @eser/crypto | Cryptographic hashing via Web Crypto API |
Data & Parsing
| Component | Description | Latest Version |
|---|---|---|
| γ°οΈ @eser/parsing | Parsing tools for strings and streams | |
| π @eser/formats | Bidirectional format conversion (JSON, YAML, CSV, TOML, JSONL) | |
| π @eser/streams | Composable I/O streams with Span-based formatting and renderers | |
| βοΈ @eser/collector | Module export collector and manifest generator | |
| ποΈ @eser/cs | Config storage β Kubernetes ConfigMap/Secret sync |
Web & UI
| Component | Description | Latest Version |
|---|---|---|
| βοΈ @eser/jsx-runtime | JSX runtime for server-side rendering | |
| βοΈ @eser/app-runtime | Application lifecycle and module management | |
| π @eser/laroux | Laroux.js framework-agnostic core | |
| π₯οΈ @eser/laroux-server | Laroux.js HTTP server and SSR runtime | |
| βοΈ @eser/laroux-react | Laroux.js React client runtime and hydration | |
| π¦ @eser/laroux-bundler | Laroux.js build tooling, CSS, and asset processing | |
| π¦ @eser/bundler | General-purpose bundler utilities |
Tooling
| Component | Description | Latest Version |
|---|---|---|
| π€ @eser/ai | AI provider interface β cloud APIs and local agents | |
| π§ @eser/codebase | Codebase validation, scaffolding, and release management | |
| π @eser/workflows | Workflow engine for tool pipelines | |
| π¦ @eser/registry | Recipe registry, distribution protocol, and handlers | |
| π§° @eser/kit | Kit β recipes, templates, project creation | |
| π₯οΈ @eser/cli | Terminal client β ai, kit, codebase, workflows, and more | |
| π§ͺ @eser/testing | Testing utilities and helpers |
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 runtime from "@eser/runtime";
const home = (ctx: runtime.Context) => {
return ctx.results.jsx(<h1>Hello there!</h1>);
};
const profile = (ctx: runtime.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: runtime.Context) => {
switch (true) {
case ctx.route.match("/"):
return home(ctx);
case ctx.route.match("/:id"):
return profile(ctx);
default:
return ctx.results.notFound();
}
};
const runtime = new runtime.Runtime();
runtime.ci.register("db", new DatabaseConnection());
runtime.listen(router); // or runtime.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.0Contributors
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
- Deno 2.4 or higher (https://deno.land/)
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