Skip to content

Notes & editor ​

This page covers everything about writing in Graphium: creating notes, finding them again, the block editor — block types, the slash menu, math, media, templates, index tables, note links — and how saving, history, and versions work. Step blocks and the provenance graph they feed have their own page: Labels & provenance.

A plain Graphium note: headings, lists, a quote, and a table

Creating a note ​

Click + Note at the top of the sidebar ("Open a new note"). A blank note opens with the cursor in the title field ("Note title"). The note file is created on first save — start typing and autosave does the rest.

Added in v0.91.0 (2026-10-20) The small arrow at the right edge of the button (Kind of new item) opens a short menu: Blank note (the default — what the button itself does), Voice note, and From a template…. Voice note starts a note with a recording block at the top, so a meeting can be recorded and transcribed on your computer (desktop app only; see Voice notes). From a template… opens the template picker and starts the new note from the one you choose — see Templates.

A new note: a title and plain lines — nothing else required

No ⌘⇧N shortcut

Graphium deliberately does not bind ⌘⇧N (Ctrl+Shift+N on Windows/Linux) to "new note" — browsers reserve that combination for a new incognito window. The + Note button is the entry point. See Shortcuts for what is bound.

Title with AI Added in v0.92.3 (2026-10-21) ​

A new note starts as "New note". If you would rather name it once it is written, open ⋯ at the top right and choose Title with AI. Your AI model reads the note and replaces the current title. While it works, the item reads "Writing a title…".

  • After the swap, "Title updated" appears at the bottom right. Undo there brings the previous title back (⌘Z in the title field does not).
  • If you change the title yourself while the AI is still working, your title stays.
  • If the note has no body yet, you see "Write something in the note first to get a title" and the title is left alone.
  • The item appears only on ordinary notes, and only when an AI model is set up (Settings → AI). Knowledge and topic pages, skills, and archived or trashed notes do not have it.

The notes list ​

All Notes shows every note as a table with a search box ("Search notes...") and a live count ("12 / 40 notes"). The box matches titles, text read from images, and the note body itself Added in v0.39.0 (2026-08-17) — a body-only match is marked with an in body badge, and hovering it shows the passage that matched. The sidebar also keeps a Recent Notes section for quick jumps back to what you last opened, with Show all leading to the full list.

ControlWhat it does
Sort by modified / Sort by created / Sort by title / Sort by outgoing linksReorders the list. The default is by creation date.
Filter by labelShow only notes that contain a given provenance label.
Filter by authorFilter by who wrote the note — and which LLM assisted.
Filter by folderFilter by folder.
Clear filterBack to everything.
Added in v0.83.6 (2026-09-29) Clicking a row opens that note in the side peek and marks the row with a green bar on its left edge. Press ↓ / ↑ to switch to the next or previous note, so you can read down the list one note at a time; Enter opens the note full screen. Switching with the keys doesn't add to the browser history, so going back returns you to where you were before you clicked. See also Keyboard shortcuts.

Selecting rows lets you act in bulk: move notes to trash, archive them, or add all of them to a folder at once. To select several rows, drag down the list or click one row's checkbox and shift-click another — the range between them joins the selection. Archived and trashed notes live in the Trash & Archive view — archiving shelves a note while links and citations to it keep resolving. Added in v0.61.1 (2026-09-08)

The notes list with link counts, labels, and folder columns

When the window is narrow, the list leaves out some columns so the title keeps a readable width: Author first, then Created, Folder, Labels, and the book icon that counts knowledge items. When even that is not enough, the title column is narrowed a little further so the Modified column is never cut off. Created order stays available in the sort menu at the top left even when that column is hidden. A column you are filtering or sorting by stays visible.

Editor basics ​

The editor is block-based: every paragraph, heading, or table is a block you can drag, style, and convert. Press / on an empty line to insert a block, or select text for the formatting toolbar. The standard building blocks are paragraphs, headings (three levels), bulleted, numbered, check and toggle lists, quotes, code blocks, and tables.

Readable line width Added in v0.32.0 (2026-08-13) ​

On wide screens the note body is capped at a readable column width and centered, so long lines stay easy to follow. Narrow windows, side peeks, and mobile are unaffected — the cap only kicks in when the window is wider than the column.

When a note needs the whole window — wide tables, charts, or images — open the ⋯ menu in the top-right corner and choose Full width. A check mark shows the current state, and the choice is saved per note.

Writing on A4 width Added in v0.85.0 (2026-09-30) ​

When you are drafting something that will end up on paper — a report, a paper — open the ⋯ menu and choose Write on A4 width. The note body is fixed to 170 mm — an A4 sheet with 20 mm margins on both the left and the right — and shown as a sheet of paper on a desk, with a soft shadow. Line breaks in the body come out almost the same as in print or PDF (the screen and the printer measure text slightly differently, so a line may end a little earlier or later). A note written in A4 mode prints with the same 170 mm body, so the margins are 20 mm on both sides on screen and on paper. Other notes print with a 180 mm body (15 mm margins on A4). On paper narrower than A4 the body shrinks to fit. A newly inserted image is limited to the same height as in print (150 mm), but never taller than half the screen height; an image you have resized yourself can go up to 150 mm.

  • Added in v0.85.1 (2026-10-01) To start every new blank note on A4 width, turn on Start new notes on A4 width in Settings. It covers notes you start yourself: blank notes, notes from a template, imported notes, and notes made from a row of a plan table. A derived note follows its source note's width, and a note forked from a share follows the person who shared it.
  • Added in v0.85.1 (2026-10-01) To switch the notes you already have, use the two buttons below that setting: Also switch existing notes to A4 and Switch all A4 notes back to standard. Only the width is rewritten, so the modified date (and the order of the list) and the history recorded in the note do not change. Notes set to full width and notes in the trash are left as they are, and notes that are open switch on the spot. Opening a note in an older version of the app and saving it drops the A4 setting, which just returns that note to the standard width.
  • Full width and Write on A4 width are alternatives: choosing one turns the other off. Choose the checked one again to go back to the normal layout. The choice is saved per note.
  • Added in v0.85.1 (2026-10-01) The note still flows as one continuous page; you do not edit page by page. Instead a dashed line appears on the desk — the grey area to the left and right of the sheet — at the height where print will start a new page, with a small "Page 2", "Page 3" … beside it on the right. Nothing is drawn over the text or the sheet. On a narrow window where the desk is too thin for the label, the number moves into the sheet's right margin. Figures, charts and small tables are not split across pages, so a line can fall above one that would not fit, and a heading moves to the next page with the text that follows it. Improved in v0.87.6 (2026-10-08) A long imported table that is folded to its first rows ("Show N more rows") prints as you see it: only the visible rows, with a short note under the table saying how many were left out, and the lines count it that way. To print every row, expand the table first. Inside a collapsed heading, where several pages can begin at the same spot, the lines are merged into one labelled with the range ("Pages 2–5"). Treat the lines as a guide: they are worked out the way the printer does it, but may be a few lines off from the real print. In print, the first page also carries the title and the date, which the lines already count. The provenance graph that is added after the body when you print is not counted. Page numbers and headers or footers are not printed.
  • When the note area is narrower than the sheet (for example with the right panel open on a small screen), the note goes back to the normal flowing layout and a small icon appears at the top right of the note; hover over it to see why. Zoom out or close the right panel to see the sheet again. The page is never shrunk to fit. For the same reason, a note showing the sheet does not open the right panel by itself when that would make the sheet disappear; you can still open it yourself at any time.
  • Side peeks and mobile always use the normal layout.

