AI-assisted browser-based sandbox for designing, deploying, and managing experiments on the FABRIC testbed.
- Visual Topology Editor — Drag-and-drop slice builder with Cytoscape.js graph visualization
- Geographic Map — Interactive Leaflet map showing FABRIC sites, backbone links, and resource availability
- In-Browser Terminals — SSH into provisioned VMs directly from the web UI
- File Manager — Upload, download, and transfer files between local storage and VMs
- Slice & VM Templates — Pre-built experiment topologies and node configurations with one-click deployment
- Boot Configuration — Per-node startup scripts with real-time progress streaming
- Monitoring — Live CPU and network metrics from deployed VMs
- AI Companion — AI-powered coding assistants (Aider, OpenCode, Claude Code)
Watch the LoomAI video tutorials for step-by-step walkthroughs.
Prerequisites: Docker with Compose v2
curl -fsSL https://raw.githubusercontent.com/fabric-testbed/loomai/main/install.sh | bashThis will download the compose file, pull the image, start the container, and verify it's healthy.
Open http://localhost:3000 in your browser. A password is auto-generated on first start — check the container logs:
docker compose logs loomai | grep "password"# Download the install script
curl -fsSL https://raw.githubusercontent.com/fabric-testbed/loomai/main/install.sh -o install.sh
# Install (or upgrade an existing installation)
bash install.sh
# Check status
bash install.sh --status
# Clean install (remove everything and start fresh)
bash install.sh --clean
# Uninstall
bash install.sh --uninstallPrerequisites: Docker with Compose v2
# Pull and start the container
docker compose pull
docker compose up -dOpen http://localhost:3000 in your browser.
Password protection: LoomAI auto-generates a password on first start. Find it in the container logs with
docker compose logs loomai | grep "password". The password persists across restarts. To set your own:LOOMAI_PASSWORD=mysecret docker compose up -d
Localhost only by default: Ports are bound to
127.0.0.1so LoomAI is only accessible from the local machine. Exposing LoomAI on all interfaces is not recommended — it makes the UI reachable from any network, which is a security risk even with password protection enabled. If you must allow remote access (e.g., on a cloud VM), use an SSH tunnel instead:ssh -L 3000:localhost:3000 user@your-vm # then open http://localhost:3000 locallyAs a last resort, you can change the port bindings in
docker-compose.yml, but only on trusted networks:ports: - "0.0.0.0:3000:3000" # NOT RECOMMENDED — exposes to all interfaces
Prerequisites: Python 3.10+, Node.js 18+
# Clone the repo
git clone https://github.com/fabric-testbed/loomai.git
cd loomai
# Backend
cd backend
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000
# Frontend (in a separate terminal)
cd frontend
npm install
npm run devLoomAI protects the web UI with a password. On first startup, a random password is auto-generated and printed to the container logs.
| Environment Variable | Description |
|---|---|
LOOMAI_PASSWORD |
Set a custom password (default: auto-generated, shown in logs) |
LOOMAI_NO_AUTH |
Set to 1 to disable password protection (for trusted networks) |
Find the auto-generated password:
docker compose logs loomai | grep "password"Set a custom password:
LOOMAI_PASSWORD=mysecretpassword docker compose up -dOr add to your docker-compose.yml:
environment:
- LOOMAI_PASSWORD=mysecretpasswordChange an existing password:
Set a new LOOMAI_PASSWORD value and restart the container. The new password hash replaces the old one.
LOOMAI_PASSWORD=newpassword docker compose up -dReset a forgotten password:
Delete the stored hash and restart — a new password will be auto-generated and shown in logs:
docker compose exec loomai rm -f /home/fabric/work/.loomai/password_hash
docker compose restart loomai
docker compose logs loomai | grep "password"Disable password protection (trusted networks only):
LOOMAI_NO_AUTH=1 docker compose up -dOn first launch, the Getting Started tour will guide you through:
- Uploading your FABRIC identity token (from the FABRIC portal)
- Uploading your bastion SSH key
- Generating or uploading slice SSH keys
- Selecting your project
# Using the install script (recommended — handles cleanup)
bash install.sh
# Or manually
docker compose pull
docker compose up -dRunning bash install.sh on an existing installation will prompt you to choose between an upgrade (keep your data) or a clean install (start fresh). Your credentials, slices, and artifacts are preserved by default.
- Backend: FastAPI (Python) wrapping FABlib for all FABRIC operations
- Frontend: React 18 + TypeScript with Next.js, Cytoscape.js, and react-leaflet
- Deployment: Single Docker image with nginx-served frontend + backend
See docs/ARCHITECTURE.md for full details.
Multi-architecture image supporting:
linux/amd64(Intel/AMD)linux/arm64(Apple Silicon, ARM servers)
- Docker with Compose v2 (for Docker install)
- Python 3.10+ and Node.js 18+ (for local development)
- A FABRIC testbed account with an active project
- Works on Linux, macOS (Intel & Apple Silicon), and Windows (via Docker Desktop)
MIT