Repository navigation
v0.7.6
ExisJS Release v0.7.6
Release Date: 2026-09-21
Type: Stability, Developer Experience & Performance
Affected Packages: exisjs, create-exisjs, @exisjs/rs
Highlights
- Standardized Response Toolkit (
exisjs/response): First-class response envelopes (success,created,accepted,noContent,error), RFC 7807 / RFC 9457 Problem Details (problem), uniform pagination helpers (paginate,getPaginationSkip), and strongly-typedHttpStatusconstants. - Human-Readable Developer Error Envelopes: Automatic internal frame stripping filters out runtime internals, presenting categorized error banners, source code frames with line pointers, and actionable hints during development.
- Modern Single-Line Request Logger: Polished terminal HTTP request logging featuring color-coded method badges, path-query separation, status reason phrases, dynamic latency coloring, human-readable byte sizes, and silent probe suppression.
- Windows Hot-Reload & Process Stability: Resolved libuv assertion crashes (
UV_HANDLE_CLOSING) on Windows, introduced a 150ms hot-reload debounce window, and synchronized shutdown streams for clean, out-of-order-free teardown logs. - Graceful Zero-Downtime Container Teardown (
SIGTERM/SIGINT): Production runtime stops new connections, drains active in-flight requests, and flushesonClosehooks with timeout guarantees. - Enhanced
texValidation Engine & Environment Parser (tex.env): First-class declarative defaults (default: value | (() => value)), automatic type coercion for environment schemas viatex.env(), and structured error descriptors across the Rust FFI boundary. - Native HTTP Streaming & Backpressure: First-class streaming via
res.sendStream()and route handler return values supporting Node streams, WebReadableStream, and async generators with backpressure and client disconnect handling. - Type-Safe Route Manifest (
AppRouter): Enhanced type generator creating hierarchical AST trees and path indices with real-time watcher synchronization on file rename, creation, or deletion.
Key Improvements
1. Standardized Response Toolkit (exisjs/response)
ExisJS introduces a comprehensive response toolkit to enforce consistent API envelopes across backend services:
- Response Builders:
success(),created(),accepted(),noContent(),error(), andproblem()(RFC 7807 Problem Details). - Pagination Utilities:
paginate()returns standard pagination metadata (page,limit,total,totalPages,hasNextPage,hasPrevPage), whilegetPaginationSkip()simplifies database offset calculations. - Status Codes & Helpers:
HttpStatusconstants,getStatusText(), and predicate helpers (isSuccessStatus,isClientError,isServerError). - Unified Re-exports:
ExisResponseandSSEStreamare directly accessible fromexisjs/responseand the rootexisjspackage.
2. Actionable Developer Error Envelopes
Uncaught exceptions and route configuration errors during development now render clean, human-friendly terminal banners:
- Internal Frame Stripper: Strips internal runtime and framework stack lines, keeping focus entirely on developer source code.
- Contextual Diagnostics: Displays labeled categories (e.g. Route Configuration Error, Environment Error), exact line/column pointers, code frame previews, and contextual remediation hints.
3. Modern Terminal Request Logging
The default development request logger now formats incoming traffic into clean single-line logs:
- Formats requests with color-coded HTTP methods, formatted status codes (
200 OK,404 Not Found), latency thresholds (<50msgreen,>250msred), and response sizes (1.2 KB). - Diagnostic sublines cleanly highlight validation issues (
└─ ⚠ Validation) and exceptions without polluting stdout. - Retains high-throughput structured NDJSON streams in production environments.
4. Windows Hot-Reload & Process Lifecycle Boundary
- Eliminated Windows IPC handle race conditions during rapid development saves.
- Added a 150ms debounce queue in
exis devto prevent multiple back-to-back restarts during formatter file saves. - Enforced individual timeout safety across all
onClosehooks to guarantee deadlock-free server termination.
5. Validation Engine Upgrades (tex & tex.env)
tex.env(): Automatically coerces numeric, boolean, date, and array values directly fromprocess.env.- Declarative Defaults: All
texprimitives accept static defaults or dynamic factory functions (default: () => new Date()) without method-chaining overhead. - Structured Error Mappings: Rust validator passes structured descriptors (
path,expected,received,code) across the FFI boundary for rich terminal tables and structured 400 responses.
6. Streaming & Request Lifecycle
- Universal Streaming: Handles Node.js streams, Web
ReadableStream, and async generators with native socket backpressure (drainmanagement) and early client disconnect teardown. - Context Isolation: Hardened
AsyncLocalStoragerequest lifecycle with deterministic teardown on response completion to prevent memory leaks in high-concurrency benchmarks.
Full Changelog: v0.7.5...v0.7.6