MojoPad

Database Views

Your pages already carry structure — tags, types, and your own typed properties (Status, Rating, Author, a due date…). A database view turns that structure into a live table you can filter, sort, and group — a spreadsheet whose rows are your pages. Build one once and it stays current: add a page that fits, change a property, and the view updates itself.

Act on what a view found

A view is a question, and the answer is a set of pages — so it offers ⌖ Select these N, which hands its rows straight to the Pages palette with its bulk bar open. From there any stamp or bulk edit applies to exactly the pages the view found. Describe the set, select it, act on it.

Make one

Run New Database View… from the command palette (⇧⌘P), or View ▸ Database Views… and choose + New. Give it a name and a table opens showing every page, with a few starter columns. From there you shape it with the toolbar across the top — every change saves as you go, and the view is yours to reopen any time from Database Views….

Who is answering

The status bar carries a small mark saying where questions go: ⌂ On this Mac or ⌂ and the name of a local model, ↗ Your own agent, or ↗ and the name you gave a provider you set up. Your own agent is marked as leaving because it is: it runs on this Mac and sends what it reads on to the model it uses. It is quiet while the work stays on this Mac and plain when it leaves, it is gone entirely when AI is switched off, and clicking it opens the pane where you change it.

It names what answers by default. A property that pins its own model still uses that one — and the value it writes carries its ✦, which on hover says which model wrote it and when. The mark is the standing state; the ✦ is the record.

Asking a question with brackets

The row of chips under the title is the question the view is asking, and it reads left to right. It begins with a word — All of or Any of — and that word is a button: click it and the view switches between wanting every condition and wanting any one of them.

Brackets let you have both. Press ( ) and a bracket appears with its own All of/Any of word and its own + for adding conditions inside it. So papers from 2025 or 2026 that I have not read is: All of — Status is not Read — and a bracket saying Any of — Year is 2025, Year is 2026. A new bracket starts on the opposite word to the one it sits in, because a bracket that repeats its parent asks the same question with more punctuation.

Brackets nest a few deep, which is as far as a question stays readable; past that, the answer is usually a second view rather than more brackets. A bracket you have made but not filled in yet asks nothing at all, so the table holds still while you build it.

Shape it

  • Filter — + Filter, pick a column, a condition (is, contains, greater than, is empty…), and a value. Each shows as a chip you can remove with its ✕, and the All of / Any of words above say how they combine. “Books I’m still reading” is Type/tag is Book plus Status is Reading.
  • Sort — click any column header to sort by it; click again to reverse. (The Sort toolbar button does the same and shows the current order.) Pages the sort can't tell apart stay in your wiki's page order, below.
  • Group — the Group button clusters rows under a heading for any column, each with a count: group your books by Status and see how many are Reading, Finished, To read.
  • Columns — the Columns button adds or removes columns. Choose from built-ins (Type, Tags, Created, Modified, word count, open/total tasks) or any of your properties.

With no sort, a view lists its pages in your wiki's page order — the order the Pages panel lists them in, from top to bottom, which is the order Go ▸ Next Page walks. With your folders showing, that is the pages in your folders in the folders' order, then the pages below the folders in the order you chose with the ⇅ button, each pinned page where it is listed below the pins (or first, if the panel lists it only among them). Manual and Flat set the folders aside, so there it is your pinned pages, then the rest in that order. A page the panel isn't listing, because it is filed only in folders the panel isn't focused on, comes after the rest, in the ⇅ order. Typing in the panel's filter box doesn't change it. A view that is already open takes up a new order when you open it again or change it.

The first column is Page, and it is the one you click to open a row. It is called that rather than Title because Title is also a property — the work's own title, which a source lookup fills — and the two would otherwise sit side by side under the same heading meaning different things. Where a page is named by a citation identifier, this column shows the title anyway, and sorting and grouping follow what you can see rather than the identifier underneath. A column for a property that holds pages — Cites, say — names each paper in it the same way, by its title, and sorts by what it shows. A filter on that column finds a paper by its title or by its name, so a view you saved when the column showed names still keeps and leaves out the same rows.

Click any row to open that page. Close the view with ✕ — it’s saved, and reopening it shows the current state of your wiki, not a snapshot.

Computed columns — a formula of your own

