5-Minute Quickstart

Get Placino running locally, ingest sample data, and execute your first privacy-preserving query in 5 minutes.

1

Start Placino with Docker

Pull the Docker image and start all services:

docker-compose -f docker-compose.dev.yml up -d

This starts all 35 containers including the core API, PostgreSQL database, Redis, Prometheus monitoring, and auxiliary services. First startup takes 30-60 seconds.

Tip: Watch the startup progress with docker-compose logs -f

2

Create a Project

A project is the top-level organizational unit for data and queries. Create one via the API:

# Create a project
curl -X POST http://localhost:8080/api/v1/projects \
  -H "Content-Type: application/json" \
  -d {
    "name": "Retail Demo",
    "description": "Cross-brand audience analysis"
  }

Response includes a project ID. Save it for the next steps.

3

Upload Sample Data

Create a CSV with hashed customer IDs and upload it via Placino's drag-and-drop ingestion:

# Example CSV: customers.csv
customer_id,email_hash,age_group,brand
cust_001,sha256_hash_1,25-34,BrandA
cust_002,sha256_hash_2,35-44,BrandB
cust_003,sha256_hash_3,25-34,BrandA

Upload via cURL with envelope encryption:

# Upload with built-in encryption
curl -X POST http://localhost:8080/api/v1/projects/PROJECT_ID/ingest \
  -F "file=@customers.csv" \
  -F "dataset_name=retail_customers" \
  -F "encryption=aes256-gcm"

Placino automatically hashes identifiers and applies AES-256-GCM envelope encryption. Raw data is never stored in plaintext.

4

Execute Your First Query

Query the dataset to find cross-brand audience overlap with automatic differential privacy applied:

# Template query: intersection size
curl -X POST http://localhost:8080/api/v1/projects/PROJECT_ID/query \
  -H "Content-Type: application/json" \
  -d {
    "template": "intersection_size",
    "dataset_left": "retail_customers",
    "dataset_right": "retail_customers",
    "left_filter": "brand = 'BrandA'",
    "right_filter": "brand = 'BrandB'",
    "privacy_epsilon": 1.0
  }

Response includes:

{
  "intersection_count": 42,
  "epsilon_consumed": 1.0,
  "epsilon_remaining": 4.0,
  "noise_added": 3
}

The query engine applied differential privacy noise (±3) to protect individual privacy. The epsilon budget tracks cumulative privacy loss.

5

Review the Audit Trail

Placino maintains immutable Merkle-chain audit logs for all operations:

# Fetch audit trail
curl http://localhost:8080/api/v1/projects/PROJECT_ID/audit

Each entry is cryptographically signed and includes:

  • • Timestamp (UTC)
  • • Actor (user or service account)
  • • Action (ingest, query, export)
  • • Dataset accessed
  • • Privacy parameters consumed
  • • Merkle tree hash chain

This creates a tamper-proof record for compliance audits (SOC 2, GDPR data access logs, etc.).

Congratulations\!

You've successfully deployed Placino, ingested data, executed a privacy-preserving query, and reviewed the audit trail. You now understand the core workflow.

What's Next?