Search KetJS

Search titles, descriptions, and section headings.

    Diagram

    100%
    Drag to pan · Scroll or pinch to zoom · + / − to zoom · Arrow keys to pan · 0 to fit · 1 to reset

    COMPOSE MORE. COUPLE LESS.

    The fullstack framework
    that fits together.

    Build modular TypeScript applications with data, permissions, web UI and jobs that share a checked contract. Start with SQLite, compose reusable features, or use ketjs-view on its own for a static site.

    npx -y @ketvietlab/ketjs@latest new my_app

    Node.js 24+ · MIT licensed · 0.2.0 preview

    One deploymentOne checked manifestOne application

    THE PIECES, ALREADY CONNECTED

    More application.
    Less assembly.

    Spend less time connecting schemas, permissions, routes and workers. Each module declares the contracts they share.

    Modules with real boundaries

    Compose features through published extension points. Catch missing dependencies before serving requests.

    HTML first. Islands when needed.

    Render on the server, hydrate only interactive regions, and update the DOM with signals.

    Business logic you can enforce

    Explicit effects, validation, and permissions put boundaries around every operation.

    Work that survives a restart

    Transactional jobs, worker leases, and retries. SQLite or PostgreSQL. No Redis required.

    Ready for agents

    Expose declared capabilities with opt-in dry runs and idempotency. Keep domain rules in charge.

    DECLARE IT ONCE

    Your modules.
    A complete application.

    A deployment selects the modules. KetJS checks their contracts and composes the runtime.

    WHY CHOOSE KETJS?

    One contract across your application.

    A router or a UI library solves one part of the stack. KetJS is useful when reusable business modules need their data, permissions, routes and background work to stay aligned.

    Catch composition errors before requests arrive

    The build composes one manifest and rejects missing dependencies and unpublished extension points. You can inspect what each deployment actually contains.

    Inspect application composition →

    Keep rules at the operation boundary

    Declare validation, effects and permissions alongside business functions. HTTP routes and agent calls invoke those operations through the framework runtime.

    Read the function contract →

    Start with fewer services to operate

    SQLite handles local data and durable jobs. Add the PostgreSQL adapter when you need it; the built-in job queue does not require a separate Redis service.

    Understand durable jobs →

    Choose just the rendering layer

    Use ketjs-view independently for TSX, signals, SSR, static sites or client rendering. Install the server framework only when you need its application contracts.

    Build with ketjs-view alone →

    A good fit for modular business applications.

    Evaluate KetJS when building tenant-aware tools, operational workflows, reusable feature modules or agent-accessible business operations. This site itself uses the standalone rendering layer and static generation.

    KetJS is still a preview for evaluation and feedback. APIs and data formats can change before 1.0, and production workloads are not recommended yet. If you need a mature ecosystem and long-term compatibility today, weigh that requirement before adopting it.

    See measured performance and its limits →

    START WITH SOMETHING REAL

    Small beginnings.
    Room to compose.

    A fullstack application or a static site. Both start with the public KetJS contracts.

    Runnable example

    Notes application

    A SQLite-backed application with a module, model, function, migration, and HTTP route.

    Runnable example

    Static site with islands

    Build plain HTML, CSS, and JavaScript with optional interactive islands and no application server.

    BUILD YOUR NEXT APPLICATION

    Make the pieces work together.

    Start with SQLite. Ship the modules you need. Keep the boundaries explicit.

    Build with KetJS