Skip to content

v0.7.6

Choose a tag to compare

@github-actions github-actions released this 22 Sep 04:58
· 41 commits to main since this release

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-typed HttpStatus constants.
  • 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 flushes onClose hooks with timeout guarantees.
  • Enhanced tex Validation Engine & Environment Parser (tex.env): First-class declarative defaults (default: value | (() => value)), automatic type coercion for environment schemas via tex.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, Web ReadableStream, 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(), and problem() (RFC 7807 Problem Details).
  • Pagination Utilities: paginate() returns standard pagination metadata (page, limit, total, totalPages, hasNextPage, hasPrevPage), while getPaginationSkip() simplifies database offset calculations.
  • Status Codes & Helpers: HttpStatus constants, getStatusText(), and predicate helpers (isSuccessStatus, isClientError, isServerError).
  • Unified Re-exports: ExisResponse and SSEStream are directly accessible from exisjs/response and the root exisjs package.

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 (<50ms green, >250ms red), 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 dev to prevent multiple back-to-back restarts during formatter file saves.
  • Enforced individual timeout safety across all onClose hooks to guarantee deadlock-free server termination.

5. Validation Engine Upgrades (tex & tex.env)

  • tex.env(): Automatically coerces numeric, boolean, date, and array values directly from process.env.
  • Declarative Defaults: All tex primitives 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 (drain management) and early client disconnect teardown.
  • Context Isolation: Hardened AsyncLocalStorage request lifecycle with deterministic teardown on response completion to prevent memory leaks in high-concurrency benchmarks.

Full Changelog: v0.7.5...v0.7.6