Skip to content

Registry

The Echo registry has 115 items — 113 components, 2 templates. You add them with npx echo-ui-cli, and each one is copied into your project as source you own.

Item types

TypeCountWhat it isFor example
registry:component113One component, with its CSS and its meta.echo-modal
registry:block2A whole screen, composed from components. Installing one pulls in all of them.echo-console

Names

Every item is addressed by its bare name — modal, hardware-button, console. There is no namespace to map: echo.json names one registry, and everything in it is Echo.

Each item is one JSON file at https://echo-ui.com/e/<name>.json, holding its files' full source with a hash for each, the echo-ui-core range it works with, its npm dependencies, the Echo items it needs, its motion and sound tokens, its accessibility record and its changelog. The index of everything is at https://echo-ui.com/e/index.json.

Versions

Every item carries its own version, and every version stays published. /e/modal.json is whatever is current; /e/modal@0.2.0.json is that exact version, and it is never rewritten. That is what echo-lock.json pins to, and what makes it possible to tell later what you installed — down to the byte — rather than guessing from what is on disk now.

An item's version moves when its files change, or when it needs a newer echo-ui-core. A release that touches one component doesn't renumber the rest; one that needs a new core renumbers every item, so a version never declares two cores. /e/modal.json is always the same file as the pinned version it names.

Where files go

Everything goes under the one folder echo.json names — src/components/echo by default — with a subfolder per item. Adding HardwareButton writes exactly these files:

files
hardware-button/
  hardware-button.css
  hardware-button.tsx
  index.ts
  treatment.ts
size/
  index.ts
  size.tsx

Items import each other by relative path inside that folder, and import the theme, sound and motion engines from the echo-ui-core package. Nothing depends on an alias, so moving the folder is a matter of moving it.

Dependencies

  • npm packages (echo-ui-core, gsap, @base-ui/react) are declared by the items that use them, and the CLI installs them. Nearly every component depends on echo-ui-core, which holds the theme, sound and motion engines and useTactile. Base UI is imported per component — @base-ui/react/dialog, not the whole package.
  • Other Echo items come along automatically. The Console template, for example, brings the components it's built from.

What the CLI checks

The registry is data from somewhere else, so the CLI treats it that way. Every file arrives with a SHA-256 of its contents and is refused if it doesn't match. Every path is checked before anything is opened, so no item can write outside your Echo folder. Only https is fetched, unless you name a local registry yourself with --registry, and a registry that doesn't answer within 30 seconds is given up on, with its address, rather than waited on.

For tools and agents

The same components are published in forms that tools and AI agents can read:

FileWhat it is
/e/index.jsonEvery item, its version and what it depends on. What list reads.
/r/catalog.jsonEvery item's description, install command, props, examples, anti-patterns and docs, plus the token names. The MCP server reads this.
/llms.txtA short index for language models: what Echo is, how to set it up, and one line per item.
/llms-full.txtEverything in llms.txt, then the full reference for every item.

See For AI agents.