Reproducible dev environments, service orchestration, and secrets management.
Powered by Nix. No Nix knowledge required.
Configuration files, build tooling, environment setup - this is the bureaucracy of software development. Every new project means re-establishing the same foundations. Every config file represents a decision someone already made thousands of times.
The value of your application lives in your source code, not configuration.
Stackpanel provides a complete development infrastructure toolkit:
- Zero-config dev environments - Automatic setup for popular stacks with deterministic ports
- Secrets management - Team-based encrypted secrets with AGE/SOPS
- IDE integration - Auto-generated VS Code workspaces and settings
- Global services - PostgreSQL, Redis, Minio with one-line config
- AWS integration - Passwordless AWS access via certificate authentication
- Web Studio - Local web UI for managing your entire stack
No lock-in. Generated files are standard formats in standard locations. Eject anytime with a normal codebase.
No Nix knowledge required. If you can write JSON, you can configure Stackpanel. Or just use the web UI.
- Nix with flakes enabled (Determinate Nix Installer recommended)
- direnv (optional but recommended)
# Create a new project with the default template
nix flake init -t git+ssh://git@github.com/darkmatter/stackpanel
# Set up direnv
echo 'use flake . --impure' > .envrc
direnv allow
# Or manually enter the shell
nix develop --impure# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
devenv.url = "github:cachix/devenv";
stackpanel.url = "git+ssh://git@github.com/darkmatter/stackpanel";
};
outputs = inputs @ {flake-parts, ...}:
flake-parts.lib.mkFlake {inherit inputs;} {
imports = [
inputs.devenv.flakeModule
inputs.stackpanel.flakeModules.default
];
systems = ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin"];
perSystem = {pkgs, ...}: {
devenv.shells.default = {
imports = [inputs.stackpanel.devenvModules.default];
# Your config
stackpanel.enable = true;
packages = [pkgs.nodejs pkgs.bun];
};
};
};
}Edit .stackpanel/config.nix to configure your environment:
{
enable = true;
# Themed shell prompt
theme.enable = true;
# VS Code integration
ide.vscode.enable = true;
# Global services
globalServices = {
postgres.enable = true;
redis.enable = true;
};
# AWS certificate auth
# aws.roles-anywhere.enable = true;
}Ports are computed from your project name, ensuring everyone on the team gets the same ports without configuration:
my-project → base port 4200
web → 4200
api → 4201
postgres → 4210
redis → 4211
Team-based secrets with AGE encryption:
stackpanel.secrets = {
master-key.enable = true;
apps.api = {
dev = {
DATABASE_URL = "postgres://...";
API_KEY = "secret:api-key";
};
};
};Auto-generated VS Code workspace with:
- Correct terminal environment
- Extension recommendations
- Debugger configurations
- Task runners
Local web UI at localhost:9876 for:
- Managing services
- Viewing logs
- Editing configuration
- Installing extensions
Full documentation is available at stackpanel.dev:
For details on the internal architecture, see ARCHITECTURE.md.
# Enter the dev shell
nix develop --impure
# Start all services
dev
# Run the web app only
bun run dev:web
# Run the Go agent
bun run dev:agentContributions are welcome! Please read our contributing guidelines before submitting PRs.
MIT License - see LICENSE for details.