In the Columns picker, choose ƒ New computed column… to add a column whose value is calculated from the others. Reference any column by its name in [brackets]:

  • daysBetween([Modified], today()) — how long since each page was touched.
  • [Rating] * 2 — arithmetic on a number property ( + − × ÷ all work).
  • if([Rating] > 4, 'great', 'fine') — conditions; also [Rating] > 4 ? 'great' : 'fine'.
  • if(empty([Rating]), 'unrated', concat([Rating], ' stars')) — handle blanks, build text.

The functions: today(), daysBetween(a, b), if(cond, a, b), round(x, digits), concat(…), contains(text, part), empty(x), and len(text). Formulas are checked as you create them — a typo is caught with a message, and a formula that references a column that doesn't exist shows a small #ref in just that cell, never breaking the row. Computed columns sort, group, and filter like any other (numbers as numbers), and they wear an ƒ in their header. A formula can't reference another formula, so they can never chase each other in circles.

Three ways to draw it: Table, Board and Gallery

The switcher in the toolbar redraws the same view three ways — the same pages, the same question:

  • Table — the spreadsheet: sortable columns, group headers, everything above.
  • Board — lanes of cards, one lane for each answer of a property, for pages that move through stages. Dragging a card to another lane changes the page's answer. It has its own section below.
  • Gallery — a wall of cards, one per page: the page's cover image when it has one, its icon and name, a slice of what's written on it, and its first few column values as small chips. Clicking a card opens it over the wall to read, exactly as in The Gallery. Grouping applies here too, so “my books, grouped by status” reads as shelves.

The layout is saved with the view — a board stays a board next time you open it, with its lanes and the order you put its cards in.

The Board: pages that move through stages

Some pages are on their way somewhere. A book goes from To read to Reading to Finished; a paper from Submitted to Under review to Accepted; a chapter from Idea to Draft to Done. The Board lays those pages out as the stages themselves, so you see at a glance where everything stands, and moving one along is one drag.

  • A reading pile. A view of your books with lanes from Status: what is waiting, what you are in the middle of, what you have finished. Finishing a book is dragging its card one lane to the right.
  • Papers under review. Lanes from a Stage property, and the paper that just came back from the journal goes from Under review to Revise without opening it.
  • A writing pipeline. Your chapters, or your blog posts, in lanes from Idea to Published — with the cards in each lane in the order you mean to work on them.
  • Triage. Everything you clipped this month, in lanes from a Priority; the ones with no priority yet wait in the last lane until you drag them somewhere.

The cards are the pages themselves, and nothing about them lives anywhere but on the pages: the lane a card is in is the page's answer, the same one its properties at the top of the page show, and that a table, a filter or a smart folder reads.

Your first board in a minute

  1. Open a database view (View ▸ Database Views…) and press Board in the toolbar's switcher.
  2. The lanes are the answers of a property that holds one answer from a list. If the wiki has a property called Status, the board starts on it; otherwise on the first such property it has. Lanes in the toolbar picks another. A wiki with none yet shows Make a property for the lanes…: give it a name and its answers, in the order the lanes should go — To read, Reading, Finished — and the board appears.
  3. Drag a card into another lane. The page now holds that answer — open it and its properties say so. The pill at the bottom says what moved, with Undo.
  4. Press a card without dragging it to read the page over the board; ‹ and › walk the cards of its lane, and Open page opens it properly.

How the lanes are made

  • One lane for each answer, in the order the property lists them, holding cards or not — an empty lane is where a card goes to be given that answer. Each lane wears a color of its own, by its place in the list, and counts its cards.
  • The last lane holds the pages with no answer — No Status, named for the property. Drag a card there to take its answer off.
  • A card stands in the lane of the answer a table shows for its page — its own, or the one it takes from its Kind. That holds for a Kind with its own password too: while the Kind is open, the pages that take their answer from it stand in the lane of its answer; when it locks, they go to the last lane. A page takes its Kind's answer only when it has none of its own, and a locked Kind gives its pages nothing.
  • A value that isn't one of the answers gets a lane of its own, drawn with a dashed edge and marked Not one of Status's answers — a value typed before the answers were set, for instance. No page is ever filed under an answer it doesn't hold. Drag its cards into real lanes, or rename the lane to one of the answers to move them all at once. Cards can't be dropped into such a lane.
  • Which properties can make lanes: a property with a fixed list of answers that holds one of them. One that holds several answers at once can't — a page would stand in several lanes, and a drag out of one would mean something different from a drag out of another. In the Properties palette, a property's answers are the line under its name, with commas between them; add one there and its lane appears.
  • The view's question still decides which pages are there. Filters work exactly as in the table; the board draws what they find. Group gives way to Lanes on a board, since the lanes are the grouping. A view that asks about the lanes' own property — everything whose Status is not Finished, say — still draws every answer's lane, and a card you move into a lane the question leaves out leaves the board; the pill at the bottom says so, with Undo.
  • What a card shows: the page's title; the line from the Writing View saying what it is about, or else how the page begins; and up to three of the view's columns as small chips — Columns chooses them, and the lanes' own property is left off, since the lane already says it.

