Command Palette

Search for a command to run...

Addons

Extend existing projects with addons

An addon is a declarative package that modifies an existing project. You run it from inside your project directory, and Anesis reads the addon's manifest, detects your project setup, asks for any needed inputs, and applies file operations — creating, injecting, replacing, or appending content. The result is recorded in anesis.lock.

anesis use <addon-id> <command>Variant detectionanesis.lock trackingundo / outdated / update

Installing an addon

anesis addon install pre-downloads the addon and saves it to the local cache. You can skip this step — running an addon command auto-installs it if it isn't cached yet.

# Install an addon by its registry ID
anesis addon install nest-drizzle

# Anesis downloads the addon and caches it at:
# ~/.anesis/cache/addons/nest-drizzle/

Explicit installation is useful in CI environments or when you want to ensure an addon is available before moving into a project directory.

Finding addons

Browse the addon registry to see what's available.

The addon ID is what you pass to anesis addon install and then to anesis use <addon-id> <command>. Each addon also lists the commands it exposes and which project types it supports.

Open the addon registry →

Running addon commands

This is the primary way to use an addon. Run it from your project root — Anesis handles detection, inputs, and file operations automatically.

The command form

# Run an addon command from your project root
anesis use nest-drizzle install

# The general form is:
anesis use <addon-id> <command>

# Omit the command to list what the addon exposes
anesis use nest-drizzle

# Omit the addon to pick one interactively (add --installed to only show cached ones)
anesis use

# Preview the plan (variant, inputs, steps) without touching any files
anesis use nest-drizzle install --dry-run

# Non-interactive: accept defaults and pass inputs up front
anesis use nest-drizzle install --yes --input driver=postgres

Auto-install on first run

# If the addon isn't cached yet, Anesis installs it automatically:
anesis use nest-drizzle install
# → addon not found locally, installing...
# → prompting for inputs...
# → applying steps...

When you run anesis use <addon-id> <command>, Anesis works through these steps:

  1. Loads the addon manifest (auto-installs if missing).
  2. Detects your project variant by checking for files, packages, or config values defined in the manifest.
  3. Prompts for any manifest-level inputs (asked once per run).
  4. Prompts for any command-level inputs (specific to the command you ran).
  5. Applies each step in order — creating files, injecting code, replacing strings, etc.
  6. Records the result in anesis.lock.

Typical workflow

Addons are designed to run after your project is scaffolded. Install the template first, then apply addons.

# 1. Log in (required for registry access)
anesis login

# 2. Install an addon (optional — running a command auto-installs)
anesis addon install nest-drizzle

# 3. Create a new project
anesis new my-project nestjs
cd my-project

# 4. Run addon commands from inside the project
anesis use nest-drizzle install
anesis use nest-drizzle generate

Listing and removing addons

Both commands operate on local cache files only — no network call required.

# See which addons are cached locally
anesis addon list

# Remove an addon from the local cache
anesis addon remove nest-drizzle

Updating an addon's registry entry

Re-fetch the addon from its source URL when the addon author has pushed new changes. This is a maintainer action on the registry entry, not a per-project upgrade.

# Re-fetch the addon's registry entry from its source URL (cache-level update)
anesis addon update https://github.com/owner/repo

Updating the cache does not affect any anesis.lock files in your projects. Those track what was applied, not the current addon version.

Undo, outdated, and per-project update

These three operate on the current project, not the registry — don't confuse anesis update <addon-id>(upgrades what's applied here) with anesis addon update <url> (refreshes the registry entry, shown above).

# Revert everything "nest-drizzle" applied to this project, in reverse order
anesis undo nest-drizzle

# See which applied addons have a newer version in the registry
anesis outdated

# Upgrade an applied addon in place: undo the old version, install the new one,
# and replay every command it had already run with the same inputs
anesis update nest-drizzle

Input prompts

Addons ask questions before applying changes. Answers are used throughout the file operations as template variables.

text
Free-form string input with an optional default value. Used for names, paths, and identifiers.
boolean
Yes/no prompt with an optional default. Used for enabling optional features.
select
Multiple-choice prompt with a list of options. Used when there are a fixed set of valid choices (e.g. a database driver).

Every input value is available in steps in multiple casing forms: _pascal, _camel, _kebab, and _snake.

The anesis.lock file

A file in your project root that tracks which addons have been applied and which commands have run.

  • anesis.lock is created in the project root the first time an addon command runs successfully.
  • It records the addon id, version, chosen variant, the names of all commands executed, a rollback journal, and the resolved input values for that addon.
  • Commands marked with "once": true in the manifest will not run again if their name already appears in anesis.lock.
  • The rollback journal is what anesis undo replays in reverse, and the stored inputs are what anesis update <addon-id> reuses when it replays commands against the new version.
  • The lock file is project-specific — one per project directory. It is safe to commit to version control.

Next steps

Ready to build and share your own?

  • Creating Addons — write an anesis.addon.json manifest with detection rules, variants, input prompts, and declarative file-operation steps.
  • Publishing Addons publish and update an addon in the Anesis registry using a GitHub URL.