Documents & spreadsheets

Right-click → Office → Document drops a rich-text document, and → Office → Spreadsheet drops a spreadsheet. Both come with a full editing UI — toolbar, formula bar, and the rest — mounted right on the canvas. The same Office menu also drops an event calendar.

A rich-text document and a spreadsheet, each with its full editing toolbar, mounted side by side on the board
A document and a spreadsheet, edited inline on the canvas.

On the board

Each editor is wrapped in the same chrome as code cells:

  • A draggable header (the title bar), a bottom-right resize grip, and an × to remove it.
  • It pans and zooms with the canvas like every other overlay.
  • Edits save automatically through the same as-you-go mechanism as everything else — there’s no manual save. The content is stored as the editor’s own snapshot in the board, and restored by rebuilding the workbook or document from it. See Persistence.

Import and export

Both kinds import and export entirely client-side — there’s no server involved. Each editor’s header has ⭱ import and ⭳ export buttons:

  • Spreadsheets ↔ .xlsx — import replaces the sheet’s contents; export downloads an .xlsx.
  • Documents ↔ .docx — round-trips basic formatting: bold, italic, underline, strikethrough, headings (h1–h6), and bullet / ordered lists. Tables, images, colors, and fine spacing don’t survive the round-trip.

Calendars

Right-click → Office → Calendar drops an event calendar on the board, wrapped in the same chrome (draggable header, resize grip, ×) and panning/zooming with the canvas. It ships month / week / day / agenda views — switchable from the calendar’s own toolbar, with today / prev / next — a live current-time line, and drag-and-drop.

  • Add an event — double-click a day (month view) or a time slot (week/day view) to open the event editor: title, all-day toggle, start/end date & time, category, location, description, and a repeat rule.
  • Edit / delete — click an event to reopen the editor (with a Delete button); drag or resize a one-off event to move it right on the grid.
  • Color categories — events are color-coded by category (General / Work / Personal / Important).
  • Recurrence — Daily / Weekly / Monthly / Yearly, stored as an iCalendar RRULE (recurring events are edited from the modal rather than dragged).

Events persist inline in the board and sync / undo like everything else, so they round-trip through disk export/import.

An event calendar mounted on the board in week view, with color-coded events, a current-time line, and its month/week/day/agenda toolbar
An event calendar on the canvas: month / week / day / agenda views, color categories, and recurrence.

Spreadsheets as code-cell data

Every spreadsheet has its own orange +. Click it to spawn a code cell that already reads the sheet, or drag from it onto an existing cell to link the sheet in as a data source. Linked sheets are handed to Python through an auto-injected SHEETS dict, re-materialized on every run so the kernel always sees the current contents.