---
title: "Live Notes"
description: "Put KPIs, charts, timelines, comparisons, and task boards inside a note with Comark components, including live views that query your project each time you open them."
canonical_url: "https://docs.basicmemory.com/cloud/live-notes"
---
# Live Notes

> Put KPIs, charts, timelines, comparisons, and task boards inside a note with Comark components, including live views that query your project each time you open them.

**Live notes** show the work inside the note. Put a KPI, a Gantt chart, a comparison, or a task board in any note: the data sits in the note as ordinary Markdown lists and tables, and Basic Memory draws the figure. A **live view** goes further and runs a query over your project each time you open it, so a chart of open tasks is always the current one.

<theme-image alt="A live note with a tasks-by-status chart, a task board, and a live table of open tasks" dark="/screenshots/cloud-app/live-note-board-dark.png" light="/screenshots/cloud-app/live-note-board-light.png">



</theme-image>

Basic Memory supports [Comark](https://comark.dev/), an open Markdown syntax for components. Basic Memory Cloud renders the components in Notes, the [Wiki](https://docs.basicmemory.com/cloud/wiki), and [shared notes](https://docs.basicmemory.com/cloud/shared-notes). Everywhere else, in a local editor, on GitHub, or in a raw `bm_read`, the note still reads as plain Markdown.

## Write a component

A component is a `::bm-` directive with attributes in braces, a Markdown body, and a closing `::`. This is part of a real note's source:

```markdown
::bm-kpi{title="Customers migrated" value="26" label="of 40 in cohort one" hint="65%" data="0,3,7,12,16,21,26"}
::

::bm-funnel{title="Beta switch funnel"}
- Saw the new plans: 112
- Opened the usage chart: 84
- **Set a spending limit: 57**
- Switched plans: 31
::
```

And this is what Basic Memory draws from it:

<theme-image alt="The bm-kpi component rendered: 26 of 40 customers migrated, 65%, with a trend" dark="/screenshots/cloud-app/comark-kpi-dark.png" light="/screenshots/cloud-app/comark-kpi-light.png">



</theme-image>

<theme-image alt="The bm-funnel component rendered: 112 saw the plans, 84 opened the usage chart, 57 set a spending limit, 31 switched" dark="/screenshots/cloud-app/comark-funnel-dark.png" light="/screenshots/cloud-app/comark-funnel-light.png">



</theme-image>

Bold a row (`**Set a spending limit: 57**`) to highlight it. Your AI writes components the same way you do, and reads them back as text, numbers included.

## The components

Basic Memory registers **39 components**. Nothing outside this list is a component. [Comark Components](https://docs.basicmemory.com/cloud/comark-components) shows every one with its source and how it renders, and links each to the playground to try it.

<table>
<thead>
  <tr>
    <th>
      Kind
    </th>
    
    <th>
      Components
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Content and layout
      </strong>
    </td>
    
    <td>
      <code>
        bm-frame
      </code>
      
      , <code>
        bm-ascii
      </code>
      
      , <code>
        bm-image
      </code>
      
      , <code>
        bm-svg
      </code>
      
      , <code>
        bm-stat
      </code>
      
      , <code>
        bm-kpi
      </code>
      
      , <code>
        bm-table
      </code>
      
      , <code>
        bm-timeline
      </code>
      
      , <code>
        bm-tree
      </code>
      
      , <code>
        bm-spec
      </code>
      
      , <code>
        bm-compare
      </code>
      
      , <code>
        bm-diff
      </code>
      
      , <code>
        bm-sheet
      </code>
      
      , <code>
        bm-check
      </code>
      
      , <code>
        bm-invoice
      </code>
      
      , <code>
        bm-kanban
      </code>
      
      , <code>
        bm-card
      </code>
      
      , <code>
        bm-card-group
      </code>
      
      , <code>
        bm-field
      </code>
      
      , <code>
        bm-field-group
      </code>
      
      , <code>
        bm-meter
      </code>
      
      , <code>
        bm-spark
      </code>
      
      , <code>
        bm-rank
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Charts
      </strong>
    </td>
    
    <td>
      <code>
        bm-bars
      </code>
      
      , <code>
        bm-funnel
      </code>
      
      , <code>
        bm-stack
      </code>
      
      , <code>
        bm-waffle
      </code>
      
      , <code>
        bm-plot
      </code>
      
      , <code>
        bm-uptime
      </code>
      
      , <code>
        bm-slope
      </code>
      
      , <code>
        bm-bullet
      </code>
      
      , <code>
        bm-waterfall
      </code>
      
      , <code>
        bm-gantt
      </code>
      
      , <code>
        bm-heatmap
      </code>
      
      , <code>
        bm-matrix
      </code>
      
      , <code>
        bm-cells
      </code>
      
      , <code>
        bm-flow
      </code>
      
      , <code>
        bm-activity
      </code>
      
      , <code>
        bm-calendar
      </code>
    </td>
  </tr>
</tbody>
</table>

A few more, from the same launch project:

<theme-image alt="A bm-gantt chart of five launch workstreams with progress" dark="/screenshots/cloud-app/comark-gantt-dark.png" light="/screenshots/cloud-app/comark-gantt-light.png">



</theme-image>

<theme-image alt="A bm-compare table of plans with the Growth column highlighted" dark="/screenshots/cloud-app/comark-compare-dark.png" light="/screenshots/cloud-app/comark-compare-light.png">



</theme-image>

<theme-image alt="A bm-bullet chart of budget used against plan for four workstreams" dark="/screenshots/cloud-app/comark-bullet-dark.png" light="/screenshots/cloud-app/comark-bullet-light.png">



</theme-image>

The `comark(7)` manual page (`bm man comark`, or `memory://man/comark(7)` over MCP) is the quick reference. The `memory-comark` [agent skill](https://docs.basicmemory.com/integrations/skills) teaches your AI every component, its attributes, and its data format.

## Live views

Give a component a `query` and it becomes a read-only view over the project that contains it. The query is a pipeline, read left to right:

```markdown
::bm-bars{title="Tasks by status" query="notes | where type == task | group status"}
::

::bm-table{title="Open tasks" query="notes | where type == task and status != done | fields title, owner, due | sort due"}
::

::bm-activity{title="Edits per day" query="activity 30d | daily"}
::
```

<table>
<thead>
  <tr>
    <th>
      Part
    </th>
    
    <th>
      What it does
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Sources
      </strong>
    </td>
    
    <td>
      <code>
        notes
      </code>
      
       (your notes' frontmatter), <code>
        search 'phrase'
      </code>
      
       or <code>
        search 'phrase' hybrid
      </code>
      
       (ranked results), <code>
        activity 7d
      </code>
      
       or <code>
        activity 30d
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        <code>
          where
        </code>
      </strong>
    </td>
    
    <td>
      Filters on a field: <code>
        ==
      </code>
      
      , <code>
        !=
      </code>
      
      , <code>
        <
      </code>
      
      , <code>
        <=
      </code>
      
      , <code>
        >
      </code>
      
      , <code>
        >=
      </code>
      
      , <code>
        contains
      </code>
      
      , joined with <code>
        and
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        <code>
          group field
        </code>
      </strong>
    </td>
    
    <td>
      One row per value, with its count
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        <code>
          count
        </code>
      </strong>
      
      , <strong>
        <code>
          sum field
        </code>
      </strong>
    </td>
    
    <td>
      One number over the filtered notes, or per group
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        <code>
          fields a, b
        </code>
      </strong>
    </td>
    
    <td>
      Note rows with these columns
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        <code>
          daily
        </code>
      </strong>
    </td>
    
    <td>
      One count per day, for <code>
        activity
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        <code>
          sort field [desc]
        </code>
      </strong>
      
      , <strong>
        <code>
          limit n
        </code>
      </strong>
    </td>
    
    <td>
      Order the rows; keep 1 to 50
    </td>
  </tr>
</tbody>
</table>

Inside the double-quoted `query` attribute, quote phrases with single quotes: `query="search 'checksum conflict'"`.

Live views refresh when the project's notes change, at most once every 30 seconds per view. A live chart's Markdown body holds its last **snapshot**: readers see live rows, and if the query can't run, the snapshot shows with the reason. In the editor, **Freeze snapshot** rewrites the body from the current rows.

<note>

A component that can't render, or a live view whose query fails, shows the problem inside that component. The rest of the note still renders, and a component never blocks a save.

</note>

---

## Next Steps

<card-group>
<card icon="i-lucide-shapes" title="Comark Components" to="https://docs.basicmemory.com/cloud/comark-components">

Every component, with its source and how it renders.

</card>

<card icon="i-lucide-filter" title="Metadata Search" to="https://docs.basicmemory.com/concepts/metadata-search">

The frontmatter fields live views filter on.

</card>
</card-group>


## Sitemap

See the full [sitemap](https://docs.basicmemory.com/sitemap.md) for all pages.
