Skip to content

Tine Beta 0.7.0-beta.2

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Oct 13:06

Added

  • Added open-only tine:// graph, page and block links, with Copy link actions and lazy stable graph identity (GH #181).
  • Code blocks show line numbers and a language label; Settings → Appearance offers one device-wide wrap preference shared by reading and editing (GH #474).
  • Beta releases now include the experimental Windows 32-bit installer and portable ZIP, with manual updates as on stable (GH #275).
  • Guide page Reference/Tine query model: every way a query's answer can differ from Logseq's, and why — the "find more, never less; browsing never writes" rule, the one exception, what Tine refuses, and how Tine 0.6 differs (GH #422).
  • Added TQL parent, ancestors, and unbounded descendants relations with any, none, and every quantifiers (GH #551).
  • /Date picker, /Tomorrow, and /Yesterday insert journal date links in the graph's configured title format (GH #485).
  • Wide Markdown, Org, query and sheet tables now use free space on both sides of the text column before scrolling at the pane boundary (UI-OG-QBG-TABLE-BLEED).
  • Added remappable, initially unbound commands to grow/shrink either sidebar width (GH #425) and open a persistent search tab directly (GH #437).
  • Truncated left-sidebar page titles now show their full title on hover; fitting titles stay quiet (GH #563).
  • Touch gestures on a phone (GH #492, GH #501): swipe a block right to indent it, a short way left to outdent it, or a long way left to select it and open its action menu; swipe in from the left edge to open the left drawer (a mostly-vertical swipe is ordinary scrolling and does nothing); on iOS the same edge swipe goes Back when there is something to go back to, following your finger and snapping back if you let go early; and the image viewer takes pinch-to-zoom, double-tap zoom, drag-to-pan, a sideways swipe between the page's images and a drag up or down to close (modelled on Logseq's PhotoSwipe viewer: a tap shows or hides the buttons instead of closing, a new × button closes, and dragging a zoomed image past its edge turns to the next image). Swiping is off while typing, in tables, code, queries, drawings and media, and with more than one finger. Logseq's :mobile {:gestures/disabled-in-block-with-tags [...]} setting in config.edn also turns the block swipe off in any block that references a listed page, and in the blocks nested under it. Documented in Reference > Platforms and mobile.
  • Windows: the diagnostic report now records whether Windows Defender real-time protection is on (windowsDefenderRealtime: on, off, unknown or not-applicable; a flag only, never a path). When a graph's first open is slow and real-time protection is on, a one-time notice per graph says so and offers Add an exclusion for this graph folder, which asks for administrator approval and only then runs Add-MpPreference -ExclusionPath; nothing changes without that click, and a declined or refused attempt is reported (GH #623).
  • Settings → Help & diagnostics: the diagnostic report now carries launch timings (listing, file dates, reading vs parsing, index build, ready), recent full rescans and saves, and statistics-only graph-shape numbers (sizes and quantiles, never names or text), so a slow graph can be diagnosed without sharing it; Rescan graph forces a full rebuild: it ignores every remembered file date, size and checksum, re-reads and re-parses every file, and rebuilds the page, link and search state without blocking the app or touching what you are editing, then shows when it finished; the quick check on returning to the window is unchanged (GH #623).
  • Query sheet, from hestratos's design list (GH #619, UI-OG-GH619-*): the Task field has Any status (writes every task marker OG knows) and a new In a journal page condition (writes (between -2000y +2000y), which Logseq reads as journal-only); a condition can be dragged into another group and a group left with one condition dissolves; the query text is hidden behind an Edit as text toggle that is remembered across restarts (stored in the app settings, not localStorage); results show and follow your edits inside the open sheet before you save (debounced, latest answer only); page results show the page's own properties and a pencil that edits them through the page's property panel; and the Find menu has Pages and blocks, showing both answers with Pages above Blocks (the sentence reads Pages and blocks where …, the Blocks section follows your List/Table/Board choice, a sample that cuts a section short says so, and the open sheet previews both), stored as tine.result-kinds:: pages-and-blocks which Logseq ignores.
  • Settings → About: Check for updates automatically can disable startup update checks and notifications on this device; manual checks remain available (GH #618).

Changed

  • Large outlines window offscreen block shells, speeding page open, revisit and cleanup while retaining editing and navigation (GH #623).
  • Android Back follows the one Back ladder used everywhere (GH #492): it dismisses an open dialog, menu or image first, then closes an open drawer, then steps back through page history, and exits only at the root; a failed exit keeps the screen shield up and the next Back retries only the exit.
  • Launch: Tine reopens a graph from a checkpoint of its last state in app data, then checks every file's date and size and rereads only what changed before the graph is ready; the checkpoint includes remembered query and backlinks answers, and is written about a minute after editing pauses (at most every 5 minutes), or 5 seconds after a launch that had none (GH #623).
  • Query sheet rows no longer say advanced for anything the builder wrote, and Scheduled/Deadline/journal date ranges read as Scheduled, Deadline or journal date instead of Between dates (GH #619, UI-OG-GH619-NO-ADVANCED).
  • REG-OG-P12B-PAGE-HEADER: A Markdown page header is now exactly the leading properties the parser accepts, so a no-space key::value line is page text rather than a property, in the editor, page promotion on save and alias lookup alike.
  • REG-OG-P12B-FENCES: Fence-aware editing (property and language autocomplete, code-body editing, calc blocks, hidden metadata) follows Logseq's parser instead of CommonMark: any fence run closes a fence, whatever its length.

Fixed

  • Text you type while Tine is still writing an earlier version of the same page now keeps its crash-safe copy when that earlier write lands, until the text itself is saved; before, a crash in that moment could lose it (REG-OG-DRAFTRISK-MS).
  • When a page file that briefly disappeared (an editor's save-by-rename, a sync gap) comes back unchanged, the edit Tine held for it keeps its crash-safe copy until it is saved again (REG-OG-DRAFTRISK-LIFT).
  • A sync client delivering back exactly the text you are editing (often Tine's own earlier write) no longer raises a conflict; Tine adopts the file and still saves your text (REG-OG-DRAFTRISK-EQUAL-BYTES).
  • An edit typed while another graph is opening is no longer lost if Tine cannot store its crash-safe copy: the switch waits for that copy, and if the store refuses it the text stays in this window under Review unsaved with an error that says so (REG-OG-DRAFTRISK-SWITCH).
  • When Tine cannot store a crash-safe copy of a page, every such page is now named in its own error; before, only the first one was (REG-OG-DRAFTRISK-REFUSED).
  • Opening a graph that is already open in another window can no longer freeze the app when another window opens or closes at the same moment (REG-OG-C5-FLOW3-DEADLOCK).
  • Toggling typography, changing the journal title format or renaming another page while a save is in flight no longer loses track of that save: a successful save no longer makes your next edit conflict with Tine's own write, and a failed save stays unsaved and is reported (REG-OG-C5-FLOW3-SAVE-EPOCH).
  • Saving a page, changing a setting, storing a draft, importing an asset or resolving a sync conflict no longer freezes the window while the write waits for the disk; repeated writes still land in the order you made them (REG-OG-C5-FLOW3-SYNC-WRITES).
  • A damaged or replaced settings, session or workspaces file, or a plugin manifest or module that is a pipe or device, is read with a size limit and never waits on a writer; an opener or external editor that was launched is always reaped (REG-OG-C5-C2-APPDATA-READ). A page whose property header the parser cannot read now says so instead of silently showing ordinary text (REG-OG-C5-C2-HEADER-READ).
  • The Guide now matches the query sheet and the conflicts list: /query opens the condition list (press + Add condition for the field chooser), the query text is behind Edit as text, a condition can be dragged into another group, scheduled and deadline ranges are written as Logseq (between scheduled …), and the conflicts list is described with its launch cache; the repeated Code blocks tip is one paragraph (REG-OG-C5-G-GUIDE-TRUTH).
  • A tine:// block link keeps the block id exactly as written and opens the page that actually holds the block, also when two files share a page name (REG-OG-C5-O-DEEPLINK).
  • Late results no longer land on the wrong surface: the first-load flag, the About tab, Make a template, graph verification, Guide navigation, follow link, reference evidence and the home page each ignore a completion that arrives after their view was retired (UI-OG-C5-O-OWNERS). Journal-template and native-frame preference writes are applied in order and a failure is always shown (UI-OG-C5-O-PREFS); dragging or overtyping in a sheet no longer leaks listeners or writes into another editor (UI-OG-C5-O-SHEET).
  • A failing clipboard or opener helper is no longer reported as a successful copy and is always reaped (REG-OG-C5-O-CLIPBOARD). An unreadable graph asset, a failed crash-safe draft write or removal, a failed PDF-notes refresh, an export preview or sheet export read, a logbook entry and a task marker that cannot be parsed now show a sticky error instead of failing silently (REG-OG-C5-O-ASSET-READ, UI-OG-C5-O-FAILURES).
  • A fenced public:: true example no longer publishes a page and a fenced public:: false example no longer vetoes a real public page; the static export hides the same property chips as the app (including :block-hidden-properties); page embeds and published links find their page by the same Unicode identity the store uses (REG-OG-C5-R-PUBLIC-FENCE, REG-OG-C5-R-HIDDEN-PROPS, REG-OG-C5-R-IDENTITY).
  • An Org page now prints and publishes as Org instead of being rendered as Markdown, and printing one page no longer rescans the whole graph directory (REG-OG-C5-R-ORG-RENDER, REG-OG-C5-R-PRINT-COST); the app's task checkbox, ordered-list key and property facets now share one definition with the export (REG-OG-C5-R-FACET-TWINS).
  • Sidebar, breadcrumb and reference labels hide exactly the property, planning and drawer lines the parser recognised (UI-OG-C5-R-VISIBLE-BODY); a published site lists only real block-reference referrers, reports a missing asset as an error, and refuses an oversized snapshot or asset instead of loading it (UI-OG-C5-R-PUBLISHED-READS).
  • A tag written with spaces ([[big idea]]) is one tag in sheet formulas, table cells and board cards instead of being split into one tag per word (REG-OG-C5-Q-MULTIWORD-TAG).
  • Copy and Export now expand a {{tine-query …}} macro into its result blocks like a {{query}} macro, instead of leaving the macro text (REG-OG-C5-Q-EXPORT-TINE-QUERY).
  • A #+BEGIN_QUERY block whose raw text ends with a line ending, or uses CRLF delimiters, is now recognised as a query in the editor exactly as the native renderer already did (REG-OG-C5-Q-BEGIN-QUERY-TWIN).
  • A tine.col-aggregates value with spaces after the equals sign (cost = sum) is now recognised by the Display editor as the engine already reads it, instead of being treated as foreign text and duplicated on the next edit (REG-OG-C5-Q-COL-AGG-TWIN).
  • Saving a page no longer re-walks every alias in the graph for each remembered backlinks answer, and an authored alias still appears in the quick switcher under its own spelling on its owning page (REG-OG-C5-Q-ALIAS-EDGES).
  • A query with a now bound (for example created_at between -1d and now) is recomputed on each run instead of repeating a stale answer for the rest of the day (REG-OG-C5-Q-MEMO-NOW).
  • Copying or exporting a block query result now includes the page-properties row when the query matched it, instead of reporting it as omitted (REG-OG-C5-Q-EXPORT-HEADER).
  • Editing a page so it gains a property that many pages already have no longer copies the whole list of those pages in the query index (REG-OG-C5-Q-POSTINGS-COST).
  • A used_as_tag query's remembered answer now counts its tag-key set toward the memory budget (REG-OG-C5-Q-MEMO-TAGSET).
  • Quick-switcher page search with more candidates than slots no longer evicts a better name match in favour of a content match (REG-OG-C5-Q-PAGE-HEAP-ORDER).
  • Asking why a query with thousands of conditions returned nothing no longer builds a quadratic explanation plan; queries over 64 conditions are explained as one whole condition (REG-OG-C5-Q-EXPLAIN-COST).
  • A property condition written with two keys, or with a nested group around its key, is no longer evaluated as if the extra key or condition were not there; the query builder reads property conditions with the same rule as the engine (REG-OG-C5-Q-PROPS-READER-TWIN).
  • A property column named in a legacy query table's query-properties:: now finds the engine's key when the name has a space or a non-ASCII capital, matching how Tine stores property keys (REG-OG-C5-Q-KEY-NORM-TWIN).
  • The 128-level nesting limit on opened pages now follows the parser's own rule for where a code fence closes, so a very deep outline placed after a short fence closer can no longer slip past the limit (REG-OG-C5-Q-FENCE-DEPTH).
  • A query for scheduled or deadline blocks no longer matches a block that only shows the SCHEDULED: <date> / DEADLINE: <date> syntax inside a code fence or after a longer word such as UNSCHEDULED: (REG-OG-C5-Q-PLANNING-TEXT).
  • A query's like ... escape 'c' clause is now applied instead of silently ignored (a pattern such as '100!%' escape '!' matches a literal percent sign); an escape that is not one character is reported (REG-OG-C5-Q-TQL-ESCAPE).
  • The query builder's date-range preview now resolves a typed bound exactly as the query engine does: -7D is no longer previewed as a date, 2026_01_05 and 2026-1-5 now are, and offsets past 10,000 years or a month clamp in year 0 no longer disagree (REG-OG-C5-Q-DATE-TWIN).
  • Clicking a query table column header now sorts only the view you are looking at. It no longer rewrites the query block and its display properties; a saved sort is still set from the query's sort control (UI-OG-C5-Q-HEADER-SORT).
  • A query row switched off with -- no longer invalidates the whole query when it holds an unquoted relative date, a stray @page/@block or another refused shape (REG-OG-C5-Q-TQL-DISABLED).
  • Searching for a page alias (Ctrl+K and the page autocomplete) lists the page that owns the alias once, with an "aka" hint, and no longer also lists a separate page named after the alias when that text is referenced elsewhere; ASCII and fullwidth comma alias lists both work (GH #623, GH #353; REG-OG-GH623-ALIAS-353).
  • Trashing an image from its hover action no longer fails with "asset is referenced; refresh the orphan inventory": the block is saved without the image first, then the file moves to the trash. A file other pages still use is kept and you are told so instead of getting an error (GH #623; UI-OG-GH623-TRASH-ASSET, REG-OG-GH623-TRASH-REFERENCED).
  • An advanced query is refused for a :result-transform only when it declares one (a title, string, comment or discarded form that mentions the word no longer blocks it), and a BEGIN_QUERY block that declares a transform now shows the "clauses Tine cannot run" refusal instead of silently running without it (REG-OG-C5-Q-RESULT-TRANSFORM).
  • Saving a page no longer fails with "refusing to move page-header property into outline content" when a code block shows key:: value syntax; the guard asks the parser which lines are properties (REG-OG-C5-Q-REFUSAL1).
  • A PDF link into a nested assets folder (../assets/nested/report.pdf) opens that PDF, not a same-named one in the assets root, and highlights made in it are saved under the nested PDF's own page and sidecar; opening the PDF from a highlight's page does the same (UI-OG-C5-P6-PDFLINK).
  • Image {:width ...} / {:height ...} metadata is read as EDN, so a quoted title that contains :width 999 no longer sets the image width (UI-OG-C5-P6-IMAGEMETA).
  • PDF Find shows an error and clears stale results when a page cannot be read, and closing Find or changing the query stops a pending search from moving the reader (UI-OG-C5-P6-FIND); a PDF text layer that finishes after its page was re-rendered or the reader closed no longer installs, and a failed text render shows the PDF error (UI-OG-C5-P6-TEXTLAYER).
  • A rejected native window request (minimize, maximize, close, resize drag) now shows an error instead of failing silently, and a resize listener registered after the window chrome was removed is released (UI-OG-C5-P6-WINDOW).
  • A Favorites (or other) settings edit no longer deletes an unrelated config.edn setting when an earlier entry's value is the same keyword; config keys are found only at key positions (REG-OG-C5-L01-S1).
  • Saving a PDF highlight keeps file::/file-path:: example lines inside a code fence at the top of the annotation page; a failed cleanup of a leftover legacy sidecar, page or area image is now logged instead of silent (REG-OG-C5-L01-S2).
  • The Favorites page now recognises a favorite the way the parser reads it: links with ] in the name, links with a block property, and Org links are kept, and asset links are no longer mistaken for pages (REG-OG-C5-L12-FAV-LINK).
  • Switching graphs right after Tine recovered an interrupted Favorites save no longer rewrites the new graph's Favorites page and config (REG-OG-C5-L12-FAV-TIMER).
  • Opening a favorite page through a different capitalization (a link, a restored tab, or a saved path) no longer rewrites the graph's favorites config; only an explicit rename changes it (REG-OG-C5-L14-FAV-CASE).
  • Opening Journals no longer replaces today's journal with the default template when it already holds text: Org heading prose such as memo:: …, a block id, or text nested under an empty bullet is kept; Org journals with such prose now count as written days for the calendar and carry (REG-OG-C5-L12-S1).
  • Renaming a namespace parent whose title and a child's title use different Unicode forms of the same letters moves the child to New/child, not Newchild (REG-OG-C5-L03-S1).
  • Merging pages keeps a fenced key:: value example in the merged page's preamble inside its fence instead of dropping it or turning it into a page property (REG-OG-C5-L03-S2).
  • Merging a page into one that already ends with the same blocks keeps the merged-in copies instead of silently dropping them (REG-OG-C5-L03-S3).
  • One unreadable journal or page (undecodable text, an oversized file, a filename that is not UTF-8) no longer blanks the journal feed, the duplicate-journal list, the conflict review or the parser comparison: the readable files are shown and the skipped ones are named (REG-OG-C5-P2-BAD-FILE).
  • Editing code no longer rewrites it: Backspace after + inside a code body or fence deletes one character instead of the list prefix, on-type typography (->, --) leaves inline code (including double-backtick and Org ~code~) alone, and a task-list checkbox click toggles that checkbox rather than a lookalike [ ] in its label. Pasting text keeps a fenced block whole across blank lines, and heading, $$ display-math Enter, block-reference and tab labels now read literal source and markup from the parser instead of regexes.
  • A failed template listing now reports a sticky error toast and is retried on the next slash menu instead of being silently treated as having no templates.
  • Restore makes its recovery copies durable before writing backup files, and trash/move into a new folder syncs that folder, so a power cut cannot lose the original (REG-OG-C5-L06-S1).
  • Importing or saving an asset whose name is taken by a large file no longer reads that file into memory (REG-OG-C5-L06-S2).
  • A backup that cannot read the graph, and a focus or Settings rescan that fails, now report the real error instead of a generic failure or a silent success (REG-OG-C5-L07-B1, REG-OG-C5-L08-B1).
  • Page rename publication skips reparsing the old document and repeated transaction-record searches; loaded-page refresh uses one path lookup per touched page (GH #623).
  • Page renames open each rewritten referrer four times instead of eight and plan without building the whole-graph name list, with every revision and pre-rename guard kept (GH #623).
  • Ordinary focus refreshes enumerate graph metadata outside the page/save writer and sort only changed paths, reducing waits while preserving freshness; config changes and failed-load recovery retain their full writer-ordered scans (GH #623).
  • Graph search measures text rank only for matches, avoiding a full Unicode-length pass over rejected blocks (GH #623).
  • Page-search results read properties only for their selected pages, avoiding unrelated graph-query initialization (GH #623).
  • Page-scoped simple and TQL queries select owners through the existing name map and derive facts only for those pages (GH #623).
  • Closing or switching PDFs no longer shows an annotation-loading error from a retired reader (GH #557).
  • Image picker, camera and Upload keep the initiating editor through asset import, so neither a delayed native blur nor the app being hidden behind the full-screen picker discards the saved image link; the background save still runs (GH #622, GH #493).
  • Journal date-format parity: honor legacy :date-formatter after the modern key, offer all Logseq formats, and render E/EE as abbreviated weekdays while keeping old titles readable (GH #332 follow-ups).
  • Plain-text search skips Unicode normalization for ASCII text while preserving search results and highlight spans (GH #623).
  • Query property commas now follow Logseq's configured keys; query text matches raw content with exact case and accents, while Search keeps folding (GH #624). Imported query-table:: and trailing table choices are honored without writing Logseq view properties.
  • GH #510: edit a code region inside a mixed text block without exposing its fences; boundary navigation returns to source editing and preserves surrounding text.
  • Find searches main and split panes plus expanded right-sidebar items, with next/previous traversing them in order (GH #559).
  • Search-tab results open in new tabs while keeping Search; middle-click and modifiers choose background tabs, sidebar or another pane, and page results share the Quick Switcher context menu (GH #416).
  • Opening and reading graph PDFs leaves annotation files untouched; create the highlight sidecar and notes page on the first annotation (GH #577).
  • Date pickers keep a selected day open for time/repeat edits; Done or clicking outside applies the complete choice, while Escape cancels (GH #30).
  • GH #407: Markdown/Org copy export preserves formatting while resolving block refs and expanding embeds; HTML/OPML share resolution, hidden IDs are omitted, and plain text retains user property separators.
  • Changing only page-name capitalization updates filename spelling, title and references in one guarded rename (GH #609).
  • PDF file:// links now open in the desktop's default viewer with their full path, without redirecting to graph assets or creating annotation pages (GH #577).
  • Android and iOS startup no longer shows “Couldn’t read the window state” from an unsupported desktop maximize query (GH #621).
  • Journals feed days now show Linked References with counts and the shared collapse/filter controls, loading as you scroll and hiding empty sections (GH #481).
  • Code cards keep their surrounding layout on entering/leaving edit, including empty code and long lines (GH #474, layout only). Empty code wrappers can be removed with Backspace, and right-click at a desktop code caret offers the existing block deletion action (GH #488).
  • Android's keyboard toolbar shows distinct return arrows for Undo and Redo (GH #599).
  • Linux deb/rpm installations no longer gain a second visible launcher on startup; the app-ID entry remains available for Wayland icon lookup (stable and Beta, GH #626).
  • Deleting a page or journal now succeeds if its file was deleted externally while the confirmation was open; a changed title or replacement file still cannot be deleted through a stale page target (GH #620).
  • First opens of large pages skip unnecessary offscreen body parses for property-free blocks, using the properties already computed by the backend (GH #623).
  • Mobile block swipes reveal distinct indent, outdent and more icons before release; left swipes now have a wider outdent band (40–139 px), with actions at 140 px, so a natural swipe is less likely to open the menu (UI-OG-QBF-SWIPE).
  • Render block properties as linked keys on separate rows with OG duplicate/group precedence, shade block embeds in both themes, and show pages tagged with the current page before references (GH #612, GH #610, GH #214).
  • An unexpected rendering failure in a PDF pane, sidebar item, query result, plugin settings view or dialog now reports its error within that surface with Retry and Copy details, while sibling surfaces remain usable (GH #490, GH #332; UI-OG-GH490-QBE).
  • Contributor instructions, harness scripts and historical records use portable paths, with a tracked-file guard against personal checkout paths (GH #579).
  • Multi-block context-menu copy, cut, references, embeds and delete now act on the whole selection and use plural labels (GH #591).
  • Scheduled and Deadline slash calendars take keyboard focus for date navigation and return to the editor after picking or cancelling (GH #596).
  • Fixed query grouping summaries to name their field and offer Clear, hide a sole missing-value group table, and keep Search/List page results uncluttered with properties one click away (UI-OG-QBV-QUERY-DISPLAY).
  • External asset replacements, creations and deletions made while the graph watch is being installed now refresh the open graph (REG-OG-QBW-ASSET-WATCH-STARTUP).
  • Linux YouTube embeds now provide native client identification and initialize without configuration error 153 (GH #600); video playback still requires supported system codecs.
  • Query blocks with title options no longer leave a stray } below their results. A damaged macro now reports that its source could not be parsed and stays editable, instead of showing All pages or failing a builder edit with “The block changed while saving” (UI-OG-QUERY-MACRO-BRACE).
  • A page containing a lone carriage return (a CR not followed by LF, for example key:: ended by CR) no longer shows "This page could not be displayed. Unreachable code should not be executed" and no longer breaks every later page: the lsdoc parser (v0.5.8) now handles bare CRs as Logseq's parser does, and any future parser panic is confined to the one call that caused it.
  • Saving on a network or FUSE filesystem that cannot sync directories (some NFS mounts, Android shared storage) no longer fails: as on master, the errors such filesystems give for a directory sync (EBADF, EACCES, EISDIR, EINVAL) are tolerated, while a real I/O failure or a full disk still fails the save.
  • A save that fails for a passing reason (a disk hiccup, a file briefly locked by another program) is retried automatically after 100 ms and 300 ms before Tine reports it; the page stays marked unsaved until it is saved (REG-OG-XPORT-SAVE-TRANSIENT-RETRY).
  • Creating a page is refused, naming the file, when a file Tine cannot read (for example one with broken text encoding delivered by sync or an editor) may already be that page, instead of creating a second file for the same page; your edits stay in the editor (REG-OG-XPORT-CREATE-UNREADABLE-OWNER).
  • A graph that fails to open now shows a red notice that stays until dismissed, with a Retry button that reopens the same graph (from the folder picker, the graph list or its right-click menu) (REG-OG-XPORT-GRAPH-OPEN-RETRY).
  • Opening or switching graphs no longer freezes the window: the graph now opens in the background, and closing the previous graph (about 0.2 s) no longer holds up other requests (REG-OG-XPORT-LOAD-GRAPH-OFF-UI).
  • The linked and unlinked references error banner says what actually went wrong instead of a generic message (REG-OG-XPORT-REFS-BACKEND-ERROR-TEXT); a reference filter whose page-header tags were cut short now says the list is incomplete (REG-OG-XPORT-PAGEPROP-FILTER-TRUNCATED).
  • Browsing no longer writes to your graph (GH #623): zooming into a block, jumping to one from Ctrl-K, and opening a block in the sidebar, a tab or a pane used to stamp an id:: property into the block's page file just to remember where you were. Those places are now remembered by their position in the page (kept in the session file, not the graph), and a block gets an id:: only when something actually references it. A saved session with an older block reference still restores.
  • Opening a page on a large graph no longer stalls (GH #623): the first page open after launch or after a page was created, deleted or delivered by sync read every page file's header under the store's lock (about 2.8 s on an 11,000-page graph on Windows); it now reads only that page, and a page whose file is named for it opens while the graph is still loading. Folding or unfolding a block saves the file without rebuilding graph-wide state or rewriting the launch checkpoint (a save went from about 20 ms to about 3 ms on a 13,000-page graph). Launching no longer freezes while Tine lists the installed spell-check dictionaries: that ran a helper program on the window's main thread and held every other request behind it (seconds on a slow disk or network drive); it, and opening links, assets and folders in other programs, now run in the background.
  • Launch and focus return on large graphs (GH #623): the conflicts list no longer reads every page file (the store remembers which pages carry merge-conflict marker lines, kept in the launch checkpoint), the asset scan no longer opens every asset file while holding the store's writer lock, and the "Refreshing changes from disk…" notice moved beside the help button, dimmed and shown only after half a second; the diagnostic report now also carries per-command latency histograms and the focus-return phase split (numbers only).
  • Query builder usable again (GH #619, UI-OG-GH619-*): presses and keys inside the open query sheet no longer reach the block behind it (before, a press entered edit mode and tore the sheet down, so the Find pages/blocks control and the other buttons never acted); every floating panel now shares one portal that keeps events inside it, guarded against a bare portal; field-chooser rows no longer shrink to slivers and the list scrolls, with dropdowns that flip or clamp to the viewport; the sheet opens beside its query instead of at the top-left and stays inside the window (it flips above a query near the bottom); typing /query opens the sheet on its condition list without also opening the field chooser; and the drag-reorder bar is no longer drawn at slots where a drop changes nothing.
  • Queries answer like Logseq, round two (Discussion #617 query audit): an advanced query with any clause Tine cannot read is refused whole, with a notice naming the clauses, instead of running part of it and showing a wrong answer (REG-OG-Q617-QFIX-WHOLE-REFUSAL); printing a query back to Logseq text keeps page-property as page-level (REG-OG-Q617-QFIX-ROUNDTRIP, with a permanent 760-form round-trip test); (all-page-tags) lists the pages some page uses as a tag; (task [TODO DOING]), (priority #{A B}) and (page-tags (x y)) accept set and list forms; not takes several operands; sort-by is descending unless asc, sample picks a random subset before sorting, and a query made only of those directives shows nothing; (between created-at -7d now) and last-modified-at filter by timestamp properties; the page-property header block counts as a referrer and in block-reference counts, and its properties appear in the property picker; (namespace X) matches only the pages directly under X (advanced queries stay recursive); journal result groups run newest day first; and a legacy {:table-view? true} table honours the block's query-properties, query-sort-by and query-sort-desc (REG-OG-Q617-QFIX-*).
  • Queries answer like Logseq (Discussions #617/#619, issue #624): (priority [A]), (task [TODO]) and (page-tags [x]) accept Logseq's vector form; a plain text search also finds text that sits in a property line; sibling matches under one parent show that parent's breadcrumb once and sit together; the query builder's pages/blocks choice now sticks (REG-OG-Q617B-VECTOR-FORMS, -PROPERTY-LINE-TEXT, -GROUP-BY-PARENT, -BUILDER-ANCHOR).
  • Simple queries such as (property type [[Person]]) now find pages whose properties are in the page header, as Logseq does: the page-property block takes part in property, page, between, page-reference and boolean queries and appears as a read-only page-property row (REG-OG-Q617-PREBLOCK-QUERY, Discussion #617).
  • Raw HTML resources (UI-OG-DUPBL2-D29): local images and sandboxed iframes use actual DOM attributes, so image text in comments and data-src lookalikes cannot select the wrong resource.
  • Uppercase .ORG files retain Org format in conflict diffs, PDF annotations and page rename/merge (REG-OG-DUPAL2-F12).
  • Keep code examples in a user’s Favorites page from being adopted as favorites arrangement metadata (UI-OG-DUPBL1-FAVORITES-LITERAL-MARKER).
  • Preserve code literals during text, HTML and OPML export cleanup; recognize standalone embeds from parsed content; preserve early journal years and advance timed repeaters (REG-OG-DUPD2-D15–D19).
  • Typing in an expanded parent block no longer recomputes the visible order of every loaded journal page on each keystroke (REG-OG-C5-C-TYPING-ORDER).
  • Backspace or Delete at a block edge no longer merges a block whose children would land deeper than the 128-level outline limit, which left the page unsavable; the merge is refused with an error (UI-OG-C5-C-MERGE-DEPTH).
  • A session or workspace whose saved pane layout is nested thousands of splits deep no longer loses the whole restore; the panes within the depth and pane bounds are restored (UI-OG-C5-C-LAYOUT-DEPTH).
  • Convert to pipe table on a grid with more than 200 rows shows its size refusal instead of failing with an internal error (UI-OG-C5-C-GRID-PIPE-BOUND).
  • The formula editor opens and saves a valid formula with a very long sum or transform chain instead of failing with an internal error (UI-OG-C5-C-FORMULA-CHAIN).
  • Importing a dropped or picked file that is a named pipe is refused at once instead of hanging the app (REG-OG-C5-C-ASSET-FIFO).
  • A draft store file past its 64-record bound (for example delivered by a sync tool from another build) is set aside with its bytes kept, instead of being loaded into a store that then refused every draft write (REG-OG-C5-C-DRAFT-RECORDS).
  • Sheet date footers skip impossible calendar dates, and typed cells and formulas preserve years below 100 (UI-OG-DUPD3-DATE-FOOTER, REG-OG-DUPD3-CALENDAR).
  • REG-OG-DUPF05-UNICODE-IDENTITY: Page-name lookup and query grouping use the native Unicode whitespace policy in the frontend too, so U+0085 and BOM no longer produce different identities or accepted grouping fields.
  • Annotation editing and PDF targets respect parsed properties, including empty results, and ignore metadata inside code (UI-OG-DUPD1-D08).
  • Outline insertion no longer treats literal id:: examples as live block identities; merge identity recovery also uses accepted properties (REG-OG-DUPD1-D09).
  • Caret link navigation ignores code and follows parser-accepted tag boundaries, including punctuation (UI-OG-DUPD1-D10).
  • REG-OG-P12B-CONFLICT-PREAMBLE: Merging a conflict copy's page preamble no longer treats property-looking lines inside code blocks as page properties, and keeps differing code blocks whole instead of merging them line by line.
  • REG-OG-P12B-MARKERS: Task markers and priorities share one parser-derived span for reading and writing, and the demo graph reads them once the parser is ready.
  • Published block previews copy only the requested nodes, avoiding full-subtree allocation while keeping snapshot metadata independent (REG-OG-DUPF03-PREVIEW).
  • Property readers and sheet field rename now use accepted parser properties and source spans, including Unicode keys and literal-code protection (REG-OG-P12-PROPERTY-SPANS).
  • Page aliases and titles ignore metadata-looking source-block contents (REG-OG-P12-PREAMBLE-LITERALS).
  • Page-reference candidates share native target classification, exclude unlabeled local assets, and include nested links; Org filename candidates retain their existing selection policy (REG-OG-P12-REFERENCE-TARGETS).
  • REG-OG-P11B-BEGIN-QUERY: Static BEGIN_QUERY export uses the live EDN inspector, preserving escaped titles, discarded forms and typed positional inputs.
  • REG-OG-P11B-OUTLINE-LITERALS: Outline paste keeps parser-owned literal blocks and bullet continuations intact while preserving ordered list recognition.

Tests

  • Added native coverage for Ctrl+K alias navigation with ASCII/fullwidth commas and LF/CRLF headers (GH #623); the reported Windows failure was not reproduced on current og under Linux.
  • Added native Shift+click coverage across journals, main, sidebar and split panes, plus rendered modifier checks for page refs, tags, property values and block refs (GH #623); current og passes without a production change.

Download an installer for your platform below. Windows and Linux ship both x64 and ARM64 builds (match your CPU). Windows users who prefer no installer can grab the portable Tine-Beta_0.7.0-beta.2_x64-portable.zip for their architecture. macOS and Windows builds are currently unsigned, so their operating systems may show a warning on first launch. On macOS, if Tine repeatedly asks to access Documents, see the workaround in the README.