Get Started

Up and running in under five minutes with Docker Compose.

Prerequisites

Make sure you have the following installed before proceeding.

☕ Java 21 Eclipse Temurin recommended
đŸŸĸ Node.js 20 With npm included
đŸŗ Docker Docker Desktop or Engine + Compose
đŸ“Ļ Git To clone the repository

Quick Start (Docker Compose)

The fastest way to run OpenFactstore is with Docker Compose, which starts all services with a single command.

# 1. Clone the repository
git clone https://github.com/MaximumTrainer/OpenFactstore.git
cd OpenFactstore

# 2. Start all services
docker-compose up -d

# 3. Check services are running
docker-compose ps

Once running, the following services are available:

Service URL Description
Backend API http://localhost:8080 Spring Boot REST API
Frontend UI http://localhost:5173 Vue 3 web application
Swagger UI http://localhost:8080/swagger-ui.html Interactive API documentation
Grafana http://localhost:3000 Compliance dashboards (admin/admin)
Prometheus http://localhost:9090 Metrics collection

Manual Setup (Development)

To run the backend and frontend separately for development:

Backend

cd backend
./gradlew bootRun       # Starts on http://localhost:8080

Frontend

cd frontend
npm ci
npm run dev             # Starts on http://localhost:5173

Your First Compliance Trail

Walk through a complete compliance lifecycle using the REST API.

1

Create a Flow

A Flow is a template that defines the required compliance checks for a type of release.

curl -s -X POST http://localhost:8080/api/v1/flows \
  -H "Content-Type: application/json" \
  -d '{
    "name": "standard-release",
    "description": "Standard production release checks",
    "requiredAttestations": ["security-scan", "code-review", "qa-signoff"]
  }' | jq .
2

Start a Trail

A Trail is a per-release evidence collection linked to a specific artifact (e.g., a container image).

curl -s -X POST http://localhost:8080/api/v1/trails \
  -H "Content-Type: application/json" \
  -d '{
    "flowId": "<flow-id-from-step-1>",
    "artifactName": "my-service",
    "artifactVersion": "1.4.2",
    "artifactDigest": "sha256:abc123..."
  }' | jq .
3

Record an Attestation

Attestations are individual evidence records. Record your security scan result:

curl -s -X POST http://localhost:8080/api/v1/trails/<trail-id>/attestations \
  -H "Content-Type: application/json" \
  -d '{
    "type": "security-scan",
    "passed": true,
    "details": "Trivy scan: 0 critical, 2 medium (accepted)",
    "attestedBy": "pipeline-bot"
  }' | jq .
4

Check Compliance

Evaluate whether the trail satisfies all flow requirements and is cleared for deployment:

curl -s http://localhost:8080/api/v1/trails/<trail-id>/compliance | jq .

When all required attestations are recorded and policies pass, the response will show "compliant": true and the artifact is cleared for deployment.

5

Evaluate the Deployment Gate

Use the deployment gate to get a binary deploy/block decision:

curl -s -X POST http://localhost:8080/api/v1/gate/evaluate \
  -H "Content-Type: application/json" \
  -d '{
    "trailId": "<trail-id>",
    "targetEnvironment": "production"
  }' | jq .
â„šī¸
For the complete API reference including all request/response schemas, see the API Docs page or visit http://localhost:8080/swagger-ui.html when the server is running.

Dry-run Mode

Any write operation can be tested without persisting data by adding the X-Dry-Run: true header. The API will validate the request and simulate the result without making any changes:

curl -s -X POST http://localhost:8080/api/v1/trails \
  -H "Content-Type: application/json" \
  -H "X-Dry-Run: true" \
  -d '{ ... }' | jq .

Further Reading

For the complete user guide including CI/CD integration examples, environment configuration, OPA policy authoring, and production hardening, see the USER_GUIDE.md on GitHub ↗ .

âš ī¸
The default configuration uses an in-memory H2 database. All data is lost on restart. Review the Known Issues page before deploying to production.