Changed
- UI-OG-BETA-VERSION: About and copied reports identify Tine Beta; Copy version includes the full version, and update notifications retain the Beta sequence. The updater refuses a stable payload before offering or installing it.
- REG-OG-BETA-CHANNEL: The separate preview app is now Tine Beta, with the
betaupdate/release channel and-beta.Nprerelease versions. Stable Tine and Beta keep separate app data and update channels; the local deploy filename remainstine-og. - REG-OG-R6-PREVIEW: Preview candidates and AppImage update metadata stay on
og-preview; manual candidate builds do not publish, and preview publication cannot become the stable latest release.
Fixed
- UI-OG-E2EB-WORKSPACE-LIFETIME: Editing a query workspace's source, presentation or Display keeps its live answers; replacing the route object no longer closes the active workspace's search.
- REG-OG-P11-ASSET-LIVENESS: Unused-media discovery and trash protect linked filenames containing parentheses and percent escapes, using parser-owned targets.
- REG-OG-P11-PROPERTIES: Cross-format paste preserves parser-accepted Unicode and custom property keys, duplicate entries, and their order.
- Title rename avoids reading temporary navigation destinations while refreshing the graph (UI-OG-P10C-RENAME-READS).
- REG-OG-P10B-IDENTITY-COST: Loaded blocks reuse parser-owned identity absence through the shared answerer for editor and reference badges, avoiding offscreen identity parses on large pages.
- REG-OG-P10-QUERY-PRIORITY: Background List mounting yields while the search picker covers it, retains existing rows, and resumes on a later frame when the picker closes.
- REG-OG-P10-QUERY-FRAMES: Broad List queries mount at most 32 new keyed groups per frame, reserve pending scroll height, and cancel queued rendering when their owner retires.
- REG-OG-P10-QUERY-VIEWPORT / REG-OG-P10-DATE-PARSE: Large List queries defer group headers and live subtrees until viewport approach; compiled journal date patterns parse without allocating temporary token strings.
- REG-OG-P10-LAZY-GROUPS / REG-OG-P10-JOURNAL-SCAN: Offscreen query and reference groups defer row state until they approach the viewport; journal inventories validate relative paths without repeatedly allocating configured directory prefixes.
- REG-OG-P10-BLOCK-MEMORY / REG-OG-P10-QUERY-PRESENTATION / REG-OG-P10-JOURNAL-FORMAT: Large graphs share sparse parser edit regions and compiled journal formats; List queries avoid building excerpts for inactive presentations.
- REG-OG-P10-HOSTED-PERF: Hosted OG performance checks retain the fixed v0.6.5 campaign anchor after stable releases, with unchanged performance budgets.
- REG-OG-R6B-PREFLIGHT: Preview preflight uses the OG v0.6.5 performance baseline with unchanged budgets.
- UI-OG-R6B-GRAPH-NOTICES / UI-OG-R6B-MIGRATION-TOAST: Query notice dismissals follow the current graph, and startup explains completed legacy app-data migration once.
- REG-OG-R6-IDENTITY: Read released Tine’s graph notice dismissals, restore legacy desktop app data before startup, and seed desktop preview browser preferences without changing the released source.
Fixed
-
Windows validation uses portable structural-ratchet keys and exercises page-merge races across alternate path spellings (og-W1; test harness only).
-
Page saves reuse their checked parse when publishing, and renames use the known page-name index (og-R5; REG-OG-R5-SAVE-PARSE, REG-OG-R5-RENAME-COST). Saves retain their existing byte-preservation checks; a rename no longer rereads unrelated page headers for its same-name check.
-
Browser and native query rewrites use the same macro extent reader, preserving authored arguments and rejecting malformed closing braces consistently (og-R4C; REG-OG-R4C-MACRO-EXTENTS).
-
Org typing keeps hidden IDs in the parser-accepted drawer after CLOSED planning and leaves source blocks intact (og-R4C; UI-OG-R4C-ORG-REATTACH).
-
Query table footers show complete backend totals and save Count, Sum, Average, or None through Display without reordering repeated entries. Static export totals summarize exported rows (UI-OG-R3A3-QUERY-FOOTER).
-
Splitting an Org block keeps its own ID on the original block after CLOSED planning (og-R4B; UI-OG-R4B-OWN-PROPERTIES). The editor hides properties from the parser's own property region and keeps body drawers visible.
-
Nested queries in a query export no longer report how many matches were left out on other pages (og-R3C; REG-OG-R3C-NESTED-COUNTS). This applies to the static fallback as well as the read-only app.
Added
-
Query export writes a movable site inside the graph at
published-queries/<folder>/(og-R3C2; UI-OG-R3C2-QUERY-DESTINATION, REG-OG-R3C2-QUERY-PORTABILITY). A collision offers Replace or a separate folder; replacement preserves and reports the previous export in recovery. Referenced assets travel with the folder, missing assets warn, and Settings → Graph → Query export size limit sets a device-local copied-asset budget (default 1 GiB), with a direct Settings action when it is exceeded. Live and command-line exports keep their external destinations. -
An old system web engine shows an update card before startup (GH #572; og-R2). On macOS it explains the macOS 12.3 requirement and why updating Safari alone does not update the embedded engine.
-
Missing page links are muted with a dotted underline (tags are not) (og-R2; UI-OG-R2-MISSING-LINKS). They still open their destination, and become live when a page or alias is created; deletion dims them again without reloading. This deliberately differs from Logseq, which dims only untitled pages.
-
Parser-owned structural edits (og-D1): metadata edits and template/conflict copies share native/wasm block regions, preserving parser-recognized literal contents. Empty code cards retain their body/wrapper separator after typing, code-body typing preserves literal typography, and calendar edits retain glued body text. Published block identities, logbook and repeaters use the block's format.
-
An image replaced outside Tine refreshes where it is shown (master d017d1a, 2f54a8d, og-J2).
A picture changed by an editor, Syncthing, Dropbox or another Tine window updates in place without reloading the page,
and one deleted outside shows its missing-image placeholder. This includes anassetslink to an approved folder outside the
graph, even when it is reached through symlinked folders. An open PDF, audio or video is not swapped while you use it;
it shows the new file the next time you open it. Tine's own asset writes never echo back as outside changes, and the extra
watch is released when the graph closes. -
A query shown as a table or board exports as that table or board (og E, 22c open item).
A block whose whole body is one{{query …}}withtine.view:: tableorboard(a queryas table/as boardmay override it)
now publishes with the query's own columns and rows, on the page each row came from, computed by the
app's own sheet code; a result on a page the export does not publish is left out (and never counted), and if the results changed while the
export was prepared it stays the usual result list. The command-line export still writes the outline. -
A TQL query with a page reference after a comma saves as a macro (og E).
A form such asany(children, [[a]])used to be refused when Tine wrote it into a
{{tine-query …}}block, because the document parser read the comma-separated[[a]])as a
page reference; the saved macro now spells that operand in parentheses, and it reads back as the same query. -
Verify a synchronized graph (master 749bfb2, og-D). Settings → Help &
diagnostics can now fingerprint the exact bytes of your Markdown and Org files
and compare them with the report from another device, naming every file that
exists on only one side or differs. It reads files only, reports paths and
checksums (never contents), can be cancelled, and never confirms a match from
a scan that was disturbed while it ran. -
Recent error messages in Diagnostics (og-D). Settings → Help & diagnostics
lists the last 20 red error messages of this session, newest first, with the
time, a ×N count for repeats and a Copy button, so a message can still be
reported after you closed it. It lives in memory only: never written to disk,
and not part of the diagnostic report, because messages can name pages. -
A command line you can rely on (master e7af4db, og-D).
tine --help,
tine --version,tine open GRAPH,tine capture,tine doctor GRAPHand
tine export static|live GRAPH --output PARENTshare one documented schema,
and Linux.deband.rpmpackages install a generatedman tine. On Windows
the terminal commands now print into the console that launched them. See the
new Guide page Reference/Command line. -
A conflict can no longer scroll out of sight (master 61ea660, og A).
Once the in-page review scrolls above the window, a slim bar pins to the top
of the pane; tapping it unrolls the same review in place, with your choices
kept. Tap again, press Escape, or scroll back up to fold it away. -
A duplicate journal day resolves on the day itself (master 9dc54e4, og A).
A day with two files (a date-named one and a title-named one) joins the
conflict badge and the Conflicts page, and its page compares the two files
block by block: the pre-selected choice keeps everything, and applying folds
the other file in and moves it to the recoverable trash. Each file keeps its
Open, Rename and Trash actions; the startup toast is gone, and Settings keeps
the list as a fallback. -
Right-sidebar items can be reordered by dragging their header (GH #211, og 22b); a short press still opens the item.
-
External changes stay fresh without interrupting you. Returning to Tine
asks the watcher for a fresh pass before you type; a large checkout or sync
burst arrives as one change;.git/and.stfolder/are ignored; and if the
system refuses live file notifications, Tine says so and checks every 3
seconds instead. An optional "always ask" policy (Settings → Backups &
recovery) holds even clean external changes for Reload from disk /
Keep mine. -
A live-draft conflict offers Review, not a blind overwrite. Its banner opens
the in-page comparison, and the Conflicts page lists such pages under
Unsaved drafts. -
Sheets come out of Export as the tables, boards and grids you see in the app.
Export HTML and read-only app, a query's Export and Export to PDF write each
tine.viewtable, board or grid with its rows, groups, formula columns and
aggregate footers. Tine computes them with the app's own sheet code and hands
the publisher plain data, so the export cannot disagree with the screen. The
command-line export has no app to compute them and keeps the plain outline; a
sheet that cannot be computed is written as the outline with a visible note
instead of failing the export. -
A "changed on disk" conflict can be merged block by block at the page. The
panel at the top of the page compares your unsaved edits with the file as it is
now, pre-selecting each side's own change when Tine still has the version you
started from. Apply writes only if the file is still the version shown; a newer
change refreshes the comparison. If Tine closes first, the draft is kept and the
same comparison appears after the next start, even when the page cannot be
opened (GH #541). -
Alt+click opens an internal link in the other pane (GH #438), and Ctrl/Cmd+click opens a background tab (GH #283), on page links, block references, reference headers, namespaces, the sidebars, zoom breadcrumbs and query results, next to Shift+click (right sidebar) and middle-click (background tab). Middle-button autoscroll and Shift range-selection are suppressed on every one of those surfaces (GH #207). Ctrl/Cmd+click no longer opens the other pane; that is now Alt+click.
-
Ctrl+Y also redoes on Windows and Linux (GH #491). It is a second default for the same Redo command, shown beside the binding in the shortcuts list; remapping or unbinding Redo replaces both chords.
-
Dropping a block on the right of another block's text nests it as that block's last child (GH #326), with a drop marker showing where it will land.
-
The Guide grows thirteen task pages. Start (Where things are, Bring an
existing graph), Workflows (Keep context visible, Structure repeated
information, Capture and plan your day, Find and revisit, Research a document,
Extend Tine) and Reference (Files, external edits and backups; Troubleshooting
and recovery; Journals, tasks and scheduling; Pages, links, references and
search; Platforms and mobile). Each describes only what this build does. -
A part of Tine that fails now says so, where it failed, with a Retry — instead
of leaving the window blank. The page, the sidebar, Linked and Unlinked
References and the conflict panel each fail on their own; the message says how
many backend operations are still outstanding and for how long when that is the
likely cause (GH #490, GH #332). -
When the graph you last used will not open, the Welcome screen says which one
and why, with Try again, Copy details and Open another graph. -
Page width is configurable per device (Settings → Appearance → Advanced):
a standard reading width, and a fill-pane or custom maximum for Wide mode
(GH #382).
Fixed
-
PDF highlight reads run on a blocking worker (og-R4A; REG-OG-R4A-HIGHLIGHT-READ-WORKER), returning worker panics as errors instead of aborting the app.
-
Query title edits preserve unrelated authored EDN (og-R4A; UI-OG-R4A-QUERY-TITLE-SPANS). Nested titles and discarded forms stay intact; unreadable options refuse the edit visibly. Option reads and edits share one Rust span reader across native and wasm.
-
Sheet field rename preserves ordered query aggregates, including repeated keys, average, whole-result count and unrelated configuration (UI-OG-R3A2-AGGREGATE-RENAME).
-
Starting another PDF export supersedes pending preparation; graph changes and window teardown discard stale output (UI-OG-R3A2-PRINT-SUPERSESSION).
-
Guide explains table-only sort clearing, search Retry and block-picker states, aggregate rename preservation, and Print query-limit refusal.
-
Cold Quick Capture waits for its graph before showing the editor (UI-OG-CAPTURE-COLD-R3B): graph-backed suggestions and the first captured entry work on
tine --capturestartup; superseded shows cannot focus or retarget the window. -
Launch backups wait until startup is idle (REG-OG-LAUNCH-BACKUP-IDLE-R3B): warm completion signals the background snapshot after a quiet period, with a safety deadline and immediate graph-switch cancellation.
-
Custom journal titles apply before graph activation and live settings refresh (REG-OG-CUSTOM-JOURNAL-TITLE-R3B): journal-template lookup reads a sync-delivered journal under its configured title. Missing-baseline saves remain guarded.
-
Unicode regex search agrees across native queries and browser filters (REG-OG-R1-REGEX-001): matching and highlights use the same bounded Rust engine.
\d,\w, and\brecognize Unicode text; inline flags such as(?i)work in friendly search, while backreferences, look-around, and programs above 1 MiB are refused. -
Caret selection follows code editors with wrapping disabled (og-R3A, master 587bdc4).
The shared caret mirror copies shaping and wrapping styles instead of inventing wrapped rows. -
Search failures can be retried in place (og-R3A, master 3712417).
The quick switcher offers Retry, and the block-reference picker distinguishes Searching, a failed
read with Retry, and an empty answer while preserving the editor text. -
PDF export stops at the Print query limit (og-R3A, master e04b0e7).
A renderer-declared source, nesting or match limit now stops preparation with its reason instead
of opening the print dialog over a placeholder. -
A local query-table sort identifies itself as Table-only sort (og-R3A, master a9c8b25).
Its label clears that local order without changing the saved query sort. -
Percent-escaped Org file links resolve to their page names (REG-OG-PAGE-FILENAME-001, og-B-TAIL). Reference extraction now uses the native filename codec through wasm, including escaped punctuation and namespace separators.
-
Saves keep reference counts and names live without full refetches (og-B-SIG2): native save and watcher signals update changed count targets and refresh names only when their sources change; ordinary text edits avoid both graph-wide reads.
-
Published queries use their owning page (og-B-SIG2): current-page queries, template substitutions, and query sheets share the baked publication context; identical queries on different pages keep separate static cache answers.
-
Saves reuse parser-owned formatting (og-B-SIG2): old page content and serialization layout come from one parse, removing two redundant parses from ordinary saves.
-
Code examples do not set a page's saved indentation (REG-OG-SIG-LAYOUT-001).
Formatting detection now uses the parser's actual outline headers, so a
bullet inside a literal code block cannot supply a false indentation unit. -
Failed journal scans report incomplete reads, and a page file whose name cannot be read is reported while the rest of the graph stays usable; unreadable graph config opens read-only, unreadable custom CSS reports its safe fallback, failed conflict refreshes keep their last inventory, and verification cancellation stays silent through a typed outcome.
-
Graph read failures preserve user data (REG-OG-B-FAIL2-CONFIG-WRITE, REG-OG-B-FAIL2-ASSET-TRASH, REG-OG-B-FAIL2-VERIFICATION-REPLACE): an unreadable config blocks writes into guessed directories, asset trash rechecks published references under the writer, and graph verification detects a source replaced while its old descriptor is being hashed.
-
Long flat TQL boolean queries no longer exhaust the stack; genuine nesting is bounded (REG-OG-B-DOOR2-TQL-FLAT-DEPTH).
-
Org drawer and directive properties retain backlinks; page icons ignore prose and literal examples (REG-OG-B-DOOR2-ORG-PAGE-PROPERTIES, REG-OG-B-DOOR2-PAGE-ICON-OWNERSHIP).
-
Org blocks documenting VCS conflict markers remain editable, and plain references keep decomposed Unicode accents with their letters (REG-OG-B-DOOR2-ORG-MARKER-LITERALS, REG-OG-B-DOOR2-NFD-REFERENCE-BOUNDARY).
-
Fullwidth commas separate tag references consistently with Logseq (REG-OG-B-DOOR2-FRONT-TAG-SEPARATOR).
-
Saving with retained graph views avoids graph-wide copies (REG-OG-B-COST-SNAPSHOT, REG-OG-B-COST-NAMES): page slots, timestamps, reference counts and name/signature/icon indexes share untouched tree branches. Save preservation checks also reuse the old parsed document (REG-OG-B-COST-PARSE).
-
Published query snapshots retain reviewed source documents across external edits; draft loading and CSV/TSV imports bound their reads before decoding (REG-OG-B-W3-PUBLICATION-SNAPSHOT, REG-OG-B-W3-BOUNDED-DRAFT-READ, REG-OG-B-W3-BOUNDED-CSV-READ).
-
Sheet row virtualization clears its visited-row state on graph reset (UI-OG-B-W3-SHEET-BINDING-RESET).
-
Sheet formulas memoize shared references, reject inherited member names, and refuse excessive field-rename depth without crashing (UI-OG-B-W3-FORMULA-DAG, UI-OG-B-W3-FORMULA-OWN-MEMBERS, UI-OG-B-W3-FORMULA-RENAME-DEPTH).
-
Published permalinks share page and block identity (UI-OG-PERMALINK-IDENTITY-001, UI-OG-PERMALINK-BLOCK-ID-001): equivalent Unicode page/alias names resolve, and Markdown/Org block links ignore code examples of IDs.
-
Expanded audio shares inline asset decoding (UI-OG-AUDIO-ASSET-PATH-001), including normalized asset-directory case and separators. Native streams, cached images and media fallbacks use one Rust MIME answer through the existing wasm module.
-
Export retains literal metadata and Org body drawers (UI-OG-EXPORT-LITERAL-METADATA-001): HTML, OPML and source Text strip canonical properties through the parser-owned region door.
-
Fixed namespace and published-backend identity drift, published search highlights and block-ID lookup, and deeply nested namespace/snapshot handling (OG-B-FRONT).
-
Fixed recursive embed exports, oversized scientific-zero output, rejected registry response cleanup, broad table rendering, and media labels containing a literal percent. Search excerpts and query-macro scans avoid repeated input work (OG-B-FRONT).
-
Exported grids show the same bounded rows their footer totals, and count their full area against export limits (og B-SHEET).
-
Sheet cell operations preserve their own configuration, query sheets keep the physical page already open, and field rename accepts Unicode property siblings (og B-SHEET).
-
Kept-draft conflict resolution and publication remain with their original graph; saving retires a pending first-write crash-safe draft in order, and uninstall stops a plugin still starting.
-
Asset versions, rendered block and board markers, readiness listeners, audio scrub gestures and updater handles retire with their owner. Query builder edits compose while print/parse work is pending, completed workspace searches release their cancellation lanes, parser comparisons stop on retirement, and visible PDF pages share a bounded tile budget.
-
Failed native reads keep their errors and recovery details (OG-B-FAIL): plugin and asset inventories
propagate disk failures, unreadable sessions cannot create blank workspaces, and incomplete transaction recovery
remains visible through conflict resolution. Launch-backup failures appear in the graph window. -
Failed reads stay visible (OG-B-FAIL): page and reference refreshes keep their last successful data,
journal-feed and session reads report failures, template creation refuses a failed name check or a read-only block,
and the journal-template picker offers Retry. Quick Capture now shows block-action feedback with copyable errors. -
Org pages with long directive preambles open without reparsing every growing prefix (REG-OG-ORG-DIRECTIVE-OPEN-001). Page moves sync each affected directory once, and both journal navigation doors share the absent-path rule (og-B-STORE).
-
Graph settings read their top-level EDN entries and decode authored string escapes consistently (REG-OG-CONFIG-ROOT-READ-001, REG-OG-CONFIG-EDN-ESCAPES-001).
-
Query memo limits include statistics and compiled patterns (REG-OG-QUERY-MEMO-001): oversized entries are returned without caching, and program reservations count toward both entry and total memory budgets.
-
Large query property lists and macro blocks stay responsive (REG-OG-QUERY-ATOMS-001, REG-OG-QUERY-MACROS-001): atom uniqueness uses one ordered set, and raw query macros are scanned once. TQL LIKE prefix shortcuts now share the matcher’s escaping rules, including
\a(REG-OG-QUERY-LIKE-001); query printers share literal escaping and numeric spelling. -
Faster graph startup and first search (og-P1). Journal-first reads avoid ordinary-page title discovery,
completed claimant discovery is reused by direct reads, and a search without page results skips page-property hydration.
Startup graph loading begins in the background while the frontend starts; open failures still reach the Welcome error card. -
Delayed actions retain their original targets and newer input (OG-K3).
Quick Capture refuses delivery after its destination graph changes and keeps
scratch/title edits made while saving. Page-menu deletion retains its file
target through confirmation, alias saves preserve active editor/IME drafts,
and cancelled or unmounted image/video resizes cannot edit another graph. -
Content survives disabled-query edits, Unicode Org conflict resolution, and raced page merges (OG-K1).
Editing another query operand preserves rejected conditions insideoff(...)byte for byte.
Keeping both Org block versions and renaming an Org reference tolerate non-ASCII prefixes.
An unchanged transaction step checks its revision before a merge can retire the source page. -
Edits preserve unrelated authored content (OG-K2). HTML paste keeps blank code lines; query-builder edits keep untouched empty boolean groups; sidebar arrangement edits keep the Favorites page preamble; sheet Flatten keeps group notes and properties as rows.
-
A second file holding a page's name is never shown or written as that page (master 7bd793b, og J1).
When a duplicate journal day (left by sync or a date-format change) or a same-named page opened by path
was open with unsaved input, the journals feed showed it as the requested day, so what was typed there
saved to the wrong file; quick capture and "add to today" could append into it and report success; a
sidebar item pinned to the other file stayed blank; and a PDF-notes refresh declined during an edit was
dropped, leaving the notes stale. The feed now keeps its previous days (or, on first open, says why in place) and fills in once
that input is finished; capture and carry go into today's real file, or, when the other file has unsaved
input, refuse and name both files (capture keeps its text in the capture window); the sidebar says why and retries;
the notes refresh applies once the edit ends. -
The preview build never offers the released Tine as an update (og J3). The updater and the
Check for updates button ask the Tauri updater plugin what theog-previewrelease offers (its
releases/download/og-preview/latest.json, the same manifest the installer uses), neverreleases/latest,
whose higher version number would have offered to replace the preview with the shipped app. With no
og-previewrelease, an unreachable or invalid manifest, or nothing newer, there is no toast and About says it
could not check or that you are current. The manual releases link opens theog-previewpage. -
Plugin settings: an operation finishing no longer re-enables controls under a later one. The Plugins
tab's busy state is held per operation (also while the uninstall confirmation is open) and released only by
its owner (master cdd0eda). -
A
file:link opens the file (GH #444, master c817fb1, og I3). A link written
[Test](file://D:\test.txt)(Logseq) or[Test](<file:///D:\test.txt>)(Obsidian) rendered
as a link and did nothing; it now opens that file or folder in the application your system uses
for it, on desktop. A file that is gone, a link that names no local file, and any other refused
link now show an error message instead of doing nothing. Other schemes stay refused. -
Clicking or dragging a code block's own scrollbar no longer starts editing it (master
8d404e9, og I3). Scrolling a wide code block by its native horizontal scrollbar entered edit
mode on press. -
Published exports ask for no refused writes; the workspace name field survives typing
(GH #549 siblings and GH #498, master 4aadb14, og I3). A read-only published export no longer
attempts the tag-table toggle query or the PDF view-position save it must refuse, and the
workspace name field is no longer rebuilt on every keystroke, so an input-method composition
is not dropped. -
Unlinked References: the highlighted mention is the jump control (GH #200, master
552d988 and 54c00e2, og I3). Clicking the highlighted mention opens its page with that
mention selected; the numbered jump row appears only for mentions beyond the excerpt, and Show
full block marks every mention. -
Faster large pages and lists (master a2789cc, 0350c00, 023c986, ce9a796, b3fc9c8,
8c495c1, og I3). The All Pages list labels its rows in one pass; each block derives its
heading, task and macro state once and only enters the marker/priority chip groups when it has
one; leaf blocks skip plugin thread-line subscriptions; indenting or outdenting a selection, and
redoing or pasting cut blocks that keep their ids, do one pass of work instead of one per block. -
Plugin calls survive a rename or a format change (master cdd0eda, og-I2).
A plugin's ownership of the open graph followed the render epoch, which a page rename, a typography
change or a journal-title-format change bumps, so a call in flight across one of those was dropped as
if the graph had changed. It now follows the graph binding only; switching graph still retires it. -
Creating a page from the Quick Switcher after a graph switch says so (og-I2). Alt+Enter and the
new-pane paths used to open nothing, or the wrong graph's page, when the graph changed under a
create in flight; they now show "The graph changed before the page was created. Try again." -
Restore can no longer be clicked twice while its confirmation is open (og-I2).
-
Arrow-key pane selection steps across the seam between panes correctly (master 91d102f, og-I2):
the candidate's near edge, not its centre, is tested against the current pane's boundary. -
Search regular expressions accept
\d \w \s \b(master f02af3e, og-I2). Only back-references
\1–\9are refused. Note: the native search reads\d \w \bas Unicode classes and the frontend
as ASCII, so a non-ASCII digit or letter can match on one and not the other. -
The HTML export no longer prints a sheet's
tine.*view settings as property chips (og-I2). -
The reference filter summary says filtering is pending while the descendant index loads (og-I2):
"Indexing N references… the filter applies when this finishes" instead of a count over an unfiltered list. -
The graph switcher says when it could not load the other graphs, and offers Retry (og-I2).
-
Diagnostics report watcher-batch timings, and
__tineWatcherLatency()prints them in the devtools console (og-I2). -
The Guide names the left and right sidebar link areas, the embed root-bullet drag versus click, and the
search-fold examples (か/が,и/й,क/कु,елка/ёлка) (og-I2). -
tine doctorreports unreadable pages and duplicate page names (og I1f, GH #35, master e7af4db).
It used to print OK and exit 0 while a page could not be read, or while two files claimed the same page name.
It now lists each, prints the configured home page, and exits 1 when it finds a problem. -
A live export opens on the graph's home page (og I1f, GH #35). The published app, from the command line
or the app, now starts on the configured home page when that page is exported, then Welcome to Tine, then the
first page;tine export live --home "Page name"chooses one explicitly and refuses a page that is not exported. -
Tine starts when its usual application-data folder cannot be written (og I1a, master 8e1ea0b).
On Linux, a root-owned or read-only~/.local/sharemade every launch crash before a window appeared.
Tine now keeps settings and the web view's data in~/.tine-data(or another private writable
folder) for that session and says so; if nothing is writable it prints one sentence explaining why. -
A conflict banner goes away by itself once the file is back to what you loaded (og I1c, master c68c0b6).
Some editors and sync clients briefly remove a file while replacing it; Tine treated the gap as a
conflict that only a click could clear, and held the edit unsaved behind it. If the file comes back
matching what your editor started from, the banner clears and your edit saves normally; a file that
comes back changed still raises the conflict. -
A page with an unresolved save conflict can be opened on disk again (og I1d, master 6f85313, GH #490).
"Open with default app" and "Show in folder" refused while a conflict was pending. Both now open the
file as it stands on disk and say so; your unsaved changes stay in Tine until you resolve the conflict. -
Carrying tasks no longer moves them into a second file for today (og I1e).
When two files existed for today (a duplicate day from sync or a changed journal date format) and the
other one was open under today's name, carry moved the tasks into it and said "Carried", while
today's journal in the feed never got them. Carry now stops and names both files. -
Closing no longer offers to throw away a save that is still running (og I1b, master fea3c31).
If writing your changes took more than four seconds — a slow or network drive is enough — the close
asked whether to lose them. It now says it is still saving and waits up to another 26 seconds; it
only asks once the save has failed or stalled, in words that say which. -
Ctrl+F scrolls to the exact occurrence, not just its block (GH #253, master
46a5290, og H). In a block taller than the window, in-page find used to center
only the block, leaving the match off-screen; it now centers the active occurrence
in the pane, falling back to the block while it is being edited. -
An HTML export of 0 pages says why (GH #560, master 350efef, og H). With no
public:: truepage (and "Include every page" unticked), Settings → Graph →
Export HTML and read-only app… now reports "only pages withpublic:: trueare
exported" instead of a bare "Exported 0 pages". -
A phone toolbar keeps calendar, journals and theme on the bar (GH #205,
master a006f13, og H). On a 390px phone they had moved into the "…" menu; they
now collapse only below a 345px toolbar. A narrow desktop window, whose tab strip
needs room, still collapses them at 460px and below a 440px window also moves
Back/Forward into "…", so the tab title stays readable instead of shrinking to a
couple of letters, and the "Show all tabs" button never covers the next button. -
The parser comparison no longer offers known intentional differences as bugs
(master c0c2ff1, og H). Dollar math inside Markdown emphasis (**…$x$…**),
which Tine keeps on purpose, is re-verified in isolation and listed under a
"known intentional parser difference(s) suppressed" count instead of a reportable
divergence. -
The "new sync conflicts need review" notice goes away once they are resolved
(master 042054c, og H). It used to stay beside the green "Merged" confirmation
until dismissed by hand; it now closes when none of the conflicts it announced is
left, whether resolved in Tine or cleared on disk. -
A voice memo stopped from another block is kept (master b3d64ad, og H). On
mobile, starting a recording in one block and tapping Stop while editing another
used to discard the recording silently; it is now saved toassets/and Tine says
it was not inserted. A failed stop or import is always reported. A recording or
photo that finishes after you switched graphs is saved to theassets/of the graph
it was started in, never the new one, and Tine names that graph and the file. -
An edit typed while another graph is opening is kept (og-T). It is saved
as a draft of the graph you left and offered for review when you reopen it,
instead of being dropped by the switch. -
Editing a block keeps its blank and under-indented lines byte for byte
(og-T). A whitespace-only line inside the edited block was written empty, and
a continuation line indented less than usual was re-indented. -
A broken
:hiddensetting fails safe (master, og-T). If:hiddenin
config.edncannot be read, Tine shows no graph pages until it is fixed,
rather than showing pages you meant to hide; entries with Unicode spaces at
either edge are ignored. -
A page's
title::is read from the page's own preamble only (og-T).
Properties after a leading# headingbelong to that heading block, so
opening, renaming and linking agree on the page's name. -
Android follows external file changes with native events by default
(master, og-T), like every other platform; polling stays a setting. -
The conflict badge is always reachable, and closes the phone drawer (og-F).
The sidebar's footer (the conflict badge and New page) sat one header-height below
the bottom of a short window, so a pending conflict could be invisible until you
scrolled the sidebar. It now fits, and on a phone tapping the badge closes the
navigation drawer so the Conflicts page opens in view instead of behind it. -
A failing tag table or conflict comparison no longer blanks the page (og-F).
If reading them fails, the page shows a retryable error in that panel instead of
throwing while it renders. -
Query board and table settings survive and apply (master P5A/P5B, og E).
A board now groups by the query's own Display grouping (it ignored it before), and its Group by
control changes that setting. Atine.fieldslist of column names on a query block is no longer
mistaken for a typed schema: its columns are not marked stray, and declaring a schema moves the
list totine.columnsin the same undo step. A saved query tab or window state with one malformed
display setting keeps the tab and drops only that setting. "No grouping" on a query board now shows one column of every result
instead of falling back to the task-state columns. -
Red error messages stay until you close them, and offer Copy. Every error
is also noted in the privacy-safe diagnostic report (not its text) and, with
TINE_DEBUG=1, written in full to the debug log (og OG-TOAST). -
No false "couldn't finish checking for external changes" at launch.
Returning to the window before the graph finished opening (or on the Welcome
screen) no longer reports the not-yet-open graph as a failure; the same holds
for the session save and inline page icons (og OG-TOAST). -
A panel whose data fails to load no longer blanks itself (master c5279d1,
og-D). When a background fetch fails, backlinks, the Quick Switcher, the
calendar, Settings, the sidebar and the other panels that read one now keep
what they had or show "Couldn’t load …" instead of throwing; the block
references panel and Search add a Retry. Details go to the debug log only. -
tine open GRAPHwhile Tine is already running now opens that graph in a new
window; the second launch used to be read as a page called "open" and opened the
wrong folder (master e7af4db, og-D). -
An edit made while a graph switch was already under way is no longer
dropped (og A). Tine saves once more right before it opens the other graph,
and stays on the current graph if that edit cannot be saved. -
Files with very long names can be imported, deleted and resolved. An asset
or page whose name is close to the 255-byte limit (an 84-character CJK title)
could not be imported, re-imported under a numbered name, moved to trash,
resolved after a VCS merge, or created: the helper files and trash copies Tine
names after it were too long. Trash copies now shorten the name and keep its
extension. Merging a page also no longer repeats an alias written after a
full-width comma, and a drag that would nest the outline too deep now says so. -
A page marked
public:: falsestays out of every export. With
:publishing/all-pages-public? trueinconfig.edn, or Include every page
ticked, Tine published such pages anyway; like Logseq it now leaves them out,
and their blocks no longer reach another page's embeds, queries or references.
A query's own Export… is unchanged. -
An outside edit to
logseq/config.ednnow applies while the graph is open
(og 22b). A change made in Logseq, a text editor or delivered by a sync
provider was taken in only after a rename or a reopen; the store watcher now
reloads it in both notify and poll modes, only when its bytes changed. -
A settings change edits only its own top-level entry of
config.ednand is
refused, leaving the file untouched, when the file is half-written or not a map;
a key nested inside another setting is never overwritten (og 22b). -
Renaming the home page keeps it the home page, as in Logseq; merging it
into another page does not (og 22b). -
Choosing "Keep mine" after a conflicted alias save no longer duplicates the
alias's content on its owner page. The retry replaces what already landed,
and refuses rather than guessing if the owner changed meanwhile (og L13). -
Hostile content cannot crash a table formula or navigate the app away (I-22): formulas that nest past 128 levels, counting references, show an error in the cell instead of overflowing the stack, video and tweet macro links open in the system browser, and on Android and iOS a link with any other scheme (for example
intent:orjavascript:) no longer navigates the app. -
A save that fails on the disk now says which step failed (GH #538, #590): the message names the platform call (for example the no-replace rename, or syncing the temporary file) and its OS error number, so a report can be acted on. Diagnosis only; it does not make such a save succeed.
-
The vendored parser WASM matches a clean source rebuild again (GH #392), so F-Droid's from-source build reproduces the shipped parser; CI now rebuilds it and fails on any difference.
-
A page rename no longer rewrites links inside a file that still carries
unresolved git or Fossil merge markers; the file keeps its bytes and a message
lists it. -
Tine's Concord ledger now lives in its own app-data folder, so it no longer
deletes, or is deleted by, the ledger of a mainline Tine build on the same machine. -
Middle-clicking a link opens a background tab without switching panes (GH #87): the click no longer makes the pane under it the active one, so the tab opens where you are working.
-
Ctrl/Cmd+click and Alt+click on an outline bullet go where the same modifier on a link goes (GH #456): a background tab and the other pane. Bullets in linked references do the same.
-
A split pane's only tab keeps its close button (GH #207), unless that tab shows the journals; closing it closes the pane.
-
A file change that arrives while you are editing that page is applied when you finish (GH #337), instead of being dropped until the next change.
-
Block embeds follow their source's fold state live (GH #360). Folding the embedded block inside one embed is remembered by that embed alone, and folding rows inside an embed yields to the next fold of the source.
-
Filter chips and groups in linked and unlinked references treat differently-normalized spellings of one page name as the same page.
-
Saving a search or query as a page in an Org graph writes its view properties where Org reads them (a
:PROPERTIES:drawer, not a body line that was never read back), and a save the workspace has since moved on from is refused instead of publishing an obsolete search: if the write had already begun, the page is kept and the workspace stays put with a note. -
Dragging a block embed by its bullet moves the embed itself (GH #514), not the source block it shows. Rows nested inside the embed still drag as the source's own outline.
-
Arrow keys move between bullets inside linked references, block references, query results and embeds (GH #341). Up/Down and Left/Right at a block edge now step through the blocks as rendered in that view instead of jumping the caret to the source page's outline, where the editor is usually not on screen; merges and indents there still act on the real page outline.
-
Code blocks: the caret no longer jumps when you click into a code block or leave it with the arrow keys, the language line and fence markers are editable as text, and clicking a code card places the caret where you clicked (GH #489).
-
Property autocomplete follows Logseq's keyboard flow (GH #306): typing
::at the start of a line puts the caret before the delimiter so you type the name, "Create" is offered first, values already on the line are not suggested again in a comma-separated list, and a failed facet lookup no longer raises an error toast. -
Context-menu submenus open on the side that stays on screen near the window's right edge (GH #471).
-
Block text and bullet share one first line, so the bullet, the reference-count badge and the first text line line up in the default and serif themes (GH #459, GH #454).
-
Default task styling: done tasks are struck through and dimmed, and the checkbox colours follow the theme (GH #394).
-
Typing into a page in the right sidebar no longer reseeds an empty trailing block over your text (GH #483).
-
Clicking into a block starts editing on mouse-down, so the caret lands under the pointer even when a re-render follows (GH #368).
-
IME composition keeps a block in its edit transaction when the composing input arrives without a
compositionstart, so a composed character is not lost. -
Android: the on-screen keyboard no longer covers the block being edited (the app's bottom inset accounts for the IME).
-
The static HTML export shows a block's clocked time and the numbering of
numbered blocks. A block with LOGBOOK clock rows keeps its elapsed-time badge
(the drawer itself stays hidden), and blocks marked as own-numbered lists show
their1./a./i.markers as the app does. -
Journal days and "Today" follow the calendar zone the backend uses
(GH #607). The frontend no longer trusts a WebView clock that can disagree
with the system zone; it applies the measured backend offset, refreshed
periodically and on focus. -
Opening a page by a differently cased name lands on the spelling that
exists on disk (GH #597), and renaming an Org page keepsfile:links to
it valid under the graph's filename format. -
Switching Settings sections no longer makes the whole dialog vanish and
reappear, and the maximized size is remembered across restarts (GH #409,
GH #427). -
The right sidebar's spare header width is no longer a link and the left
sidebar's whole row opens its page (GH #464, GH #468). -
The fold arrow on a block is no longer partly covered by the fold-all guide
(GH #423), and the left sidebar's scrollbar can be grabbed with the resize
strip beside it instead of over it (GH #435). -
Application chrome no longer starts a text selection while page content
and editors stay selectable.
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.1_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.