Drag and drop rack visualizer
Plan your rack layout. Drag your devices in, move them around, export it. It runs in your browser. You can close the tab whenever you want.
- Drag and drop devices into your rack so you can frown at them
- Real device images so it actually looks like your gear, not sad grey boxes
- Export to PNG, PDF, SVG for your documentation or for printing and staring at
- QR code sharing - your layout lives in a URL, scan it and it just shows up
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
Use it right now: count.racku.la
docker run -d -p 8080:8080 ghcr.io/rackulalives/rackula:latest
curl -O https://raw.githubusercontent.com/rackulalives/rackula/main/docker-compose.yml
docker compose up -d
Then open http://localhost:8080 and get after it.
For layouts that persist across sessions:
git clone https://github.com/RackulaLives/Rackula.git
cd Rackula
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
See Self-Hosting Guide for details.
For production/self-hosted API security:
CORS_ORIGINshould be your real app URL (restricts which browser origins can call the API).RACKULA_API_WRITE_TOKENprotects APIPUT/DELETEroutes (optional, strongly recommended). If unset, write routes remain open.
Generate a strong token:
openssl rand -hex 32
Set values in a .env file beside docker-compose.yml:
cat > .env <<'EOF'
CORS_ORIGIN=https://rack.example.com
RACKULA_API_WRITE_TOKEN=replace-with-generated-token
EOF
docker compose up -d
Or pass them inline:
CORS_ORIGIN=https://rack.example.com \
RACKULA_API_WRITE_TOKEN=replace-with-generated-token \
docker compose up -d
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.
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.
Built for the r/homelab and r/selfhosted communities. Colours from Dracula Theme. Device data from NetBox devicetype-library.
See ACKNOWLEDGEMENTS.md for full credits.
MIT - Copyright (c) 2025 Gareth Evans
