Modules with clear boundaries
Keep each feature together. Register modules explicitly and see exactly how your application fits together.
COMPOSABLE BY DESIGNExetJS is a lightweight modular backend engine and CLI toolkit for Express + TypeScript, developed byWebDigiTech. Just enough structure. All the control.
pnpm add -g @exetjs/cliimport { Router } from 'express';
import type { ExetModule } from '@exetjs/core';
export const hello: ExetModule = {
name: 'hello',
basePath: '/hello',
register: () => {
const router = Router();
router.get('/', (_req, res) => {
res.json({ message: 'Hello, ExetJS.' });
});
return { router };
},
};You know Express. Keep that freedom.
Add the structure your next project deserves.
Keep each feature together. Register modules explicitly and see exactly how your application fits together.
COMPOSABLE BY DESIGNTyped configuration, a clear module contract, and a generated TypeScript project. Confidence built into your workflow.
TYPES THAT GUIDE YOUScaffold a project, start development, add a module, and check your configuration. One small CLI.
FROM TERMINAL TO APIStart small, stay in control, and add structure as your application grows.
Add ExetJS to your development toolkit.
Choose your defaults. Get a clean foundation.
Run your API with a local watch workflow.
Install a module. Keep its code in your project.
Build features around explicit module contracts.
Create your app, register its modules, and start the server. Express stays within reach.
@exetjs/coreA small set of commands for creating, running, checking, and extending your project.
@exetjs/cliOne explicit registry. Predictable routes. Your application, assembled in plain sight.
ExetModuleProject defaults and environment overrides with a clear order of precedence.
exet.config.tsA simple HTTP endpoint to confirm that your application is running and reachable.
/api/v1/healthSeparate configuration, middleware, modules, and shared utilities from the start.
src/modules/The tools serving these pages.
Separate from the ExetJS backend runtime.
The core is small. Where you take it is up to you.