A web interface for managing Garage object storage clusters.
![]() |
![]() |
![]() |
![]() |
- Bucket and object management
- User access control
- Cluster monitoring
- Multiple authentication options (none/basic/OIDC)
- Drag-and-drop file uploads
- Docker & Docker Compose
- Garage S3 cluster (v2.1.0+) or use the included setup
git clone https://github.com/Noooste/garage-ui.git
cd garage-uiIf you don't have Garage running:
docker-compose up -d garage
sleep 10
# Initialize cluster
docker-compose exec garage garage layout assign -z dc1 -c 1G $(docker-compose exec garage garage node id -q)
docker-compose exec garage garage layout apply --version 1
# Create admin key
docker-compose exec garage garage key create admin-keySave the access key and secret key from the output.
cp config.yaml.example config.yamlEdit config.yaml with your Garage endpoints and admin token (from garage.toml).
docker-compose up -d garage-uiAccess at http://localhost:8080
Minimum required config:
server:
port: 8080
garage:
endpoint: "http://garage:3900"
admin_endpoint: "http://garage:3903"
admin_token: "your-admin-token"
region: "garage"Enable authentication (optional):
auth:
admin:
enabled: true
username: "admin"
password: "your-password"See config.yaml.example for all options.
Override any config value with GARAGE_UI_ prefix:
GARAGE_UI_SERVER_PORT=8080
GARAGE_UI_GARAGE_ENDPOINT=http://garage:3900
GARAGE_UI_GARAGE_ADMIN_TOKEN=your-tokendocker run -d -p 8080:8080 \
-v $(pwd)/config.yaml:/app/config.yaml \
noooste/garage-ui:latesthelm repo add garage-ui https://helm.noste.dev/
helm install garage-ui garage-ui/garage-ui \
--set garage.endpoint=http://garage:3900 \
--set garage.adminEndpoint=http://garage:3903 \
--set garage.adminToken=your-tokenBackend (Go 1.25+):
cd backend
go run main.go --config ../config.yamlFrontend (Node.js 25+):
cd frontend
npm install
npm run devAPI docs: http://localhost:8080/api/v1/
Garage UI requires these settings in your garage.toml:
# Admin API (required for Garage UI)
[admin]
api_bind_addr = "0.0.0.0:3903" # Default: 127.0.0.1:3903
admin_token = "your-admin-token" # Generate with: openssl rand -base64 32
# S3 API
[s3_api]
s3_region = "garage" # Default: "garage"
api_bind_addr = "[::]:3900" # Default: 127.0.0.1:3900Important: The admin_token and s3_region in garage.toml must match your Garage UI config.yaml.
For complete Garage configuration, see the official documentation.
Connection failed:
curl http://localhost:3903/status -H "Authorization: Bearer your-token"Enable debug logs:
logging:
level: "debug"
format: "text" # or "json"MIT - see LICENSE



