Added
- Scroll position restored on back/forward. Navigating away from a long page
and pressing back (Alt+←) now returns you to where you were scrolled, like a
browser — and switching tabs restores each tab's scroll too. A new page still
opens at the top. - First-run onboarding + "create a new graph". Starting Tine with no graph
configured now shows a Welcome screen instead of a blank window: open an
existing Logseq graph, or create a new graph scaffolded with a small narrated
demo — a "Welcome to Tine" tour plusFeatures/…andProject/…pages that
exercise block references, embeds, namespaces and tasks, and walk a newcomer
through quick-capture (with how to bind the hotkey), slash commands, the command
palette, the sidebar, PDF annotation and tabs. The new graph is ordinary Logseq
Markdown (triple-lowbar namespace filenames) — it opens in Logseq too. - Block-reference parity round 2. Right-click an inline
((block ref))for a
context menu (open in sidebar / go to block / copy ref / copy embed). The
per-block references panel now shows each referrer's ancestor breadcrumb (like
OG). In the editor,Mod+Cwith no text selected copies a reference to the
current block. Copying blocks now also puts atext/htmlflavor on the
clipboard (best-effort) so a paste into a rich editor keeps the outline nesting. A
block embedded via{{embed ((self))}}no longer shows its own ref-count badge,
and a((non-uuid))in prose is no longer counted as a reference (both match OG).
New option (Settings → Journals & tasks): click a block reference to zoom in
(Logseq) vs scroll-to-it-in-place (Tine default). - More OG macros.
{{twitter}}(alias of{{tweet}}),{{vimeo}}and
{{bilibili}}(iframe embeds, accept a bare id or a URL),{{img url [w h] [left|right|center]}}(sized/aligned image), and user-defined:macrosfrom
config.edn—{{name a, b}}substitutes the comma-separated args into the
template's$1..$Nplaceholders and renders the result as markdown (so a macro can
expand to[[links]], bold, other macros…).{{youtube-timestamp}},
{{cloze}}(degrades to click-to-reveal) and{{zotero-*}}render in a degraded
form and say so (no on-page-player seek / SRS engine / Zotero connector). - Video drag-resize + audio "⇔ Widen" toggle. Video now has the same corner
resize grip as images (persisted as a{:width N%}brace). Audio — which has no
fullscreen — gets a toggle that stretches the seek bar to the full column for
precise scrubbing. - Image lightbox closes on Esc (previously click-away only).
- Linked/Unlinked references in the right sidebar. Opening a page in the sidebar
now shows its Linked & Unlinked References sections too, like OG (not just the page
body). - Configurable copy behavior (Settings → Journals & tasks), with a new
"Differs from Logseq" row style — an amber badge + a one-line "Logseq behavior"
note + a "↩ Match Logseq" button — for options whose Tine default intentionally
diverges from Logseq:- Copy a parent block's sub-blocks — default OFF (Tine copies only the
blocks you actually selected; selecting just a parent no longer drags its whole
tree into the clipboard). Turn ON for Logseq's "always copy the sub-tree". - Strip
collapsed::when copying — default ON (Tine drops this view-state
property from copied text;id::is always stripped too). Turn OFF to match
Logseq, which keepscollapsed::.
- Copy a parent block's sub-blocks — default OFF (Tine copies only the
Changed
- Asset filenames are now
yyyymmdd-hhmmss-name(timestamp first, human-readable),
so a plain name-sort inassets/is also chronological. (Wasname_yyyymmddhhmmss.) - Inline block refs are link-styled, not a grey chip. They keep the full-strength
text colour with a thin accent-coloured underline and a link-coloured hover (OG's
.block-ref), instead of the previous grey-text-on-grey-fill that was easy to miss.
Fixed
-
Copy/cut no longer leaks
id::into pasted text. A referenced block carries an
id::property; OG strips it when copying to the clipboard and now Tine does too.
(Theid::stays in the file — opening a block in the sidebar/new tab/zoom still
stamps one so those spots survive a restart — it's just removed from the clipboard
copy, exactly like Logseq.) Quick-capture keepsid::(it writes to a file). -
Left sidebar "All pages" works on large graphs. The page-count and the
expandable list keyed off a one-shot fetch that raced a slow-loading graph and never
retried; it now refetches when the graph finishes loading. -
Namespace pages match OG. The
{{namespace}}macro now renders the bold
"Namespace" label + root link header (then the bulleted descendant tree), and
every non-journal page that's part of a namespace gets OG's automatic
"Hierarchy" section below its blocks — a bulleted list with one breadcrumb
row per namespace level ([[Formula1]] / [[2026]] / …), each segment a link to
its cumulative path. Intermediate levels are synthesized, so a namespace with no
file of its own (e.g.Formula1/2025when onlyFormula1/2025/…exists) still
gets its own row — like OG's recursive listing. Replaces the earlier non-OG
"Namespace (direct children)" list. -
Page
icon::is hidden from the property list (it's shown as the title icon),
matching OG. -
Per-block reference count + referrers panel. A block that's referenced
elsewhere now shows a small count badge to its right (matching Logseq): click it
to expand the list of blocks that reference it (grouped by page, same-page
referrers included), or shift-click to open the block in the right sidebar. The
count covers bare((id)), labeled[text](((id))), and{{embed ((id))}}
references. (Like the page-level linked references, it refreshes when the graph
changes, not on every keystroke.)
Fixed
-
“Copy image” from the image viewer works now. Click an image to open it,
then right-click → Copy image (or the Copy button) to put it on the OS
clipboard. WebKitGTK's native right-click "Copy Image" doesn't actually
populate the clipboard (paste yielded nothing); Tine now encodes the image and
writes it through the Rust clipboard path instead. -
The pinned-tab pin is back (the red 📌). Bundling a color-emoji font made
WebKitGTK paint the📌as a blank glyph (an empty gap on pinned tabs); emoji
now render as Twemoji SVG images, so the red pushpin shows everywhere again. -
Labeled block references resolve. The
[label](((block-id)))form — a link
whose target is a block — now renders as a clickable block reference showing
label (and navigates to the block, with a hover preview), instead of a dead
link that tried to open((id))as a URL. The bare((id))form already
worked; this is the labeled variant Logseq writes for "copy as link". -
Clicking a block reference jumps to the block. A block ref now scrolls to
and briefly highlights the referenced block (even when it's on the same page,
where it previously appeared to do nothing) instead of only opening the page.
Shift-click opens the referenced block in the right sidebar. -
Block references export correctly. The static HTML export now resolves
((block ref))s (bare and[label](((id)))) to a link to the target block's
anchor on its exported page, with the block's text/label — instead of the old
brokenpublish/((5cfb…link with a stray)). Unresolved refs render as plain
text, never a broken link. (The export parser is now paren-balanced too.) -
Inline link/image targets are paren-balanced. The
[..](..)/
parser now counts parentheses when reading the target, so a URL that itself
contains parentheses is captured whole — fixing not just block-ref links but
any link/image whose URL has a(, e.g.…/wiki/Foo_(bar)orimg_(1).png. -
Math renders in the HTML export. Exported pages now load KaTeX (and mhchem
for\ce{…}) and wrap$…$/$$…$$as\(…\)/\[…\], so equations
typeset client-side instead of showing raw TeX. (Typesetting fetches KaTeX from
a CDN, so it needs a network connection when the page is viewed.)
Added
{{namespace X}}macro. Renders the full nested descendant tree of a
namespace (like Logseq), each page showing itsicon::. Previously it was
printed as literal text.- Page icons. A page's
icon::property now renders as an icon next to the
page title and beside each page in the{{namespace}}tree, matching Logseq. - Emoji render everywhere (Twemoji SVGs). Emoji — page
icon::s, emoji in
notes — now render as bundled Twemoji SVG images instead of relying on an
emoji font. WebKitGTK paints a color-emoji webfont as a blank glyph (page
icons showed as empty gaps), but an<img>renders in every engine. The SVGs
are bundled locally, so it works offline.
Fixed
- Dark theme: native form controls follow the theme (
color-scheme), so the
number-input spinners (e.g. Carry last N days, the agenda window) are dark in
dark mode instead of white. - “Open in external player” works for video, not just audio. Tine launched
the OS player inheriting the environment it sets for its own WebKitGTK
rendering (LD_PRELOAD,WEBKIT_DISABLE_*,GDK_BACKEND); under those a
player’s video output could fail — e.g. VLC opened and closed immediately —
while audio (no video output) was unaffected. The external opener now runs
with those variables scrubbed.
Added
- Configurable
[[/#autocomplete default. Settings → Journals & tasks →
Link autocomplete default: ON makes Enter link the first match; OFF
(default, matching Logseq) makes Enter create a new page/tag unless an exact
match exists. The other options stay one arrow-key away either way.
Download an installer for your platform below. macOS/Windows builds are currently unsigned (right-click → Open on macOS; More info → Run anyway on Windows).