Collapsing headings Added in v0.47.0 (2026-08-28) ​

Every heading folds away what sits under it. Hover a heading and a small ▸ appears to its left; click it to collapse. The arrow stays visible while a section is collapsed, so you can tell at a glance that something is folded there — otherwise it keeps out of the way and the heading reads as an ordinary heading.

A section folded under "Bulk ferment" — the arrow stays visible while a section is collapsed

A heading takes everything down to the next heading of the same or higher level. Collapsing an H2 hides its paragraphs and any H3 sections beneath it, and stops at the next H2. A heading with nothing under it has no arrow.

Folding is a view setting, not part of the note. Nothing is written to the note file, so exports, Markdown, and the provenance graph always contain the full text. The folded state is remembered on this device only. While the in-note search (⌘F / Ctrl+F) has a term in it, folded sections are shown so that matches are never hidden from you.

The turn-into menu Added in v0.18.0 (2026-07-15) ​

Hover a text block and open the drag-handle (⠿) menu; Turn into converts the block in place:

Text · Heading 1 · Heading 2 · Heading 3 · Bulleted list · Numbered list · Check list · Toggle list · Quote · Code

The drag-handle (⠿) menu ​

Added in v0.87.2 (2026-10-07) Hover the + or the ⠿ to the left of a block and a tooltip says what it is: Add a block and Block actions. For your first few uses it also says how to use it — "Drag to move · Click for menu" — and after that it shows only the name. While you drag a block up or down, the green line where it would land carries a Move here label at its right end.

The full menu, top to bottom:

ItemWhat it does
Turn intoConvert a text block to another type (see above).
Duplicate Added in v0.35.0 (2026-08-13)Copy the block directly below it — see Duplicating a block.
DeleteRemove the block. While the menu is open, the block it acts on is shaded, and pressing Backspace or Delete removes it too.
ColorText and background color.
AlignAlign left / Align center / Align right — works even for tables, audio, and file blocks.
LabelMark a table or media block as an Entity in the provenance graph — see Labels & provenance.
Name this tableGive a table a name, shown above it where a caption belongs and used as its reference name in charts. Tables only.
Read text from imageOn-device OCR for image blocks — see Materials & citations.
📝 Add memoAttach a memo to this block; it shows up in the Memos panel.
🔗 Derive new pageFork a new note that records where it came from.
🤖 AI AssistantAsk AI about this block (headings and steps pass their whole section). Hidden until AI is set up — see AI setup.

The drag-handle menu on a paragraph

Slash menu reference ​

Typing / shows the standard blocks plus four Graphium-specific groups:

The slash menu showing the Advanced and Existing media groups

Advanced ​

ItemDescription
Calculation Added in v0.35.0 (2026-08-13)"Live calculations with variables and units" — see Calculations
Index Table"Create and open a note for each row" — see The index table
Time-series Table"Rows get the date/time automatically — for diaries and daily logs" — see The time-series table and charts
Chart"Visualize a table in this note" — see The time-series table and charts
Template"Insert an official, personal or team template"
Callout"Insert a note box with an icon"
Step"A step that holds text, tables and images inside" — the container behind the provenance graph; see Labels & provenance
Columns"Place blocks side by side in two columns" — see Columns
Formula"Show a formula on its own line (LaTeX)"
Inline formula"Put a formula inside a sentence (LaTeX)"

Existing media ​

ItemDescription
Image"Upload new or insert existing image"
Video"Upload new or insert existing video"
Audio"Upload new or insert existing audio"
Document"Upload new or insert existing PDF / Word"
Bookmark"Display URL as a card"
PDF"Embed a PDF file"
Memo"Insert from saved memos"

Existing knowledge ​

ItemDescription
Claims"Cite existing claim notes (multi-select)"
Insights"Cite existing insight notes (multi-select)"

These cite notes from your Knowledge layer.

Notes ​

ItemDescription
New note"Create a named note and link it here"

Math Added in v0.24.0 (2026-07-30) ​

Formula inserts a display equation on its own line; Inline formula drops one into a sentence ("Click to edit"). Both open an editor with two modes you can switch between at any time:

  • Write with symbols — a visual math editor: type x/y to get a fraction, with a symbol palette for the rest.
  • Write in LaTeX — edit the LaTeX source directly ("Enter a formula (LaTeX)").

Your last-used mode is remembered on this device. Formulas are stored as LaTeX and rendered with KaTeX, so they survive export as plain LaTeX math delimiters. The AI reads them the same way: when a note becomes knowledge, or an agent reads it over MCP, each formula arrives as its LaTeX, and a formula the AI writes into a knowledge page shows up as a formula rather than as raw $…$ text.

The formula editor in visual mode, with a toggle to LaTeX

Calculations Added in v0.35.0 (2026-08-13) ​

A formula shows the reader what you did. Calculation (/calculation) actually does the arithmetic — the weighing, the dilution, the yield you would otherwise work out on a phone calculator and type in as a bare number.

Write one expression per line on the left. Results appear in the column on the right and update as you type — a weighing for 5 g of BaTiO₃ reads like this:

