Extensions
Extensions automate server tasks through a library of pre-built configurations. Deploy databases, web servers, monitoring tools, and more with a few clicks instead of manual setup.
Browsing Extensions
Navigate to the Extensions page to explore available extensions. Use the search bar to find specific tools or filter by category:
- Database: PostgreSQL, MariaDB, Redis, Qdrant
- Web Server: Nginx, Caddy configurations
- Monitoring: Netdata, Uptime Kuma, Dashdot
- Development: Code Server, n8n, Gitea
- Media: Jellyfin, Plex, Calibre
- And more: 130+ extensions across all categories
Running an Extension
- Click on any extension card to view its details
- Review the description and required variables
- Fill in the configuration form (domain, ports, passwords, etc.)
- Click Run to execute
The extension runs each step in sequence and displays live logs. If any step fails, the extension attempts to roll back changes automatically.
Extension Types
Extensions come in two types:
- Install: Sets up a service for the first time (creates directories, pulls images, configures proxies)
- Run: Performs an action on an existing setup (backups, updates, maintenance tasks)
Creating Extensions
Extensions are YAML files with three sections: metadata, variables, and execution steps.
Basic Structure
metadata:
id: "my-extension"
name: "My Extension"
description: "What this extension does"
author: "Your Name"
icon: "server"
category: "Development"
type: "install"
version: "1.0.0"
variables:
domain:
type: "string"
description: "Domain for the service"
is_required: true
execution:
run:
- name: "Step name"
type: "command"
properties:
cmd: "echo Hello"Variable Types
Variables let users customize the extension. Reference them with syntax.
- string: Text input
- integer: Numeric input
- boolean: True/false toggle
- array: List of values
variables:
domain:
type: "string"
description: "Domain name"
is_required: true
validation_pattern: "^[a-zA-Z0-9.-]+$"
port:
type: "integer"
description: "Port number"
default: 8080
is_required: falseStep Types
Command
Executes shell commands via SSH.
- name: "Update packages"
type: "command"
properties:
cmd: "apt update && apt upgrade -y"File
Performs file operations via SFTP.
- name: "Create directory"
type: "file"
properties:
action: "mkdir" # mkdir, copy, move, delete, upload
dest: "/var/www/myapp"Service
Manages systemd services.
- name: "Start nginx"
type: "service"
properties:
name: "nginx"
action: "start" # start, stop, restart, enable, disableDocker
Manages containers and images.
- name: "Run Redis"
type: "docker"
properties:
action: "run" # pull, run, stop, start, rm
name: "redis"
image: "redis"
tag: "alpine"
ports: "6379:6379"
restart: "always"Docker Compose
Manages compose stacks.
- name: "Deploy stack"
type: "docker_compose"
properties:
action: "up" # up, down, build
file: "/opt/app/docker-compose.yml"Proxy
Configures Caddy reverse proxy.
- name: "Add domain"
type: "proxy"
properties:
action: "add" # add, update, remove
domain: "{{ domain }}"
port: "{{ port }}"User
Manages system users.
- name: "Create deploy user"
type: "user"
properties:
action: "ensure" # ensure, modify, delete, check
username: "deploy"
shell: "/bin/bash"
groups: "sudo,docker"Step Options
All steps support these optional properties:
- ignore_errors: Continue if step fails
- timeout: Maximum seconds to wait
- conditions: Array of conditions for execution
Validation Phase
Add a validate section to verify the deployment succeeded:
execution:
run:
- name: "Deploy container"
type: "docker"
properties:
action: "run"
name: "myapp"
image: "myapp:latest"
validate:
- name: "Check container running"
type: "command"
properties:
cmd: "docker ps | grep myapp"Contributing Extensions
To add an extension to the Nixopus library, create a YAML file following the specification above and submit a pull request to the nixopus repository in the api/templates/ directory.