The order of the cards

The Sort button decides. Set to Your own order (the first choice in its list), the cards stay where you put them: drag one up or down its lane, or into another lane at the place you want it, and it stays there. Until you place them, a lane's cards are in your wiki's page order — the order the Pages panel lists the pages in (see Shape it, above). A card that arrives in a lane any other way — given that answer on its own page, or new — comes after the cards you have placed by hand, among the rest in page order.

Sorted by a column — Modified, Year, Rating — every lane keeps that order, a card dragged into a lane lands where the sort puts it, and dragging one within its lane is refused with a note saying so. Choose Sort ▸ Your own order to arrange them by hand again; the order you made before is still there.

Moving cards from the keyboard

  • Press Tab to reach a card (clicking one opens it to read, and there the arrow keys walk the pages of its lane instead). On the board the arrow keys walk the cards: ↑ and ↓ up and down a lane, ← and → across to the lane beside.
  • ⌥← and ⌥→ move the card to the lane before or after, skipping a lane of a value that isn't an answer. It lands at the top of its new lane — or, in a sorted board, where the sort puts it — the status line says where it went, and the keyboard stays on it. The line above the board shows these keys.
  • ⌥↑ and ⌥↓ move it up or down its lane.
  • Return or Space opens it to read. On a lane's name, Return renames it.
  • While you drag with the mouse, Esc puts the card back where it was — and so does letting go of it anywhere off the board.

Renaming an answer everywhere

Double-click a lane's name (or press Return on it) and give it a new one. Before anything changes you are told how many cards will move — the pages that hold the answer, and the pages that take it from a Kind that holds it — and then it is renamed:

  • on every page that holds it as its own — in Recently Deleted too, so a page you bring back later doesn't come back holding a name the list no longer has — and on a Kind that holds it, so the pages that take their answer from that Kind follow;
  • in the property's list of answers;
  • in every view whose filters ask for it by name (Status is Reading), in every smart folder made from it, and in every stamp that sets it;
  • and in the order you arranged that lane in, on every board.

One Undo puts all of it back — except a page you have changed since, which keeps your change, and a page with its own password that has locked since, which can't be read until you open it and so keeps the new name; the status line says how many. Rename an answer to one the list already has, and the two lanes become one: Merge instead of Rename. An answer can't hold a comma, because the property keeps its answers as a list with commas between them.

What a board won't move — and what it says instead

A board refuses a move before anything changes, and says why on the status line — and, while you are still dragging, on the lane itself, under the card:

  • A page with its own password is never on a board, as it is never in any database view: nothing a view asks of a page can be asked of one whose properties its password covers. If a page gets a password, or locks again, while its board is open, its card leaves the board at once — and a board inside a page — as it leaves every view. Open the page to change it.
  • A page that takes its answer from its Kind — a page of Kind: Paper showing the Kind's To read — says takes its Status from Kind: Paper — change it there. Change it on the Kind and every page of that Kind moves with it; or give the page an answer of its own in its properties, and it can be moved like any other. Moving the Kind's own card says how many pages moved with it.
  • While the wiki is locked for inactivity, nothing on the board moves until you unlock it.
  • A lane of a value that isn't an answer takes no cards; the note says how to make it one.
  • In a second window on the same wiki, moving a card to another lane works as any page edit does, but the order you arrange cards in, and renaming an answer, belong to the wiki's arrangement, which is kept in the window you opened the wiki in — the status line says so.
  • In a reference card, a board you open from a page shows its cards, but nothing on it can be moved or renamed, because a card keeps no changes to your pages' properties; the line above the board says so. Open the board in the wiki's own window to move its cards or rename its answers. The rest of the board follows the card's pen, as Page Versions does there: while the card is set to reading, its filters, sort, columns and lanes, its name and whether it is drawn as a table, a board or a gallery can't be changed, and pressing one says to switch the card to editing with the ✎ in its header. Switched to editing, they change what the card shows, and none of it is kept in the wiki. A new property for the lanes can't be made in a card, set to editing or not, because a card keeps no changes to your wiki's properties; pressing for one says so. Open the board in the wiki's own window to make one. A table or a gallery opened in a card follows the same pen.
  • While the “changed on another device” bar is up, nothing moves until you choose Reload or Keep mine.

