Skip to content

Adonia 1.0 API review

Review date: 2026-07-27
Scope: the seven publishable packages, descriptor protocol v1, ComponentRegistry, server and UI plugin contracts, explicit package subpaths, Ace hooks, and doctor checks.

Decision

Protocol version remains the literal 1. Phase 4 tenant, nesting, locale, plugin, and registry data is optional or carried in open props objects; no existing required envelope or descriptor key is renamed or removed. Clients continue to reject only a value other than 1.

The signed source inventory is generated by pnpm launch:check from package export maps and source barrels. The protocol fixture set under fixtures/protocol/ remains the executable wire inventory.

Frozen ecosystem ABIs

  • Wire roots: AdoniaEnvelope, PanelEnvelope, ResourceDescriptor, DescriptorNode, TableDescriptor, ColumnDescriptor, ReactiveSpec, RecordsEnvelope, SerializedRow, ActionDescriptor, and protocolVersion: 1.
  • Required node keys: type, key, props; optional additive keys: reactive, urls, children.
  • Required resource keys: resource, mode; mode-specific schema/table; additive actions and lenses.
  • Registry values and types: ComponentRegistry, createAdoniaRegistry, getDefaultRegistry, RegistryMapName, AdoniaUiPlugin, NamedAdoniaUiPlugin, UnknownComponentEvent; register, resolve, use, and unknown-component subscription behavior.
  • Server plugin values and types: definePlugin, AdoniaPlugin, ADONIA_HOOK_EVENTS, hook payload types, and Panel.plugins().
  • Hook event names: resource:booted, descriptor:compiling, pipeline:building, record:saving, record:saved, record:deleting, record:deleted, action:executing, action:executed, action:failed, nav:building, and search:results.
  • Addressable pipeline stage names: base, softDeleteScope, search, filters, sort, and eagerLoad.

Export review

Every exports key is intentional. @adonia/core exposes the root authoring/runtime API plus the documented testing, protocol types, provider, and middleware integration subpaths. @adonia/ui exposes its root authoring API, packaged pages, registry-only API, Tailwind preset, and stylesheet. @adonia/devtools intentionally has no root export: only hooks, commands, configure, and doctor are supported. Each adapter/reference plugin exposes only its documented root and, where applicable, client entry.

The broad root barrels in core and UI are intentional extension-author surfaces: custom fields, columns, filters, widgets, pages, transports, plugin hooks, and conformance utilities need them without internal-path imports. Heavy editor implementations remain absent from the UI value barrel and lazy-loaded.

@adonia/core has no runtime dependency on @adonia/ui. AdonisJS, React, Lucid, Vine, BullMQ, and framework integration packages remain peer dependencies at their package boundaries.

Deprecation and alias sweep

No public @deprecated declaration or Phase-future compatibility export remains. NotImplementedException was removed from the core root barrel during review: no runtime path throws it, it represented unfinished-work vocabulary rather than an ecosystem contract, and consumers must use the concrete stable exception for the failed operation. The Router makeUrl member is a private structural compatibility input for AdonisJS Router and is not exported as an Adonia API.

RuleBuilder.is/isNot/isTruthy/isFalsy and equals/notEquals/truthy/falsy are intentional DSL vocabulary pairs accepted since 0.x, not deprecated aliases; both compile directly to the same frozen JsonLogic rules and remain supported. Container aliases are stable AdonisJS binding names, not source compatibility shims.

No 0.x public symbol needs a breaking rename for 1.0. The one accidental export removal has no mechanical replacement, so a codemod would be misleading; no codemod is required or shipped. The changeset and checklist record this decision.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close