github martinkoutecky/tine v0.6.986
Tine v0.6.986

4 hours ago

iPhone / iPad: join the public beta on TestFlight. A TestFlight build is published for most releases; it may lag this one by a few days.

Fixed

  • On Android 11 to 14 shared storage, creating, saving and renaming pages
    failed with "Invalid argument (os error 22)", because the storage refuses
    the rename that is guaranteed never to overwrite a file. Tine now checks
    that the name is free and renames without the guarantee on storage that
    refuses it. The same applies to network drives (NFS) that refuse it
    (GH #538).

  • Renaming a page that many pages link to, or a sync tool changing many
    files at once, no longer holds up searches and references while Tine updates
    its index. The update is written as one transaction instead of one per 32
    pages, and copying the index's log into the index file moved off the update
    onto a background thread. On a 10,000-page graph a rename now writes about
    a third as much (603 to 200 MB) and finishes in half the time; on Windows,
    where each of those copies flushed the disk, a rename took about a minute
    (GH #543). Once copied, the log is emptied, so the next launch does not
    copy it again. Internal: tine-storage v0.28.2.

  • Typing in a block no longer resends the list of every linked page name to
    the editor after each save when no link changed: a precision loss in the
    check made it resend all of it, 307 KB on a 10,000-page graph (GH #543).

  • A save refused to protect data in the file, such as a page with unresolved
    merge markers or a page-header property moved into the outline, is now
    reported once and not retried. v0.6.985 said this was fixed, but the app
    still received the refusal as unknown and retried it (GH #535, GH #546).

  • When a save fails because the device refuses a file operation, the message
    now names the operation and the system's error number, so a report or
    screenshot tells which step failed (GH #538, GH #590).

  • Search no longer treats letters that differ by a mark as the same letter
    where the mark makes a different letter or syllable: か no longer finds
    が, и no longer finds й, and in Hindi, Thai or Tibetan a vowel sign
    or virama is no longer dropped, so क no longer finds कु. Accents still
    fold as before (cafe finds café, γεια finds γειά), елка finds
    ёлка, and lodz now finds Łódź (likewise ø, đ, ħ, ŧ). The first launch
    after this update re-indexes the graph once.

  • A Ctrl+K search of one or two Chinese, Japanese or Korean characters, such
    as 会议 or 東京, now reads an index of those short words and visits only
    the matching blocks. Before, it scanned every block, which for a rare word
    took about 1.5 s per keystroke on a 10,000-page graph. Unlinked References
    of a one- or two-character page name and content match queries use the
    same index. It is built during the same one-time re-index as the change
    above (GH #543). Internal: tine-storage v0.28.0, projection schema 31.

  • Reopening a graph no longer makes Ctrl+K, Linked and Unlinked References,
    query blocks, the page list and block reference counts wait while Tine
    compares the graph on disk with its search index. Until that comparison
    finishes they answer from the index as you left it, and they update by
    themselves when it finishes, so a page edited in another app while Tine was
    closed shows up then. Edits you make meanwhile show up at once. Actions
    that depend on the answer, such as creating, renaming or deleting a page,
    inserting a template or exporting, still wait for the comparison (GH #550).

  • Reopening a graph no longer waits for a full check of the search index
    before Ctrl+K, references and queries answer: that check took over a second
    on a 10,000-page graph at every launch. The index is now checked in the
    background, and only after the computer or phone restarted or once a week;
    a phone closing Tine in the background never causes a check or a rebuild.
    Damage the check finds still rebuilds the index (GH #550).

  • A block reference whose target cannot be found now shows its full
    ((…)) text, as Logseq does, instead of the first eight characters of its
    id. This includes (((uuid))), which Logseq and Tine both read as a
    reference to the id (uuid; write ( ((uuid))) or [label](((uuid))) to
    show a reference in parentheses (GH #589).

  • Linked and Unlinked References no longer lose blocks from pages you edited
    before restarting Tine. A block you added or moved on a page in one session
    went missing from other pages' reference panels after a relaunch, and stayed
    missing until that page was edited again. Looking such a block up by its
    id after a relaunch works again too. The first launch after this update
    re-indexes the graph once (GH #594).

  • When the search index cannot be built, Linked and Unlinked References and
    query blocks now say so instead of staying empty or "indexing" for the rest
    of the session. Tine tries a failing build at most three times; after that
    those panels show "couldn't be built" with a short code, a Retry button
    and Create diagnostic report, and a relaunch tries again. Each failed
    attempt is recorded in the diagnostic report as a fixed code with no graph
    content. While the index is still building, Linked References shows
    "indexing…" instead of hiding, and reads that can fall back to the pages
    themselves, such as the page list, wait at most a minute for the index.
    A page Tine cannot read, or one deleted while Tine was not watching, no
    longer makes Linked or Unlinked References read every page in the graph
    (GH #594).

  • Ctrl+K answers a one- or two-character search in a large graph in a
    fraction of the time: such a search now reads only the most recent blocks
    and says More matches exist when older ones may match too, where it
    could take over a second on a 10,000-page graph. A search in Chinese,
    Japanese or Korean, where one or two characters are a whole word, still
    searches every block. While the index is first being built, Ctrl+K answers
    from the pages up to several times faster, and it switches to the index
    sooner once the index is ready. While you type, the
    previous results stay on screen until the new ones arrive instead of
    blanking on every key, and Enter waits for the new results. With
    --debug, the log says whether each search was answered by the index or
    by scanning pages, and how long it took (GH #543).

  • On a Mac, Tine now declares macOS 12.3 (Monterey) as its minimum, and the
    startup message for a too-old web engine no longer says to update Safari: on
    older macOS, updating the Safari app does not update the engine other apps
    use, so the advice could not work (GH #572).

  • On Windows and macOS, a page whose name differs from its file name only in
    case (for example Contents stored as contents.md) opens and can be
    edited again. It failed with "could not be activated for editing" when
    opened as the home page, from search or from the sidebar, and it could
    appear twice in search. A file renamed by case only outside Tine, for
    example by another device, is now listed once under its new name, and a
    tab or Recent entry saved under the old spelling opens again (GH #597).


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_*-portable.zip for their architecture. Windows builds are currently unsigned, so Windows may show a warning on first launch. The macOS build is signed and notarized. On macOS, if Tine repeatedly asks to access Documents, see the workaround in the README.

Don't miss a new tine release

NewReleases is sending notifications on new releases.