kimo
Docs

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.

Updated Sep 28, 20267 min readEdit on GitHub

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.

A few of the 57 connectors available today.

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.

ObjectExampleOwned by
SourceProduction DB, Stripe EUAdmins
Modelsubscriptions, web_sessionsEditors
Measuremrr, conversion_rateEditors
Dimensionplan, country, weekEditors
ChartMRR by plan, last 6 monthsAnyone
DashboardWeekly revenue reviewAnyone
SpaceFinance, Growth, SOCAdmins

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.

models/subscriptions.yml
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.