Skip to content

Releases: grub-basket/Trynalist

0.82.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 16:42

0.82.0

Everything since 0.81.0: a shortcut reference in settings. Requires Obsidian 1.11.4 or later.

Settings

  • New "Shortcut reference" below the "Built-in shortcuts" toggle. It lists every built-in chord with the command it runs, formatted for your platform (⌘⇧⌥ on macOS, Ctrl+Shift+Alt elsewhere).
  • Use it to copy the scheme into Obsidian's hotkey settings if you turn built-in shortcuts off, or want one of them to work outside a document. Search the hotkey settings for this plugin's name.
  • The list is generated from the same chords the document view registers, so it always matches what actually fires.

0.81.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 21:32

0.81.0

Everything since 0.80.1: the source code passes the community-store review lint, and the keyboard shortcuts moved to where the store allows them. Requires Obsidian 1.11.4 or later.

Keyboard shortcuts

  • The store forbids plugins from shipping default hotkeys, so Trynalist's commands no longer carry them in Obsidian's hotkey settings. The same chords still work inside a document (Mod+] / Mod+[ zoom, Mod+Up / Mod+Down move, Mod+. fold, Mod+Shift+C checkbox, Mod+Z / Mod+Shift+Z / Mod+Y structural undo and redo, Mod+Shift+K delete, Mod+Shift+M move to, Alt+Enter line break, and the rest): they are now handled by the document view itself, only while the keyboard is in a document.
  • New setting, "Built-in shortcuts" (on by default). Turn it off to bind your own in Obsidian's hotkey settings.

Source review fixes (no behaviour change)

  • Typing: Obsidian's moment is now typed (the moment type package is a dev dependency), frontmatter reads are narrowed instead of left as any, and zip helpers no longer need type assertions.
  • Promise handling: click and modal callbacks that returned promises are wrapped so rejections still surface; a few unhandled promises are now awaited or explicitly ignored.
  • Regular expressions: redundant escapes removed; filename sanitisers build their control-character ranges at runtime.
  • this aliasing removed from nine helpers; a var became a hoisted let; the deprecated activeLeaf and setDynamicTooltip calls are gone; caretPositionFromPoint is tried before the deprecated caretRangeFromPoint.
  • builtin-modules replaced by Node's own builtinModules list in the build config.

Not changed

  • execCommand("insertText") in the two paste handlers and the keyCode === 229 composition check stay: no replacement keeps native undo or the Safari composition signal.
  • setWarning stays on four buttons: its replacement needs Obsidian 1.13.
  • The settings tab still uses display(); the declarative settings API is a later migration.

Repository

  • main.js in this repository is now the clean npm ci && npm run build output, and the release workflow builds it from source before uploading, so the release asset and a build from source match.

0.80.1

Choose a tag to compare

@github-actions github-actions released this 30 Sep 20:28

0.80.1

Everything since 0.80.0: a stylesheet clean-up for the community-store review, and the source code now lives in this repository. Requires Obsidian 1.11.4 or later.

0.80.1 — store review fixes

  • The stylesheet no longer uses !important, :has() or MathJax tag selectors, all of which the store's CSS lint warns about. Hidden settings rows and filtered pane rows are hidden by the plugin directly; the mobile visibility popover is laid out by the stylesheet alone; display maths in notes keeps its left alignment through selector specificity.
  • Global search: the "only the innermost hovered row lights up" behaviour is now set by the plugin as you move the mouse, instead of by a :has() rule. Same look.
  • Links use a dotted bottom border instead of a dotted text underline (solid on hover).
  • The result grid uses gap instead of column-gap.

Repository

  • src/, package.json, package-lock.json, tsconfig.json and esbuild.config.mjs are now included, so the plugin can be built from source (npm ci && npm run build) and reviewed by the community store. main.js is still committed and is what BRAT installs.

0.80.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 06:47

0.80.0

Everything since 0.77.1: per-item edit history, a better trash, and mirrors you can edit, re-aim and nest. Requires Obsidian 1.11.4 or later.

