Executive summary
Cube.js is a strong open-source headless BI layer. It exposes hand-authored data models as a metrics API for embedded analytics, dashboards, and developer-built data apps. Teams adopting it want consistent metric values across multiple front-end consumers without coupling business logic to a specific BI tool. For that problem, Cube is a sensible default.
Colrows solves a different problem. It is a semantic execution layer designed to operate the AI-agent layer of the enterprise - autonomously building a typed semantic graph across the data estate, then compiling every agent intent into governed, deterministic, dialect-perfect SQL. Where Cube.js standardises metric values, Colrows standardises meaning: entities, relationships, policies, examples, and operational rules that AI agents reason on directly.
In short:
- Cube.js helps developers expose hand-authored metrics to humans and apps.
- Colrows enables systems - AI agents and autonomous workflows - to understand and operate on the enterprise.
For teams whose roadmap runs from BI to AI agents, the difference is foundational, not incremental.
Two philosophies, two outcomes
Cube.js assumes meaning is authored. A developer writes a .yml (or .js) cube file that names entities, defines measures, declares joins, and lists segments. Consumers query that schema through a REST, GraphQL, or SQL API. The system is fast, predictable, and well-documented. It is also static: every concept must be hand-modelled before any consumer can use it. As your enterprise grows, the schema grows. Engineering hours scale linearly with concepts.
Colrows assumes meaning is distributed. Definitions live in catalogues, dbt models, BI tools, runbooks, Confluence, and the heads of subject-matter experts. Colrows ingests those sources, builds a typed semantic graph autonomously, and maintains it as schemas, documentation, and usage evolve. The graph is multi-scope (global, datastore, persona, user) and uses multi-vector embeddings (definition, usage, combined per concept).
The downstream consequence: Cube.js scales with the engineering hours you spend authoring schemas. Colrows scales with the data and documentation you already have.
What "semantic execution layer" means in Colrows
A semantic layer that exists only as metric definitions cannot govern an AI agent. A real semantic execution layer captures more:
- Entities and relationships - Customer, Subscription, Order, plus the typed edges between them.
- Multi-vector embeddings per concept - definition, usage, combined.
- Compile-time governance - RBAC, ABAC, and row/column-level predicates injected into generated SQL before the warehouse is ever touched.
- Join path proof - the planner must prove a path through the graph before SQL emits.
- Multi-scope resolution - the same concept (e.g. revenue) resolves differently per tenant, persona, or user.
- Autonomous maintenance - drift detection, conflict resolution, and schema-change handling without human tickets.
These capabilities turn AI intent into governed SQL deterministically. Cube.js, by design, does not have them - its model is metrics-as-API, not entities-as-graph.
A concrete scenario: fintech fraud investigation
A fintech team runs Cube.js to power its embedded analytics product. Customers see dashboards, drill-downs, and saved reports - all sourced from carefully hand-authored cubes. The schema is well-maintained, the metric values are consistent across the customer-facing app and the internal BI tool, and the engineering team is rightly proud of the work.
Now an internal AI agent is asked to investigate a fraud spike: "why did EU chargeback rate jump in Q3?" The agent must reason across customers, transactions, merchants, fraud signals, and compliance rules. Cube.js can return "what was the chargeback rate?" - but it cannot:
- Resolve whether a particular agent is allowed to see specific merchant rows under EU regulatory scope.
- Prove the join from
TransactiontoMerchantRiskProfileis well-formed across tenants and time periods. - Produce an audit trail showing which definitions were in force at the moment of compilation.
- Adapt when the fraud team adds a new risk attribute to its runbook without a corresponding schema deploy.
With Colrows, the agent compiles its intent through a typed semantic graph. RBAC and ABAC are injected at compile time. Join paths are proven against the graph. The audit trail is point-in-time reproducible. New risk attributes ingested from the fraud team's documentation update the graph without an engineering ticket.
What emerges is not a metric value, but a defensible explanation: "chargeback rate rose in EU because two new merchant risk categories appeared in mid-Q3, both correlated with elevated dispute volumes; the regulatory scope on these merchants restricts visibility to the compliance persona only." Every step of that conclusion is traceable from intent to SQL to source data.
Why metrics-API layers cannot do this
Cube.js is excellent at one thing: serving consistent metric values to humans and apps. It is not designed to:
- Encode the entity-and-relationship model required for multi-hop agent reasoning.
- Enforce policy at compile time - governance is upstream in the warehouse, not in Cube.
- Build or maintain itself from documentation and usage signals.
- Produce machine-readable compile traces for audit.
Each of those capabilities is foundational for agent-native work. Adding them on top of a metrics API is not a configuration change - it is a different architecture.
Reframing the comparison
Cube.js and Colrows are sometimes lumped together because both contain the phrase "semantic layer." That framing collapses two very different categories.
Cube.js is a headless BI / metrics API. Optimised for serving consistent metric values to humans and embedded apps. Schema authoring is manual. Governance is delegated to the warehouse.
Colrows is a semantic execution layer. Optimised for governed, deterministic compilation of AI agent intent. The semantic graph is built and maintained autonomously. Governance is enforced at compile time, before any SQL touches the warehouse.
Cube.js helps developers ship dashboards faster. Colrows enables enterprises to put AI agents into production safely.
The bottom line
If your goal is consistent metric APIs for embedded analytics or dashboards built by your team, Cube.js is a capable choice and remains a sensible default for many BI use cases.
If your goal is to operationalise AI - to compile agent intent into governed SQL with proven joins, compile-time policy enforcement, and a continuously maintained semantic graph - a different foundation is required. That foundation is what Colrows calls a Semantic Execution Layer.
At the core
| Cube.js | Colrows | |
|---|---|---|
| Built for | Headless BI, metrics API | Semantic execution for AI agents |
| Primary consumer | Humans, embedded dashboards, data apps | AI agents, autonomous workflows |
| Core strength | Consistent metrics across apps | Governed compilation of agent intent |
| Intelligence lives in | Hand-authored cube definitions | Typed semantic graph |
Semantic and intelligence handling
| Capability | Cube.js | Colrows |
|---|---|---|
| Semantic model | Manual YAML/JS schemas | Autonomous, continuously maintained |
| Scope of semantics | Measures, dimensions, joins, segments | Entities, relationships, policies, examples, multi-scope |
| Context preservation | Per-query | Cross-workflow, persistent |
| AI readiness | Limited - agent on top of metric API | Agent-native by design |
| Explainability | Query-level | End-to-end (intent → semantics → SQL → source data) |
Engineering and operational reality
| Dimension | Cube.js | Colrows |
|---|---|---|
| Compile-time governance | No - relies on warehouse RBAC | Yes - RBAC/ABAC injected into generated SQL |
| Join path proof | Schema-checked | Proven against typed graph |
| Drift handling | Manual schema updates | Autonomous detection plus proposed mappings |
| Multi-dialect SQL | Yes (limited dialects) | 16+ engines, dialect-perfect |
| Audit trail | Query log | Point-in-time reproducible |
| Agent setup time | Ground-up engineering | Autonomous from existing data and docs |
Frequently asked questions
Is Colrows a replacement for Cube.js?
Not directly. Cube.js is a hand-authored metrics API for human and embedded-app consumption. Colrows is the semantic execution layer for AI agents - it autonomously builds a typed semantic graph, then compiles every agent intent into governed, deterministic SQL. Many teams will run both: Cube for embedded analytics, Colrows above the warehouse for agent compilation.
Can Colrows ingest Cube.js schema definitions?
Yes. Measure, dimension, and join definitions from Cube schemas can seed the Colrows semantic graph as a starting point. From there the graph evolves autonomously - drift detection, conflict resolution, and schema-change handling are managed by Colrows agents instead of by hand.
Why is a metrics API not enough for AI agents?
AI agents need entity-and-relationship reasoning, not just aggregated metric values. A metrics API can answer "what is the chargeback rate?" but cannot prove a join across Transaction, Merchant, and RiskProfile, or inject row/column-level governance into the generated SQL at compile time. Those are graph-level capabilities, not API-level features.
Is Cube.js open-source and Colrows is not?
Cube.js is open-core: a free open-source core with a paid Cloud product on top. Colrows is a commercial platform with a Free tier ($0 forever) covering unlimited datasources, users, and access policies, plus an Enterprise tier with SSO, dedicated infrastructure, and SLA-backed support. Pricing details.
How does compile-time governance differ from API-level RBAC?
API-level RBAC controls who can call which endpoint. Compile-time governance controls which rows and columns appear in the generated SQL before any query is sent to the warehouse. Filtered-out rows are never read, and unauthorised queries fail compilation rather than leaking through to production.
Does Colrows support the same SQL dialects as Cube.js?
Colrows compiles to dialect-perfect SQL across 16+ engines including Snowflake, Databricks, BigQuery, Redshift, Postgres, MySQL, ClickHouse, and Trino. Cube.js supports a similar set of warehouses. The difference is what the SQL contains: Colrows-emitted SQL has compile-time governance predicates injected; Cube.js-emitted SQL relies on the warehouse to enforce policy after the query arrives.
Further reading
- What is a semantic layer? (Pillar guide) - the definitive 2,000-word guide to the category.
- Colrows vs dbt Semantic Layer, vs Looker, vs AtScale, vs ThoughtSpot - other competitor comparisons.
- Snowflake, Databricks & the Semantic Layer - how warehouse-native and platform-native semantic layers compare.
- Building the Enterprise Memory Graph - the six-layer architecture of semantic consensus.
- The Rise of Autonomous Semantic Systems - infrastructure that learns the enterprise and updates itself.