Core concepts
The handful of ideas everything in Kimo is built on: sources, syncs, models, measures, dimensions, spaces and the semantic layer that keeps numbers consistent.
Kimo has a small vocabulary on purpose. Once you know the seven objects below, every screen in the product (and every endpoint in the API) will feel familiar. They stack in a straight line: sources feed models, models expose measures and dimensions, and everything you look at is a view over those.
Sources and syncs
A source is a connection to a system that holds data: a database, a SaaS tool, a file or a stream. Each source has credentials, a schema and a sync schedule. A sync copies changed rows into Kimo’s columnar cache (or, in live mode, pushes queries down to the source). Syncs are incremental by default and keyed on an updated-at column or the provider’s change cursor.
Models
A model describes how tables relate and what they mean. It names a grain (one row per order, per session, per vessel track), declares joins, and defines the measures and dimensions people can use. Models are versioned: every publish creates an immutable revision, and dashboards pin to the latest revision unless you lock them.
Measures and dimensions
Measures are aggregations you can trust: sum(amount) where status = 'paid' becomes revenue. Dimensions are the attributes you slice by: plan, country, channel, week. Kimo only lets people combine measures and dimensions that the model says are compatible, which is how it prevents fan-out errors and double counting.
| Object | Example | Owned by |
|---|---|---|
| Source | Production DB, Stripe EU | Admins |
| Model | subscriptions, web_sessions | Editors |
| Measure | mrr, conversion_rate | Editors |
| Dimension | plan, country, week | Editors |
| Chart | MRR by plan, last 6 months | Anyone |
| Dashboard | Weekly revenue review | Anyone |
| Space | Finance, Growth, SOC | Admins |
Spaces and permissions
A space groups models, dashboards and alerts for a team. Permissions are granted per space (Viewer, Editor, Admin) and can be narrowed with row-level policies, for example "store managers only see their own store". Policies are enforced in the query engine, so they apply equally to dashboards, Ask Kimo answers, exports and the API.
The semantic layer
Together, models, measures and dimensions form Kimo’s semantic layer. Every surface compiles to it: when you drag a field into a chart, type a question to Ask Kimo, or call /v1/query, Kimo generates SQL from the same definitions. Change the definition of active_customer once and every chart that uses it updates on the next refresh, with a changelog entry so nobody is surprised.
model: subscriptionssource: stripe_eugrain: subscription_idmeasures: mrr: type: sum sql: amount_monthly filters: [status = 'active'] format: currency active_customers: type: count_distinct sql: customer_iddimensions: plan: { sql: plan_name } started_at: { sql: created, type: time }One engine, three products
Kimo Marketing, Kimo Business Intelligence and Kimo Defense Intelligence share this exact engine. What differs is the starter content: connectors, suggested models, dashboard templates and the defaults for deployment. A workspace can enable several products at once.
