Drag-and-drop rack layout designer
Plan your rack, move some pixels, save your shoulders.
---
## Features
- Drag and drop devices into your rack from a real hardware library
- Real device images from the NetBox devicetype-library, not grey boxes
- Export layouts to PNG, PDF, or SVG for documentation and change requests
- Share layouts via URL or QR code, no file attachments needed
- Mobile-friendly interface for field use
- Bayed rack grouping for AV installs and multi-cabinet deployments
- Optional persistent storage with API-backed layout sync
- Self-hostable via Docker, Proxmox LXC, or bare metal
- Optional auth with local accounts or OIDC for shared deployments
## Who It's For
| Audience | Use Case |
| --- | --- |
| **Homelabbers** | Plan your server rack before you rack it. Move pixels, not 4U servers. |
| **AV Technicians** | Bayed rack support for audio installs, map out amp racks, patch bays, and processor chains. |
| **Network Engineers** | Document and plan switch/router topologies. Export for runbooks and change requests. |
| **Data Centre Teams** | Layout planning for colo cages and enterprise cabinets. Share via URL with your team. |
| **Educators & Students** | Teach networking and infrastructure concepts with a visual, hands-on tool. No licence keys, no gatekeeping. |
## Why Though?
You might ask, why should I make an imaginary rack like some sort of IT cosplay? And to that I would say, "fine then! don't! SCRAM!" but also, consider:
- **Plan your layouts** before you build them. It's a lot easier to move your mouse than that 4U server full of hard drives. Your shoulder will thank you.
- **Document existing layouts** so you know what is where.
- **Because you can**
## How Racks Work
Racks are measured in rack units, written U. One U is 1.75 inches of vertical space, and a common full-height rack is 42U. Rackula models racks in whole U: a device occupies a whole number of units and mounts at a whole-U boundary, the same way real rails register equipment under the EIA-310 standard. If something sits at U5, it is really at U5, not floating part of a unit above it.
Gear smaller than 1U, like half-height brackets or side-by-side half-width pairs, does not bolt to the rails on its own. It rides inside a 1U carrier (a bracket, tray, or shelf) that takes up one whole U and holds the smaller devices. The carrier registers to the rails, and the small devices register to the carrier.
## Get Started
### Use it right now
**[count.racku.la](https://count.racku.la)** no account, no install, just racks.
### Self-host with Docker
This is a quick run of the client-side only frontend (no persistence across browser sessions):
```bash
docker run -d -p 8080:8080 ghcr.io/rackulalives/rackula:latest
```
Or with Docker Compose:
```bash
curl -fsSL https://raw.githubusercontent.com/RackulaLives/Rackula/main/deploy/docker-compose.persist.yml -o docker-compose.yml
mkdir -p data && sudo chown 1001:1001 data
docker compose up -d
```
Open `http://localhost:8080` and get after it.
### Build from Source
```bash
git clone https://github.com/RackulaLives/Rackula.git
cd Rackula && npm install && npm run build
```
Serve the `dist/` folder however you like. It's just files.
### Deploy on Proxmox (LXC)
> **Note:** LXC is currently in pre-release. See the [Self-Hosting Guide](docs/deployment/SELF-HOSTING.md) for details and manual install instructions.
### Security & Auth
For production deployments, configure API security and authentication:
```bash
# Generate secrets
openssl rand -hex 32 # API write token
openssl rand -hex 32 # Session secret (if using auth)
```
Set `CORS_ORIGIN`, `RACKULA_API_WRITE_TOKEN`, and optionally `RACKULA_AUTH_MODE` (`none`, `local`, or `oidc`) in your `.env` file.
See the [Self-Hosting Guide](docs/deployment/SELF-HOSTING.md) for full configuration details including auth modes, env vars, and TLS setup.
## Built With Claude
This project was built using AI-assisted development with Claude. I told it what to build and then said "no, not like that" a lot. The AI did a lot of typing. Commits with substantial AI contributions are marked with `Co-authored-by` tags because we're not going to pretend otherwise.
## Documentation
- [Architecture Overview](docs/ARCHITECTURE.md)
- [Technical Spec](docs/reference/SPEC.md)
- [Self-Hosting Guide](docs/deployment/SELF-HOSTING.md)
- [Changelog](CHANGELOG.md)
- [Contributing Guide](CONTRIBUTING.md)
- [Discussions](https://github.com/RackulaLives/Rackula/discussions)
## Acknowledgements
Built for the [r/homelab](https://reddit.com/r/homelab) and [r/selfhosted](https://reddit.com/r/selfhosted) communities. Colours from [Dracula Theme](https://draculatheme.com/). Device data from [NetBox devicetype-library](https://github.com/netbox-community/devicetype-library). See [ACKNOWLEDGEMENTS.md](ACKNOWLEDGEMENTS.md) for full credits.
## Licence
[MIT](LICENSE) Copyright © 2025-2026 Gareth Evans