Pujit Mehrotra d07aa42063 table > select & status badge
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
2025-12-23 20:54:54 -05:00
2025-12-23 20:54:54 -05:00
2025-12-23 20:54:54 -05:00
2025-05-27 07:52:25 -04:00
2025-09-11 21:35:13 -04:00
2025-12-23 20:54:54 -05:00
2025-07-03 10:02:34 -04:00

Contributors Forks Stargazers Issues MIT License LinkedIn Codecov Apollo Studio

Ask DeepWiki


Logo

Unraid API

Monorepo for the Unraid API and Unraid Connect.
Explore the docs »

· Report Bug · Request Feature · Submit Work Intent

Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Contributing
  6. License
  7. Contact
  8. Acknowledgments

About The Project

Built With

Unraid Node.js Vite Nuxt PHP

(back to top)

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:

  1. Log in to your Unraid development server.
  2. Use the navigation menu to go to 'Users'.
  3. Click on the user you logged in with (e.g. root)
  4. Paste your SSH public key into 'SSH authorized keys' and click 'Save'.

Installation

  1. Clone and enter the repo

    git clone git@github.com:unraid/api.git
    cd api
    

    If using Nix, enter the development environment:

    nix develop
    
  2. 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.)
    
  3. 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

(back to top)

Usage

See How to Use the API.

For more examples, please refer to the Documentation

(back to top)

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:

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.

  1. Create a Work Intent

  2. Wait for Approval

    • A core developer will review your Work Intent
    • They may ask questions or suggest changes
    • Once approved, the unapproved label will be removed
  3. 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!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

(back to top)

Top contributors

contrib.rocks image

Community

🌐 Forums
💬 Discord

(back to top)

Contact

@UnraidOfficial - contact@unraid.net

Project Link: https://github.com/unraid/api

(back to top)

S
Description
Unraid API / Connect / UI Monorepo
Readme 91 MiB
Languages
TypeScript 78.2%
Vue 13.3%
PHP 4.3%
Shell 1.5%
JavaScript 1.2%
Other 1.4%