LineResult
target = 5 g5 g
BaCO3 = 197.34 g/mol197.34 g / mol
BaTiO3 = 233.19 g/mol233.19 g / mol
mol = target / BaTiO321.441743 mmol
mol * BaCO3 to g4.2313135 g

What the block understands:

  • Variables. target = 5 g names a value that later lines can use. The names are yours; nothing is predefined.
  • Units. Values carry their units through the arithmetic, so 5 g / 233.19 g/mol gives you an amount of substance rather than a naked number — shown with whichever prefix reads best (21.441743 mmol, not 0.021441743 mol). Convert explicitly with to: mol * BaCO3 to g, 1 atm to kPa.
  • Comments. Blank lines pass through, and a line starting with # or // is a note to yourself.
  • Click a result to copy it. The line says Click to copy, then Copied.

Variables live inside the block. A second Calculation block starts from nothing, so two calculations in one note cannot quietly contaminate each other. A line that doesn't parse is marked ?, and the lines around it keep evaluating.

The note stores both the expressions and the values they produced. That matters for a lab record: the numbers you worked with stay readable years later, even if the maths library underneath changes.

A calculation block: expressions on the left, live results on the right

A result can also become a column of a data table — see adding a computed column.

Finding a function Added in v0.88.6 (2026-10-14) ​

Type the first two letters of a function name and the block suggests the functions that start with them, each with how to call it and what it does — me offers mean(column) and median(column). Press Tab to insert the highlighted one; the caret lands inside the parentheses. Enter still starts a new line, because the same letters often begin a variable name you are typing. Choosing col goes straight on to suggesting your tables and their columns; move through those with ↑↓ and insert with Tab or Enter.

For the whole list, click the ? at the block's top right (Functions and syntax). It groups a short set of functions — reading a table column, sums and averages, rounding and roots, curve fitting — with the bits of syntax that are easy to forget (to for units, how columns combine). Clicking a function inserts it where the caret is. The list is a starting point, not a limit: any function of the underlying maths library works when you write it, and column("table", "column") is accepted as a longer spelling of col.

The Functions and syntax list opened from the ? in a calculation block

Lining up measurements taken at different points Added in v0.72.0 (2026-09-11) ​

Two instruments rarely sample a specimen at the same points. In thermoelectrics, thermal conductivity comes from a laser flash rig and the Seebeck coefficient and electrical conductivity from another, so their temperatures do not line up — and ZT needs all three at the same temperature. The usual answer is to fit one quantity as a polynomial and read it back at the other's temperatures.

The block does that in three lines:

c  = polyfit(col("Thermal conductivity","T"), col("Thermal conductivity","kappa"), 4)
ke = polyval(c, col("Electrical","T"))
ZT = col("Electrical","S")^2 * col("Electrical","sigma") * col("Electrical","T") / ke
FunctionWhat it does
polyfit(x, y, degree)Fits a polynomial by least squares. The result line reads degree 4 fit R²=0.9999 range 300–800 (11 points) — the degree you chose, how well it fits, and the range it is good for.
polyval(fit, x)Reads the fit back at x. Give it a whole column and you get a whole column, ready to write back into the other table.
coeffs(fit)The coefficients in the original scale, highest power first — the form a paper wants.
r2(fit)The coefficient of determination on its own.
linspace(start, stop, count)Evenly spaced numbers, for drawing a fitted curve more finely than the measured points.

Two things the block does on your behalf:

  • Units survive the fit. If the temperature column of one table is in °C and the other in K, the fit converts rather than quietly disagreeing, and the unit of the fitted quantity comes back attached — which is what lets a derived ZT come out dimensionless.
  • Extrapolation is flagged, not hidden. Evaluating outside the fitted range still gives you a number, with a ⚠ beside it naming where you went outside. Ranges rarely line up at the ends, so this is the common case rather than a mistake — but a fourth-order polynomial misbehaves quickly past its data, and the marker is there so you decide rather than find out later.

Arithmetic on columns works row by row: *, / and ^ combine the values that sit on the same row (.*, ./ and .^ mean the same). Matrix products and inverses are not part of the block.

A calculation block fitting thermal conductivity: the fit line reads "degree 4 fit R²=0.9988", and the line evaluated at 900 carries a warning marker

Duplicating a block Added in v0.35.0 (2026-08-13) ​

Duplicate in the drag-handle (⠿) menu, or ⌘D (Ctrl+D on Windows/Linux) with the cursor in the block, copies a block directly below itself. It is the fastest way to repeat a filled-in table, a step, or a calculation you want to vary.

The copy is a real copy, not a link: editing one leaves the other alone. It carries over the block's content, its labels and step attributes, its alignment, and — for a time-series table — the table's registration and name, since duplicating a set-up table as a template is the common reason to do this.

Two things deliberately do not come along:

  • An index table's registration. Its rows belong to notes, and two tables pointing at the same notes would leave you unsure which one you edited. The copy is a plain table.
  • OCR text on an image. The same image can be read again in place; derived data is not kept in two places.

Columns Added in v0.27.0 (2026-08-03) ​

Columns places blocks side by side — observations next to their discussion, a table next to the photo it describes. Insert one from the slash menu (/columns) and you get two columns, each holding any blocks you like: paragraphs, headings, tables, images, even steps.

  • Create by dragging — grab a block and drop it on the left or right side of another block, and the two become columns. The landing area is the outer third on each side — no need to aim for the very edge — and while you drag, a green band labeled Place side by side and a vertical line show where the block would go. Drop in the middle third and you get the usual up-and-down reordering. Dropping on the edge of an existing column (or in the gap between columns) adds a new column there instead. Improved in v0.69.0 (2026-09-09)
  • What you can grab — every block can be grabbed by its handle (⠿). Images, videos, and files can also be dragged by the content itself, without hunting for the handle. Added in v0.69.0 (2026-09-09)
  • Blocks narrower than the text column — for images, charts, and PDFs, the landing area starts right beside the content, so you do not have to carry the block out to the edge of the text column. Improved in v0.69.0 (2026-09-09)
  • Resize — drag the gap between two columns to change their widths.
  • Move blocks in and out — drag a block by its handle (⠿) into a column, or use Backspace / Delete at a column edge to merge content across the boundary. Dragging the last block out of a column dissolves the column, and once a single column is left its content goes back to being ordinary blocks.
  • Narrow layouts stack — when the note is too narrow to fit the columns side by side (the side peek, a phone), they stack vertically on their own. Nothing is hidden.

