npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@specverse/self

v5.20.0

Published

SpecVerse v4.0.0 — the language specifying and implementing itself

Downloads

6,771

Readme

SpecVerse

Smoke npm

Define Once, Implement Anywhere.

SpecVerse is a declarative specification language for defining business domains, models, and systems. Write a .specly specification, and the engine generates the complete application — backend, frontend, CLI, documentation, diagrams, and tools.

This repository is the self-specification — SpecVerse specifying and implementing itself. It's the production release.

How It Works

921-line self-spec  -->  [4 engine packages]  -->  465+ generated files
                                                    ├── Fastify REST API
                                                    ├── Prisma + SQLite
                                                    ├── React frontend (DevShell)
                                                    ├── 9-command CLI (commander)
                                                    ├── VSCode extension
                                                    ├── MCP server
                                                    └── 12+ Mermaid diagrams

Engine Packages

Published to npm under the @specverse scope. The toolchain uses subpath exports:

| Package | Version | Purpose | |---------|---------|---------| | @specverse/self | 5.17.20 | Production CLI + templates + self-specification | | @specverse/types | 5.2.0 | AST types, engine interfaces, shared spec-rules + step-matching types | | @specverse/entities | 5.4.1 | Entity modules (11 types, 9 facets), schema composition | | @specverse/engines | 6.37.0 | Toolchain — ./parser, ./inference, ./realize, ./generators, ./ai, ./bundles | | @specverse/runtime | 5.0.1 | Framework-agnostic view walker, React + Tailwind adapters, test-harness | | @specverse/assets | 1.17.0 | Pure content — prompts, examples, learning materials (no JS) |

Versions reflect the latest published to real npm. See CLAUDE.md for in-flight version landscape and what's new in each minor.

Quick Start

# Install globally
npm install -g @specverse/self

# Verify the install works end-to-end (60-90s, no flags or args needed)
spv smoke

# Initialize a new project (copies a template skeleton).
#   spv init my-app                          # default template (Category+Item
#                                            # canonical spec, ReactAppRuntime)
#   spv init my-app --template full-stack    # rich User/Project/Task demo
#   spv init my-app --template backend-only  # standalone API
#   spv init my-app --template frontend-only # standalone SPA
#   spv init my-app --static                 # ReactAppStarter — generated
#                                            # frontend is a fully standalone
#                                            # starter kit (no @specverse/runtime
#                                            # dep; editable source).
spv init my-app

# Generate the full application from the spec
cd my-app
spv realize all specs/main.specly -m manifests/implementation.yaml -o generated/code

# Build and run
cd generated/code
npm install && npm run db:setup
npm run dev

spv smoke — verify your install

Anywhere you can run npm install -g @specverse/self, you can run spv smoke to confirm the toolchain works end-to-end:

npm install -g @specverse/self && spv smoke

It spins up a throwaway project from the default template, realizes it, starts a backend, hits a CRUD round-trip, and tears down. If it prints New-user smoke test passed ✅ you're good. If it doesn't, the failing step + backend logs are printed in place — open an issue with that output.

A separate npm run smoke:static exercises the ReactAppStarter path (spv init --static) end-to-end: generates the standalone frontend, builds it with vite, and verifies belongsTo FK round-trips.

This works in any environment with Node 18+: a fresh laptop, a blank GitHub Codespace, a Docker container, a cloud shell.

npm run setup-variants — drive every flag combo locally

For interactive testing of all the spv init options simultaneously:

npm run setup-variants

Preps six side-by-side projects under tests/variants/:

| Variant | spv init invocation | Ports | |---|---|---| | v-default | (no flags) — Category+Item canonical spec | BE 3010, FE 5180 | | v-default-static | --static — ReactAppStarter | BE 3011, FE 5181 | | v-fullstack | --template full-stack — rich demo | BE 3012, FE 5182 | | v-fullstack-static | --template full-stack --static | BE 3013, FE 5183 | | v-backend | --template backend-only | BE 3014 | | v-frontend | --template frontend-only | FE 5184 → v-default's BE |

Each variant gets its own .env (unique ports) and run-dev.sh helper, so you can boot all six simultaneously without collisions. The output dir is gitignored — regenerate whenever.

init vs realize — two different commands

Important distinction that surprises new users:

  • spv init <name> --template <t> — copies a skeleton from templates/<t>/ into a new directory. The skeleton contains specs, manifests, CLAUDE.md, package.json — but no generated code. It's a starting point.
  • spv realize all ... — calls the engines to generate generated/code/ fresh from the current skeleton's spec and manifest. This is where the backend, frontend, CLI, VSCode extension, MCP server, diagrams etc. are actually produced.

The templates are live skeletons, not pre-baked projects. Every spv realize regenerates from scratch using whatever engine version is installed.

