Custom table (.lnd)

A Custom table (.lnd, under File → New → New note from template...) is your mini database: you define the columns at runtime — text, number, date, fixed list with colors, path, tags and password — and fill the rows like a spreadsheet, with sorting and filtering. A path field groups the rows into a tree (e.g. Home/Office).

Password cells are encrypted individually with the Passphrase and revealed on demand. Like Tasks, the bundle persists as Git-friendly text (NDJSON) — it can be versioned and merged across machines.

Column types

In text columns, opening a cell shows a floating multi-line editor: Enter inserts a line break and Ctrl+Enter confirms; the grid shows the text on a single line (with …) and the full content in the tooltip. To change a column's type, use the header menu: converting text → password encrypts the values with the Passphrase; converting password → text asks for confirmation and the PIN/Passphrase and writes the content as plain text (irreversible). Other conversions keep the values.

More types. Rating shows stars: click one to rate and click it again to clear. Duration accepts 1:30, 2h or 45min — a plain number means minutes — and the total adds up the hours. Email and Phone open your email or calling app with Ctrl+click and are flagged when the value does not have the right shape. Unique ID gives each record a number that never repeats, with an optional prefix (TSK-0007); a deleted record's number is not reused, and if two copies of the table create records at the same time, Fix repeated numbers, in the column menu, renumbers the newer ones. Created on and Modified on are calculated by LightNote from the record itself and cannot be edited. Files (count) shows how many files are in each record's folder (see Files per record, below) and cannot be edited. An older app shows these columns as text.

Formulas, default values and colors by rule. A Formula column calculates each row's value from the other columns, in the same language as the Bases — Qty * Price, if(Paid, "ok", "pending"), Due < today(); a column with a space in its name is written note["Unit price"]. The dialog shows the result on the first row as you type, and a row where the calculation does not work shows error, with the reason on hover. In ordinary columns, the Default value fills the cell of a new record, and the Trigger formula is calculated when the record is created and, if you tick columns under Recalculate when changed, again when one of them changes — that is how you keep the date the status changed; after that the cell can be edited as usual. In Display → Row colors by rule, each rule is an expression with a tone, and the first true one colors the row, before the fixed list color.

Reference. A Reference column points to a note in the workspace (the cell keeps its name, with the notes as suggestions) or to a record of another table — the ones in the same folder appear in the list, and Another table... picks any other; Show column sets what the cell displays. The cell keeps the record's identity, so renaming it in the other table updates the text here, and a record deleted there appears as (record removed), flagged. Ctrl+click opens the note or the other table, and in a formula the reference is worth the text it shows. The other columns of the referenced record are read with a dot — Qty * Product.Price, or Product["Unit price"] when the name has a space. It is a single hop: a reference the other table has is not followed, and with no record the value is empty.

Files per record. Turn on Files per record in the ⋯ menu and each record gets a files folder next to the table (Table.lnd.attachments/), also visible in the file tree. The Files button on the toolbar shows the one of the selected record, and dropping files on a row of the grid puts them in that record's folder. The folder follows the same rules as the one in Tasks: it is created with the first file, follows the table when it is renamed or moved, and deleting the table asks about it. Turning the option off only hides the panel: the files stay in the folder.

Copying, display and totals

Copying and moving several records. The grid accepts several cells at once (Shift or Ctrl+click, Ctrl+A). The context menu has Copy, Copy with header and Copy as — formatted table, Markdown table, CSV, JSON and the other formats of the other tables —, always with the stored value (the number without its display format) and with passwords left empty. With a path field, the tree becomes a column: Copy as carries each record’s full path (Home/Office) even when that column is not selected, and group rows are left out. Dragging a selection onto another group moves all of its records.

Columns, display and totals. The Columns button shows or hides each column and holds its description, which appears when you hover over the header; drag a header to change the column order. Display has the row height (short, medium or tall), Wrap text in cells and Color rows by a fixed-list column, using the options' colors. The footer shows totals: click under a column to choose sum, average, minimum, maximum, checked or unique values — only the functions that fit its type, written the way the column writes (a value's currency, a percentage's %) — and the total follows the filter. Filter conditions appear as chips below the toolbar (click to edit, × to remove), and when no record passes, the table says so and offers Clear filter. Width, sorting and the rest of the display live in a separate file inside the table (views.ndjson); an older version of the app opens the table without them.

Changes made elsewhere. If the table changes on disk while its tab is open — another window, a git pull, a sync tool —, LightNote merges both versions record by record, losing nothing, shows a notice above the table and starts the undo history over. Pasting a block of cells is a single undo step, and what you undo does not come back when merging with another machine.

The path tree

With a path column, folders come before records, in natural order (Room 2 before Room 10), and the folder row shows how many records it has and, in columns with a total in the footer, its subtotal with the same function. Each record's path is shown faintly, because the folder already says where it is; as you type it, existing folders are suggested, and Home / Room or Home\Room become Home/Room. New row with a folder selected creates the row inside it. Right-clicking a folder offers New row in this folder, New subfolder, Rename folder (rewrites the path of every record inside), Expand all, Collapse all and Delete the folder with its records; dragging a folder moves it whole into another. Each of these is a single undo step.

Views and the form

Several views and the form. The + next to the tabs creates a new view of the table — Table, Board, Gallery, List, Calendar or Timeline — which starts with the current view's settings and keeps its own from then on; right-clicking a tab renames, duplicates or deletes the view (the first one cannot be deleted). The filter applies to all of them. On the board, the columns are the options of a fixed list (or a checkbox) and dragging a card saves the value; on the calendar and the timeline, dragging changes the date (on the timeline, start and end together). In the table, Group splits the rows by a column, and dragging a row into another group saves that group's value. Double-clicking a card — or Open as form on a row's context menu — shows the whole record in a form; New record in a form, in the ⋯ menu, only creates the row when you confirm. Right-clicking a tab also changes the layout of the view. The tabs sit on their own row, with the count and the ⋯ menu; below them are the actions and the search, and in a narrow tab the buttons show only their icon, with the name in the tooltip.

Totals. The Totals view (Grist's summary table) splits the records by a column, under Group by, and shows how many there are in each group and the total of each numeric column — the sum, the average or the function chosen in the table footer —, with a Total row at the end. It follows the filter and changes as you edit. Double-clicking a group goes back to the table showing only its records, with a tag above the grid that you remove with the ×.

Edit with AI

Edit with AI…, on the table's toolbar, takes a request in plain words — fill in the Status of the empty rows, create the Priority column with High, Medium and Low, delete the repeated rows — and the AI proposes the changes: creating, filling in and deleting rows; creating, renaming, adjusting the options of or deleting columns. Nothing is saved before Apply: the list shows each change with the value before and after, and whatever you untick is left out. Everything applied is one undo step (Ctrl+Z).

What goes to the AI. The columns and the rows — only the selected ones, with Only the selected rows —, up to 200 rows; anything beyond that is stated on screen. The Password column is never sent, and See what will be sent shows the exact text before sending. The AI does not change Formula, Unique ID, Created on, Modified on or Reference, and only creates columns of simple types. A change that does not fit the table — a value outside the options, a row the AI did not receive — appears as Refused, with the reason; before that the app asks the AI for a correction, once. To connect an AI, see Connecting a model.