StackPanel
Extensions

Extension Registry

Discover and install extensions through Studio's registry

The Extension Registry is a catalog of available extensions that you can browse and install through Studio. It provides a visual interface for discovering capabilities, reading documentation, and enabling extensions with a single click—no Nix knowledge required.

Browsing the Registry

Open Studio and navigate to the Extensions panel. The registry shows all available extensions organized by category:

CategoryWhat It Covers
InfrastructureAWS, cloud resources, IAM roles
CI/CDGitHub Actions, deployment pipelines
DatabaseDatabase management and migrations
SecretsSecret and variable management
DeploymentDeployment tools (Cloudflare, Fly, SST)
DevelopmentDev tools, linters, formatters
MonitoringLogging, metrics, observability
IntegrationThird-party service integrations

Each extension card shows its name, description, category, and whether it's currently enabled. Click an extension to see its full documentation, configuration options, and what it adds to your environment (packages, scripts, files, services).

Installing an Extension

From Studio

  1. Open the Extensions panel in Studio
  2. Find the extension you want
  3. Click Enable
  4. Configure any required options in the form that appears
  5. Studio writes the configuration to your .stack/config.nix

That's it. The next time your shell reloads, the extension is active—its packages are on your PATH, its scripts are available, and its generated files are written to disk.

From Nix Config

You can also enable extensions directly in your configuration:

# .stack/config.nix
{
  stackpanel.extensions.sst = {
    enabled = true;
  };

  # Extension-specific options (if any)
  stackpanel.sst = {
    project-name = "myapp";
    region = "us-west-2";
  };
}

Both approaches produce the same result. Studio is a convenience layer over the same Nix config you'd write by hand.

Extension Sources

Extensions can come from three places:

Builtin Extensions

Shipped with Stackpanel. These are always available in the registry and don't require any additional setup.

Examples: sst, ci, docker, bun, turbo, oxlint, git-hooks, process-compose, env-codegen.

Local Extensions

Defined in your project's Nix configuration. These are project-specific and not shared through the registry:

stackpanel.extensions.my-feature = {
  name = "My Feature";
  enabled = true;
  source.type = "EXTENSION_SOURCE_TYPE_LOCAL";
  source.path = "./nix/extensions/my-feature.nix";
};

External Extensions

Installed from GitHub or other remote sources. These can be shared across projects and teams:

# In your flake.nix inputs
inputs.stackpanel-stripe.url = "github:someone/stackpanel-stripe";

# In your flake.nix imports
imports = [
  inputs.stackpanel.flakeModules.default
  inputs.stackpanel-stripe.flakeModules.default
];

External extensions appear in the registry alongside builtin ones once they're added to your flake inputs.

What an Extension Provides

Each extension in the registry declares which core features it uses. This is visible in the extension detail view:

FeatureWhat It Means
FilesThe extension generates configuration files
ScriptsThe extension adds CLI commands to your shell
PackagesThe extension adds tools to your PATH
TasksThe extension defines runnable tasks
ServicesThe extension manages background processes
Shell HooksThe extension runs code on shell entry
SecretsThe extension uses the secrets/variables system
ChecksThe extension provides health checks

This helps you understand what enabling an extension will do before you install it.

Extension Panels

Many extensions register panels—UI components that appear in Studio. Panels provide visibility into extension state without needing the terminal:

Panel TypeDescription
StatusKey-value status display (e.g., "Region: us-west-2", "Status: healthy")
Apps GridVisual grid of applications
FormConfiguration form for extension options
TableTabular data display
CustomExtension-specific React component

Panels update in real time through the Agent's SSE event stream, so status changes appear immediately.

Dependencies Between Extensions

Extensions can declare dependencies on other extensions. The registry shows these relationships, and Stackpanel ensures dependencies are enabled before the extension that requires them:

stackpanel.extensions.my-deploy = {
  name = "My Deploy Extension";
  dependencies = [ "sst" "docker" ];
};

If you try to enable my-deploy without sst and docker, Studio will prompt you to enable the dependencies first.

The registry supports filtering by:

  • Category — Show only infrastructure extensions, only CI/CD extensions, etc.
  • Status — Show only enabled extensions, only disabled, or all
  • Tags — Extensions can be tagged with keywords like aws, typescript, deployment
  • Source — Filter by builtin, local, or external

Use the search bar to find extensions by name or description.

The registry is served locally by the Stackpanel Agent. No internet connection is required to browse builtin extensions. External extensions need network access only during initial installation (adding the flake input).

Publishing Extensions

If you've built an extension that others might find useful, you can publish it as a flake. See Writing Extensions for the full guide on creating extensions, and the extension schema reference for the metadata fields that make your extension discoverable in the registry.

A well-published extension includes:

  • A descriptive name and description
  • An appropriate category for registry grouping
  • Relevant tags for search discoverability
  • Feature flags indicating which core features it uses
  • At least one panel for Studio visibility

Reference

On this page