Declarative Data Platform

The data platformAgents can read

declared, not hand-coded

Declare your sources, your business and your metrics. Daana generates the platform, and every layer stays readable to people and their agents.

[JOIN THE BETA]
Need help building your data platform? Free assessment →01 Model02 Generate03 AskScroll ↓︎

The Daana CLI overview film

The hand-written layers of a data platform collapse into two declared files, a model and a mapping. Everything else is generated.

  1. Model your business: entities, their attributes and the relationships between them, declared in YAML.
  2. Generate: daana-cli deploy and daana-cli execute generate the warehouse, and marts are generated from dar specs.
  3. Ask: an agent answers a question about history, reading the definitions from the model.

Model. Generate. Ask.

// MODEL. GENERATE. ASK.
// KEY CAPABILITIES

The parts you'd hand‑write,
already handled.

Every warehouse needs these, and every team builds them again. In Daana they come from the model, the same way every time.

  • // 01

    Model once, generate everything

    Declare entities, attributes and relationships in YAML and map your sources to them. Daana generates the tables, a current and a history view per entity, and a view for every relationship. No schema copied across dbt models or stored procedures.

    daana-cli deploy
  • // 02

    History is first-class, not bolted on

    Mark an attribute with effective_timestamp and every change is kept, with a point-in-time function per entity. No SCD-2 plumbing, no "do we add valid_from this time?"

    effective_timestamp: true
  • // 03

    Multiple IDs are reality, not edge cases

    A customer has an email, a customer number and a partner reference. Daana keeps up to five identifiers per entity and resolves them to one stable key, instead of making you pick the one true key and hack around it later.

    allow_multiple_identifiers: true
  • // 04

    Load strategies you can explain at 3am

    Four ways in: FULL for current state, FULL_LOG for history, INCREMENTAL for rows that change, TRANSACTIONAL for events that never do. Pick one per source and move on.

    FULLFULL_LOGINCREMENTALTRANSACTIONAL
  • // 05

    Merge, don't nuke

    Your model evolves. Merge brings the mappings up to date: new attributes arrive with placeholders, removed ones go, and your transformation expressions, table settings and where clauses stay. A backup is written first.

    daana-cli merge
  • // 06

    Definitions live with the data

    Deploy writes every definition into your own warehouse, next to the data it describes. People and agents read what a field means instead of guessing it.

    daana_metadata

CI/CD without surprises

Check validates the model, mappings, workflow and connections before anything deploys. Generation is deterministic: the same model produces the same SQL, so every pull request shows exactly what will change.

daana-cli check
// MECHANISMS

3-Layered
Architecture

Describe your sources, define your business concepts, and declare your metrics. Daana connects the layers and generates the pipelines. Every layer is a declaration, so the whole platform is something you, and your agents, can read.

// LINEAGE

Semantic lineage Technical lineage

Connected data. Connected context. Knowing where a field came from is only part of the picture. Daana connects the data path with definitions at every layer, so humans and agents can understand both how data moves and what it means. This is the map an agent walks.

From source to metric, through DAS, DAB and DAR

Illustrative example · subscription lifecycle
  1. DAS · Data contract

    What does the source mean?

    The state the accounts service gave the account. DISABLED, since 2020: blocked by support or billing, no login. CLOSED_BY_USER, since last year: the user closed it in the app.

    account_state_changed

    new_state

    ACTIVE · DISABLED · CLOSED_BY_USER

    Contract field · STRING · REQUIRED

  2. DAB · Business model

    What does the business mean?

    Where the customer's subscription stands. ENDED: no access and no billing, however the account was closed.

    SUBSCRIPTION

    subscription_status

    DISABLED → ENDED

    CLOSED_BY_USER → ENDED

    Mapped from new_state · effective at the source event time

  3. DAR · Metric definition

    What is churn?

    Subscriptions that ended in the month. Each counts once, in the month its status became ENDED.

    fct__subscription_event

    Monthly churn

    Event count · grouped by event month

Ask an agent why churn looks low on a given day, and it walks both lineages back: from the metric's definition to the business's to the source's, checking at every step what each layer means and where its data comes from. Read how that played out in a real standup →

// AGENTS

Talk to your
data platform

Every "talk to your data" demo stops at the chart. Here the agent keeps going: asked why a number looks wrong, it walks back through every layer that made it, reading what each one means and where its data comes from, until it finds the one that broke.

[ HUMAN ]

Why is revenue so low on the 4th?

[ AGENT ]

It isn't slow sales. Orders are missing.

Walked back

  1. Checked: DAR Daily revenueDefinition unchanged.
  2. Checked: DAB order_line.order_line_amountThe mapping drops no line.
  3. Checked: DAS sales_ordersorder_date against ingested_at: lost, not late.
  4. Failed: Landing Shop databaseNo orders landed for 6h40m. The connector stalled overnight.

Reload the window; the next normal run repairs the rest.

Illustrative incident · the bookstore demo

No code read.Every step answeredby a declaration.

// FOR YOUR TEAM AND YOUR AGENTS

That was one walk. Every question about the platform, from you or your agents, is one of three.

Walk back

Understand a metric. Trace a number through its business definition, mapping, and source contract.

Walk forward

Assess a change. Follow the connections to see which business concepts and metrics depend on a source field.

Compare

Diagnose a mismatch. Compare the definitions, mappings, and run history to locate what needs correcting.

// YOUR TURN

Don't take our word for it. Ask your agent.

Give the agent you already use this question about your own platform:

Our revenue looks low for last Tuesday. Walk from the dashboard metric back to the source system. At each step, tell me what the data means and where it comes from, and show me where you found it.

Count how often it had to read code, or guess. With Daana, every one of those answers is a declaration.

Agents can read what Daana is at daana.dev/llms.txt, including the declarations behind the example above.

JOIN DAANA'S BETA

Less time reconstructing the platform. More time building and operating it.

// 01 ABOUT YOU

Role

Data Engineer

Analytics Engineer

Platform Lead

Other

Favorite Platform

DuckDB

BigQuery

Snowflake

Microsoft Fabric

Postgres

Other

// 02 ENTER DETAILS
SET_NAME *
SET_EMAIL *
// FREE DATA PLATFORM ASSESSMENT

Need help building your data platform?

We'll spend time with your data team, understand where you are and where you want to go, and come back with a roadmap. What to build, in what order, and why.

[ Get a free assessment → ]