Dragging the "Poke test" line onto the right edge of the paragraph above it; a green band labeled "Place side by side" and a vertical line mark where it would land

Columns are layout only: search, the outline, AI chat, and Markdown export all read the content inside them just as if it were written top to bottom.

Update all your devices first

Opening a note that uses columns in an older version of Graphium silently removes the columns and everything inside them on the next save — older versions do not know the block type. If you use Graphium on several devices, update all of them before you start using columns.

Callout, bookmark, and PDF ​

  • Callout is a note box with an icon; pick a variant: Note, Info, Success, Warning, or Danger.
  • Putting several lines into a quote or callout Added in v0.85.3 (2026-10-01) — a quote or callout holds one block of text, with line breaks inside it. Inside one, Enter starts a new line rather than a new block; press Enter again on an empty last line to leave it and continue with a paragraph below (Enter in an empty quote or callout turns it back into a paragraph). When you paste several paragraphs with the cursor inside one, they all go in, one line each, instead of only the first line going in and the rest landing below it. You can also drag paragraphs in by their handle (⠿): drop them on the quote or callout itself — a green outline labeled Move inside marks it — and they go in as lines of their own. Where they go follows the pointer: over the upper half of a line they go in before it, over the lower half after it, and a green line between the lines shows the spot. Dropping near its top or bottom edge, or between blocks, still just moves the paragraphs before or after it. Images, tables, and other blocks that aren't text stay as they are.
  • Bookmark shows a URL as a card ("🔗 Enter a URL"); inserting one opens a picker so you can reuse an already-registered URL.
  • PDF embeds a PDF right in the note ("Drag & drop a PDF file, or insert one from the slash menu").

Inserting media ​