Available templates:

  • default (implicit) — backend + frontend monorepo scaffold. Spec is the canonical Category + Item starter (shared with app-demo's Server Manager "new spec" action) — small enough to read in 30 seconds, rich enough to exercise the generated-UI rules (lifecycle dropdowns, belongsTo FK dropdowns, FK resolution in list/detail/dashboard).
  • full-stack — same monorepo scaffold, but with the rich User / Project / Task demo spec (lifecycles, relationships, behaviors, events). Useful when demoing everything SpecVerse can do from one spec.
  • backend-only — standalone Fastify + Prisma API. No frontend generated.
  • frontend-only — standalone React SPA against an external API. No backend generated.

All four templates compile end-to-end with zero TypeScript errors and zero npm audit vulnerabilities.

--static is an orthogonal flag that works with any template: it pre-swaps the manifest so spv realize emits a ReactAppStarter frontend (fully standalone, editable source, no @specverse/runtime dep) instead of the default ReactAppRuntime (slim shell that loads views at runtime). Pick ReactAppStarter when you want to fork and customize the generated React; pick ReactAppRuntime when you want a thin generated surface you can regenerate freely without clobbering edits.

Repository Structure

specverse-self/
├── specs/
│   └── main.specly              # The self-specification (921 lines, 5 components)
├── manifests/
│   └── implementation.yaml      # Fastify + Prisma + SQLite + React + Commander.js
├── templates/                   # Skeletons used by `spv init`
│   ├── default/                 # Default — monorepo scaffold; spec loaded at
│   │                            # init time from engines' canonical default
│   ├── full-stack/              # Monorepo scaffold + rich User/Project/Task demo
│   ├── backend-only/            # Standalone Fastify+Prisma, no UI
│   └── frontend-only/           # Standalone React SPA, external API
├── bootstrap/
│   └── cli/                     # Frozen bootstrap CLI (promoted from generated/code)
├── generated/
│   └── code/                    # Current realize output (465+ files)
│       ├── backend/             # Fastify + Prisma, generated CLI, guards.ts
│       ├── frontend/             # React app (slim via @specverse/runtime)
│       └── tools/               # MCP server, VSCode extension
├── examples/                    # 54 composed examples from entity modules
├── scripts/
│   ├── compose-examples.mjs     # Compose examples from entity modules
│   └── indexing/                # Cross-repo content comparison tools
└── docs/
    ├── GOLDEN-RULES.md          # 41 permanent guiding principles
    ├── guides/                  # Architecture, entity, engine guides
    └── RELEASE-AUDIT-ACTIONS.md # 53 audit items, all resolved

Self-Specification Components

| Component | Models | Purpose | |-----------|-------:|---------| | SpecLanguage | 27 | The language itself — Specification, Component, Model, Controller, Service, Event, View, Deployment | | BuildSystem | 11 | Entity modules, convention grammars, inference rules, schema fragments | | ToolsSupport | 7 | VSCode extension, MCP server (generated via distributions entity type) | | AISupport | 2 | AI orchestrator, workflows | | CLI | 9 commands | validate, infer, realize, init, gen, dev, cache, ai, session |

CURVED Operations

SpecVerse uses CURVED, not CRUD:

  • Create — instantiate a new entity
  • Update — modify existing entity (full replace)
  • Retrieve — fetch one or many
  • Validate — check business rules without persisting
  • Evolve — lifecycle state transitions (draft → open → closed)
  • Delete — remove (soft or hard)

Custom actions sit alongside CURVED as POST /resource/:id/<actionName>. Generated controllers publish typed events (${Model}Created/Updated/Deleted/Evolved) for every CURVED operation that mutates state.

Attribute Category System

Every attribute is tagged at parse time with one of three categories so consumers don't fall back on name-based heuristics:

  • business — user-facing domain data (title, price, status)
  • metadata — synthetic/system fields (id, createdAt, updatedAt, version)
  • relationship — foreign-key scalars for belongsTo relations

Forms hide metadata by default. List views colour-code relationship columns blue and lifecycle columns purple. This is set by AttributeProcessor/ModelProcessor during parse and flows through inference → YAML → realize without needing to re-classify.

AI Behavior Generation

Service operations and custom actions that can't be matched to a convention are handed to Claude via engines/src/ai/behavior-ai-service.ts. Each unmatched step becomes a pure TypeScript function emitted into behaviors/<ControllerName>.ai.ts and imported back into the controller at realize time. Prompts live under generated/code/prompts/core/standard/v9/; the current active set is v9.

Outputs are cached in .specverse/ai-cache/ keyed on sha256(step + model + operation + inputs + promptVersion) so re-running realize with unchanged steps is free.

Key Principles

See GOLDEN-RULES.md for the full 41 rules. Highlights:

  • R8: Fix generators, never hand-edit generated output
  • R11: Let engines handle their own initialization
  • R12: Adding an entity type = 3 changes only
  • R18: No version numbers in code identifiers
  • R24: CURVED not CRUD
  • R25: Engines live in specverse-engines, CLI orchestration separate
  • R31: Bootstrap promote cycle is frozen — edit engine → realize self → test → promote

Related Repositories

| Repo | Purpose | |------|---------| | specverse-engines | 4 engine packages (types, entities, engines, runtime) — source of truth for all engine code | | specverse-app-demo | Dynamic runtime demo — interprets spec at runtime (complement to the static generation in this repo) | | specverse-lang-doc | Docusaurus documentation site |

License

MIT