All systems

01 / API governance / product system

API specifications are easy to write.
Governing them at scale is harder.

YASP turns OpenAPI and AsyncAPI documents into searchable, endpoint-centered API references. Import a document or fetch one from an endpoint, organize APIs into collections, and keep the workspace local by default.

Spec Govern Shared core System view / static reference frame
System path
Specification
OPENAPI / ASYNCAPI

01 / Context

Raw files are not a workspace

API specifications are useful only when people can find the right service and reach the right endpoint quickly. Raw files and scattered links make references difficult to search, compare, and keep close to the work.

YASP exists so a specification can enter a catalog, pass governance, and become an endpoint-centered working surface — without requiring a hosted documentation product.

02 / Constraints

The document is both product and liability

Specifications can be large. Linting and analysis are expensive enough to freeze an editor if they share the UI thread.

Internal and pre-release APIs should not have to be uploaded to a third-party catalog. HTTP APIs and event-driven systems also use different description formats, so a single workspace has to hold OpenAPI and AsyncAPI without collapsing them into one model.

Live testing is part of documentation work, but the browser's same-origin rules and the risk of server-side request forgery both constrain how 'try it' can be implemented.

03 / System

A specification moves through a governed path

A document enters from a file or from an endpoint URL. YASP checks format and required metadata before the reference joins a collection. Collections stay searchable by name, version, description, and tag.

From there the reading surface is the endpoint or channel: method, parameters, and responses become the primary navigation. Optional AI-assisted generation and fixes sit at the edge of the system — they are not required for the core workspace.

The same core runs in the browser and in a Tauri desktop shell, so web and desktop are two surfaces on one catalog, not two products.

04 / Decisions

Decisions made against constraints.

Decision / 01

Keep heavy processing off the UI thread

Problem
Spectral linting and large-spec analysis blocked the editor. Typing into a specification should not wait on a full governance pass.
Decision
Run Spectral in a Web Worker so linting is isolated from the main thread.
Why
The interface has to stay responsive while a large OpenAPI or AsyncAPI document is parsed, validated, and checked.

Decision / 02

Treat the browser as the system of record

Problem
API references can contain internal routes and unreleased behavior. A hosted documentation product would become a second copy of that surface.
Decision
Persist collections in IndexedDB and keep the workspace local by default.
Why
Local persistence gives a clear privacy boundary for internal and pre-release references, and the catalog still works offline.

Decision / 03

Make the endpoint the reading surface

Problem
Developers usually need a route, method, parameters, and response details — not a raw document from top to bottom.
Decision
Center navigation on endpoints and channels instead of the source file structure.
Why
The primary task is finding and using a specific operation, not reading a specification as literature.

Decision / 04

Test through a controlled proxy

Problem
Browser CORS blocks live 'try it' requests against many APIs, which makes a documentation workspace feel incomplete.
Decision
Send test requests through a proxy with URL allowlisting and private-network blocking.
Why
The workspace can exercise a specification without turning the browser into an open SSRF client.

Decision / 05

Share one core across web and desktop

Problem
A browser workspace is convenient, but some teams need a local-only desktop path for the same catalogs and rules.
Decision
Keep parsing, linting, storage, and AI integration in a shared core, then wrap it with a React web app and a Tauri desktop shell.
Why
Governance rules and catalog behavior stay identical across surfaces. Tauri packages that core without introducing a second product.

05 / Implementation

A monorepo with a shared core

YASP is a Turborepo of three packages: a shared core for parsing, linting, storage, and AI integration; a React web app; and a Tauri desktop shell that wraps the same core.

The editor is CodeMirror. Spectral runs in a Web Worker. Collections persist in IndexedDB. A testing proxy stands in front of live requests so CORS does not define the product, and URL allowlisting plus private-network blocking keep that proxy from becoming an open relay.

AI-assisted generation and fixes go through OpenRouter when the operator opts in. Core documentation, search, and governance do not require a backend.

06 / Behavior

How the system behaves.

  • Import and fetch A reference can enter as a local document or as a URL fetch. Both paths hit the same validation gate before the catalog accepts the API.
  • Non-blocking governance Lint results arrive without stalling the editor. The main thread keeps typing, search, and navigation while the worker finishes a pass.
  • Local catalog Collections remain on the machine across sessions. Closing the tab does not empty the workspace.

07 / Result

What improved.

A specification becomes a searchable, endpoint-centered workspace instead of a file to open and scroll.

Governance, testing, and storage stay on the operator's machine unless an optional AI path is explicitly used.

Web and desktop share behavior because they share a core, not because two UIs were kept in sync by hand.

08 / Reflection

What the work demonstrates.

The interesting problem was not rendering OpenAPI. It was deciding which work belongs on the UI thread, which state must survive a refresh, and which network paths are allowed to exist at all.

YASP is a product-shaped system: catalog, governance, testing, and packaging. The stack is whatever those constraints required.

Next system

02 / Deployment / operations

WinService.Deploy

Open