Big boards

Each lane shows its first forty cards, with Show more at the bottom for the next forty, and each lane scrolls on its own while the board scrolls sideways — so a view of thousands of pages opens about as quickly as a short one, and a long lane never pushes the others off the screen. Dragging a card near a lane's top or bottom, or the board's sides, scrolls it.

A board of many lanes shows fewer cards in each to begin with, so the whole board is still a few screens of cards. And if the pages hold more than a dozen values that aren't answers — a property changed from words to a list of answers can leave hundreds — the first dozen get lanes of their own and the rest are named and counted in one lane after them. Switch to Table, sort by the property, and give those pages one of its answers.

A board inside a page shows at most eight lanes, and says how many more there are; its title, or that line, opens the full board.

Put a view inside a page

A view doesn’t have to live in its own window. Type / on any page and choose Database view — the view you pick lands in the page as a compact live table. It shows the first dozen rows (with an …and N more link when there are more), refreshes every time the page renders, and clicking its title opens the full view for filtering and shaping. On Markdown pages it round-trips as plain text — ![[view:Reading list]] — the same syntax page embeds use, so you can also just type it. A project page that opens with its own live task table, a reading page headed by your shelf: the page becomes a dashboard.

A view drawn as a board shows as a board in the page: its lanes side by side, each with its count and its first few cards by name (and how many more). Click a card — or reach it with Tab and press Return — to open the page. Cards are moved on the full board, which the embed's title opens — a page you are writing in is no place for a drag to change something by accident.

Looking for lanes of cards that aren't pages? That is the Kanban Board — a page of its own, with its own chapter, whose cards are notes on the board. For tasks, the Tasks board groups by area, project, label or status and re-files what you drag. A view's Board is for the pages themselves.

Format, Page type, Kind — which is which

Three columns can be read as “type”, and reaching for the wrong one is the commonest way a view comes back empty. They answer three different questions:

  • Format — what the page is: Formatted text, Markdown, Canvas, File. You never set it; the page has it by being what it is.
  • Page type — the colored label you assign yourself, from the type pill.
  • Kind — the shape a page belongs to, and the only one of the three that carries properties. If the thing you are thinking of has fields on it, it is a Kind.

So a Kind called Summary with three properties on it is found by Kind contains Summary, and by neither of the others. If you do pick the wrong one, the view says so rather than showing you an empty table: a filter on a column no page in the wiki fills can never match anything, and the view tells you that — and where what you typed is a Kind, it names the column that would have worked.

What the columns can show

Beyond your own properties, every view can show a page’s tags, its Page type (the colored category from the type pill — drawn as its colored chip, and the natural way to build “all my Books”), its Kind — the shape it belongs to, which is usually the one a view wants, since a kind is what makes a set of pages answer the same questions (a page inside a chain of kinds shows the nearest one) — its Format, when it was created or last modified, its word count, and its task counts (open and total, counted from the page’s checkboxes). A word count counts languages the way they are written: scripts that put spaces between words are counted in words, and scripts that do not — Japanese, Chinese, Korean — are counted in characters, with the two added together. That is also the arithmetic those languages’ own publishers use, where a length limit is quoted in characters rather than in words. Numeric columns — ratings, counts — sort and compare as numbers, so greater than and less than filters do what you’d expect; pages missing a value sort to the end rather than pretending to be zero.

Date columns — Created, Modified, and any property you made a date — take a date or a period, written the same way the search bar takes them: 2026-01-01, july, 2026-q3, week, today. They compare as periods rather than as instants, which is what makes them read the way you say them: greater than 2026 means 2027 onward, not “after the first of January”, and is july means any day in July. If a value can’t be read as a date it is refused when you type it, and any older filter that can’t be read says so on its chip rather than quietly matching nothing.