Datavera is a production-grade, open-source distributed data management platform built in Scala. It provides large-scale ingestion, processing, validation, and storage of structured and semi-structured data with a functional, type-safe architecture.
- Configurable by design - All behavior externalized via HOCON configuration with dev/staging/production profiles
- Pluggable architecture - Extension points for ingestion connectors, transformations, storage backends, and auth providers
- Batch & streaming ingestion - CSV, JSON, Parquet files and Kafka streaming
- Functional pipelines - Composable transformations (map, filter, fold) defined in configuration
- Multi-backend storage - PostgreSQL for relational/metadata storage, S3-compatible object storage for large datasets
- REST API - http4s-based API with JWT authentication and role-based access control
- Observability - Structured logging, Prometheus metrics, OpenTelemetry tracing
- Production deployment - Docker containerization and Kubernetes manifests with HPA
┌─────────────────────────────────────────────────────────────┐
│ API Layer (http4s) │
│ REST endpoints · Auth · RBAC │
├──────────────┬──────────────────┬───────────────────────────┤
│ Ingestion │ Processing │ Storage │
│ Connectors │ Pipeline Engine │ PostgreSQL · S3 │
│ Validation │ Transformations │ Metadata · Versioning │
├──────────────┴──────────────────┴───────────────────────────┤
│ Config · Observability · Plugin Registry │
└─────────────────────────────────────────────────────────────┘
- JDK 17+
- sbt 1.10+
- PostgreSQL 16+ (optional, for persistent storage)
sbt compile
sbt test
sbt "project app" stageexport DATAVERA_ENV=dev
sbt "project app" runThe API will be available at http://localhost:8080/api/v1.
sbt "project app" stage
docker compose -f docker/docker-compose.yml up --buildConfiguration files live in modules/config/src/main/resources/:
| File | Purpose |
|---|---|
application.conf |
Base production-safe defaults |
application-dev.conf |
Development overrides |
application-staging.conf |
Staging environment |
application-prod.conf |
Production with env var substitution |
Set the active profile:
export DATAVERA_ENV=dev # dev | staging | prodKey environment variables:
| Variable | Description |
|---|---|
DATAVERA_ENV |
Active configuration profile |
POSTGRES_HOST |
PostgreSQL hostname |
POSTGRES_PASSWORD |
Database password |
JWT_SECRET |
JWT signing secret |
KAFKA_BOOTSTRAP_SERVERS |
Kafka broker addresses |
S3_ENDPOINT |
S3-compatible endpoint |
OTEL_ENDPOINT |
OpenTelemetry collector endpoint |
| Method | Path | Description |
|---|---|---|
| GET | /api/v1/health |
Health check |
| GET | /api/v1/datasets |
List datasets |
| POST | /api/v1/datasets |
Create dataset |
| GET | /api/v1/datasets/{id} |
Get dataset metadata |
| POST | /api/v1/datasets/{id}/ingest |
Ingest records |
| GET | /api/v1/datasets/{id}/query |
Query dataset records |
| POST | /api/v1/pipelines/{id}/run |
Run transformation pipeline |
| GET | /api/v1/metadata/pipelines |
List configured pipelines |
Authentication uses Bearer JWT tokens when datavera.auth.enabled = true.
Implement IngestionConnector[F] and register via configuration:
datavera.ingestion.connectors += {
id = "my-connector"
type = "my-connector-type"
enabled = true
# custom settings...
}Implement Transformation[F] and register in TransformationRegistry.
Implement StorageBackend[F] and configure in datavera.storage.backends.
datavera/
├── modules/
│ ├── core/ # Domain types, interfaces, plugin system
│ ├── config/ # HOCON configuration loading & validation
│ ├── ingestion/ # Batch & streaming connectors
│ ├── processing/ # Pipeline engine & transformations
│ ├── storage/ # PostgreSQL & S3 backends
│ ├── observability/ # Logging, metrics, tracing
│ ├── api/ # http4s REST API
│ ├── app/ # Application entry point
│ └── integration/ # Integration tests
├── docker/ # Dockerfile & docker-compose
├── k8s/ # Kubernetes manifests
└── build.sbt
sbt test # All unit tests
sbt "project integration" test # Integration tests (requires Docker)Tests include:
- Unit tests for core logic and configuration validation
- Property-based tests with ScalaCheck for data model invariants
- Integration tests with Testcontainers (PostgreSQL, LocalStack)
kubectl apply -f k8s/deployment.yamlThe deployment includes 3 replicas by default with Horizontal Pod Autoscaler (2-10 pods based on CPU).
Apache License 2.0 - See LICENSE for details.
Contributions are welcome! Please read the architecture docs above and ensure:
- All behavior is configurable, not hardcoded
- New features implement the appropriate plugin interface
- Tests cover critical paths
- Configuration changes include validation