0.80.0 — mirrors

  • Text can be edited through a mirror: click a mirrored row's text, type, and press Enter (Escape cancels). The change is saved to the item's own document. When that document is the current one, or is open in another tab, it is one undo step there; otherwise it is written to the file, and "Item history…" on that item can bring the old text back. Only text is editable through a mirror; structure changes still happen at the source.
  • "Point at another item…" in the mirror menu re-aims an existing mirror at any item, in this document or another. Undoable.
  • A mirror inside a mirrored subtree now expands too, up to five levels deep; a mirror that would lead back into itself says so instead.
  • Search inside a document finds text shown through its mirrors, and draws the mirror as the match.
  • Word count reports words shown through mirrors separately: "(+N words shown through mirrors)".
  • The mirrors guide describes editing, re-pointing, nesting, search and word count.

0.79.0 — history of moves and folds; trash restores many at once

  • Item history also records where an item sits (its parent and the item above it) and whether it is folded. These are recorded at a lower rate than text: once the item has stayed put for two minutes, at most every ten minutes per item, and whatever is still waiting when the app quits. Renumbering alone is not a move.
  • In "Item history…", each version shows where the item was, and its text, position and fold state can be restored separately ("Restore text", "Restore position", "Fold it again" / "Unfold it again"). Each is one undo step.
  • Trash: a checkbox per deletion, "Select all", "Restore N selected" and "Restore all" (which asks first when there are more than ten deletions). Deletions come back one at a time, oldest first, and every affected open document updates.

0.78.0 — per-item edit history

  • New in the sync safety net: every version of every item — your edits and changes arriving from other devices — is kept on each device for 30 days, in the hidden backup folder (not synced by Obsidian Sync). Typing produces about one version per item per minute.
  • "Item history…" in an item's menu (and a command) lists its versions newest first and restores any of them as one undoable edit. "Also search daily snapshots" looks further back through the daily outline snapshots.
  • "Recently deleted items…" lists items deleted in the last 30 days that are no longer anywhere — including ones another device deleted — and puts them back at the end of their document.
  • A setting under Backup turns item history on or off (on by default).

0.77.2 — wording

  • Command names no longer repeat the plugin name (the palette already shows it); hotkeys keep working.
  • Notices, settings and dialogs use sentence case; "Show the time suffix" replaces "Show AM/PM", and a few descriptions read more plainly.

Internal

  • A helper reads an item file's id, text and note outside a loaded document (used by item history).
  • Developer notes updated (not part of the plugin).

AI assistance: Claude (models: claude-opus-5-5, claude-sonnet-5-5)

0.77.1

Choose a tag to compare

@github-actions github-actions released this 30 Sep 00:11

0.77.1

Everything since 0.65.2: a full release review, sync safety, big-document speed, a reworked Dynalist update, mirror fixes, and many smaller corrections. Requires Obsidian 1.11.4 or later.

0.77.1 — lint hygiene

  • The popout-window observer is typed without globalThis.
  • The deep-link warning reads "that link does not point at an outline document".
  • Developer notes updated (not part of the plugin).

0.77.0 — large documents open fast

  • Documents with 1,200 or more visible items draw 400 at a time and fill in the rest as you scroll, when the cursor moves into it, or when you jump to an item. A full redraw of a 4,000-item document drops from about half a second to under a tenth.
  • After a redraw the view keeps the same item at the top, instead of a pixel offset.

0.76.6 — mirrors

  • Mirror and portal bodies honour Hide completed, and show numbering and checklist boxes inherited from the source document.
  • Switching a mirror between mirror and portal, and collapsing a mirror, can be undone.
  • Duplicate document points the copy's own mirrors at the copy's items.

0.76.5 — moves keep their Dynalist link

  • Moving items to another document, or turning an item into a document, keeps each item's creation time and Dynalist id down the whole subtree, so the next Dynalist update does not re-create them.

