Xolotl is a lightweight, environment-aware service discovery and endpoint registry designed for distributed systems.
- Environment-aware: Services are isolated by environment (dev, staging, prod)
- Service registration: Register services with flexible address types and metadata
- Service discovery: Find services by name and environment
- RESTful API: Simple HTTP endpoints for all operations
- Lightweight: Minimal dependencies and easy to integrate
# Pull and run the latest version
docker run -p 8000:8000 ghcr.io/ctorresmx/xolotl:latest
# Or run a specific version
docker run -p 8000:8000 ghcr.io/ctorresmx/xolotl:v1.0.0
# Install from source
cargo build
# Run locally
cargo run
# Run tests
cargo test
Pre-built, signed, and security-scanned container images are available from GitHub Container Registry:
# Latest from main branch
docker pull ghcr.io/ctorresmx/xolotl:latest
# Specific version
docker pull ghcr.io/ctorresmx/xolotl:v1.0.0
# Run with custom configuration
docker run -p 3000:3000 \
-e XOLOTL_ADDRESS=0.0.0.0 \
-e XOLOTL_PORT=3000 \
ghcr.io/ctorresmx/xolotl:latest
latest
: Latest build from main branchv1.0.0
,v1.0
,v1
: Semantic version releasesmain-<sha>
: Specific commits from main
Images support both linux/amd64
and linux/arm64
platforms.
All container images include:
- Digital signatures: Signed with cosign for authenticity
- Vulnerability scanning: Scanned with Trivy for known CVEs
- Software Bill of Materials (SBOM): Complete component inventory
# Verify image signature
cosign verify ghcr.io/ctorresmx/xolotl:latest \
--certificate-identity-regexp="https://github.com/ctorresmx/xolotl/.*" \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com"
# Start with pre-built image
docker compose up -d
# View logs
docker compose logs -f
# Stop the service
docker compose down
# Build and run locally
docker compose -f docker-compose.dev.yml up -d --build
The Docker Compose configuration includes:
- Health checks: Automatically monitors service health
- Port mapping: Exposes the service on port 8000
- Environment variables: Configurable logging levels
- Restart policy: Automatically restarts on failure
- Image size: ~15MB (Alpine-based multi-stage build)
The service provides a RESTful API for service registration and discovery with the following data model:
{
"id": "uuid-string",
"service_name": "string",
"environment": "string",
"address": {
"type": "String",
"value": "http://my-service:8000" // Address later could become different types like `http`, `grpc`, etc.
},
"tags": {
"version": "1.0.0",
"team": "backend"
},
"registered_at": 1234567890
}
POST /services
: Register a serviceGET /services
: List all registered services across all environmentsGET /services/{name}/{environment}
: Get services by name and environmentDELETE /services/{name}
: Remove all environments for a serviceDELETE /services/{name}/{environment}
: Remove specific service environment
Xolotl is built with security best practices:
- Signed container images: All published images are cryptographically signed
- Vulnerability scanning: Automated security scanning on every build
- Supply chain transparency: Software Bill of Materials (SBOM) for all components
- Security reporting: Vulnerability reports available in GitHub Security tab
- Non-root execution: Containers run as unprivileged user
Services are uniquely identified by their UUID id
, allowing multiple instances of the same service to run in the same environment with different addresses and configurations.