Note: JSR is frozen at 4.5.x. From 5.0.0 the
@eserstack/*libraries are published on npm under the same names, and theeser,noskillsandlarouxtools as the npm packages of those names; the JSR versions stay available but get no updates.
eserstack is eser's personal software workshop β a foundation layer, developer tools, and product incubator, all built on a single philosophy.
This workshop runs on a shared philosophy (PHILOSOPHY.md) and a common set of directives that apply across all packages, contributors, and community channels (@eserstack/directives).
Built for developers who:
- Think in layers β foundation first, tools on top, products last
- Believe in explicit constraints β quality is encoded at the start, not gated at the end
- Want human-in-the-loop AI β tools that think but don't decide
- Build to ship β real products, not perpetual side projects
Stable, minimal, rarely changes. Axioms the rest builds on.
| Package | Description |
|---|---|
| @eserstack/primitives | Result<T,E>, Option<T>, type guards |
| @eserstack/fp | 70+ functional programming combinators |
| @eserstack/di | IoC container, Registry, Scope |
| @eserstack/standards | Cross-runtime, i18n, formatters, logging levels |
| @eserstack/functions | Monadic do-notation, middleware, trigger adapters |
| @eserstack/events | Event bus, pub/sub |
| @eserstack/directives | Ecosystem ground rules β technical and social directives |
Active, maintained, published independently. No CLI (Libraries) or workflow-facing (Tools).
| Package | Description |
|---|---|
| @eserstack/shell | CLI framework: args, completions, exec, TUI |
| @eserstack/formats | Bidirectional format conversion (JSON, YAML, CSV, TOML, JSONL) |
| @eserstack/streams | Pipeline I/O |
| @eserstack/logging | Hierarchical logging, OpenTelemetry |
| @eserstack/codebase | Git ops, scaffolding, version management |
| @eserstack/workflows | Event-driven workflow engine |
| @eserstack/ai | AI provider abstraction (Claude, OpenAI, Gemini) |
Full list (all Libraries & Tools)
Libraries
| Package | Description |
|---|---|
| @eserstack/formats | Bidirectional format conversion (JSON, YAML, CSV, TOML, JSONL) |
| @eserstack/streams | Pipeline I/O |
| @eserstack/parsing | Tokenizer, lexer, AST |
| @eserstack/logging | Hierarchical logging, OpenTelemetry |
| @eserstack/http | HTTP middleware, response helpers |
| @eserstack/httpclient | HTTP client with timeouts, retries and typed errors |
| @eserstack/crypto | Web Crypto wrappers |
| @eserstack/cache | XDG cache directories |
| @eserstack/config | .env + env var configuration |
| @eserstack/testing | fakeFs, fakeServer, tempDir |
| @eserstack/collector | Export manifest generation |
| @eserstack/cs | Kubernetes ConfigMap/Secret sync from .env files |
| @eserstack/agents | Coding agent discovery and the read-only git guard |
| @eserstack/ajan | Go/WASM FFI bridge |
| @eserstack/kit | Recipe registry, distribution protocol, handlers |
Tools
| Package | Description |
|---|---|
| @eserstack/bundler | Abstract bundler, snapshot AOT |
| @eserstack/shell | CLI framework: args, completions, exec, TUI |
| @eserstack/mux | Terminal multiplexer engine: tabs, panes, keybindings |
| @eserstack/codebase | Git ops, scaffolding, version management |
| @eserstack/workflows | Event-driven workflow engine |
| @eserstack/kit | Recipe + template distribution |
| @eserstack/cli | Main entrypoint CLI |
| @eserstack/ai | AI provider abstraction (Claude, OpenAI, Gemini) |
| @eserstack/app-runtime | Application lifecycle management |
Growing toward β or already with β their own identity.
| Package | Status | Description |
|---|---|---|
| @eserstack/noskills | GRADUATED | AI development orchestrator |
| @eserstack/noskills-web | Product | web dashboard for noskills |
| @eserstack/laroux | Product-Candidate | framework-agnostic web core β Growing toward graduation. |
| @eserstack/laroux-react | Product-Candidate | React integration for laroux |
| @eserstack/laroux-server | Product-Candidate | SSR runtime for laroux |
| @eserstack/laroux-bundler | Product-Candidate | build pipeline for laroux |
| Goal | Entry point |
|---|---|
| AI-assisted project development | noskills β install |
| Add typed utilities to your project | @eserstack/fp, @eserstack/di β pnpm add @eserstack/fp |
| Build a web app | laroux β laroux docs |
| Understand the philosophy | PHILOSOPHY.md β read it |
| Understand how eserstack operates | @eserstack/directives β ecosystem rules |
AI development orchestrator β structured discovery, human-in-the-loop, quality gates. Before a single line of code, noskills asks the right questions.
Standalone install:
curl -fsSL https://raw.githubusercontent.com/eser/stack/main/etc/scripts/install.sh | sh -s noskills
(or brew/npm/nix β see Install the CLI) In Claude Code:
Add to your project and use via npx noskills spec new "description"
The install script, Homebrew and Nix install Go binaries that need no other runtime. The npm packages need Node.js 26.9 or later.
# macOS / Linux β install script
curl -fsSL https://raw.githubusercontent.com/eser/stack/main/etc/scripts/install.sh | sh
# Downloads the eser binary to ~/.local/bin. Inspect the script before running:
# https://raw.githubusercontent.com/eser/stack/main/etc/scripts/install.sh
# A specific release instead of the latest one:
curl -fsSL https://raw.githubusercontent.com/eser/stack/main/etc/scripts/install.sh | ESER_INSTALL_VERSION=4.5.2 sh
# Windows (PowerShell); set $env:VERSION = "4.5.2" first for a specific release
irm https://raw.githubusercontent.com/eser/stack/main/etc/scripts/install.ps1 | iex
# Homebrew
brew install eser/tap/eser
# Nix
nix run github:eser/stack
# npm / npx
npm install -g eser
# or: npx eser <command>Four tools ship from this repo, all at one version from one pipeline:
| Binary | What it is | Install |
|---|---|---|
eser |
the full CLI | curl -fsSL .../install.sh | sh |
noskills |
the spec workflow, on its own | ... | sh -s noskills |
laroux |
the laroux.js CLI, on its own | npm i -g laroux (from 5.0.0) |
noskills-server |
the session daemon (Go) | ... | sh -s noskills-server |
The installer is
https://raw.githubusercontent.com/eser/stack/main/etc/scripts/install.sh, and
the product is its argument. On Windows use install.ps1 with -Product.
Homebrew has a formula per binary (brew install eser/tap/noskills), and
eser, noskills and laroux are also on npm.
The installer reads the release it installs from, the latest one or the one
ESER_INSTALL_VERSION ($env:VERSION or -Version on Windows) names. When that release has no
archive of the product for your platform, the installer prints the
npm i -g <product> command for it and exits without installing. From 5.0.0
laroux is on npm only, so sh -s laroux prints npm i -g laroux; an installed
v4.5.x laroux binary updates to a stub that runs the npm package.
noskills and laroux are not separate programs β they are the same modules
eser mounts, re-rooted so they can be installed alone. Every one of them
carries the same system tree:
noskills system install # also: uninstall, update, completions,
noskills system doctor # version, doctor, info
noskills version # short aliases: install, update, version, doctorSubmodules deliberately do not: eser noskills version does not exist, because
a submodule is not a program with a version of its own. noskills-server is the
exception in the other direction β being a Go daemon, it has its own command set
(start, doctor, pin, install-service, quickstart) rather than this
one.
$ eser kit list
PROJECTS
library-pkg Workspace 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
...$ eser kit new laroux-app --name my-site
β Created my-site with 13 file(s)$ eser kit add fp-pipe
β Added 1 file(s) from fp-pipe
β lib/fp/pipe.ts
β npm install @eserstack/fpeser |
ayhansipahi |
wralith |
If you're going to report a bug or request a new feature, please ensure first that you comply with the conditions found under @eserstack/directives. After that, you can report an issue or request using GitHub Issues. Thanks in advance.
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.
- Node.js 26.9 or higher (https://nodejs.org/);
.node-versionpins the version CI uses - pnpm 11.18.0 (https://pnpm.io/)
- Go 1.26 or higher (https://go.dev/) for the Go packages and binaries
This project follows Semantic Versioning. For the versions available, see the tags on this repository.
This project is licensed under the Apache 2.0 License. For further details, please see the LICENSE file.
Visit my GitHub Sponsors profile at github.com/sponsors/eser