0.76.4 — speed

  • Import and update pace their requests from the start of each read.
  • MathJax is no longer loaded at startup.
  • Search no longer adds a keyboard listener on every redraw.
  • Notes rendered in search results are released when the results change.
  • Images load lazily.
  • The agenda recompute is shared between callers, ignores items overdue by more than 180 days, and prunes old reminder state.
  • The document scan reads manifests in parallel.
  • Collapse all and Expand to level write their files in parallel and show progress on big documents.
  • Saving an item's text writes its file once instead of twice.
  • Imports write item files 16 at a time.
  • Capture to inbox writes one file when the inbox is closed, and goes through the open tab (undoable, no reload) when it is open.
  • Drag and drop works out the drop position once per drag and finds the gap by binary search.
  • Ordinary typing no longer forces a layout on every key.
  • Drag-selecting repaints only the rows whose selection changed.
  • Arrow keys reuse a cached list of visible items.
  • Flat and Article views show items in pages with a "Show more" button; the Flat view's ancestor trail is plain text.
  • Tags, attachments, [[ suggestions, search across documents, import comparison and the link audit share one cache of loaded documents, cleared when those documents change.
  • Drag and drag-select caches are dropped when the outline redraws.

0.76.3 — editing and document management

  • An item deleted from another view of the same document is not written into the trash.
  • An item created under a parent that no longer exists goes to the top level.
  • Folding and renumbering no longer mark items as edited.
  • Undo and redo survive a failed file write.
  • Deleting the item you are zoomed into zooms out first.
  • "Delete checked items" from the palette or toolbar covers the whole document.
  • A refused drop no longer uses up an undo step.
  • Ticking several selected recurring items rolls each forward.
  • Undo history is smaller on phones and is dropped when a file closes.
  • Blank rows are saved when the app quits or a phone puts it in the background.
  • Upload from the mobile toolbar always leaves the link it reports.
  • Renaming or moving a document keeps its settings, Recents entry and bookmarks.
  • Duplicate document copies its attachments too.
  • Archiving from the combined panel refreshes the Files and Archive panes.
  • The Tags pane picks up new tags by itself.
  • The root-folder setting applies when you leave the field or press Enter, with folder suggestions.
  • When two item files share an id, the newer one is shown and a notice says so.
  • The integrity report names both duplicate files and which one is shown, and skips Trynalist's own internal folders.
  • README: Mod+↑/↓ and the heading shortcut described as they actually behave.

0.76.2 — safety

  • Link chips open on a primary click only, and ask before handing a file to another app.
  • Deep links open only Trynalist documents inside the root folder.
  • Obsidian's file-open hook is restored safely and keeps the caller's active flag.
  • Importing a key from the keychain shows which secret it will use and asks first.
  • Link patterns stay fast on text dense with brackets.
  • One very long line can no longer blank the outline.
  • The Attachments list shows only real attachments, and missing bare file links.
  • Pasted and dropped files get a safe file name.
  • The folder converter only treats a folder as Stashpad when its notes look like Stashpad notes.
  • Stashpad → Trynalist conversion reads a note's own frontmatter even before Obsidian has indexed it.
  • Conversion removes a Stashpad sidecar file only once its backup exists.
  • Trynalist → Stashpad conversion keeps fractional sibling order.

0.76.1 — import, formats and backup

  • OPML import decodes entities once, and a bad character reference no longer aborts it.
  • Indented-text import nests by the raw indent width.
  • Loading a document reads fresh frontmatter for files written a moment ago.
  • A byte-order mark no longer costs an item its frontmatter.
  • A carriage return inside item text stays inside the item.
  • A due date that is not text no longer silences every reminder.
  • A document with an empty title takes its folder's name.
  • File names made from titles are length-capped and never a reserved Windows device name.
  • A new document never collides with a folder whose name differs only in case.
  • Items added in Dynalist land where Dynalist has them.
  • Import resume only offers imports that are really stalled on this device.
  • Backup restore checks file sizes, follows Obsidian's path rules and never half-restores silently.

0.76.0 — performance

  • Inserting an item no longer rebuilds the whole index.
  • Moving an item among its siblings rewrites only that item.
  • A batch delete makes one trash entry and one rebuild.
  • In-document search draws at most 300 matches until you ask for all.
  • Typing a new bullet no longer rescans the vault behind the panel.
  • The Tags pane with no tags stops rescanning the vault on every refresh.
  • The import comparison draws in slices.
  • The mind map draws at most about 1,500 boxes and says when it is capped.

0.75.0 — Dynalist update

  • Update merges three ways: local edits are kept (and reported as conflicts when Dynalist changed the same item), local deletions stay deleted, and documents unchanged in Dynalist are skipped.

0.74.3 — undo and outside changes

  • Undo can no longer roll back a change made on another device or empty a document.

0.74.2

  • Minimum Obsidian version raised to 1.11.4.
  • Pasted attachments get a space before and after them.

0.74.1

  • A row left showing raw markup after a partial redraw is rendered again.

0.74.0 — mirrors

  • Paste mirror and Paste portal are back, so mirrors can be created again.
  • Mirrors follow their source through renames, mirror-of-mirror chains and live edits; a broken reference shows a clear row.
  • Editing next to mirrors no longer hides or loses items, and every delete warns about mirrors pointing at what is being deleted.
  • Duplicating, copying and exporting keep mirrors.
  • Mirrors stay read-only and are left out of views that cannot show them.
  • The link audit reads mirror references the same way the mirror resolver does.
  • Developer notes updated (not part of the plugin).

0.73.1

  • Type checks work in popout windows.
  • The tag pattern avoids lookbehind, so the plugin loads on iOS before 16.4.
  • Store-lint hygiene: no inline styles, console output, stray disables or casts.

0.73.0 — copy and paste

  • Copy and paste inside Trynalist keep colour, heading, notes and line breaks.

0.72.0 — security

  • Resuming an import rebuilds every path from validated input.
  • Notes in documents shared with you render restricted (no scripts, no remote images) unless you trust the document from its title menu.

0.71.0 — sync robustness

  • A parent missing at load time no longer gets detached for good.
  • Typing into an item deleted on another device recreates it instead of failing.
  • Notes save after a short pause, and unsaved typing is written on quit and when the app goes to the background.
  • A cross-document move reloads the destination if it is open.

0.70.0 — trash, undo and insert-as-item

  • Undoing a delete takes the item files back out of the trash.
  • Trash restore finds the document by id, never duplicates ids, and reloads the document it restored into.
  • Pasted attachments are embedded with a link built by Obsidian.
  • "Insert a document as an item" archives the original instead of trashing it.
  • New item file names leave out dates, parentheses and !.

0.69.0 — correctness

  • Shift+Enter opens the item's own note, not a child's.
  • A recurring item's next occurrence and cross-document moves keep the checkbox.
  • Snoozing from the agenda fires again when the snooze runs out.
  • "Add / edit date" edits the existing date instead of adding a second one.
  • has:checkbox matches items with their own unticked checkbox.
  • Exports carry checkboxes correctly; OPML import keeps unticked boxes.
  • Inline $maths$, *italic* and ~sub~ need flanking characters, so prices and spaced asterisks stay plain text.
  • Dates and tags of linked items no longer leak into the item linking to them.
  • Markdown-style links to vault files open.
  • Indent, Unindent and Move commands leave the zoomed-in item where it is.
  • Manifest writes patch the file instead of overwriting it with a stale copy.
  • Exports name their file from a cleaned-up title.
  • Date-only items are due that day rather than overdue from midnight.

0.68.1

  • Popout windows: caret, selection, popovers and styling...
Read more

0.65.2

Choose a tag to compare

@github-actions github-actions released this 03 Sep 07:22

0.65.2

  • Import and update reports repeat the count in every section heading —
    "Failed documents (23)", "What changed (8 of 214)", "New documents (5)",
    "Warnings (2)" — so a long report can be skimmed by its headings without
    scrolling back to the summary. The "Selected documents" heading already
    carried its count.

0.65.1

Choose a tag to compare

@github-actions github-actions released this 02 Sep 15:47

0.65.1

Two small quality-of-life changes.

  • Import notices stay until you close them. The progress, completion and
    failure notices for a Dynalist import or update no longer vanish on a stray
    click — Obsidian hides a notice on any click anywhere on it, which could
    dismiss a multi-line summary before you had read it, or the progress notice
    while the import was still running. Only the notice's own buttons close it:
    Cancel, Open report, and a new Dismiss.
  • "Open documents in a new tab" now applies everywhere. Opening a
    Trynalist document from the file explorer, the quick switcher or a wikilink
    in an ordinary note used to replace whatever you were reading; it now adds a
    tab, like the panels and the document opener already did. A document that
    is already open is brought forward rather than opened twice, and closing
    the new tab returns you to the one it came from. Turning the setting off
    restores Obsidian's default behaviour on every route.

0.65.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 07:58

0.65.0

A whole-codebase audit — security, correctness and performance — with every
high-confidence finding fixed. No new features; a large number of things that
were wrong, slow, or lossy in ways you might have noticed only occasionally.

Data safety

  • Undo no longer gets overwritten. Undoing after typing (and search-and-
    replace, the date picker, removing a chip, advancing a recurring item,
    pasting several lines) could be silently undone again by the save that
    fires as the row leaves the screen. Rows and notes now save on that blur
    only when they hold unsaved typing.
  • A document titled .. or .something can no longer escape or vanish.
    Every title that becomes a folder or file name goes through one sanitiser
    that refuses ./.., strips leading dots (Obsidian hides dot-entries) and
    trailing dots/spaces. Item slugs starting with a dot produced files that
    disappeared on reload; they don't any more.
  • Restore refuses unsafe archives. A backup zip containing ../ paths is
    rejected before anything is written — nothing lands outside the restore
    folder, and no empty folder is left behind.
  • Frontmatter survives Windows line endings and a block that ends exactly
    at --- with no trailing newline; both used to be wiped on the next save.
  • Duplicated or moved items keep their checkbox, and mirrors stay mirrors
    (they became "checked with no checkbox" and blank items respectively).
  • Overlapping saves on one row are serialised, so a debounced save and an
    immediate one can't race through the rename-on-first-save path.
  • A remembered ![alt](url) image loads only over http(s); other schemes
    render as the file chip.
  • The plaintext token fallback is cleared from data.json whenever the
    keychain holds a token.

Dynalist import and update

  • "Update selected documents" and "Retry failed documents" no longer mark
    every document you did not pick as removed.
    Only a whole-account update
    can say a document is gone, and shared documents aren't marked when "import
    shared" is off.
  • Resuming after a crash no longer duplicates the document it crashed in.
    The manifest carries its Dynalist id before any item is written, and a
    resume replaces the half-written copy (moved to the Obsidian trash) instead
    of creating "Title 2" beside it.
  • Cancelling before the slow documents were revisited records them as
    failures so "Retry failed documents" can pick them up; they used to appear
    nowhere.
  • A document that comes back is un-marked at the document level, as its
    items already were.
  • A no-op update writes nothing. Every matched item used to be rewritten
    twice whether or not anything changed — ~130,000 file operations for a
    44,000-item account that hadn't moved.
  • A Dynalist folder named like a reserved folder (_trash, _archive, …)
    gets a suffix instead of swallowing every document inside it; _source is
    now reserved so the raw-JSON archive never shows up as a group.
  • A run imported by a build that didn't write Dynalist item ids is refused
    for in-place update with a clear reason, rather than having every item
    appended a second time.
  • A truncated progress file no longer throws at startup.

Speed, especially at 44,000 items

  • The document list is cached and only re-read when a folder or manifest
    under the root actually changes. Every panel, pane, agenda, search and
    reminder tick used to re-read every manifest from disk on every file event
    — including the file events from your own typing.
  • Reminders no longer scan the whole collection every minute and on every
    window focus; the due list is cached and refreshed on relevant changes.
  • Deleting a row is instant again in vaults without mirrors: the "are
    there any mirrors" answer used to be thrown away on every keystroke.
  • Opening a document reads its files in parallel batches; the tree rebuild
    memoises depth; merging a row rebuilds once instead of once per child.
  • Mirror sources are re-read only when something outside the document
    changed, not on every collapse, selection or drop.
  • Dragging near the bottom of a long document no longer does a full DOM scan
    per row per mouse move.
  • Rendered notes' embeds and code-block processors are released on the next
    render instead of accumulating for the life of the tab.
  • Undo depth scales with document size so a huge import doesn't hold
    millions of snapshot objects.
  • In-document search filters after a short pause; last-focus and search-query
    bookkeeping is coalesced into one settings write per second.
  • The link audit loads each document once (every mirror re-loaded its source);
    [[ suggestions use an O(1) lookup for vault files and a longer cache.

Editing

  • The zoomed-in head row behaves. Enter on it creates its first child
    (it made a sibling outside the zoom and lost the caret); Tab, outdent and
    Alt+Arrow are no-ops on it.
  • A note edited in the focused row can be clicked back into editing after it
    loses focus.
  • "Delete checked items" from the item menu scopes to that item's subtree, as
    its label says.
  • Mod+Enter on a plain item, then Undo, no longer leaves a checkbox behind.
  • Moving a selection that's already at the top or bottom does nothing instead
    of reversing it.
  • Documents open in a tab reload when something writes to them from outside
    — capture to inbox, the orphan fix, a Dynalist update, a trash restore. The
    view used to keep painting (and could save over) its stale in-memory copy.
  • Opening a bookmark applies it to the bookmark's document, not whichever tab
    happened to be active.
  • Zooming via the title crumb, the bullet or the command records history so
    Back works from all three; "Reveal folder" in the load-error box no longer
    opens a blank tab; the [[ popover closes with its tab; filtered numbered
    rows show real numbers instead of "0.".

Smaller fixes

  • A reserved document title from the new-document prompt shows the error
    instead of silently doing nothing.
  • The global search modal and page re-run when the query moved on during a
    search, instead of showing results for an older query.
  • "Customise this menu" no longer pops a stray menu behind the dialog.
  • Attachments: "also remove the link" works for short-form ![[photo.png]]
    embeds; a bare [[wikilink]] to a note you haven't written yet is no longer
    listed as a missing attachment.
  • OPML export keeps a note's line breaks; a mirror nested inside a mirrored
    subtree exports as a labelled line rather than a blank bullet.
  • Converting a folder that contains its own backup location no longer
    descends into the backup it is creating; depth stamping reads the files it
    just wrote rather than a stale cache.
  • A manifest missing its title no longer blanks the whole panel.
  • The root-folder setting is normalised (a trailing slash used to stop the
    panels refreshing), pane timers are cleared on close, and two startup
    timers are registered with the plugin.

0.64.6

Choose a tag to compare

@github-actions github-actions released this 01 Sep 15:10

0.64.6

Targeted updates from Dynalist.

  • Update only the documents you choose. "Update selected documents from
    Dynalist…" lists your account's documents in a searchable checkbox picker
    (filter by title or folder, select-all-of-the-filter), then re-fetches only
    those — for running over a handful (e.g. the ones a rate limit left unfinished)
    instead of the whole account. It costs a single file/list call before you pick.
  • The report of a selected run lists every chosen document with its status —
    Updated, Backfilled, Added (new document), Items marked removed, Unchanged, or
    Failed with a reason — so a targeted run answers exactly what happened to each
    one, not just the ones that moved. A whole-account update keeps its concise
    changed-only view.

0.64.5

Choose a tag to compare

@github-actions github-actions released this 31 Aug 03:04

0.64.5

  • Links and embeds to a Canvas, a Base, or another Trynalist document render as
    a typed chip
    — its own icon and the file name, opening the file on click —
    instead of bare underlined text or a generic attachment chip. Ordinary notes
    stay plain links. A chip is used rather than a live inline preview: a full
    Canvas or Base embedded inside an outline bullet would be heavy and crowd the
    outline, and these surfaces are better opened in their own pane.