Workflows/Find and revisit
- Find and revisit
- Three moves cover most of finding things: jump to what you remember, follow the trail of links, and keep a search that's worth keeping. No syntax is needed up front. The exact rules live in Reference/Pages, links, references, and search.
- "I saw it somewhere" — jump with Ctrl+K
- 1. Press Ctrl+K (Cmd on Mac) and type any words from the title or the text you remember. The switcher matches page titles and the visible text of blocks — not hidden properties or ids.
- 2. Too many hits? Narrow with the Search syntax forms listed in the switcher footer:
-draftexcludes a word,ORoffers alternatives, quotes pin an exact phrase,/…/is a case-sensitive regular expression. - 3. Enter opens the highlighted result; Shift+Enter opens it in the right sidebar beside your current page; Ctrl/Cmd+Enter or a middle-click opens it in a background tab without closing the search.
- 4. Sure it's on the open page? Ctrl+Shift+K searches only that page's blocks, including the ones folded away, and Ctrl+F is the slim in-page find bar with match counts.
- What you should see: Tine jumps to the page or block. Exact title matches lead the list; over time Tine may prefer a result you deliberately picked before, but only among equally strong matches — Settings → Editor → Learn Ctrl+K choices resets or disables that.
- Follow the trail: links, tags, and references
- 1. Click any
[[link]]or#tagto open its page. A dimmed, dotted-underlined link isn't broken — opening it creates the page. While editing, Ctrl+O follows the link at the caret and Ctrl+Shift+O opens it in the right sidebar. - 2. On the page you reach, scroll to Linked References: every block that points here — busy pages group them by source — with a chip filter to narrow to blocks that also mention something else. Open Unlinked References to catch plain-text mentions you never linked.
- 3. Need several references outside Tine? Use the copy/export button on Linked References or Unlinked References. Every visible entry starts selected; uncheck a subset, then use the ordinary Text / OPML / HTML export choices. Linked References honors the text and chip filters already applied.
- 4. Found a line worth quoting in your own note? Edit the note, type
((, and search the line's text to insert a block reference — a live copy that updates whenever the original changes. - What you should see: the reference renders as link-styled text with the source's current words, and the source block gains a small reference-count badge that lists its referrers.
- Keep what matters close: Favorites
- 1. Favorite a page from its title menu. It appears under Favorites in the left sidebar and remains in Logseq's ordinary flat
config.edn :favoriteslist. - 2. Choose + New group, type a plain-text name, and drag a favorite onto it. Drag right to nest under the preceding row, left to lift out, or vertically to reorder without changing depth. Groups and favorites can both contain children. In the left sidebar the whole row is the link, so a short name is still an easy target — a row is reordered by dragging it, and a drag only has to move a few pixels to stop counting as a click. In the right sidebar, where items are parked pages rather than a navigation list, only the title itself opens the page and the rest of the row is there to grab.
- 3. Collapse any row that has children. Delete a group when you no longer need the label: what it held moves up one level and stays favorited.
- 4. Prefer the keyboard, or need to resolve a sync edit? Open the arrangement page Tine created. A bullet that is exactly one
[[page link]]is a favorite; any other bullet is a label. Editing, nesting, adding, or removing those bullets updates the sidebar immediately. - What you should see: the richer tree follows page renames and syncs as an ordinary graph page, while Logseq continues to read the same flat favorites membership. Tine does not create the arrangement page until you make a group or nest a row.
- Keep the search: make a search tab
- 1. From any Ctrl+K search, press Open search tab in the footer. The whole search becomes its own tab with its own search box — nothing is written to your graph yet, and the tab comes back after a restart.
- 2. Refine it there: switch Search / List / Table / Board freely — that changes only how results are shown, never which blocks matched. Open Filters / Advanced for fields and date ranges, or Edit as visual query to edit the conditions one row at a time; Explain query describes what Tine understood.
- 3. A text search answers two questions at once, so the results arrive in two sections: Pages and Blocks, in that order, each with its own Display pages / Display blocks button. Set the pages as a table of their own properties and leave the blocks as a list if that is what you want — the two are independent, and neither choice changes which pages or blocks matched. A section with nothing in it says so and keeps its button, so you can always change what it selects.
- 4. Page matches beside the Pages section decides which pages count as matches at all: Names and aliases (the default), Page content — a page counts when one of its own blocks matches — or Both. It changes page membership only; the Blocks section still lists the blocks that matched, whichever you pick.
- 5. Worth keeping? Type a name into Name this search to save it as a page and press Save page. Everything the two sections were showing is saved with it, so reopening the page reopens the same search, not a plainer one.
- 6. What you should see: the tab becomes an ordinary page in your graph holding one query block. You can link to it, favorite it, and its results refresh themselves; an existing page with the same name is never overwritten.
- Try it: find every mention of one page
- 1. Text search finds visible words. A page query asks a different question: "which blocks connect to Project/Roadmap?" — written as the page's name inside a query, like this live example:
- Query 7
- Project / Roadmap
- This page lives in the Project namespace, and it doubles as the target for the reference and the embed over on Welcome to Tine.
- Tine's saves are format-preserving, so you can always switch back to Logseq — nothing here is one-way.
- See the little count badge on the bullet above? That's how many blocks reference it — click the badge to see them.
- A few example tasks
- DOING Write my first real note in Tine
- TODO Set up the quick-capture hotkey — see Features/Quick capture
- TODO Open my own Logseq graph and look around
- A name with slashes, like Project/Roadmap, is a namespace: it nests under
Projectin the sidebar's collapsible namespace tree, and a namespaced page gains an automatic Hierarchy section with the breadcrumb paths of its descendant pages. - Agreed to move the planning notes into one page, Project/Roadmap
- Project/Roadmap — try a few example tasks for your first steps.
- 1. Text search finds visible words. A page query asks a different question: "which blocks connect to Project/Roadmap?" — written as the page's name inside a query, like this live example:
- 2. What you should see in a copied Guide or the public demo: the Roadmap outline itself (a block always counts its own page, and a nested bullet counts whatever its parents mention), the bullets elsewhere in the Guide that link there — Welcome to Tine has one — and this numbered bullet, which links too. In this read-only Guide the same block runs against your own graph instead, so it lists your pages' mentions — often nothing yet; it comes alive after you copy the Guide into your graph.
- Give pages and blocks their own settings
- 1. The two sections keep their settings in the block's own properties, so a saved query reopens the way you left it. The Pages half is
tine.page-*, the Blocks half istine.block-*, andtine.page-match-scopeholds the Page matches choice. Here is one written out: - Query 14
- Namespaces: name a page
Project/Roadmapand it nests underProjectin the sidebar. This page lives underFeatures. - Project / Roadmap
- This page lives in the Project namespace, and it doubles as the target for the reference and the embed over on Welcome to Tine.
- Tine's saves are format-preserving, so you can always switch back to Logseq — nothing here is one-way.
- See the little count badge on the bullet above? That's how many blocks reference it — click the badge to see them.
- A name with slashes, like Project/Roadmap, is a namespace: it nests under
Projectin the sidebar's collapsible namespace tree, and a namespaced page gains an automatic Hierarchy section with the breadcrumb paths of its descendant pages. - Agreed to move the planning notes into one page, Project/Roadmap
- Below the menu: Journals, then fold-up Favorites, Recent, All pages, and the Namespaces tree, where
Project/Roadmapnests underProject. Favorites and Recent remember per graph whether you left them open or folded. - Project/Roadmap — try a few example tasks for your first steps.
- Every bullet has a hidden id, so you can point at one specific bullet from anywhere. This is a live reference to a bullet over on the Roadmap: Tine's saves are format-preserving, so you can always switch back to Logseq — nothing here is one-way.
- 1. Text search finds visible words. A page query asks a different question: "which blocks connect to Project/Roadmap?" — written as the page's name inside a query, like this live example:
- Query 7
- Project / Roadmap
- This page lives in the Project namespace, and it doubles as the target for the reference and the embed over on Welcome to Tine.
- Tine's saves are format-preserving, so you can always switch back to Logseq — nothing here is one-way.
- See the little count badge on the bullet above? That's how many blocks reference it — click the badge to see them.
- A few example tasks
- DOING Write my first real note in Tine
- TODO Set up the quick-capture hotkey — see Features/Quick capture
- TODO Open my own Logseq graph and look around
- A name with slashes, like Project/Roadmap, is a namespace: it nests under
Projectin the sidebar's collapsible namespace tree, and a namespaced page gains an automatic Hierarchy section with the breadcrumb paths of its descendant pages. - Agreed to move the planning notes into one page, Project/Roadmap
- Project/Roadmap — try a few example tasks for your first steps.
- 1. Text search finds visible words. A page query asks a different question: "which blocks connect to Project/Roadmap?" — written as the page's name inside a query, like this live example:
- 2. What you should see in a copied Guide or the public demo: the Roadmap outline itself (a block always counts its own page, and a nested bullet counts whatever its parents mention), the bullets elsewhere in the Guide that link there — Welcome to Tine has one — and this numbered bullet, which links too. In this read-only Guide the same block runs against your own graph instead, so it lists your pages' mentions — often nothing yet; it comes alive after you copy the Guide into your graph.
- Query 14
- Namespaces: name a page
Project/Roadmapand it nests underProjectin the sidebar. This page lives underFeatures. - Project / Roadmap
- This page lives in the Project namespace, and it doubles as the target for the reference and the embed over on Welcome to Tine.
- Tine's saves are format-preserving, so you can always switch back to Logseq — nothing here is one-way.
- See the little count badge on the bullet above? That's how many blocks reference it — click the badge to see them.
- A name with slashes, like Project/Roadmap, is a namespace: it nests under
Projectin the sidebar's collapsible namespace tree, and a namespaced page gains an automatic Hierarchy section with the breadcrumb paths of its descendant pages. - Agreed to move the planning notes into one page, Project/Roadmap
- Below the menu: Journals, then fold-up Favorites, Recent, All pages, and the Namespaces tree, where
Project/Roadmapnests underProject. Favorites and Recent remember per graph whether you left them open or folded. - Project/Roadmap — try a few example tasks for your first steps.
- Every bullet has a hidden id, so you can point at one specific bullet from anywhere. This is a live reference to a bullet over on the Roadmap: Tine's saves are format-preserving, so you can always switch back to Logseq — nothing here is one-way.
- 1. Text search finds visible words. A page query asks a different question: "which blocks connect to Project/Roadmap?" — written as the page's name inside a query, like this live example:
- Query 7
- Project / Roadmap
- This page lives in the Project namespace, and it doubles as the target for the reference and the embed over on Welcome to Tine.
- Tine's saves are format-preserving, so you can always switch back to Logseq — nothing here is one-way.
- See the little count badge on the bullet above? That's how many blocks reference it — click the badge to see them.
- A few example tasks
- DOING Write my first real note in Tine
- TODO Set up the quick-capture hotkey — see Features/Quick capture
- TODO Open my own Logseq graph and look around
- A name with slashes, like Project/Roadmap, is a namespace: it nests under
Projectin the sidebar's collapsible namespace tree, and a namespaced page gains an automatic Hierarchy section with the breadcrumb paths of its descendant pages. - Agreed to move the planning notes into one page, Project/Roadmap
- Project/Roadmap — try a few example tasks for your first steps.
- 1. Text search finds visible words. A page query asks a different question: "which blocks connect to Project/Roadmap?" — written as the page's name inside a query, like this live example:
- 2. What you should see in a copied Guide or the public demo: the Roadmap outline itself (a block always counts its own page, and a nested bullet counts whatever its parents mention), the bullets elsewhere in the Guide that link there — Welcome to Tine has one — and this numbered bullet, which links too. In this read-only Guide the same block runs against your own graph instead, so it lists your pages' mentions — often nothing yet; it comes alive after you copy the Guide into your graph.
- Query 14
- Namespaces: name a page
Project/Roadmapand it nests underProjectin the sidebar. This page lives underFeatures. - Project / Roadmap
- This page lives in the Project namespace, and it doubles as the target for the reference and the embed over on Welcome to Tine.
- Tine's saves are format-preserving, so you can always switch back to Logseq — nothing here is one-way.
- See the little count badge on the bullet above? That's how many blocks reference it — click the badge to see them.
- A name with slashes, like Project/Roadmap, is a namespace: it nests under
Projectin the sidebar's collapsible namespace tree, and a namespaced page gains an automatic Hierarchy section with the breadcrumb paths of its descendant pages. - Agreed to move the planning notes into one page, Project/Roadmap
- Below the menu: Journals, then fold-up Favorites, Recent, All pages, and the Namespaces tree, where
Project/Roadmapnests underProject. Favorites and Recent remember per graph whether you left them open or folded. - Project/Roadmap — try a few example tasks for your first steps.
- Every bullet has a hidden id, so you can point at one specific bullet from anywhere. This is a live reference to a bullet over on the Roadmap: Tine's saves are format-preserving, so you can always switch back to Logseq — nothing here is one-way.
- 1. Text search finds visible words. A page query asks a different question: "which blocks connect to Project/Roadmap?" — written as the page's name inside a query, like this live example:
- Query 7
- Project / Roadmap
- This page lives in the Project namespace, and it doubles as the target for the reference and the embed over on Welcome to Tine.
- Tine's saves are format-preserving, so you can always switch back to Logseq — nothing here is one-way.
- See the little count badge on the bullet above? That's how many blocks reference it — click the badge to see them.
- A few example tasks
- DOING Write my first real note in Tine
- TODO Set up the quick-capture hotkey — see Features/Quick capture
- TODO Open my own Logseq graph and look around
- A name with slashes, like Project/Roadmap, is a namespace: it nests under
Projectin the sidebar's collapsible namespace tree, and a namespaced page gains an automatic Hierarchy section with the breadcrumb paths of its descendant pages. - Agreed to move the planning notes into one page, Project/Roadmap
- Project/Roadmap — try a few example tasks for your first steps.
- 1. Text search finds visible words. A page query asks a different question: "which blocks connect to Project/Roadmap?" — written as the page's name inside a query, like this live example:
- 2. What you should see in a copied Guide or the public demo: the Roadmap outline itself (a block always counts its own page, and a nested bullet counts whatever its parents mention), the bullets elsewhere in the Guide that link there — Welcome to Tine has one — and this numbered bullet, which links too. In this read-only Guide the same block runs against your own graph instead, so it lists your pages' mentions — often nothing yet; it comes alive after you copy the Guide into your graph.
- Query 14
- Namespaces: name a page
Project/Roadmapand it nests underProjectin the sidebar. This page lives underFeatures. - Project / Roadmap
- This page lives in the Project namespace, and it doubles as the target for the reference and the embed over on Welcome to Tine.
- Tine's saves are format-preserving, so you can always switch back to Logseq — nothing here is one-way.
- See the little count badge on the bullet above? That's how many blocks reference it — click the badge to see them.
- A name with slashes, like Project/Roadmap, is a namespace: it nests under
Projectin the sidebar's collapsible namespace tree, and a namespaced page gains an automatic Hierarchy section with the breadcrumb paths of its descendant pages. - Agreed to move the planning notes into one page, Project/Roadmap
- Below the menu: Journals, then fold-up Favorites, Recent, All pages, and the Namespaces tree, where
Project/Roadmapnests underProject. Favorites and Recent remember per graph whether you left them open or folded. - Project/Roadmap — try a few example tasks for your first steps.
- Every bullet has a hidden id, so you can point at one specific bullet from anywhere. This is a live reference to a bullet over on the Roadmap: Tine's saves are format-preserving, so you can always switch back to Logseq — nothing here is one-way.
- 1. Text search finds visible words. A page query asks a different question: "which blocks connect to Project/Roadmap?" — written as the page's name inside a query, like this live example:
- {{query …}}
- 2. What you should see in a copied Guide or the public demo: the Roadmap outline itself (a block always counts its own page, and a nested bullet counts whatever its parents mention), the bullets elsewhere in the Guide that link there — Welcome to Tine has one — and this numbered bullet, which links too. In this read-only Guide the same block runs against your own graph instead, so it lists your pages' mentions — often nothing yet; it comes alive after you copy the Guide into your graph.
- {{query …}}tine.page-view:: tabletine.page-display:: 1tine.page-columns:: statustine.block-display:: 1tine.page-match-scope:: both
- 1. A query block does not show you a language. At rest it is one sentence — Blocks where task: TODO and page: Project/Roadmap — with the number of results beside it. Read it and you know what the block selects.
@block and task = 'TODO' and [[Project/Roadmap]]
tine.page-view:: tabletine.page-display:: 1tine.page-columns:: statustine.block-display:: 1tine.page-match-scope:: both - 1. A query block does not show you a language. At rest it is one sentence — Blocks where task: TODO and page: Project/Roadmap — with the number of results beside it. Read it and you know what the block selects.
@block and task = 'TODO' and [[Project/Roadmap]]
tine.page-view:: tabletine.page-display:: 1tine.page-columns:: statustine.block-display:: 1tine.page-match-scope:: both - 1. A query block does not show you a language. At rest it is one sentence — Blocks where task: TODO and page: Project/Roadmap — with the number of results beside it. Read it and you know what the block selects.
@block and task = 'TODO' and [[Project/Roadmap]]
tine.page-view:: tabletine.page-display:: 1tine.page-columns:: statustine.block-display:: 1tine.page-match-scope:: both - 1. A query block does not show you a language. At rest it is one sentence — Blocks where task: TODO and page: Project/Roadmap — with the number of results beside it. Read it and you know what the block selects.
@block and task = 'TODO' and [[Project/Roadmap]]
tine.page-view:: tabletine.page-display:: 1tine.page-columns:: statustine.block-display:: 1tine.page-match-scope:: both - 2.
tine.page-display:: 1is the marker that says "this section has its own settings". Without the marker the section simply follows the query's own settings — that is Use inherited settings. With the marker and nothing else, the section shows nothing extra — that is Clear settings. They are different requests, so they are different buttons. - 3. The block above therefore reads: pages as a table with a
statuscolumn, blocks with no extra settings of their own, and a page counts as a match by its name or by its content. Change any of it from the section's own Display button; nothing you change in one section touches the other, the query text, or atine.*property Tine does not recognize. - What you should see: the Pages section draws a table whose columns are the pages' own properties, the Blocks section stays an ordinary list, and both refresh together from one read — they can never describe two different moments of your graph.
- Read a query, then edit it
- To insert a query, type /query and choose Query. It opens the query sheet with the field chooser ready.
- Queries order all matches before taking a sample. Without an explicit sort, the sample now follows the complete default page/document order, so an existing sampled query may show different rows.
- Statistics describe the complete sample, including rows hidden by the presentation's reveal limit. The summary and table footer use the same returned statistics. Unavailable with a reason means the requested number is undefined, empty, non-numeric or non-finite; it does not mean zero.
- If exact statistics cannot fit, Tine says Exact query statistics exceed the available memory limit. Narrow the query or remove grouping or aggregates. No partial total is shown. The existing bridge refusal for an oversized result still applies.
- Formula columns can still group visual rows, but query-wide formula breakdowns are deferred: Exact statistics by formula are not supported yet. Overall statistics are shown. Ordinary-field overall statistics remain exact.
- 1. A query block does not show you a language. At rest it is one sentence — Blocks where task: TODO and page: Project/Roadmap — with the number of results beside it. Read it and you know what the block selects.
- 2. Click the sentence (or the ⚙ beside it) and it opens into a sheet: one line saying what the query finds — Find blocks ▾ where … — and one row per condition. A row reads
⋮⋮ ☐ field ▾ | operator ▾ | value ◐ ⋮ ×: a handle to drag it, a box to select it, the three parts of the condition itself, a switch that turns it off without removing it, a ⋮ for the rest, and an × to remove it. + Add condition adds one. Everything is a menu; nothing has to be typed. - 3. Both + Add condition and a row's
field ▾open the same list, and that list is your graph: the built-in fields first, then every property key you actually use, commonest first, each with the type Tine has observed, how many blocks or pages carry it, and a few of its values. Type to narrow it. A key the list does not already show in a place you can use it is offered by name at the bottom — Use "…" as a block property and, on a block query, Use "…" as a page property for the same key read off the block's own page — each with its honest count,0 blocks today. That is how a key the graph does not have yet, and a key it has only on pages, both stay writable. - 4. Change blocks to pages and Tine re-reads the whole query before changing anything. If conditions stop applying —
taskmeans nothing for a page — it says how many, names them, and offers Remove them, Keep anyway, or Cancel. Kept conditions stay as red rows with their reason, so nothing disappears behind your back. - 5. Group rows when a query needs a branch. Tick the boxes of two or more rows in the same list, press Group selected ▾, and choose All of, Any of or None of: they become one group where the topmost ticked row was, in the order they were already in, and the rows you did not tick stay exactly where they were — the ticked rows need not be next to each other. A single row's ⋮ offers Group with row above with the same three choices. A selection only ever spans ONE list: ticking a row inside another group starts a new selection instead, so no gesture here quietly carries a condition out of the group it was written in. A group's header says all of / any of / none of and switches between the first two on a press; its ⋮ Ungroup puts its rows back exactly as they were. Very deeply nested queries fold into one
⟨advanced⟩row: still saved, still run, and still something you can tick, move, disable and remove. Press that row and Tine puts your cursor in the query text at the foot of the sheet, which is where the part the rows cannot draw is edited.- If Ungroup is absent, the group has a wrapper that cannot be removed without changing its meaning. For a none of group, choose Remove none of first; for a disabled group, switch the group on first. These are changes to which results match, so make them only when that is what you intend.
- 6. Turn a condition off instead of deleting it. The enabled switch at the end of a row — and the one on a group's header — keeps the condition in the query and stops it running, so a query can be narrowed and widened without losing the words you wrote. A disabled row stays visible, stays selectable and still moves; a condition Tine could not read keeps its exact text and its message, and gets both back the moment you switch it on again. When the group above it is off, a row says disabled by group, because switching that one row on by itself would not bring it back.
- 7. Reorder with the ⋮⋮ handle: drag it, or put the keyboard on it and press the up and down arrow keys — the two do the same thing, and both carry a whole group with everything inside it. The row's ⋮ has Move up and Move down as well. A drag only ever reorders within one list, and Escape in the middle of one cancels it with nothing saved.
- 8. That list of your graph's own keys is one read Tine makes when the sheet opens. While it is still reading, the list says Reading this graph's properties… and the built-in fields below it stay usable, while a property row's operator and value wait — which comparisons a key offers depends on the type Tine has for it. If that read fails instead, the list says what failed and offers Try again: one press re-reads it in every open sheet at once, and the key you chose and the value you were half-way through typing stay exactly where they were.
- What you should see: pressing Escape (or clicking away) closes the sheet and leaves the sentence, updated. The block on disk is still an ordinary
{{query}}bullet. The query text at the foot of the sheet is Tine's own reading of that query, written in the query language below — not a copy of the block's bytes, which may be written in Logseq's{{query …}}form instead.
- Query text (TQL)
- 1. Every open sheet has a query text box at its foot. It is always there and always editable — the same query the rows above show, written out. Type in it and Tine re-reads it as you go: while the text does not parse, the results above stay on screen and go grey, because they are the last reading that actually ran. Press Save query text to make it the block's query.
- 2. The language is SQLite's expression syntax over a small fixed vocabulary. A query is
@blockor@page— which kind of row you are asking about — and then conditions joined withand,or,notand brackets: @block and task = 'TODO' and [[Project/Roadmap]]- 3. The vocabulary, in full. On a block row:
content,task,priority,scheduled,deadline. On a page row:name,journal,namespace.[[Page name]]and#tagare page references;prop('key')is a property;page.namereaches the block's own page. The comparisons are=,!=,<,<=,>,>=,like(with%wildcards),match(full-text),between … and …,in (…), andis null/is not null. @block and prop('cost') > 100 and scheduled between today and '+7d'- 4. Three forms are Tine's own.
any(children, …)andevery(prop('tags'), …)ask about the things a row contains — a block's children, a page's blocks, a key's values.off(…), or a line beginning--, keeps a condition in the query without running it, so a query can be narrowed and widened without losing the words. Andtag('x')andpage_tag('x')spell out what#xmeans on each kind of row. - What you should see: an unknown word is named, not swallowed — Tine says which word it did not understand, lists the spellings it does know, and lists the property keys in your graph that look like it. When the message comes with a place in the text — a bracket that never closed, an
@blockin the wrong position — a Show me button beside it selects exactly that much of what you typed; when it does not, there is no button rather than a guessed one. A query with a word Tine could not read returns no results rather than quietly running a shorter query.
- Property types
- Property queries match values without regard to letter case and match any item in a list. Comparisons use the key’s declared type, or its observed majority type when no type is declared:
rank:: 007matches(property rank 7). Case folding and list matching differ from Logseq’s property comparisons; values that cannot be read as the key’s type do not match a comparison. - 1. A property key means more when Tine knows what its values ARE. Open a property in Edit as visual query and Tine names the type it has observed across your graph —
text,number,date,checkbox, orref(a page link) — and sayslist of …when the key normally holds several values at once. - 2. Observation can be wrong, and an empty key has nothing to observe. Choose declare type… on the property and pick the type yourself; tick list of when the key is meant to hold several values. Nothing is guessed after that: the declared type is the one Tine uses.
- 3. A declaration is an ordinary page property. It is written as
tine.type:: numberon the page named after the key — and the name is the key's normalized form, so a property writtendue date::declares on the pagedue-date. Tine writes that line for you; if you type it yourself, use that spelling or nothing binds. Choose remove declaration to delete the line and go back to what Tine observes. - 4. The declared type decides which comparisons you are offered:
isandis notfor a checkbox or a page link,before,afterandbetweenfor a date,<,≤,>,≥for a number,containsandstarts withfor text. On alist of …key the same operator readscontains this value, because the test is against the list. - What you should see: the property shows one type with its source — observed or declared — and, once you declare one, a count of the blocks whose values disagree with it. That count is a to-do list, not an error: the query still runs, and the disagreeing blocks are simply not matched by a typed comparison.
- When a query needs Tine features
- 1. Some queries you can build have no
{{query}}spelling at all: grouping, column totals, and typed comparisons like "cost > 100" are Tine's, not Logseq's. When you save one, Tine changes the block's macro name fromquerytotine-queryand moves the view choices — view, sort, group, columns, column totals, sample — intotine.*properties on the same block. - 2. Tine says so when it happens, in a notice under the query: This query now uses Tine features Logseq can't read. Logseq will show the block as plain text. Take Undo that change to put the block back exactly the bytes it had, or Keep it to go on. Nothing else on the page is touched either way.
- 3. Nothing is lost in Logseq. The block stays ordinary Markdown and the
tine.*lines stay ordinary properties; Logseq simply shows the bullet as the plain text it is instead of running it. Everything else on the page keeps working there. - 4. Don't show this again stops the notice. That choice is kept beside your other window state, per device and per graph — never in the graph — so it does not sync and does not follow you to another machine.
- What you should see: the block still renders and refreshes in Tine as it did a moment ago; only its first line and its properties changed. Undo is the ordinary undo, so Ctrl+Z does the same thing as the button for as long as it is the newest change.
- Advanced queries
- A hand-written advanced query stays editable as text. Tine reports which parts it ran and which it did not understand; it does not offer a conversion to the visual builder that could discard your query's meaning.
- Tine runs Logseq's query rules (
task,priority,property,page-ref,betweenand the others) and the attribute patterns written on the block the query returns: its marker, priority, scheduled and deadline dates, and whether its page is a journal and which day, alone or narrowed bycontains?,=,not=,<,<=,>or>=, and insidenot. For example[:find (pull ?b [*]) :where [?b :block/marker ?m] [(contains? #{"NOW" "DOING"} ?m)]]lists what you are working on now. - A part Tine does not understand is left out, so the answer can only include more blocks than you asked for, never fewer. A
notororcontaining such a part is left out whole, because running only half of it would hide blocks the query keeps. A#+BEGIN_QUERYblock refuses to run at all rather than show that wider answer. A:result-transformfunction is not run.
- Where next
- The exact rules — ranking, search scope, saved-page behavior — are mapped in Reference/Pages, links, references, and search. For turning found or structured blocks into tables and boards, see Workflows/Structure repeated information; the wider shortcut map is Features/Tips & shortcuts.