fix context menu trigger area and dropdown styles implement 'move to folder' implement 'start / stop' bulk & row actions implement pause / resume implement column visibility customization fix(organizer): over-eager addition of untracked containers to root folder scaffold docker form service docker container management prototype use compacted table as sidebar tree add drag and drop for re-ordering containers & folders right click to reame & delete folders add bottom padding to container to make it easier to drag items to bottom in sidebar click overview row to open details track active container in query param refactor: extract composables refactor: simplify organizer operations refactor!: rm intermediate tree resolution of organizers BREAKING CHANGE: ResolvedOrganizerView -> root is replaced by rootId + flatEntries. `root` resolved a tree representation of an organizer, but this required clients to defined and use their own tree operations, thus increasing client complexity. Instead, `flatEntries` is more suitable for client operations and only requires an initial mapping step on the client for efficiency. fix: rm extra Root layer in table map containers to their template files feat: icon support fix: container state badge chore: fix formatting fix: search filtering fix: context menu feat: filtering & bulk actions in compact mode feat: critical notifications feat: notifyIfUnique service method tmp: critical notifications system fix: nuxt ui portal styling fix: notifications type check fix api tests fix: css Revert "fix: css" This reverts commit 234c2e2c6518e39f5dcceec1c97400c69dc53140. add docker constants flatten css scopes feat: file modification for replacing docker overview table feat: navigate to container update page feat: implement manage settings action fix: column visibility toggle fix: move update to a badge + popover feat: save column visibility preferences across visits fix: add feature flag to containers file mod fix: circular dependency in docker service add a flag to opt out of version check in super.shouldApply in file mods fix: optimistic column toggle update refactor: optimistic column toggle feat: container start & stop order feat: bulk toggle auto-start fix: add background style reset, apply to button:hover as well feat: add ENABLE_NEXT_DOCKER_RELEASE=true to staging environment chore(api): add dev/notifications to gitignore feat: container update actions fix: container update logic feat: bulk container updates feat: container sizes fix: container sizes modla overlay fix: checkbox alignment fix: revert color in main css chore: ignore build output in lint & fix feat: server-side container ip add docker feature flag to .env.production fix: container port duplication feat: multi-value copyable badges feat: make lanIpPorts a list, not a csv feat: visit button feat: include indexed search fields in filter input title feat: sync userprefs.cfg for rollback compat feat: port conflicts refactor: port conflict frontend stuff feat: update all containers bulk action feat: docker logs fix: use container name instead of id in 'view logs' modal make webgui iframable feat: re-add compact mode manage settings > compact view fix styles feat: container stats refactor: docker autostart service refactor: docker log, event, and port services
Unraid API
Monorepo for the Unraid API and Unraid Connect.
Explore the docs »
·
Report Bug
·
Request Feature
·
Submit Work Intent
🔌 Plugin Downloads
Production: https://stable.dl.unraid.net/unraid-api/dynamix.unraid.net.plg
Staging: https://preview.dl.unraid.net/unraid-api/dynamix.unraid.net.plg
Table of Contents
About The Project
Built With
Getting Started
This section will guide you through the steps necessary to get the monorepo projects running and communicating with each other.
Prerequisites
Make sure the following software is installed before proceeding.
- Bash
- Docker (for macOS folks, Orbstack works too)
- Node.js (v22)
- pnpm (v9.0+) - Install with
npm install -g pnpm - Just (optional)
- libvirt (macOS folks can run
brew install libvirt) - rclone (v1.70+) - Important: Version 1.70 or higher is required
- jq - JSON processor for scripts
- An Unraid server for development
Ubuntu/WSL Users
For Ubuntu or WSL users, note that the default Ubuntu repositories may have older versions of rclone. You'll need rclone v1.70 or higher, which can be obtained from the rclone releases page.
Verify Prerequisites
After installation, verify your dependencies:
# Verify installations and versions
node --version # Should be v22.x
pnpm --version # Should be v9.0+
rclone version # Should be v1.70+
jq --version # Should be installed
docker --version # Should be installed
Alternative: Using Nix Flake
If you have Nix installed, you can use the provided flake to automatically set up all development dependencies:
nix develop
This will provide all the required tools (Node.js, Docker, Just, libvirt, rclone, etc.) without needing to install them manually.
SSH Key Setup
Next, create an SSH key if you haven't already. Once you have your key pair, add your public SSH key to your Unraid server:
- Log in to your Unraid development server.
- Use the navigation menu to go to 'Users'.
- Click on the user you logged in with (e.g.
root) - Paste your SSH public key into 'SSH authorized keys' and click 'Save'.
Installation
-
Clone and enter the repo
git clone git@github.com:unraid/api.git cd apiIf using Nix, enter the development environment:
nix develop -
Install dependencies and verify they're correctly installed:
# Install all monorepo dependencies pnpm install # The install script will automatically check for required dependencies # and their versions (rclone v1.70+, jq, pnpm, etc.) -
Build the project:
# Build individual packages first (from root directory) cd api && pnpm build && cd .. cd web && pnpm build && cd .. # Then build the plugin if needed cd plugin && pnpm build && cd ..Note: The packages must be built in order as the plugin depends on the API build artifacts.
Development Modes
Mode 1: Local Plugin Build (Docker)
Build and test a full plugin locally using Docker:
cd plugin
pnpm run docker:build-and-run
# Then inside the container:
pnpm build
This builds all dependencies (API, web), starts a Docker container, and serves the plugin at http://YOUR_IP:5858/. Install it on your Unraid server via Plugins → Install Plugin.
Mode 2: Direct Deployment
Deploy individual packages directly to an Unraid server for faster iteration:
# Deploy API changes
cd api && pnpm unraid:deploy <SERVER_IP>
# Deploy web changes
cd web && pnpm unraid:deploy <SERVER_IP>
Mode 3: Development Servers
For active development with hot-reload (no Unraid server needed):
# From the root directory - runs all dev servers concurrently
pnpm dev
Or run individual development servers:
# API server (GraphQL backend at http://localhost:3001)
cd api && pnpm dev
# Web interface (Nuxt frontend at http://localhost:3000)
cd web && pnpm dev
Deploying to Unraid
# Replace SERVER_IP with your Unraid server's IP address
pnpm unraid:deploy SERVER_IP
Tip
View other workflows (local dev, etc.) in the Developer Workflows
Usage
See How to Use the API.
For more examples, please refer to the Documentation
Contributing
For a complete guide on contributing to the project, including our code of conduct and development process, please see our Contributing Guide. Please read this before contributing.
Developer Documentation
For more information about development workflows, repository organization, and other technical details, please refer to the developer documentation inside this repository:
- Development Guide - Setup, building, and debugging instructions
- Development Workflows - Detailed workflows for local development, building, and deployment
- Repository Organization - High-level architecture and project structure
Work Intent Process
Before starting development work on this project, you must submit a Work Intent and have it approved by a core developer. This helps prevent duplicate work and ensures changes align with the project's goals.
-
Create a Work Intent
- Go to Issues → New Issue → Work Intent
- Fill out the brief template describing what you want to work on
- The issue will be automatically labeled as
work-intentandunapproved
-
Wait for Approval
- A core developer will review your Work Intent
- They may ask questions or suggest changes
- Once approved, the
unapprovedlabel will be removed
-
Begin Development
- Only start coding after your Work Intent is approved
- Follow the approach outlined in your approved Work Intent
- Reference the Work Intent in your future PR
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Top contributors
Community
Contact
@UnraidOfficial - contact@unraid.net
Project Link: https://github.com/unraid/api