Image, Video, Audio, and Document all open the same picker: choose Upload from file for something new, or select a material you have already imported. The Insert as switch controls the result — Embed ("Expand the content inline in the note") or Link ("Insert as an @link (content stays collapsed)"). Everything you upload also lands in the material library — see Materials & citations. To look at an image closely, double-click it — it opens in the full view, and closing it returns you to the note (or select it and use Open in side peek in the toolbar for the side peek, with the material's details and the notes that use it); see Reading materials.

Added in v0.84.0 (2026-09-30) A newly inserted image is kept to about half the window height, keeping its proportions, so a single tall or square picture never pushes the text around it off screen. A tall image therefore appears narrower than the text column. Hover an image and drag the handle on its left or right edge to resize it: once you have set a size yourself, the height limit no longer applies and you can enlarge the image up to the full width of the text. When a note is printed or saved as PDF, images are limited to a fixed height that fits the page instead.

Templates ​

Template opens the Insert Template modal with two built-in layouts:

TemplateWhat you get
Plan Template"Comparison plan with an index table linking items to detail notes"
Run Template"Per-item record with PROV-labeled steps and prev-step linking"

The modal is searchable and lists each template's Source (Official or Mine) and Tags. The two templates are designed as a pair: plan the comparison in one note, then generate a Run note per row of its index table.

The Insert Template modal with the Plan and Run templates

Added in v0.88.0 (2026-10-09) To keep a page as your own template, open the note's ⋯ menu and choose Save as template, then give it a name and an optional description. It is stored in your current storage, so no shared folder is needed. Your templates appear in the same table, after the built-in ones and before the team's, marked Mine in the Source column; selecting one inserts it into the current note. Hover a row to show Rename and Delete at its right edge: rename in place (Enter to confirm, Esc to cancel), and delete asks for confirmation first.

A template can also start a new note instead of being inserted into the one you have open. In the left nav, open the ▾ next to + Note and choose From a template…: built-in, your own and your team's templates are listed together. Selecting one creates a new note from its contents and opens it. The note takes the template's name as its title and keeps a record of which template it came from. Creating a note from a personal template does not carry over a step's linked attributes (such as who ran it and its status).

If your team has a shared folder set up, pages your teammates have shared as templates appear as more rows in the same table, after the built-in ones, marked with a Team badge in the Source column — see Storage & sync. Added in v0.54.0 (2026-09-04)

Reusing a calculation table ​

A calculation you redo every time with different inputs — weighing out reagents, a dilution series, unit conversions for a run sheet — can be kept as a template, with the table and the formula wired together.

  1. Write the table with the inputs, and the formula in a Calculation block that reads them. To work out amounts from equivalents, for example, a table named Reagents (Name this table in the ⠿ menu) with the columns Reagent, Molar mass and Equiv., and:
    n0  = 2 mmol
    mol = n0 * col("Reagents", "Equiv.")
  2. Send mol back into the table with ⇥ (Adding a computed column works the same way for a regular table). The table gains a mol column that follows the inputs.
  3. Optionally put the table and the calculation inside a Step, together with the procedure text.
  4. Choose Save as template in the note's ⋯ menu.

When you insert the template into a note, the calculation writes into the table that was inserted with it, not into the one you saved the template from. The same holds when you duplicate the blocks, or copy and paste the table and the calculation together.

A calculation reads tables by their name ("Reagents" above, or an automatic Table 1). If the note you insert into already has a table of the same name, the calculation reads the first one. Insert into a new note, or give the tables different names.

Working with tables Added in v0.48.0 (2026-08-31) ​

Everything below applies to any table in a note, whatever it started as.

Expanding a table ​

A table with more rows than fit comfortably in the note has an Expand button above it. It opens the table on its own over the page, with the header row pinned while you scroll, and the row and column count in the corner ("12 rows × 5 columns"). Close it with the ✕, the background, or Esc.

Sorting ​

Click a column header in the expanded view to sort by it: ascending, then descending, then back to the order you typed. Which one you get depends on where the table lives, and the hint under the title says which:

HintWhat sorting does
"Click a column header to sort — the table itself is not changed"Sorts your view only. The note keeps the order you recorded.
"Click a column header to sort the table itself — undo to revert"Rewrites the row order in the note. ⌘Z puts it back.

To sort the table in place without opening it, use the column handle (⋮⋮) menu: Sort ascending and Sort descending sit at the bottom. Both are ordinary edits, so undo works.

A column is read as numbers when most of its filled cells are numeric; the rest sort as text. Blank cells always go last, and rows that tie keep their original order.

Data files and images inside cells ​

A cell can hold more than text. Type @ in a cell to insert a material from your library: a .csv, .txt, or .dat file appears as a link you can click to preview, and an image appears inline in the cell. That way a measurement, the raw file it came from, and a photo of the sample sit in one row instead of scattered around the note.

Long imported tables ​

A table brought in from a measurement file shows its first rows with the rest folded away, and a Show 240 more rows button underneath. Once expanded, the row count in the caption ("263 rows") folds it back.

The index table ​

Index Table inserts a table built for managing a list of samples, runs, or items, with Name, Condition 1, and Condition 2 columns you can rename and extend. Each row can own a note:

  • Fill the first column, then click the row's icon ("Create note for A-01") to generate a linked note for that row. An empty first column shows "Enter the note title in the first column" instead.
  • Typing @ inside a row's first column links the row to an existing note instead.
  • Linked rows offer Open note and Side peek — the side peek opens the row's note next to the current one, so you can update a run without leaving the plan.
  • In a note opened in the side peek, you can also insert an index table, create a note from a row's icon, and link a row to an existing note by typing @. Either way, the row's note is linked to the note shown in the peek, and the peek stays on the table instead of switching to the row's note — click the row's name to open it there.

Like the time-series table, an index table is not a separate kind of table — it is an ordinary table with the row-to-note behavior switched on. Any existing table can become one (and stop being one) from the drag-handle (⠿) menu: "Turn into index table". Turning it off removes the row-to-note links (the notes themselves are untouched).

In a Plan note Added in v0.74.0 (2026-09-15), the notes created from an index table's rows are Operation notes, and they show up as a chain of operations in the right panel's Steps tab — see Step blocks. The row order in the table is just the order you typed them in, not the chain: the connections come from each operation note's own steps choosing another operation's output as an input. A plan's index table can also carry an Input from column: writing other rows' names into a row's cell (comma-separated) declares planned lines in that Operations graph — see The provenance graph panel.

An index table with Name and condition columns

The time-series table and charts Added in v0.34.0 (2026-08-13) ​

Time-series Table inserts a table for recurring, time-stamped records — a headache diary, a growth log, a daily measurement. It starts with Date/Time, Value, and Note columns you can rename and extend. There is no special button: add rows the way you add rows to any table (the + strip under the table, or pasting), and the current date and time is filled into the first column automatically.

The timestamp is ordinary cell text. You can edit it afterwards (recording last night's episode the next morning is fine), and because the whole thing is a standard table, it exports to Markdown and PDF unchanged.

Any table can be named from the drag-handle (⠿) menu — "Name this table" — and the name appears above it, where a caption belongs. Charts use it as the reference label. Time-series tables fall back to an automatic Table 1, Table 2, … in document order when they have no name of their own; other tables simply show nothing until you name them. Clear the name to remove it.

A named time-series table with auto-filled date/time cells

A time-series table is not a separate kind of table — it is an ordinary table with this behavior switched on. Any existing table can become one (and stop being one) from the drag-handle (⠿) menu: "Turn into time-series table".

Chart turns any table in the note into a graph, drawn in a publication style — a framed plot area with inward ticks, axis labels, and an A-series (√2:1) aspect ratio — so the figure looks at home in academic writing. In narrow places such as the side peek, the chart puts readable ticks first: it tightens its margins, thins out the ticks, and keeps enough height for the plot, so it can come out taller than its aspect ratio. The same happens at full width when a wide ratio (4:1, 5:1) or panels split into rows would leave the plot too short to read: the chart grows taller until the tick labels, the axis name and the names of offset rows fit, while a chart that already has room keeps its ratio.

Added in v0.87.6 (2026-10-08) To make a chart smaller, hover it and drag the handle on its left or right edge, as you would with an image. The height follows, keeping the aspect ratio, and the caption narrows with it. The width is kept as a share of the text column, so the chart stays the same proportion on an A4 sheet and in the flowing layout, and it prints at that size. Double-click a handle to return to the full width.

Two time-series tables overlaid in one chart: pain on the left axis, pressure on the right

Insert it, pick a table, and open Settings in the top-right corner. The panel has three tabs:

  • Type & Series — the chart type (Line, Bar, Scatter, or Histogram — the distribution of a numeric column) and the Data that feeds it. Data is laid out source first Added in v0.94.15 (2026-10-23): each source — a table in the note, picked by caption (e.g. Table 1), or a data asset — is a card showing its name and size (4 columns · 3 rows), and the series drawn from it sit inside that card. + Add series in a card lists that source's numeric columns (columns already plotted are ticked); + Add data source at the bottom adds another table or data asset and proposes a series for each numeric column — up to eight; for a wider file the card says how many more columns + Add series can still add. The ⇄ button on a card moves all of its series to another source (columns with the same name are kept), and × removes the source with its series. A series is the unit that knows how it is drawn: expand one to set its display label, its X/Y columns, its own chart type (mix a bar series into a line chart), which Y axis it belongs to, and its Style. Series can point at different tables, so two logs can be overlaid on one figure, and assigning a series to the right axis gives it its own scale: pain 0–10 on the left, pressure around 1000 hPa on the right.
    • Pick a data asset… Added in v0.38.0 (2026-08-17) — a series can also draw from a data asset: a .csv / .txt / .dat file already in your assets, or one you pick from disk, without pasting its table into the note. Choose Pick a data asset… from + Add data source (or from a card's ⇄ to switch an existing source to a file). The picker shows what is inside each file Added in v0.94.15 (2026-10-23) — its columns, its number of rows and small overlaid lines of up to four numeric columns, each in the colour of its column name and plotted against the X column, with peaks kept — so files with similar names can be told apart; files in which no numeric column was found are folded away under a count and can be shown again (fixing the header row or delimiter on the next screen sometimes makes them usable). Pick the file, confirm how it is read on the import screen (Use in chart), and the series draws from the file. An empty chart block offers the same Pick a data asset… beside the table names. This is how a past measurement or a reference pattern is overlaid on a figure in another note: today's XRD scan stays a table in today's note, last week's sample and the literature pattern come straight from the asset library. The file itself stays the source of truth — the block remembers only which asset and how it was read — and if the asset is later removed, the series shows (asset not found).

    • Style Added in v0.36.0 (2026-08-14) — besides the color: line type (solid, dashed, dotted), line width, marker visibility, shape (circle, square, triangle, diamond, each also hollow) and size, and bar width. For a figure that will be printed in black and white, this is how series stay distinguishable without relying on color.

    • Panels Added in v0.71.0 (2026-09-11) — right under the chart type, above Offset. Splits one figure into a grid of up to 4 × 4 panels and assigns each series to one of them (a series' own Panel field sits in its settings). Where Offset stacks spectra inside a single frame and gives up the y-axis values to do it, panels keep each plot's own y axis — which is how four different quantities (σ, S, PF, κ against temperature) go into one figure. Join panels vertically / horizontally presses the panels in that direction flush against each other and shares that axis: the range is unified across them and only the outer panel carries its ticks and axis name. Nothing is inferred from your data — panels stay independent until you join them. Axis names and ranges belong to each panel (pick the panel at the top of the Axes tab; the tick kind and Advanced settings are marked (all panels) and apply to every one), and the chosen panel is the same one Offset and the legend's panel corner edit; a joined direction shares one setting, since both panels are drawn against the same axis. When every panel ends up with the same y-axis name, it is drawn once down the left side instead of repeated. Offset is per panel too, so one panel can stack reference patterns while the panel below keeps absolute counts. Tick styling stays common to the whole figure.

    • Offset Added in v0.36.0 (2026-08-14) — right under the chart type. This is the figure spectra are compared in: a measurement and its reference patterns offset vertically inside one frame, as XRD work is usually shown. Turning it on removes the Y-axis ticks — a row's height is a position for comparison, not an absolute intensity. Choose how heights are normalized (max to 1, or raw values), the gap between rows, the order (first at the bottom or the top), and where row labels go (in the figure or in the legend). Named in the figure, the corner each name sits in is set under Appearance Added in v0.37.2 (2026-08-16). Individual series can be nudged under Offset adjustments with scale and row position. Placing separate chart blocks side by side cannot produce this figure — each one repeats its own padding and axes.

  • Axes — the X-axis scale type (Auto / Time / Numeric / Category — auto-detection can be overridden), axis labels, and min/max ranges for the X axis and for the left — and, when in use, the right — Y axis. Each axis also has an Advanced section: visibility toggles for the axis, axis line, ticks and tick labels, tick-label rotation, tick direction (inward, the academic default, or outward), and grid lines. The scale you pick applies to bar charts too Added in v0.37.2 (2026-08-16): choose Numeric or Time and the bars sit on that axis and take a min/max, which is how you narrow a bar chart to a range. On Auto, bars follow the same detection as the other chart types — a numeric X column puts them on a numeric axis, so a range can be set without changing anything. Text labels stay categorical, and so do dates on a bar chart, where one bar is one record. Pick Category to line numeric labels up at even spacing instead. Value axes fit the data range, while the Y axis starts at zero for bars and histograms, where the length is the quantity. A range cannot be set on a category axis, and the panel says so under the field.
  • Appearance — panel labels (a)(b)(c)(d) Added in v0.71.0 (2026-09-11) for a split figure, so the text can point at one of them (they are numbered left to right, top to bottom, and re-lettered when the split changes; pick which corner they sit in, since the top left is often where the data runs), a figure caption shown under the chart, the aspect ratio (√2:1 standard, golden φ:1, 2:1, 3:1, and spectrum-friendly 4:1 / 5:1 for wide patterns like XRD, plus 1:1), the legend (above the plot aligned to its frame, inside any of the four corners, or below; horizontal or vertical; in a split figure its Scope Added in v0.73.0 (2026-09-15) too — One for the figure merges series with the same name into one entry and one color across panels, Per panel puts a legend of each panel's own series inside it, and Panel corner moves the legend for just the panels where the data runs through it), and the plot frame. While offset rows are named in the figure there is no legend to place, so this is where Name position appears instead Added in v0.37.2 (2026-08-16): the names go in one of the four corners of their own row — inside it, so a name belongs to the row it names rather than to the gap above or below.

The chart settings panel on the Type & Series tab, with series grouped under a note table and a data asset

The chart data picker: each file shows its columns, row count and a small line, and files without numeric columns are folded away

Axis labels and series display labels are written in LaTeX markup Added in v0.70.0 (2026-09-11). \it{C} is italic (LaTeX's own \textit{C} works too), H_2O is a subscript, cm^3 is a superscript, and commands like \theta, \lambda, \Delta, \pm and \deg become Greek letters and symbols. Escape a character with a backslash (\{) to write it literally. A command that isn't recognized is left as you typed it, so a misspelling stays visible instead of vanishing.

Italics also have a shortcut: select the text in the field and press ⌘I (Ctrl+I on Windows). Selecting a wrapped range and pressing it again removes the wrapping.

Braces work as they do in LaTeX: a single character needs none (H_2O and H_{2}O give the same figure), and anything longer is grouped, as in 10^{-3}.

Only what you type into a field is read as markup. When an axis label or display label is left empty, the column or table name that fills in appears exactly as written. Measure a column named temp_c and the legend still says temp_c — a column name is a heading for the data, not text written to be displayed. To typeset a column name, copy it into the display label field.

The markup only applies inside the figure: axis labels, the legend, and offset row names. Tooltips and the Markdown export show the plain text. For the usual typesetting, where a quantity is italic but its subscript is upright, close the italics before the subscript — \it{C}_p — while \it{C_p} italicizes the subscript too.

The table stays the source of truth: edit a cell or add a record and the chart follows. If the referenced table is deleted, the block shows "The referenced table was not found in this note" and lets you pick another one. If a series draws from a data asset that no longer exists, the block says "The referenced data asset was not found" instead.

Importing measurement data Added in v0.36.0 (2026-08-14) ​

The .csv, .txt, and .dat files instruments write can become tables in a note, preamble and trailing notes and all.

Pick Data from the / menu — the picker offers both the files already in your assets and a new one from disk. Dropping a file straight onto the editor opens the same screen.

The header row, the range to read, and the delimiter are already guessed when it opens. The original file is on the left, the resulting table on the right, so the usual interaction is to glance at both and press Import. The settings above are there for when the guess is wrong.

  • Row range — the header row and the last data row. The preamble and the trailing notes fall outside it
  • Delimiter — comma, tab, space, or any single character. For output padded with runs of spaces to line the columns up, use Treat consecutive delimiters as one

The data import screen: the original file on the left, the resulting table on the right

Lines like Device Model: ENV-MONITOR-X9 from the preamble are kept alongside the table as the conditions the data was measured under. A converter usually discards them first; in a lab note they are part of the record.

An imported table carries its source next to its name. Press it to reopen the same screen and rebuild the table with a corrected range or delimiter — the table keeps its place and its name. The file itself stays as a Data asset, so the numbers lead back to the raw output. Importing the same file twice does not add a second asset.

A long note table is cut off with a "show N more rows" button at its foot, so a note does not fill up with data; press it to see all of it. By default, though, a file becomes a data table, which has no such limit — choose Table in the note on the import screen when you want an editable table instead (warned above 200 rows, refused above 1,000).

A file does not have to become a table to be plotted — a chart can read a data asset directly (see charts above), which keeps a note free of tables that exist only to be drawn.

An imported table with its source shown next to the name, trimmed at the foot

Data tables Added in v0.62.0 (2026-09-08) ​

A measurement file with thousands of rows does not belong in the body of a note as an ordinary table: every edit would re-serialize all of it, and the editor stalls. A data table keeps the file where it is — as a Data asset — and shows it in the note through a reference. The note stores only which asset, how to read it, and the table's name. The rows are read from the asset when the note opens, and only the rows on screen are drawn, so a 2,000-row log scrolls as lightly as a short one.

The import screen asks how to insert the data: Data table (the default) or Table in the note. A note table can be edited cell by cell but gets heavy as it grows, so the screen warns above 200 rows and refuses above 1,000. Pasting a large table from a spreadsheet opens the same screen instead of dropping the rows straight into the note.

The import screen asks whether to insert a data table or a table in the note

What a data table can do:

  • Sort by a column — click a header. Only what you see changes; the asset never does.
  • Expand — the ⤢ button above the table opens it at full height, still drawing only the visible rows.
  • Feed charts and calculations — refer to it by its name, exactly like a note table.
  • Switch forms — press the source badge above the table to reopen the import screen and choose the other form. A note table that came from a file can become a data table the same way.

A data table is read-only by design: the numbers are the instrument's, and editing them by hand is exactly what a lab record should not do. To correct the data, correct the file and re-import.

Moving between the two forms Added in v0.64.0 (2026-09-08) ​

A table can change form after it is already in the note, in both directions. Open the ⠿ menu beside the block and choose:

  • Turn into a data table — the rows are written out as a CSV Data asset and the block becomes a reference to it, so the note gets light again without importing anything a second time. Above 200 rows the same action also appears as a badge on the table's caption row, which is how a long table pasted from a spreadsheet gets rescued.
  • Turn into a note table — the rows come back into the body, and the table's name and its link to the asset come back with them, so nothing is lost by going either way. Only tables of at most 1,000 rows can return: putting a longer one back would bring in the very weight a data table exists to avoid, so the entry is greyed out and says so.

Turning a table into a data table never removes anything from your library. The asset stays there, just as an image does when you delete it from a note. Going back and forth does not pile up copies either: as long as the rows still match, the same asset is used again, and a new one is written only once you have actually changed something.

The block menu of a data table, with the entry that turns it back into a table in the note

Adding a computed column ​

To add a column to a data table, write the formula in a Calculation block and send its result to the table:

  1. Write a line that reads the table, for example temp_f = table["Oven log"]["temp_c"] * 9 / 5 + 32. The name is optional — a bare expression gets one (v1 = …) the moment you press the arrow.
  2. Press the ⇥ button next to the line's result and pick the data table. Its own columns cannot be overwritten; type a name for the new column — it starts as the variable name — and press Add column.

The column appears at the right of the data table with a calculator badge; hover it to see which calculation produced it. Nothing is written to the asset or to the note's rows: the formula lives in the calculation block, and clearing the target removes the column. Charts and other calculation blocks read the new column like any other, so a converted unit or a normalized intensity is one line away.

Because a computed column is a formula rather than data, it is only visible inside the note that holds the calculation, and it goes away with it. When the result deserves to be data in its own right, press ⤓ above the table: every column, the computed ones included, is written out as a new CSV asset that records the original as the asset it came from. Added in v0.64.0 (2026-09-08)

A data table with a computed column sent from a calculation block; the badges above show the source file, the size, and the expand button

Linking notes with @ ​

Type @ anywhere in the text to open the link menu. Candidates are grouped:

GroupContains
This noteHeadings inside the current note.
Other notesYour other notes, most recent first.
AI KnowledgeKnowledge-layer notes, labeled like "🤖 Concept: …".
Document materialsMaterials from your library — PDF and Word for citing sources, and (inside a table cell) data files and images.
NewCreate a new note… — name it in a dialog, and it is created and linked in one step.

Right after @ the menu lists your most recent notes and materials; keep typing and it searches all of them, however old. When materials share a name — each sample's own XRD.txt, say — the menu shows the folder each one was imported from on a second line (or when it was added, if it has no folder), and typing part of a folder name narrows the list to that folder. A link typed inside a table remembers its row, so each row opens its own file.

Mentions are live references, not plain text: rename a note and every @mention of it updates in the notes that refer to it — even in a note you already have open in a side peek elsewhere, without reopening it. Added in v0.16.10 (2026-07-03) Copying and pasting a mention — within a note or into another one — keeps what it points to.

The @ menu grouped by other notes, AI knowledge, and create-new

Selecting multiple blocks Added in v0.86.0 (2026-10-02) ​

Drag across several blocks to select them together. You can also start the drag in the blank margin to the left or right of the text, or anywhere around the page: a selection box appears, and every block it touches is selected — handy when the selection starts or ends on an image. Drag the ⠿ handle of any selected block to move them all at once. A floating toolbar appears with Delete, Color, and Ask AI about selection, so you can clean up or question a whole passage at once. Images and other blocks without text (math, PDFs, charts) get a green outline while selected — images are also tinted — so you can see they are part of the selection before you move it.

Finding text in a note Added in v0.15.2 (2026-06-08) ​

⌘F (Ctrl+F on Windows/Linux) opens the Find in note bar. Matches are highlighted with a counter ("2/7"); Enter jumps to the next match, Shift+Enter to the previous, Match case toggles case sensitivity, and Esc closes the bar. The search also covers what a voice note block is showing — the utterances, the clean copy or the summary in its open tab — counted in page order with the rest of the note. In the Transcript tab only the utterances on screen are searched, so choose Show all first to search the whole meeting.

The find-in-note bar with a highlighted match

Inserting saved memos ​

Memo in the slash menu opens the Select memo picker with everything you have captured — quick memos (⌘⇧M, Ctrl+Shift+M on Windows/Linux — or the + that appears when you hover Memos in the sidebar's Materials section) and notes-to-self from your phone. Pick one to drop its text into the note. See Mobile for capturing on the go.

The Select memo picker

Saving ​

Graphium autosaves three seconds after you stop editing; the header shows Unsaved, Saving..., and Saved so you always know where you stand. ⌘S (Ctrl+S on Windows/Linux) saves immediately. Just opening a note never writes it — the file's last-modified time only changes when you actually change something.

Edits from the last three seconds are also written when you close a peek, switch notes, or close the desktop app's window — the app waits for the write before it closes (up to a few seconds if the storage location does not answer). If the app is ended a different way — the Dock's Quit, logging out, or shutting down on macOS; log off, shut down, or End task on Windows — it does not get a chance to write out anything typed since the last autosave. In the browser, closing or reloading the tab cannot wait for a write, so while something is still unsaved the browser asks whether you really want to leave; stay for a moment and the save finishes. Switching to another tab or leaving the page also triggers an early write of anything unsaved, so you may see more entries in History than one continuous editing session would otherwise produce.

History and versions ​

Every save is kept. The History tab in the right panel lists what changed (blocks, labels) and who changed it: human edits carry the name and email from your author profile (Settings → Storage → Share with other people → Your name), AI edits carry an AI badge and the model that made them, with entry types like Edit, Derive, AI Generate, and Template.

The history panel with a pinned version and the revision list

Version snapshots Added in v0.18.0 (2026-07-15) ​

Automatic history is fine-grained; sometimes you want to pin a moment on purpose — "the state we submitted." Press ⌘⇧S (Ctrl+Shift+S on Windows/Linux; ⌘⌥S works too, for keyboards where ⌘⇧S is taken) or click Save version at the top of the History tab.

Saved versions are listed in the same panel. Each one offers:

ActionWhat it does
OpenView the version side-by-side, marked Read-only
Fork from hereCreate a new note from this version, with lineage back to the original
RenameGive the version a meaningful name
DeleteRemove the version (the note itself is untouched)

Forking is how you explore a different direction without losing the original: the new note records where it came from, and that link shows up in the lineage graph.

Knowledge pages you've edited by hand get a version automatically, right before the AI rewrites them (topic revision, merge, cross-update, or regenerate). This only kicks in once a page has some human editing history — a page the AI generated and you've never touched isn't versioned this way, since the AI can freely regenerate it. These automatic versions show a small AI badge in the panel so you can tell them apart from ones you saved yourself, and they can be restored with one click the same way a Skill's versions can. The copies kept so that upkeep operations can be undone are a separate store, not part of this list, and they are removed after one year. Undoing through MCP also shows up in the history. When an outside AI rewrites a knowledge page through MCP, no version is made here — go back from the Operations record in Upkeep. Added in v0.79.0 (2026-09-18)

Folders ​

Under the title of every note sits a Folder button. Folder names are free-form ("battery project", "reading notes") — type to create one, or pick from folders you have used before. Made a typo? While the list is still open, a folder you just created has a pencil to fix its name, and unchecking it undoes the folder altogether. To rename or delete a folder that is already in use, use the sidebar (see below). Folders are the fastest way to slice the notes list (Filter by folder) and to color the global graph by project.

One name is reserved Added in v0.74.0 (2026-09-15): a folder named Plan (or its Japanese equivalent, "計画" — matching is not case-sensitive, and it applies to subfolders of Plan too) turns any note filed there into a Plan note, and the rows of its index table into Operation notes. Plan and Plan/anything folders don't offer Rename or Delete in the folder menu — emptying the folder (moving its notes elsewhere) removes it the same way any folder with nothing left in it does.

Added in v0.49.0 (2026-08-31) The sidebar lists your Folders too. Click one and the notes list shows only what is inside it; notes that are in no folder collect under Unfiled. New folder creates an empty folder to fill later, and the + that appears when you hover a folder creates one inside it (nesting goes one level deep).Added in v0.51.0 (2026-09-01) While a folder is open, the breadcrumb above the list reads All Notes › Sourdough › Day 7 — click any step to go back to it, or All Notes to drop the filter. New in folder starts a note already inside the folder you are looking at, and right-clicking a folder offers Rename and Delete folder.Added in v0.52.0 (2026-09-03) Drag a note by its title in the list and drop it on a folder in the sidebar. Dropping while a folder is open moves the note — it leaves the folder you are looking at and joins the one you dropped on; from All Notes there is nothing to leave, so it simply joins. Hold Cmd (Ctrl on Windows) while dropping to keep it where it is and add the new folder as well. Notes you have selected move together.

Rename a folder in place Added in v0.63.0 (2026-09-08) ​

Hover a folder in the sidebar (or select it) and a pencil appears. Click it and the name becomes an input field — Enter confirms, Esc cancels. Double-clicking the name, or pressing Enter while the folder is selected, does the same thing. The right-click Rename entry still works as before. Renaming a folder brings its subfolders along, and reaches every note, memo, and material filed under it. Folders that only hold materials (the ones that don't show up in the notes tree) get the same treatment from the pencil (or right-click) on their row in the material gallery's Folders filter.

A folder row in the sidebar, hovered to reveal the rename pencil

Deleting a folder never deletes notes

Renaming or deleting a folder takes its subfolders with it — a folder and what sits under it move together. The notes themselves are never deleted: any note that is not in another folder becomes Unfiled. To throw notes away, open the folder and delete them from the list.

One note, several folders

Unlike folders on your computer, a note can sit in more than one folder at once — think of it as a shortcut. Deleting a folder never deletes the notes inside it: any note that is not in another folder simply becomes Unfiled.

Empty-note hints ​

A brand-new note shows a quiet row of hints below the editor: "Start writing, or try one of these:" — Ask AI ("Ask AI about your note, or insert its answer"), Link a note ("Type @ inline to reference another note"), and Slash menu ("Type / in an empty line for blocks and tools"). The Ask AI chip only appears once AI is set up. The hints disappear as soon as the note has content.

Released under the Apache License 2.0.