v-va*

VA.2026.007 · Floor 0 · service · hall 02

Exnest VA

collection Exnest VA Collection
accession VA.2026.007
classification Software Framework · OData V4 · NestJS + Elysia · Open Source
floor Floor 0 · service
status on view
condition live · 2 runtime cores · 3 engines
acquired 2026
revision Rev. A
drawing DWG-007
room 01 curator sheet 01 / 09 · rev Rev. A

“a framework is not a stack — it is an agreement about where everything lives.”

Exnest VA is not a product — it is the agreement every product in this collection signs. Resource-oriented, OData-shaped, multi-tenant by design: responses carry @odata.context, @odata.count, and @odata.nextLink; errors are ODataError with id/en messages; tenants arrive on an x-tenant-id header. Learn the convention once and every module reads the same.

The framework ships as two runtime cores with identical architecture. The NestJS core is the enterprise twin (NestJS 11, layered Controller → Service → store); the Elysia core is the fast twin (Elysia on Bun, same lib layout: endpoint, exception, odata). A feature module is always eight files — barrel, module builder, controller, service, dto, interface, i18n, spec — and a generator scaffolds it, wires the registries, and appends the model to the schema.

Engines are the collection's growth mechanism: framework-agnostic kernels with per-framework adapters (/nest, /elysia), so the same machine runs on any backend. VA-ORM persists, the video engine streams HLS, the PDF engine serves watermarked pages behind signed tokens — each one folder, same boundary: kernel clean of frameworks, adapters optional. Note the name: Exnest VA, under Void VA — not ExnestJS, which describes only half the building.

VA.2026.007

Exnest VA

Software Framework · OData V4 · NestJS + Elysia · Open Source


artist / curator
v-va
date
2025 — present (open source, under Void VA)
status
on view
condition
live · 2 runtime cores · 3 engines
medium
OData V4 envelope · NestJS enterprise core · Elysia + Bun fast core · declarative endpoint registry · module scaffolding · OpenAPI + Postman codegen · framework-agnostic engines
runtime cores
2
engines
3
files per module
8
response envelope
OData V4
tenancy
multi-tenant
acquired
2026
revision
Rev. A
origin
drawn as a monorepo, kept as a promise, 2025
room 02 evolution of this work sheet 02 / 09
2025

Two Twins

NestJS enterprise core and Elysia fast core established side by side — same module convention, same OData envelope, different runtimes.

2025

The Convention

Eight-file module standard frozen: barrel, builder, controller, service, dto, interface, i18n, spec. Generators for modules, OpenAPI, and Postman collections.

2026

Engines

Kernel-plus-adapter pattern adopted: VA-ORM, HLS video-stream, and protected pdf-stream land as drop-in engines with /nest and /elysia adapters.

2026

The Collection

Downstream works (memory engine, timeline simulation) built entirely on the convention — proof the agreement holds. Renamed Exnest VA to describe the whole, not one runtime.

concepts — kept & discarded

kept — one convention across runtimes; learn once, read everything

rejected — single-stack identity; the framework is the agreement, not the runtime

held — engines as clean kernels; frameworks plug in, never the reverse

archive ref — VA.2026.007/CON

cross ref — timeline fig. 01

room 03 original sketches sheet 03 / 09

curator annotations

on names

call it Exnest VA: the whole agreement, not one runtime's surname.

on conventions

eight files, same order, every time — boring is the feature.

on engines

a kernel that imports a framework is a plugin with ambitions; keep it clean.

fig. 01 — VA.2026.007.a the two cores monorepo· nestjs · elysia · live enterprise twin and fast twin — same architecture, same conventions, either deployable alone.
fig. 02 — VA.2026.007.b the eight-file module convention· 1 feature : 8 files · frozen barrel, builder, controller, service, dto, interface, i18n, spec — scaffolded, never improvised.
fig. 03 — VA.2026.007.c the envelope protocol· OData V4 · standard @odata.context, @odata.count, @odata.nextLink on every collection — the reader always knows where it stands.
fig. 04 — VA.2026.007.d the engine boundary diagram· kernel + adapters · adopted kernel clean of frameworks; /nest and /elysia adapters optional. one folder per engine.
room 04 interface reviews sheet 04 / 09
fig. 05 — VA.2026.007.e scaffold a feature render gen:module — new CRUD module wired into registries in one command
fig. 06 — VA.2026.007.f document itself render openapi:gen + postman:gen — specs derived from the route registry, never hand-written
fig. 07 — VA.2026.007.g drop in an engine render engines consumed per-framework — same kernel, any backend
room 05 catalog record sheet 05 / 09
materialsOData V4 envelope · NestJS enterprise core · Elysia + Bun fast core · declarative endpoint registry · module scaffolding · OpenAPI + Postman codegen · framework-agnostic enginesdimensionsruntime cores — 2 · engines — 3 · files per module — 8 · response envelope — OData V4 · tenancy — multi-tenant
conditionlive · 2 runtime cores · 3 enginesacquired2026
revisionRev. Aarchive locationDWG-007 · floor Floor 0 · service
internal referenceVA.2026.007/Morigindrawn as a monorepo, kept as a promise, 2025
room 06 the archive sheet 06 / 09

failed experiments

✕ 2025

the single-runtime assumption

early docs described one stack; the second core forced the rename to Exnest VA and a monorepo that holds both.

✕ 2026

hand-written specs

Postman collections maintained by hand drifted within weeks. codegen from the registry killed the drift.

✕ 2026

the framework-coupled engine

first engine draft imported framework internals. split into kernel plus adapters before a second consumer existed.

draft concepts

  • monorepo layout sketch
  • eight-file module contract
  • OData envelope decision
  • engine boundary rule

research notes

— identical architecture across two runtimes beats abstraction layers — copy the shape, not the code.

— generated specs stay honest because they derive from the route registry, not from memory.

— multi-tenancy at the service level keeps every downstream work isolated without extra thought.

room 07 architecture · technical drawing DWG-007 · rev Rev. A
DWG-007 · Rev. A · floor plan — Exnest VA curator annotation — zones 03–05 are load-bearing; the presence layer must remain unshaded.
room 08 design statement sheet 08 / 09

I. Convention over configuration

Where a file lives is decided once, for every feature, forever. The eight-file module and the twin registries remove placement decisions so builders spend their judgment on behavior.

II. Two doors, one house

Enterprise and fast are deployment choices, not dialects. Identical architecture across cores means a module written against the convention reads natively in either runtime.

III. Grow by engines

New capability arrives as a folder with a clean kernel and optional adapters — never as framework surgery. The collection expands without the foundation shifting.

room 09 related works & future vision sheet 09 / 09

future vision

The collection grows one engine at a time — queue, transcode, live — each a folder with the same boundary. The cores stay twins, the envelope stays OData, and the agreement holds: Exnest VA is the room the tools share, not any single tool on its wall.