Release notes

What changed, and why.

Every version of Pellet, newest first. Fixes say what was going wrong, so you can tell whether it was the thing that got you.

0.26.0
21 October 2026
public beta

Linked Mentions, Pinned Tabs, Template Variables and more!

Added

  • Linked mentions at the end of a note. Settings › General › Behavior › “Show linked mentions at the end of notes” lists, under the note, the passages in other notes that link to it, with the bullets around each link, in the editor and the reading view. The section’s bar sorts them, folds them, and can include property links or skip folders. Clicking a passage opens it at that line. It is off by default.

  • Pin a tab. Right-click a tab and choose Pin tab, in the main window or a window of its own. A pinned tab moves to the front of the strip, shows a pin instead of a close button, isn’t closed by ⌘W or Close others, and is never replaced: a note opened from it opens in a new tab.

  • More template variables. Templates can use {{yesterday}}, {{tomorrow}}, dates before or after today such as {{date+1w}}, {{weekday}}, {{folder}}, {{vault}}, {{id}}, {{cursor}} (where the caret lands in the new note) and {{selection}} (the text you had selected when you inserted the template with /). Typing {{ in a note in your Templates folder lists every variable with an example.

  • More date codes in templates. {{date:FORMAT}} and {{time:FORMAT}} understand MMM, M, D, Do, H, h, hh, A, a, ss and Q, and text in [square brackets] is kept as written. “DD MMM YYYY” now gives “18 Oct 2026” instead of “18 10M 2026”.

  • One filter box for Notes, Search, Tags and Properties. The box has Aa for match case and a clear button, an options panel (Collapse results, Show more context, Explain search terms, Show tags), and a results row with the count, the note list’s sort, and Copy file names or Copy as [[links]].

  • Open and copy images in a note. Clicking an embedded image opens it full size over the note, with Copy and Open in tab; ⌘-click opens it in a tab. Right-click (long press on a phone) offers Open image, Open in new tab, Copy image, Copy embed, Copy file path, Reveal in file manager and Show the markdown. On desktop, hovering an image shows Open and Copy.

  • Make a folder from the Move dialog. The Move dialog has New folder at the bottom and a + on each folder, so you can name a new folder and move the files into it in one step.

  • Archive a whole folder. Right-click a folder and choose Archive folder to archive it and everything in it. Links and open tabs follow the move, and any file in it can be unarchived back to where it was.

  • Delete without being asked. Settings › General › Behavior › Ask before moving to Trash sets whether deleting a file, folder or task asks first: Always, the default, or Never. The prompt itself has Don’t ask again. Deleting permanently, emptying the Trash and the questions about highlight notes, attachments or repeating tasks still ask.

  • Embedded tables as picture cards. A table block can say layout: grid, with size: s, m or l and covers: on or off, to show its rows as the Table’s Grid cards. Embed this view writes it from a Grid view. Exported to a web page or PDF, the block becomes a grid of pictures; other formats keep a table.

  • The sync relay cleans itself up. Settings › Device sync › Clean up the sync relay shows how much your group stores on the relay and removes old versions and deleted files on its own about once a day, once every device has caught up. Clean up now does it straight away.

  • Save space on the relay. The built-in relay keeps a copy of a file only until every device has it. When a new device joins, or a device brings back a folder it had left out, your devices send those files again, and Settings › Device sync says how many it’s waiting for. It is on by default; Save space on the relay in Settings › Device sync turns it off.

Changed

  • A #tag in a search finds tags in properties. Searching for #word also finds notes whose tags property holds word or a tag under it.

  • Device sync downloads faster (desktop). Files arriving from your other devices are written to the vault with much less work, which most helps a device joining a group with many large files.

Fixed

  • Pellet stays responsive after opening a vault (Windows). On Windows, opening a vault, especially a large one with Device sync on, could leave Pellet not responding for up to a minute.

  • Large files sync over a slow connection. A file that took more than two minutes to upload never reached your other devices and failed again every time. Uploads now get time in proportion to their size.

  • A file whose upload fails is sent again. One dropped connection during an upload could keep that file from ever reaching your other devices. The next sync now sends it again.

  • Deletions sync in a folder holding a note with an accented name (Mac, iPhone, iPad). A letter like “ü” can be stored in two ways that look the same, and a Mac or iPhone could keep a note’s name one way while Device sync knew it the other way. Every deletion in that note’s folder was then held back. Deletions there now sync, including ones held back before this update.

  • A note with an accented name no longer overwrites another device’s note (Mac, iPhone, iPad). When two devices each had a note of that name stored the two different ways, the copy arriving from the other device, or downloaded when joining a group, could replace this device’s own note. Each device now keeps its own, and Settings › Device sync lists the other under Files that can’t sync until one of them is renamed.

  • Cleaning up the sync relay keeps what devices still need. Running the clean-up while a device was joining, while another was sending its changes, or from a device that was behind could remove files those devices still needed. It now waits until that can’t happen.

  • Turning Device sync off no longer says “Trying to connect…”. Turning sync off while the relay couldn’t be reached left that message beside Turn on.

  • The folder picker in Selective sync lists your folders. With Settings open while a device joined, Choose… offered no folders until Settings was reopened. In a vault with no folders it now says so.

  • The search button sits at the right edge on phones. On the Library, a folder or Tasks, the search button sat at the left of the top bar or in the middle of it. It now sits at the right, beside the sync dot, on every screen.

  • Canvas text cards keep what you type. Text typed into a card could be lost when you clicked the empty board, and undo after editing a card now goes back to the text before the edit.

  • Several cards dropped together keep their order. On a board, cards dragged together now land in the order they had on the board, as a block, instead of reversed.

  • Dragging a card on the New sheet doesn’t stick (iPhone). A drag could leave the card stuck under your finger and its order unchanged.

  • Return on an empty list item ends the list. On the second item of a list, Return on an empty item left a blank line and another empty item instead of ending the list.

  • Ctrl+Shift+Z redoes in a note (Windows). It already worked in table cells; in the note body only Ctrl+Y redid.

  • A click into another table lands in the clicked cell. After selecting cells in one table, clicking a cell in a second table put the caret in its header, so a paste overwrote the header.

  • The code block language menu opens only on a new fence. Typing ``` in front of existing text opened the menu, and picking a language broke the line.

  • Escape closes the Table’s Filter, Sort and other toolbar popovers.

  • /tableview fills in rows: 10. The inserted block had an empty rows line, and Tab now moves through the values in order.

  • Embedded tables accept a property name in columns:. A bare name such as deadline drew an empty column; it now shows that property. A name Pellet doesn’t know is left out with a note saying why.

  • The Table’s Archived filter finds archived notes and files. “Archived is Archived” matched only tasks; it now matches notes, canvases and attachments in Archived too.

  • The Timeline’s dates scroll with the chart. After jumping to today, the date header could label October’s bars as August.

  • The habit heatmap opens on the current week. It opened on the oldest week, with this week cut off.

  • The Tasks panel’s Day view no longer scrolls sideways. A long task title pushed the status off the edge of the panel.

  • The Flow header fits beside the explorer. It wraps onto a second row instead of cutting off its controls.

  • Graph fixes. The File button works when Graph opens from the sidebar rail; a group keeps its color when an earlier group is switched off; the view zooms to fit when Search files or a filter changes; and a file graph switched to Semantic shows the notes related by meaning.

  • Changing a property’s type redraws open notes. A type picked in the Properties pane now shows at once in notes already open.

  • Moving several files clears the selection. The note list no longer says “2 selected” after the files have moved.

  • Formatting themes keep every choice. A saved theme lost its Bullet and Underline links choices, and a theme saved a moment ago could read “Modified since it was saved.”

  • Torn-off windows show tag colors. A tab dragged into its own window drew every tag in the default color.

  • Importing a folder uses the folder name shown in the preview. A second import in the same second now goes to a new folder instead of writing into the first one.

  • The dictionary card credits the right source. A definition from a dictionary you imported is credited by its name instead of Wiktionary, and an imported entry no longer shows an empty heading.

  • Opening Search no longer covers the Text/Semantic switch.

  • Smaller fixes. The side panel’s empty small graph no longer puts its hint over the note’s dot, and the sidebar’s Search tooltip no longer names ⌘P, which opens the Quick Switcher.

0.25.0
14 October 2026
public beta

Grid Layout, Paste as Markdown, Copy to Clipboard and more!

Added

  • Table, Grid and Timeline layouts. A switcher in the Table toolbar shows the same rows as a table, a grid of picture cards, or a timeline. The Timeline’s zoom, color and dependency controls sit in a row under the toolbar.

  • Grid: every file as a picture card. Each card shows the file’s banner or first image, else a preview (PDF page, EPUB cover, image, video frame, drawing, note excerpt, the first lines of a .txt file), else its kind, type and size. Cards come in S, M and L. With Covers on, a note or task shows its banner; with it off, the first image in its body. Show images and video adds those files to the grid.

  • Grid cards show the Table’s columns. Each card lists the Table’s visible columns under its name, in the Table’s order, and the values edit in place as they do in the Table. The Columns button now shows in Grid.

  • Saved filters remember their layout. Saving a filter keeps the tab’s layout, so a filter saved from Grid or Timeline opens in that layout.

  • Notes show their own due, scheduled, status and priority in the Table. A note’s own properties appear in the Table’s columns, filters, sorting and grouping, and its Status and Priority cells edit them.

  • Edit Start and Due in the Table. Clicking a Start or Due cell opens a date picker, with a time when the date has one. This works for tasks and for notes. Clearing the field removes the date.

  • Open board tasks beside the board. Edit board › Opening tasks › “Open tasks in a split on the right” makes a click on a card’s title (or Open file in the card’s menu) open the task in a pane to the right, reusing that pane. ⌘-click and ⇧⌘-click work as before.

  • Copy to clipboard in the export dialog. Copies the chosen format instead of saving a file: PDF as formatted text, Rich Text as RTF, Web page as its HTML source, and Markdown or Plain text as text. On a phone or tablet, Rich Text copies as plain text.

  • Paste formatted text as Markdown. Pasting text copied from Teams, Word, Google Docs or a web page keeps its headings, bold and italic, lists, links, tables and code blocks as Markdown. Turn it off in Appearance › Body › Paste formatted text as Markdown. ⇧⌘V always pastes plain text, and the right-click menu offers Paste as plain text (and Paste as Markdown when the setting is off).

  • Body text color. Appearance › Body › Text color sets the color of regular text in the editor and reading view. Headings without a color of their own follow it, and bold and italic keep their own colors. Flow exports to HTML and RTF use it too.

  • Hide a synced task’s own calendar event. A task pushed to Google or Apple Calendar shows once in Pellet instead of twice: in the Calendar view, the Tasks panel, the status bar count and calendar embeds. Settings › Calendar › Hide synced task events turns this off; it is on by default.

  • Pull down to refresh the Tasks panel (phones). Pulling down re-reads today’s date, rescans the vault, checks for sync changes and fetches calendar events again.

  • Local API: Allowed hosts (desktop). Settings › AI & MCP › Local API › Allowed hosts lists host names, such as one Tailscale Serve forwards, that may reach Pellet through a proxy on this Mac. Pellet still listens only on this computer. Requests through these names always need the access token. The setting flags entries it can’t use and warns when no token is set.

  • Local API: richer note creation for the browser extension. Creating a note can set its properties and can overwrite, append to, prepend to, or write into today’s daily note. The API can also list note folders and read or declare the vault’s property types.

  • Sync relay: choose the address in pairing codes (desktop). Settings › Sync relay › Address for other devices lets you pick which of this computer’s addresses pairing codes use, or go back to picking one automatically.

Changed

  • The Table toolbar fits its space. On a narrow window the layout switcher and buttons shrink to icons, then to counts only, instead of wrapping onto a second line. Every toolbar control is now the same height.

  • The bulk “To note” button is labeled and asks first. In the Table’s selection bar, the convert-to-note button now reads “To note”, and converting more than one task asks before it goes ahead.

  • A tighter Tasks panel on phones. The date shares a row with the List and Today chips, section headers are slim labels, rows are closer together, and the status sits at the end of each row. The first task appears about 70 points higher.

  • Joining a device shows what the other device is doing. While a device joins, it shows each step the device letting it in reports, and keeps waiting as long as reports arrive instead of giving up after a fixed time.

  • Long sync scans show progress. A first scan reads “Checking files… N of M” and saves its progress as it goes. Leaving a sync group keeps the record of which files were already checked, so joining another group doesn’t re-read the whole vault.

  • Phones record requests that never answer. On iOS and Android, a request to the phone’s system that waits more than 10 seconds is written to the Activity log, and so is a late answer.

  • Board cards no longer copy the board’s column list. Cards carried a kanban-columns list of their board’s columns, so changing a board’s Group by rewrote every card on it, and doing that while another device edited the same cards made conflict copies. Pellet no longer writes it; an old list is removed the next time the card’s board details are written. The board’s name on each card (kanban-name) stays.

  • A card on a board is offered only that board’s statuses. The status pickers no longer have “Other statuses…”. To give a card another status, turn it on for the board, or take the card off the board.

Fixed

  • A note deleted while open stays deleted. Deleting a note that was open in a tab could bring it back beside its copy in the trash. Opening a note with Windows line endings no longer counts as an edit, so just opening and closing it doesn’t rewrite the file.

  • ⌘Z in a table cell undoes. In a live-preview table, after Tab moved on from a cell or a paste left the caret in a cell, ⌘Z now undoes through the editor’s history and keeps the caret in the same cell.

  • Attachments show a Created date in the Table. The Created column is filled in for images, PDFs, audio and other attachments. On Android it matches the modified date, as it already does for notes.

  • Phones no longer get stuck on a request that never answers. A note read or vault rescan that never finishes is taken over by the next one instead of blocking every later one until the app is restarted.

  • Today’s date is right when you come back to the app. Returning to Pellet on a phone, or restoring a window, updates the date at once.

  • The Activity log says “Loading the log…” while it reads. It no longer says “Nothing logged yet” on a phone before the log has loaded, and the entries already known show straight away.

  • Joining a large vault no longer times out. The device letting a new one in now checks the vault’s files in batches. Canceling the join stops it, and starting a new join ends the old one.

  • Pairing codes from Windows reach your other devices. Pairing codes now put the computer’s home-network address first, ahead of virtual network adapters other devices can’t reach.

  • Sync scans no longer hang. A file that never finishes reading is skipped after a time limit and reported once.

  • Settings › Sync relay lists hosted groups. The list no longer shows “Nothing hosted yet” while the relay is off. A group folder that can’t be read is named on the page, and one damaged group no longer hides the rest.

  • Naming a Timeline view as a saved filter keeps it on Timeline. It no longer switches the tab back to Table.

  • Resize handles no longer cover dialogs (desktop). Clicking a dialog opened from the file menu could start resizing a pane instead.

  • A habit ticked off while another device tidied it no longer forks. Completing a repeating task on one device while another folded its old days in made a conflict copy. The two versions now merge.

  • A board keeps its statuses when you change Group by. Grouping a board by something else and back by Status brought back every status it had turned off, and a card’s status picker on the grouped board offered every status instead of the board’s own.

0.24.0
6 October 2026
public beta

Board Statuses, Task Descriptions, Minimal Layout and more!

Added

  • Pellet - Browser Extension. For Chrome: turns the page you’re on, text you’ve selected, or an open Gmail email into a Pellet task or note, saved straight into your vault. Get it from the Chrome Web Store. It works with the Pellet desktop app running on the same computer.

  • Type property defaults can use the date. A default like {{date}}, {{date:YYYY-MM-DD}} or {{time}} is filled in with the actual date when the property is added to a file, and a Date property can default to {{date}}. Templates also understand YY for a two-digit year.

  • A card on a board picks from that board’s statuses. Changing a card’s status (task form, Table, task banner, task lists) lists the columns of the board it’s on, in the board’s order, including board-only statuses. “Other statuses…” opens the usual list. Tasks on no board see the usual list.

  • See which version of Pellet each device runs. Settings ▸ Device sync shows the Pellet version and build beside every device in the group, once that device has been updated to this release and has synced.

  • Pellet says when two files are the same task. If two task files share one task id, usually a stray copy, the activity log names both, once, so you can keep the right one. Nothing is deleted for you.

  • Links in a task’s description can be clicked. In the banner at the top of a task, a [[note]] link opens that note (⌘-click for a new tab) and a web address opens in your browser. Clicking elsewhere in the description still edits it, and the links can be reached with Tab and followed with Enter.

  • A task’s description shows at the top of the task. It sits under the status and priority; click to edit, click away to save, or press Escape to keep what was there. A long description is cut to four lines with “Show more”, and if it changes somewhere else while you type, Pellet asks which one to keep. A description with line breaks is shown, not edited, in the Properties panel, with a note to edit it in the banner.

  • Sync: “Repair this device”. Settings › Device sync can ask another of your devices for a fresh copy of the vault index and catch this device up with it. Only files that differ are downloaded, and nothing is overwritten unless another device has a newer version.

  • A custom status can count as Open. Settings › Tasks › Statuses offers Open beside In Progress and Closed. A status that counts as Open is not started yet, so a “Needs review” or “Planned” column no longer reads as work under way.

  • MCP: update_kanban_board. Rename a board, or change its description, task folder, columns (the full list, in order) or what its columns count as. The listed set is 46 tools.

  • MCP: boards have a task folder, and columns say what they mean. create_kanban_board takes task_folder, where tasks created on the board are filed, and counts_as, which says whether a new column counts as open, in progress or closed.

  • MCP: create_task places the card and sets your own properties. column_name (with kanban_id) puts a new task straight into a column, and properties sets your own frontmatter keys; update_task takes properties too. Pellet’s own keys are refused with an error naming them.

  • MCP: status takes a custom status. create_task and update_task accept a custom status by value or name as well as the four built-in ones, and task rows report it as status_value.

  • MCP: add to a task’s note without overwriting it. update_task takes append_content, joined to the end of the note as it is at that moment. Task rows report file_modified, and update_task’s if_file_modified writes nothing if the file changed since.

  • MCP: see how a board’s columns are set up. list_kanban_boards says whether a board keeps its own column list or shows every status, and create_kanban_board / update_kanban_board list any column whose status stayed shared with other boards, with the reason.

  • Minimal layout: ⇧⌘M. One shortcut (Ctrl+Shift+M on Windows and Linux) hides the icon rail and closes the Library, backlinks/outline and Tasks panels; the title bar, tabs and status bar stay. Press it again to bring back exactly what was open. Focus mode (⇧⌘F) still hides everything.

  • Switch vaults from the phone’s More screen. A Vault row at the top of This device shows the open vault; tap it for every vault, most recently opened first, and one tap switches. “Add or create a vault…” opens the full switcher. Phones only.

  • Paper switches to pen only when it sees a pen. The first time a pen touches a Paper page, your finger scrolls instead and a resting palm doesn’t draw. It stays that way until you change it with the pen button in the toolbar. Settings › Paper › Your pen › Autodetect turns it off. Android only.

  • A vault that won’t open says so. “Couldn’t open …” gives the reason, and you stay in the vault you had open. Browse picks the folder where it is now and reopens the same vault, tabs and all (phones); Remove from list leaves its files where they are.

Changed

  • Statuses show how many boards use them, not which ones. Settings › Tasks › Statuses says “only on 2 boards”, and a board’s settings show each status’s card count for that board only. A board’s settings list its own statuses first; the rest fold away under “Not on this board”.

  • Add a status you already have straight from a board. Typing an existing status’s name in a board’s New status dialog offers “Add … to this board”. The status keeps its color and “counts as” setting.

  • Sync logs name a device by its id as well as its name. Activity log lines that name a device add the short id shown in Settings › Device sync, so searching for that id finds the device’s lines. In the live sync view, point at a device name to see its id; Copy log includes it on every line.

  • A removed device’s changes cannot reach your other devices through one that missed the removal. Its changes are no longer accepted, and when it hears of the removal it asks to be paired again; Settings › Device sync offers Leave and pair again. Anything of its own that differed is moved to a “Set aside by sync” folder, which never syncs. Every device needs this version for it to apply.

  • Removing a device always finishes. An interrupted removal is now finished on the next sync, and Settings shows “Still removing …” until it is done.

  • EPUB books can no longer run scripts. Pellet now takes scripts, and anything else that could run code or open another page, out of each chapter before it is shown. Text, pictures, styling, drawings and links are kept; a chapter that cannot be cleaned safely is shown as plain text, with a note.

  • Repeating tasks: “every 2 weeks on Wednesday” skips the weeks in between. A weekly repeat with an interval and chosen days now follows the interval, as your calendar app already showed it.

  • Repeating tasks: “repeat N times” gives N occurrences. The series no longer ends one occurrence early, and matches the dates the calendar shows.

  • Device sync: changing the vault key needs every device on this version. Key changes (after removing a device) are signed by the device that made them, and a device ignores one it cannot verify. Update Pellet on every device before removing one; removing a device warns about any that are out of date.

  • Settings: “MCP permissions” is now “Permissions for connected apps”. Read-only, the folder allowlist and the tool switches apply to apps connected through MCP or the API, such as Claude Desktop or the browser extension; the new name and its help say so.

  • MCP: board columns are listed as the board shows them. list_kanban_boards and create_kanban_board return each column’s name, value, what it counts as and whether new cards land in it, in the board’s order. create_kanban_board now returns the board in list_kanban_boards’ shape instead of a list of names.

  • MCP: errors say what exists. An unknown board, column or status is an error that lists the ones you can use.

  • Pellet needs macOS 12 Monterey or later. macOS 11 Big Sur is no longer supported, because Pellet now runs on a newer Electron with its security fixes.

  • File dialogs start in the folder the last one used. Choosing a vault, importing from Obsidian, exporting, importing a dictionary and File › Open File… open where the previous one finished. The first one after Pellet starts opens in Downloads.

  • MCP: the seven tools retired in 0.23.0 are gone. list_tasks, complete_task, move_task_to_column, archive_note, unarchive_note, add_canvas_node and connect_canvas_nodes answer as unknown tools, and the error names what to call instead. The retired group in Settings › AI & MCP › Tools is gone with them.

  • “Folder not found” now marks a vault whose folder can’t be opened, in both vault lists.

  • Desktop: a missing vault folder is no longer re-created. A vault whose folder is gone, or is a file, now says so instead of opening empty.

Fixed

  • A completed task no longer comes back in its old folder. Completing a task just after typing in its open note could leave an unfinished copy at its old place once it moved to Archived. Those edits now go into the archived task.

  • Links open on the first click. A link to a note whose name isn’t a dictionary word opens on the first click, and link names are no longer underlined as misspelled. A link with an underlined word in its text also opens on the first click.

  • The sidebar’s buttons are full-size on iPad and touch screens again. They stay at least 44 points tall, and on a shorter screen the rail scrolls instead.

  • A task description you were typing is no longer lost when you leave. If it changed elsewhere and you left the task before choosing which to keep, your text is now kept; next time Pellet says “You have an unsaved description edit from earlier.” with Use it and Discard.

  • Connected apps: reading a canvas no longer names files you kept out of reach. A canvas card pointing at a file outside an app’s allowed folders is still listed, but without the path.

  • MCP: restore_from_trash says what happens when the place is taken. Its description tells connected apps that it refuses, and leaves the item in the trash, when something already sits where the item came from.

  • Archiving a file in a folder with a dot in its name. When a file of the same name was already archived, the copy could land in a wrongly named folder. The number now goes on the file’s own name: README 2, notes 2.md, .env 2.

  • Paper transcription: an Ollama model that stopped working is marked. When Verify setup fails for an Ollama model that used to work, the list says “failing since” the date, and “failing” while it is in use. Verify setup now asks you to choose an Ollama model, not add one.

  • Connected apps: completing a task respects your allowed folders when finished tasks are archived. An app limited to some folders is refused, and the task left as it was, if completing it would move it to the Archived folder outside those folders.

  • Connected apps: completing a repeating task respects your allowed folders. An app is refused, and the task left as it was, if the next occurrence would be filed somewhere it is not allowed.

  • Multi-line properties written by other apps are read properly. A property in YAML’s multi-line form (| or >), as Obsidian writes a long task description, showed as “|-” and could be replaced with “|-”. Pellet now reads the text and keeps it.

  • Restoring from the trash no longer replaces a newer file. Pellet asks whether to restore beside the new file with a number added, or leave it in the trash. Connected apps are told the place is taken, and the item stays in the trash.

  • Restoring one file from the trash keeps its properties (the Table columns you set on it). Deleting one forever now removes them, as deleting several already did.

  • Rolling up a repeating task’s history no longer replaces an existing history note. Another series’ note with the same name is left alone, and this series’ own note is added to.

  • Sync no longer overwrites a note you edit while another device’s version downloads. Both versions are kept.

  • A device you removed from sync stays out. A new key goes only to devices still in the group, a device paired later is not told to trust a removed one, and changes claiming to come from a removed device after its removal are refused. Your devices also stop sending it keys, repairs and vault index copies, and no longer keep deleted files on its behalf.

  • A conflict copy’s name matches what is in it. A copy could be named after the earlier version while holding the later one, which then led to a conflict copy of a conflict copy.

  • Two items created at the same moment with the same name get a file each. Tasks, notes, canvases, whiteboards, Paper pages and attachments (for example by a connected app) no longer end up in one file.

  • iPhone, iPad and Android: replacing a file can no longer lose the old one. If the move fails part-way, the old file is put back.

  • Links in the hover preview, Flow, canvas cards and the dictionary card open in your browser instead of replacing the Pellet window.

  • Connected apps stay inside the folders they are allowed to see when adding a subtask, turning a checklist item into a task, listing templates, showing a note’s backlinks, and counting results.

  • The local API answers a malformed request with an error instead of closing Pellet, and keeps accented characters and emoji intact in large requests.

  • Calendar, transcription and link-preview requests no longer hang when the server drops the connection part-way through.

  • Sync: pairing a device again no longer re-sends your whole vault. Files that already match on your other devices are taken as they are, instead of being sent back as changes.

  • Sync: pairing a device again no longer causes conflict copies on your other devices. Pellet keeps the new device’s changes until it is trusted, then applies them, and a device that skipped them repairs itself.

  • Sync: a habit’s History note no longer forks into a conflict copy. When two devices add different days to a recurring task’s “… — History” note, sync combines the days. Two devices recording the same day differently still keep both.

  • MCP: calendar events on any date. list_calendar_events with a past or far-future start_date and end_date returned nothing; Pellet now fetches far enough to reach them. A calendar that can’t be read is reported as an error, and a subscribed feed no longer answers a wider request with an earlier, narrower one.

  • MCP: a misspelled argument is an error, not a silent success. A tool refuses an argument it doesn’t have, names it, suggests the closest one (“did you mean due_date?”) and lists what it accepts.

  • Typing is no longer lost when a note changes elsewhere while you type. A change from sync, another window or an MCP client is applied around your typing: both are kept, the cursor stays put, and a notice says so if both touched the same words. A note no longer flips back to an older version for a moment when a change arrives as it saves.

  • A column added to one board no longer appears on every other board. A status made from a board (its Add column, its settings, or MCP) belongs to that board; its Boards switch in Settings › Tasks › Statuses makes it a column everywhere. Statuses made in Settings are on every board, as before.

  • A card moved into a closed column keeps its board details when it is auto-archived. MCP’s create_task and update_task also report where the card went, and properties sent with a completing update_task are no longer dropped.

  • MCP: moving a task to a column works on boards MCP creates. update_task’s board_name + column_name failed with “Column not found” on them, and list_kanban_boards showed columns: [].

  • MCP: a new board keeps the column order you give. It showed the built-in statuses first.

  • MCP: a task created on a board shows on it. On a board whose columns leave out the built-in Open, new cards now land in its first column, and so do cards from POST /api/tasks.

  • MCP: task rows no longer list a board’s bookkeeping as properties. The kanban-name and kanban-columns stamps on a card are left out of custom.

  • Week numbers in templates always follow “Week starts on”. Every date template, including the default note template’s {{date:ww}}, now uses the same rule as the calendar.

  • Settings counts the MCP tools a client actually sees. Settings › AI & MCP › Tools no longer counts retired tools, so it matches what a connected app is shown.

  • Typing a table by hand stays as text while you type it. The table appears once you move off it, instead of jumping the cursor into a header cell as the separator row is typed.

  • Phone: the note no longer slides sideways when you start typing. The note view was 8 px wider than the screen, so on iPhone the app scrolled sideways and left a white strip on the right.

  • iPhone: a new note opens ready to type in. New note puts the cursor in the note and brings up the keyboard.

  • iPhone, iPad and Android: switching vaults no longer writes into the wrong one. A new vault’s welcome notes no longer land in the old vault, reads come from the right vault, and a failed switch no longer stops the open vault saving.

  • Device sync: a device keeps every vault key it needs after a key change. In the rare case of two devices making a vault key at the same moment, a device could lose the second key, leaving changes made with it unreadable.

  • The Vault row no longer shows a long “external:…” code. After a vault switch failed on Android, the More screen could show the other vault’s internal id instead of the open vault’s name.

0.23.0
28 September 2026
public beta

A Terminal, Calendar Embeds, In-app Updates and more!

Added

  • A terminal in a tab. A terminal button on the icon rail and in the status bar opens a terminal tab, running your login shell in the vault’s folder (PowerShell on Windows). It keeps its shell and scrollback when you switch tabs, and follows Pellet’s theme. Desktop only.

  • A calendar inside a note. A pellet-calendar block draws a month, week or agenda of your tasks, and optionally your events, right in the note. It takes the same filter: and where: lines as a table embed. Type /calendarview, or use the Calendar view’s new Embed button; click a task to open it.

  • In-app updates. Settings › General › About has Check for updates, and Restart to update once one is downloaded. Automatic updates is a separate switch, off by default; with it off, Pellet only checks when you ask. This version is the first with the updater, so it has to be downloaded once by hand. Desktop only, and on Linux for the AppImage.

  • Search in Settings. A search field heads the list of sections. Pick a result and Settings opens that section, scrolls to the setting and highlights it. ⌘F / Ctrl+F jumps to the field.

  • Open Markdown files from your computer. Choose Pellet in Open With for .md files, or make it the default app. A file inside one of your vaults opens in that vault at the note; any other file opens on its own, and Add to vault… moves or copies it in. File › Open File… and Open Recent are new too. Desktop only.

  • Highlights in one file per book. A switch in Settings › Folders puts new PDF and EPUB highlights in one note per book, grouped by page or chapter, instead of one note per highlight. Merge existing highlights moves your older highlight notes into their book’s file, telling you first how many notes and links are involved.

  • More in the / menu. /callout, /footnote, /diagram (a starter Mermaid flowchart) and /embed. The menu also finds commands by the words people type for them, such as /todo, /hr and /mermaid.

  • Notes in the Kanban backlog. The backlog has a Notes tab with every note in the vault, searchable and filterable. Drag a note onto a column and it becomes a task on that board, staying in its folder.

  • Cover images on board cards. Board settings › Card cover can show the task’s banner, the first image in the task, or both.

  • Checklist and subtasks on board cards. Board settings › Card sections can list a task’s checklist and subtasks at the bottom of its card, Off, Collapsed or Open. Tick items right on the card.

  • More file actions on a board card. A card’s menu has the same file actions as a canvas card: open in a new tab, export, rename, move, reveal, copy link and archive.

  • Switch an AI provider off. Each provider in Settings › AI & MCP › Providers has an on/off switch. A feature that was using a provider you switch off, such as Paper or audio transcription or semantic search, goes to None rather than to another provider.

  • Local API: Allowed origins in Settings. Settings › AI & MCP › Allowed origins lists the web origins the local API accepts, one per line. A line that can never match is shown in red.

  • Local API: create a note. POST /api/notes creates a note from a title, content, folder, tags and a source URL, following the same rules as MCP create_note.

  • Local API: save an image or file into the vault. POST /api/attachments saves a file of up to 8 MB into your attachments folder under a name that isn’t taken, and returns the embed to paste.

  • Local API: list task groups. GET /api/groups returns the group names of the tasks the client is allowed to see.

  • MCP: the 2026-07-28 protocol revision. Clients that speak the new stateless revision connect to the same /mcp endpoint, and so does the stdio bridge. Clients on the earlier revisions are served exactly as before.

  • MCP and REST: a rate limit on tool calls and writes. Tool calls and the REST writes share a budget per client: 300 in a burst, then 5 a second — far past anything a person drives, enough to stop a runaway agent loop.

  • MCP: task rows carry their own properties. A task’s extra frontmatter (estimate, project, …) now appears under custom, so what a custom:<key> condition filters on is visible in the result.

  • MCP: structured results. get_note declares an output schema, and it and the enveloped listings return structured content beside the text.

  • MCP: paged listings. The listing tools accept envelope: true and then report how many matched and whether the list was cut, with a cursor for the next page.

  • MCP: response_format on the listing tools. list_notes and query_tasks accept concise, which drops the long fields and halves the size of each row. detailed stays the default.

  • MCP: tool titles and annotations. Every tool now has a short title and the standard read-only, destructive and idempotent hints, so a client can label tools and ask before a delete.

  • MCP: server instructions. Connecting hands the client a short paragraph for its model: treat the vault as data, which tools to prefer, and how to cite a note.

Changed

  • “Overdue” means past due and not done, everywhere. The Table filter’s “is overdue” and MCP’s overdue no longer match a completed, skipped or closed task — the rule the status bar, task panel and calendar already used.

  • Touch screens: a folder’s expand arrow is on the right. On phones and the iPad the arrow now sits at the right edge of the row, a thumb wide, so aiming for it no longer opens the folder style picker. The desktop is unchanged.

  • Ollama: pick from the server’s models. Ollama’s row lists every model on the server with a checkbox, and each feature offers only the checked models that can do its job. When none can, the feature says what’s missing, such as “No vision model”.

  • Checklist tab: the scope switch reads In notes / Anywhere / In tasks. Same behavior, clearer words beside the new Notes tab.

  • Menus that open from a button stay on screen. A menu that grows now moves above or below its button to fit, and scrolls when neither side has room.

  • MCP: seven tools consolidated. list_tasks, complete_task, move_task_to_column, archive_note, unarchive_note, add_canvas_node and connect_canvas_nodes are folded into query_tasks, update_task, set_archived and edit_canvas. The old names still work in this release and will be removed in 0.24.0.

  • MCP: tool schemas close their objects. Every tool’s input schema now rejects unknown fields, so strict clients can validate arguments. Accepted arguments are unchanged.

  • MCP: name a Kanban board by its name. query_tasks takes a board’s name as well as its id, and an unknown board is an error that lists the boards you can use.

Fixed

  • Sync on iPhone and iPad: changes made just before leaving the app are sent. Pellet now finishes syncing as it goes to the background. On every platform, an edit made during a sync is sent straight after it.

  • Sync: no conflict copy when two devices check off the same habit day. Matching check-offs of the same day now resolve to one file.

  • A reopened recurring task shows on its own day. It now appears in the Tasks panel and the Calendar’s List mode, and counts as due today.

  • Converting a task to a note no longer moves the file. It stays in its folder under its own name.

  • Reading view: paragraphs are spaced again, and Line breaks applies at once. A blank line draws a gap between paragraphs again, and switching Line breaks redraws an open note straight away.

  • A task link on a list line no longer slides under its circle. The title now sits clear of the task’s status circle.

  • A link to a note that has only just arrived opens it. A pellet:// link to a file copied in a moment earlier no longer warns that the note isn’t in the vault.

  • Checklist tab: the Folder filter no longer offers “(vault root)”. It filtered nothing; with no folder picked, root-level items already show.

  • A rejected API key reads as rejected. The pill now says “Key rejected” in red, or “Test failed” in amber, instead of a green “Key saved”.

  • Providers: Ollama’s status survives reopening Settings. It checks the server when the card opens instead of saying “Not tested”.

  • MCP: create_note with no folder respects the folder limit. It wrote to the vault root even with a folder limit set.

  • MCP: list_groups and list_tags respect the folder limit. Names from folders outside the limit no longer show through.

  • MCP: a tool that fails answers with an error result. Errors come back as a result the model can read, as the MCP spec asks, instead of a protocol error many clients hide.

  • MCP: clients asking for protocol version 2025-11-25 get it. It is now the newest version the handshake offers.

  • MCP: list_notes no longer counts drawings as notes. Canvases, whiteboards and paper pages are kinds of their own, matching the app.

  • MCP: query_tasks status conditions take the values task rows report. A condition on open now matches the tasks that report open.

0.22.0
23 September 2026
public beta

Improvements to Canvas, Templates, Slash Commands and more!

Added

  • Eight card shapes on a canvas. A card can be a pill, a diamond, a parallelogram, a cylinder, a document or a circle as well as a rectangle. The file stays a plain JSON Canvas: another app reads the same board, in the same places, with ordinary rounded cards.

  • Straight and squared lines. A line can run straight or turn at right angles instead of curving, per line or as the board’s default. A squared line routes around the cards it passes rather than through them.

  • A line endpoint stays where you put it. Drag an endpoint to a spot on a card’s border and it stays there as the card moves. Drag it off a side entirely and the line picks its own attachment again as the cards move.

  • Focus mode, folding groups and a presentation walk. Focus dims everything not connected to what you have selected. A group folds to its label bar and unfolds again. Number cards and walk them with the arrow keys to present a board. Each is a switch in the board’s own options, and each is off or unobtrusive until you turn it on.

  • Open a canvas card in a tab. ⌘-double-click a note or task card to open it in a new tab, ⇧⌘ to open it to the right — the same gesture as everywhere else in Pellet — and the card’s toolbar gains an open button.

  • A task card looks like a task card. Priority, due date, a recurring marker and the description show on the card, and its pencil opens the task dialog.

  • Fold a Kanban column to a strip. A column collapses to a narrow strip showing its name and card count, so a board with many columns fits on one screen. The fold is remembered per board.

  • A rail you arrange, and one you can put away. Right-click the icon rail for Customize sidebar…: drag the buttons into the order you want and switch off the ones you do not use. Hide sidebar rail takes the strip away entirely and moves everything it held into the Library menu in the title bar. Which buttons you keep travels with you; whether the rail is shown is per device.

  • Templates in the / menu. Every note in your templates folder is now a slash command of its own, listed under a Templates heading below the built-ins. Type / and part of the template’s name to narrow the list, press Enter, and the template is inserted at the cursor with its variables filled in — {{title}} is the note you are in. Works in notes and tasks.

  • A type can carry a template. In Settings ▸ Tasks ▸ Types, give a custom type a template and choose whether Pellet asks first or applies it as soon as a note or task becomes that type. The template lands after anything already written.

  • Single newlines can start a new line. A switch in Settings ▸ Editor: with it on, a line break inside a paragraph renders as one instead of joining the lines. It applies everywhere a note is rendered — reading view, canvas cards and hover previews alike. Off by default, which is what Pellet has always done.

  • Your fonts. Add a font file — .ttf, .otf, .woff or .woff2 — in Settings ▸ Appearance and use it as the interface or editor font. Files of one family (Regular, Bold, Italic…) join into one font, so bold text uses the real bold. Fonts stay on the device you add them to. Works on the desktop, iPhone, iPad and Android.

  • Export and import your formatting. The Formatting theme row in Settings ▸ Appearance gains Export…, which writes the formatting you are looking at to a file, and Import…, which reads one, saves it as a theme under a name that overwrites nothing of yours, and applies it. Take your type settings to another vault, or share them. Export can include your appearance settings too — theme, color scheme, accent, fonts, control size — and an import that carries them asks before applying them.

  • Exported formatting carries its fonts. Export… with appearance included takes the added fonts it uses along with it, and Import… on another device installs them when you choose Apply.

  • Your own dictionaries. Import a StarDict or DICT dictionary — the formats GoldenDict, KOReader and FreeDict use — in Settings ▸ Dictionary, and it answers lookups beside Pellet’s own. Desktop only for now; entries show as text.

  • Hide Pellet’s language packs. A switch in Settings ▸ Dictionary keeps the list to the packs on this device and your own.

Changed

  • Canvas options live on the board. Shapes, the default line routing, connected-line highlighting, focus, folding and presentation are in the board’s ⋯ menu rather than in Settings.

  • One + Add button on a canvas. Add note, Add card and Add group were three buttons taking up the toolbar.

  • A converted card is named like every other document. Converting a card to a note or a task gives it the “Note - ” and “Task - ” names Pellet uses everywhere else.

  • The canvas trash button says what it will do. On a note or task card it reads Remove from board, and says the file stays in your vault. Delete this card is shown only for a card that is nothing but a card.

  • The rail’s table button says “Table view”, since the table shows more than tasks.

  • The / menu looks like the rest of Pellet. The same font, spacing and corners as every other menu, rows named plainly (“bold”, not “/bold”), and the letters you typed shown in bold rather than underlined. Link and tag suggestions share the new look.

  • Status and type editors open in a dialog. Editing or adding a status or a type in Settings ▸ Tasks used to unfold inside the scrolling list, which left a form with properties and a template cramped in a short box.

  • A list of links in the Table reads as links. A list property holding wikilinks drew each one as a pill, which made the column look like tags. It now shows plain, comma-separated links, the way an embedded table and the reading view already did.

  • Windows are titled by their vault. The Dock’s window list and the Window menu used to show “Pellet” for every window. Each now names its vault, a document window its file and vault, and Settings its vault.

  • iPhone and iPad: the vault switcher names the supported locations, iCloud Drive and On My iPhone/iPad. Other storage apps show grayed out in the system picker because iOS lets only those two offer a folder to another app.

  • The graph’s default forces. Almost no center pull and a much stronger repulsion, which spreads a large vault into a readable disc instead of a dense ball. If you never moved the force sliders you get the new look; a graph you tuned yourself is unchanged, though its sliders read differently because their ranges were re-centered on the new defaults.

  • list_notes finds files by date, for MCP clients and the API. It can list what was created or edited in the last few days, across every kind of file. “Today” means since midnight where you are, not the last 24 hours. An unknown kind is refused by name instead of returning an empty list, and an empty folder means anywhere in the vault rather than only its top level.

Fixed

  • Completing a recurring task on one device could be undone by another. A device opening after a long gap tidied up its recurring tasks before it had caught up, and its older copy replaced occurrences you had just completed elsewhere, leaving conflict copies. It now waits until it is in step with your other devices. And when two devices change the same recurring task, their changes are combined where that can be done safely, rather than one of them becoming a conflict copy.

  • Calendar: Color by now reaches the Agenda. Choosing Type or Status tinted the month and week but left the Agenda untouched; its rows now take the same tint. The control is hidden in List, which draws its own priority edge and never read the choice.

  • The graph settles to the same layout however you get there. A first open used to stop on a fixed timer before a large graph had finished spreading out, so nudging a force slider and putting it back changed the picture. The layout now settles once it has actually stopped moving.

  • Right-clicking a canvas card gives the card’s menu, not the dictionary lookup. The dictionary menu is still the right one while you are editing the card’s text.

  • Editing a canvas card uses the real editor. The pencil opened a plain text box showing raw markdown and the note’s property block; it opens the same live-preview editor the rest of Pellet uses.

  • A shaped card shows its first line. A card whose shape made its text too tall showed the middle of it, with the top cut off.

  • A line’s toolbar no longer covers the line or the endpoint you were aiming at.

  • Importing formatting that names a font you don’t have no longer leaves the font picker blank. The font falls back to System, and the import prompt says so before you apply it.

  • A formatting file with appearance settings but default formatting can be imported. It used to be refused as holding no formatting.

0.21.0
17 September 2026
public beta

Sync what you choose

Added

  • Selective sync. Settings ▸ Device sync has rules for what this device holds and what the whole group stores, by folder, file kind or size. Nothing already on a device is deleted; excluded files show a cloud-off icon.

  • Reclaim space on the sync relay. One button removes everything no device references any more and says how much it freed.

  • Eight ways to number a list. A List style button in the toolbar: decimal, multilevel, outline, roman, letters and padded decimal, carried into reading view, print and export. The file keeps ordinary 1. markers.

  • Color the calendar by type or status. A Color choice beside the view buttons tints tasks and notes in their pill colors; remembered per vault.

  • Focus mode in a torn-off window. ⇧⌘F, Esc and the ⋯ menu work there, independently of the main window.

  • Keep a torn-off window on top. A thumbtack in the title row, or ⌥⌘P; remembered with the window.

  • Keep markdown hidden under the cursor. Custom formatting ▸ Body ▸ Hide markdown at the cursor keeps the line you are editing formatted; the syntax is then seen only in source mode.

  • Add a type from a note’s own type row. The properties panel’s type picker ends with New type…, saved exactly as Settings ▸ Tasks ▸ Types would.

  • Delete a sync group from inside Pellet. Settings ▸ Device sync ▸ Danger zone removes the group and its files from the relay for every device.

Changed

  • Uploading to a sync group is much faster. Files go up several at a time and the relay is asked once which ones it already has.

  • The sync activity log reads the same on every device. Every line says where the file is in the run, its size or the reason it was skipped, and which device sent or served it.

  • A slow sync action says it is working. Deleting a group, removing a device and leaving as the last device explain the wait instead of showing a disabled button.

  • Leaving a sync group as its last device removes the group. The group no longer lingers on the relay with nobody in it.

  • Pairing survives a relay restart. The built-in relay keeps a pairing in progress across a restart and shuts down cleanly when Pellet quits.

  • Raw HTML in a note is sanitized before it is shown. Pellet’s own markup and the |300 image width stay; scripts, frames, event handlers and inline styles are dropped. Diagrams, maths and code highlighting are unaffected.

  • The local API refuses requests from web pages. Only loopback origins, or ones you list in httpApiAllowedOrigins, are answered; command-line and MCP clients are unaffected.

  • Settings warns in red when the local API has no access token. The token stays optional; the risk is now stated where you set it.

Fixed

  • Joining a big vault no longer looks like it failed. Pairing hands straight over to the download, which says it is downloading for as long as it is.

  • A numbered list counts the way it reads. Editor, reading view and exports agree, and Tab renumbers what it indents, without rewriting your file.

  • A wrapped list item hangs under its text in the editor, as it always did in reading view.

  • Renaming a vault renames it everywhere, including the Explorer.

  • A wikilink in an embedded table is a link, in live preview and reading view.

  • Note previews no longer start with an HTML comment from a list-style or calculation marker.

  • Removing a device says which device is in the way, and only the button you pressed says “Checking…”. An iPad is offered “iPad” as its name.

  • A slow sync action is no longer reported as a failed one. Relay actions get the time they take, and say when they may still be finishing.

  • A newly created sync group no longer lists a device that is not in it.

  • A sync identity that cannot be read is no longer replaced. Pellet says what went wrong instead of silently making a new one the group will not recognize.

  • The live sync feed survives the download it was recording. It clears when you switch vaults, not when the download ends.

  • Opening a big vault on a phone no longer does the work twice.

  • A vault that fails to list can no longer appear empty. Pellet says it could not read the vault instead of showing an empty one.

  • An attachment written through the API can no longer land outside the vault by way of a symlink. Linked folders keep working.

  • The API folder allowlist covers the places a tool decides on by itself: daily notes, trash restores, archiving, templates, tasks and boards.

  • A diagram with equal axis bounds no longer hangs the reading view.

0.20.0
14 September 2026
public beta

Look it up, offline

Added

  • A dictionary built into Pellet, works offline. Put the caret on a word and press Ctrl+⌘D (Ctrl+Alt+D on Windows and Linux), right-click it, or tap Define in a PDF, EPUB, or the phone keyboard toolbar. The card shows meanings by part of speech, pronunciation with a speaker button that reads the word in its own language, your own definitions, and any note in your vault named like the word — a plural finds its singular throughout. 29 language packs are available in Settings ▸ Dictionary, now with a search box — every language defined in English, English defined in every language, and every language defined in itself — downloaded once and read in small pieces so a large pack costs nothing until you use it. Each pack’s row says which language it defines in, and Russian and Polish now find inflected forms (читаю → читать) instead of only dictionary forms. Sections in the card can be reordered and folded, a pack you downloaded but haven’t switched on is named instead of reporting no definition found, and clicking a note under “In your vault” peeks at it without leaving the card.

  • A spellchecker of Pellet’s own. The editor now underlines misspellings using a checker built into Pellet — the same on every platform, nothing sent anywhere — and right-clicking one offers suggestions and Add to spelling. Choose British or American English in Settings ▸ Dictionary ▸ Spelling, or switch on nine more spelling languages and ten more lookup languages; add your own Hunspell dictionary at the top of the list, or switch back to your system’s checker if you prefer it. Words you add and languages you choose travel with the vault instead of one device, and the whole Settings ▸ Dictionary screen now fits on one screen, with the packs, your definitions and word lists behind rows you open when you need them. Tags are no longer spellchecked.

  • Grammar checking, on this device. Settings ▸ Dictionary ▸ Grammar underlines agreement, punctuation, word-order and repetition problems as you write. Right-click an underline for an explanation, a fix, or to turn that rule off everywhere. It is English only and runs entirely on your machine; a separate Style suggestions switch (hedging, filler words, long sentences) is off by default.

  • Callouts fold. Write > [!faq]- Question and the callout starts collapsed; click its title row to toggle it, in both the editor and the reading view. A callout inside a callout now works properly in the editor, and hovering one in live preview offers an “Edit the markdown” button.

  • Callouts and quote blocks can carry a corner radius, under Custom formatting.

  • Frontmatter aliases. aliases: [Cliff edge, Escarpments] makes a note findable by any of those names, from links and from the dictionary card. A filename always wins over an alias.

  • The camera, on your phone and your tablet. Take Photo, Scan Doc and Scan Text are new actions from a camera button above the keyboard, from New, and from More ▸ Capture, beside Voice note. A photo is saved into your vault and embedded where you were typing, Scan Doc gives you edge-corrected pages one image each, and Scan Text reads a page on the device and gives you just the words, with no picture kept. Nothing is uploaded. Walking away from the camera to another note no longer loses the capture — Pellet saves it and tells you what it’s called, and scanned text becomes a new note.

  • Tidy the New sheet on your phone. Edit, in the sheet’s own header, turns the nine cards into switches you can also drag into your own order, so you can hide what you never make; a Reset undoes your changes. The formatting row above the keyboard — including the camera button — now appears on iPad too, along the bottom while you’re typing.

  • Paper knows how you like it. Settings ▸ Paper sets the color, page size, template, pen and ink color a new Paper starts as, instead of finding out what you get — the pen and ink fields there match the ones in the toolbar, and changing one updates the other. Press “Make new Papers look like this” in the toolbar to copy the page in front of you instead, pen and ink included. Changing something inside one Paper now changes only that Paper, and Pellet remembers the pen you were using rather than resetting to a black fountain pen every time you open one.

Changed

  • One link underline setting, with three states. Custom formatting ▸ Body now has a single Underline links choice — On hover, Never or Always — covering both wikilinks and ordinary hyperlinks, replacing the two on/off switches added in 0.19.0. On hover is the default and is how links have always looked.

Fixed

  • Your vault appears the moment Pellet opens on a phone or tablet. On a large vault, launching Pellet showed almost nothing for up to twenty seconds before the folders and files arrived. Pellet saves a copy of your vault’s index so it can show everything instantly at the next launch, and on iPhone and iPad it had never been able to replace the previous copy — so it kept showing one saved long ago.

  • Device sync stopped checking every few seconds for no reason. On a vault old enough to carry one of Pellet’s early bookkeeping files, phones and tablets ran a full check around the clock — reading every file, finding nothing, and starting again — which cost battery and made the status flicker without pause. Computers were never affected.

  • The status only says “Syncing” when something is actually syncing. A check that finds nothing to send and nothing to receive now says nothing at all, instead of flickering between Synced and Syncing against a vault nobody is touching. It still tells you when a check is stuck.

  • The activity log names the settings files a device does not have. It reported a bare count — “2 of Pellet’s own settings files are not on this device” — which said neither which files nor whether anything was wrong. It now names them, and says that it is normal: a device has no dictionary document until you add a word to its dictionary.

  • The activity log says why a check started. When Device sync runs because something on this device changed, the log names it — “1 new”, “2 edited”, “3 attachments” — rather than only recording the check that followed.

  • A phone no longer locks up after a big vault arrives. Once a few thousand files had come down from a sync group, Pellet could stop responding for minutes at a time, often long enough to need force-quitting, and do it again on the next launch. The work of noticing thousands of new files at once is now done once for the whole batch rather than once per file.

  • Device sync no longer loops over its own settings files. Two paired devices could get stuck trading the same four files back and forth every few seconds — your properties, your dictionary words, your spelling list and the device list — deleting and recreating them with nothing having changed. A device that does not have one of those files now leaves it alone.

  • Buy a License says so when it cannot open the page. On Linux the click could fail with nothing shown, so the button looked broken. It now names the link so you can copy it, and the Unsplash photographer credits behave the same way.

  • Callout titles render markdown in the reading view. Bold, italic, code, highlights, tags and links in a callout’s title now display properly in both the reading view and the editor, instead of showing raw markdown or HTML. A link in a foldable callout’s title opens the note instead of folding the callout.

  • A callout inside a callout works in the editor. A nested callout used to show its raw [!tip] marker as text in live preview; it now renders as a callout of its own, indented and shaded to show the nesting. A plain quote wrapping a callout still reads as a quote.

  • Underline links set to Never now means never in the editor too. The editor’s own syntax highlighting was drawing its own underline on link text regardless of the setting; both now follow the same choice.

  • Two dictionary packs no longer say they are 0 MB. English defined in Dutch and English defined in Portuguese are real dictionaries under a megabyte that were rounding down to nothing; sizes under a megabyte now read in KB throughout Settings ▸ Dictionary.

  • The daily-note button on the calendar is big enough to tap. It was 12 points square on a phone or tablet; the date and the notebook icon are now one button filling the top of the day.

  • Tags work in every language now. A tag written in the body of a note used to stop at the first accented letter — #Bücher became #B plus the word “ücher” — in the editor, reading view, search, completion and renaming. Tags listed in a note’s properties were always fine.

  • Notes no longer vanish when the app lists a folder short. On a phone, a folder that the system briefly reported as empty while its files were still there no longer empties the app’s list — Pellet checks the disk before treating a missing file as deleted.

  • Sync no longer deletes a folder everywhere because one listing missed it. The same short listing used to record a folder’s files as deleted and send that to every device; sync now checks the disk before recording a deletion.

  • A note read while it was being written no longer replaces its text. A phone rescan that caught a file mid-write could cache the half-written (or empty) text over the note; a short read is now left for the next poll, and an empty read is trusted only once two listings agree.

  • Reopening the app on a phone rescans once, at once. It used to leave a second poll timer running for the rest of the session and skip the rescan the reopen was for.

  • The Tasks panel follows the day. Left open across midnight, or overnight in the background on a phone, it used to keep showing yesterday’s date until the app was relaunched.

0.19.1
10 September 2026
public beta

Quotes mean what they say

Changed

  • Clicking a search result’s line now highlights the word in the note, not just the line. It marks the same words the result row marked, and the highlight clears as soon as you start typing. A match inside a rendered table is the exception — its source is hidden behind the table, so switch to source view to see it marked there.

Fixed

  • Quoting a search term now means whole words. "cat" finds the word cat and no longer comes back with cats and Applications; an unquoted cat still finds all three, which is the right default. This is what the help always said quoting did.
0.19.0
9 September 2026
public beta

Search that knows what you meant

Added

  • Preview a link by hovering it. Rest the pointer on a [[link]] and the start of that note appears, rendered; move onto the card and it stays open, so you can scroll it and follow links inside it, and the button in its top-right corner opens the note, or the page in your browser. Two switches in Settings, under Behavior, because the two halves are different things: note previews read a file on your own disk and are on by default, while web previews ask the site for a page you have not clicked — which tells that site your IP address — and are off until you turn them on. A page is fetched once per session however often you hover it.

  • Search results show the line, not just the file. Typing in the Search pane or the file list’s filter box now lists the matching lines under each file, with the line number and the word highlighted — the same rows the Tags pane already showed for tags. Clicking one opens the file at that line, so you land on the word instead of searching the document again. A match far along a line is brought into view rather than being cut off the end of the row.

  • Capitalize sentences as you type. A switch in Custom formatting under Body. It capitalizes the first letter of a line and the first letter after a full stop, question mark or exclamation mark, and knows to stay out of the way: not after e.g. or etc., not on 3.14 or foo.md, and never inside code, a link address or frontmatter. Off unless you turn it on, since it changes the note rather than how the note looks.

  • Insert the time, on a phone. A clock button on the keyboard toolbar, next to the one that inserts today’s date. It writes the time the way the rest of the app shows it, following the 12-hour or 24-hour choice in General settings.

  • Underline links, or don’t. Two new switches in Custom formatting under Body: one for hyperlinks and one for wikilinks, separately. Both start off, which is how links have always looked, and hovering a link still underlines it either way. Exports and printed pages follow them too — those always underlined every link before, which was the browser’s default rather than a choice.

  • A daily-note glyph on every date. The calendar’s month, week, day, agenda and list views, and the Tasks side panel, now show a small notebook beside each date: colored when that day’s daily note exists, faint when it doesn’t. Click it to open the note, or to create one from your template and open it.

  • Roll up history on repeating tasks. A repeating task writes one file per completed or skipped occurrence, and a daily habit soon has hundreds of them. Roll up history — in the Repeat Occurrences panel on the task, in a task row’s menu in the Table, or through the API — folds them back into the task: the days and statuses go into its properties, notes you wrote on individual occurrences go into one “History” note beside it, and the files go to the trash. The completion heatmap and the occurrence list keep every day. Two new Tasks settings run it for you: roll up occurrences older than a number of days, and which occurrence notes to keep (only the ones that differ from the task, all of them, or dates only).

  • Graph groups. Color the graph by rule, the way Obsidian does: each group is a query (path:Projects, tag:#work, file:Draft, a bare word, - to leave something out, several terms together) with a color and a switch; the first matching group wins. Groups travel with your vault settings.

  • Semantic links in the graph. A Links / Semantic / Both switch draws lines between notes that are about the same things, found by Semantic search, instead of or beside the links you wrote. Two sliders set how many neighbors each note reaches for and how alike they must be. The neighbors are worked out once (with progress and a Cancel), kept on disk, and only re-checked for the notes you change. Desktop only.

  • A better-looking graph. Dots grow with their link count, hovering lifts a note and its neighbors out of the crowd and names them, labels fade with zoom, lines are softer, and the layout settles from a compact cloud instead of scattering orphans into a ring. Names no longer pile on top of each other in a large vault: the most-linked are drawn first, one that would overlap another is left out, and zooming in reveals more.

  • The graph’s force sliders read 0 to 10, with every default in the middle at 5, instead of showing the raw numbers the layout runs on.

  • Kind is now a graph filter condition, alongside Folder, Title and Tags — the same kinds the all-files table uses.

  • Types carry properties. A type — Task, Note, or one of your own — can now list the properties every file of that type should have, each with a kind and an optional default, in Settings ▸ Tasks ▸ Types. Applying a type adds what’s missing without touching values you already have; switching a file to another type drops the old type’s empty properties and keeps the filled ones. The properties panel’s type row is now a picker, for notes as well as tasks, and changing a type’s list offers to update the files that already carry it. Pellet’s own properties can’t be added to a type.

  • Linked folders. A folder in the vault that is a symbolic link (macOS, Linux) or a junction (Windows) is followed on desktop: its notes are indexed, searched and edited under the link’s name while the files stay where they are. Obsidian’s rules apply — the target must be outside the vault, must not contain it, and two links may not overlap — and a link that breaks one of these is ignored, with a message. Linked folders are never carried by Device sync, are ignored on phones and tablets, stay in the tree marked unavailable when their drive is unplugged, and are removed with “Remove link”, which never touches the folder they point to. Settings ▸ Vault health lists them.

  • LaTeX math. Write $E = mc^2$ in a sentence or $$ … $$ on its own lines and the editor draws the equation with KaTeX, showing the raw TeX again the moment the caret moves into it. The reading view draws the same equation. A price like “$5 and $6” stays prose, and a $ inside code is never math. /math drops in an empty $$ … $$ block to type into.

  • Mermaid diagrams. A ```mermaid code block draws as a diagram in the editor and in the reading view, following your light or dark theme. Click the diagram to edit its source. A diagram that does not parse shows Mermaid’s message in place, over the source, rather than an empty box.

  • AI providers, set up once. Settings ▸ AI & MCP opens with one Providers card that sums up every service in a line and opens to a row per service — OpenAI, Anthropic, Google Gemini, Ollama, and the built-in models — holding its key or address in one place, with a Test and a Forget. Paper transcription, audio transcription and semantic search now only pick a provider and a model; a feature whose provider has no key says so and links to it. Each row shows which features use it.

  • Semantic search. Turn it on in Settings ▸ AI & MCP and the Search pane gains a Semantic mode that finds notes by meaning — “vehicle service” finds the note about changing the oil — landing on the section that matches, with a snippet. Every note also gets a Related notes list in its right panel, and agents get a semantic_search tool beside search_vault. The index is built on your device by a small model that downloads the first time you switch the feature on (68 MB, once) — on the GPU when your machine has one, otherwise across several CPU cores — or by Ollama or OpenAI if you prefer, and is kept up to date as you write. Off by default; it is never synced. Desktop only for now.

  • Insert an image while you type. Type /image, or tap the new Image button on the phone’s keyboard toolbar, and the same picker the banner uses opens for the note body — upload a file, paste a link, search Unsplash or pick something already in the vault. The image lands where the caret was, on its own line. An Unsplash photo brings its “Photo by … on Unsplash” credit with it, as Unsplash requires.

  • Copy button on code blocks in the editor. Hover any line of a fenced code block and a copy button appears at the end of its fence line; one click puts the block’s text on the clipboard. The reading view already had its Copy button in the block’s header.

  • The search box now shows you the language. Click into it and it lists what you can narrow by; type tag: and it lists your tags, path: your folders, [ the properties your notes carry. Arrow keys move, Enter or Tab accepts. Typing an ordinary word still just searches for it.

  • Recent searches sit under those options, so a query you ran yesterday is one click away. They are kept per vault and never leave your machine, and the heading has a button to clear them.

  • Google (Gemini) as a semantic search provider, beside Built-in, Ollama and OpenAI. It uses the same Google key as transcription, so a key set up once serves both.

  • A search language for the Text tab. Bare words still work exactly as before, and now "quoted phrases" match exactly, uppercase OR offers an alternative, a leading - excludes, and parentheses group. file:, path:, tag: and content: narrow a term to one part of a note; match-case: and ignore-case: settle capitalization; [status] finds notes carrying a property and [status:draft] matches its value. Anything else before a colon is ordinary text, so searching for TODO: or a web address still finds itself.

  • Result filtering for semantic search, in Settings ▸ AI & MCP: Relaxed, Normal or Strict. Normal is the default.

Changed

  • The File Info panel gets out of its own way. Its sections collapse and expand, and one only opens by default when it has something in it — a note with no backlinks and nothing linking out no longer spends half the panel saying so. Related notes always starts collapsed, however many it found, and scrolls inside its own box instead of pushing the outline and tags off the bottom. Outline entries are clickable: click one and the document scrolls to that heading, in the editor and the reading view alike.

  • Search shows only the search pane. The file list used to stay open beside it, still showing whatever the Files tab last had — an answer to a question nobody asked, since the search results already are the file list. That column now goes away while you search, and the room goes to the document. The phone layout always behaved this way.

  • A task in the file list no longer looks finished. It was marked with a plain checkmark, which reads as “done” — an open task and a completed one carried the same tick. Tasks now use the checklist glyph the sidebar, the rail and the top bar already use for them.

  • A filter tab asks before it loses or keeps your edits. Changing the search, conditions, sort, grouping or kinds in a tab opened from a saved filter used to persist with that tab — reopening it later showed the edits, which read as the filter having been changed. The tab now shows an unsaved-changes bar with Save to filter and Revert, closing it asks Save / Don’t save / Cancel, and opening the filter again from the side pane resets the tab to the filter as saved.

  • Searching stops reading files it has already ruled out. A query that names a filename, a path, a tag or a property is answered from what is already in memory, so file:plan budget reads the notes called Plan instead of the whole vault.

  • Semantic search stops listing what it does not know. A search about something your vault never mentions now returns nothing instead of fifty faintly similar notes, and a real search stops at the end of its answers rather than trailing off into the rest of the vault. Related notes follow the same rule: a note about nothing in particular has none.

  • The model reads your notes as prose. Checkboxes, bullets, emphasis marks, table lines and bare links no longer reach the embedding model as if they were words, which made notes that were mostly checklists look alike. The semantic index rebuilds once after updating.

  • Google embeddings say what they are for. A search is sent as a query and your notes as documents, which is how Google recommends the model be used for retrieval.

Fixed

  • A note in a graph group lost its group color the moment you hovered or opened it, which hid the very thing the group was marking.

  • Graph filter conditions skipped attachments, so a graph narrowed to one folder still drew images from everywhere else.

  • The graph’s Attachments and Existing files only switches did nothing. Attachments now appear as hollow dots when the switch is on, and with Existing files only off, a link to a note that doesn’t exist yet is drawn as a hollow ghost.

  • Table pills on touch devices are a full tap target. A status or priority pill in the table could measure a point under the 44pt minimum on some fonts; at comfortable density every pill is now at least 44pt wide as well as tall.

0.18.0
2 September 2026
public beta

A phone app that looks like one

Added

  • A phone layout built for a phone. A five-slot bar docked to the bottom of the screen — Library, Tasks, New, Today, More — and a large title on every screen, from Library and Tasks to Table, Board, Calendar, Graph, Map, Tags and Properties.

  • The New sheet. The center button opens the six things you can make — Note, Task, Recording, Paper, Whiteboard, Canvas — as cards, headed by the folder they will be created in.

  • Text follows your phone’s text-size setting. Rows, titles and labels grow and shrink with it while controls stay big enough to hit. Settings ▸ Appearance ▸ Text size sets a size for Pellet alone — Follows phone, or 85% to 150% — on that device.

  • A View chip instead of a toolbar that runs off the edge. Table, Board, Calendar, PDF and EPUB each carry a chip or two that open a bottom sheet holding everything the desktop toolbar has; Settings and the keyboard row fit the screen too. The keyboard toolbar and the kanban board still scroll sideways, which is what they are for — and the board now scrolls from a finger that starts on a card.

  • Change a task from the row you are reading. Tap its date or time for the phone’s own picker, its priority for the four choices, and swipe the row left to open the full edit form.

  • The task form suggests your vault’s tags. Tags are pills with an X on each, and the add field lists every tag in the vault with the number of files using it, most-used first.

  • Settings sections are screens. A section pushes over the list with a back button and its own title; the hardware back button and a swipe in from the left edge both go back.

  • The Move dialog’s folder tree folds. It opens at your vault’s top-level folders; a chevron, or the Left and Right arrow keys, unfolds the rest. Search still finds folders inside folded ones.

  • Resize a table’s columns in the editor. Drag the boundary between two header cells and the column beside it gives up the same width, so the table never outgrows the page. Widths are remembered per note; double-click a boundary to go back to automatic.

  • Show the [[ ]] around a wikilink while you write — a switch in Settings ▸ Appearance ▸ Custom formatting ▸ Body. An aliased link still shows its alias.

  • Lists inside table cells render in the reading view, and in the PDF, HTML and RTF you export from it.

Changed

  • A table exports as a table. RTF carries the grid, header shading, striping, padding and column alignment, and PDF and HTML draw a table the way the editor draws it.

  • The reading view’s table matches the editor’s — even column widths, an empty column that keeps its share, aligned columns honoured, and a calculation row with its function name beside the value on a tinted row.

  • A board’s “Add property…” offers the properties your vault already has, each with the number of files using it, and says when a name is one nothing uses yet.

Fixed

  • Your daily note is no longer replaced by a blank one. Opening Today while the app was still reading the vault, or after a file had dropped out of its list, could create the note again on top of the one already there. Pellet now checks the vault itself before creating anything, opens the note that is there, and will not empty a file it has not read.

  • A note that has not been read yet is not an empty page you can type in. Opening a note waits for its text before showing the editor, and a file that cannot be read says so, with a Retry, instead of opening blank.

  • On iPhone and iPad, a file iCloud has evicted from the device is no longer treated as deleted. It stays listed, Pellet asks iCloud to download it, and until the bytes arrive the note reads as not yet downloaded rather than as empty.

  • A markdown link finds the file sitting beside your note. ![](My%20Note%20assets/photo.jpeg) is now looked for in the note’s own folder first and the vault root second, everywhere a link is shown, opened, counted as a backlink, exported, or rewritten by a rename. An embed that resolves to nothing says so instead of leaving an empty frame.

  • A tab torn off into its own window opens its note, in the vault it came from; a window that cannot find a vault says so.

  • The calculation row keeps its tint when exported, matching the header as it does in the editor.

  • A menu opened from inside a bottom sheet is on top of it.

0.17.0
30 August 2026
public beta

Tables that act like the rest of the editor

Added

  • Markdown renders inside table cells. Bold, italic, inline code, highlights, strikethrough, wikilinks, tags and links all display formatted in live-preview tables. Click a cell to edit its raw text; click a link, tag or wikilink in a cell and it opens, exactly as it does outside a table.

  • Line breaks inside a cell. Shift+Enter starts a new line while you type — the cell grows with you — and your file stays a single valid table row. Exports carry the breaks as real line breaks.

  • Lists inside cells, with live checkboxes. Bullet, numbered and checklist lines in a cell render as real lists, and clicking a checkbox ticks it — no editing required.

  • The editor’s helpers reach into cells. [[ offers your notes, # offers your tags, and selecting text in a cell summons the same formatting toolbar the note body has.

  • Typewriter mode. In focus mode, a typewriter button keeps the line you’re writing vertically centered — top and end of the note included. Clicking around doesn’t yank the view; the next keystroke re-centers.

  • Reorder kanban columns by dragging their headers. An insertion bar shows exactly where the column will land, and the order sticks per board.

  • The status dropdown is yours to arrange. One flat list, reorderable in Settings — built-ins and your own statuses together — and In Progress, Complete and Skip can be hidden behind an eye icon if you’ve made your own versions. Custom statuses now wear the icon of what they count as.

  • Filters and search read inside your files. The note list’s filter box matches body text — including the words on canvases, whiteboards and papers — and Search gains the same reach.

  • Find files you created but never filled. A new “Empty file” filter condition in the Table view matches notes with no body text, papers with no strokes, canvases with nothing on them and whiteboards with no objects. Vault Health shows a live count with one-click review in the file list — nothing is deleted until you’ve looked for yourself.

  • ⌘D lands your cursor in the new daily note, ready to write.

Fixed

  • Adding a device no longer wipes the group’s settings. A newly paired device could overwrite the group’s custom status colors and other shared settings with its factory defaults. It now adopts the group’s settings before it may publish anything, and your settings download ahead of your notes during pairing.

  • Leaving a sync group clears the sync status — leaving while the relay was offline could strand a red “Sync error” on a device that no longer syncs.

  • The line right under a table renders again, and a table at the very top or bottom of a note is no longer a trap — arrow-keying past the edge creates the line you were reaching for.

  • Pellet’s own bookkeeping files stay out of All Files, and “Reveal in file manager” is hidden on iPhone, iPad and Android, where it did nothing.

0.16.0
29 August 2026
public beta

Sync tells you the truth

Added

  • Swipe any file for its actions, not just notes and tasks (phones and tablets). A PDF, an image or an EPUB row now swipes open the same Rename / Archive / Delete tray a note does. Deleting a PDF still accounts for any highlight notes it left behind, and archiving one moves it into Archived/ just as the menu does.

  • The canvas “Embed a note” dialog suggests notes as you type. The field shows a filtered list of your vault’s notes; pick one and Add. When two notes share a name, the list shows each with its folder so you embed the one you meant.

  • Collapsible headings in the editor. Hovering a heading shows the same chevron collapsible lists use; clicking it folds everything under the heading — subsections included — up to the next heading of the same or a shallower level; the chevron stays put while folded and clicking it again expands. Works for # and underline-style headings alike, and the standard fold shortcuts see the same ranges.

  • Transcription keeps going when you switch apps (Android). Leaving Pellet mid-transcription used to kill the run silently, leaving “Transcribing…” on screen for work that had stopped; a long recording now finishes in the background, with a quiet notification while it runs. Locking the screen is fine too. Swiping Pellet away entirely still cancels, as closing the app should.

  • A new “Base (English, compact)” transcription model — half the download (78 MB), a little faster, and the same quality as Base in testing. The two Tiny models are gone: they cost the same space as the compact model while transcribing noticeably worse, so every job they did the compact model does better. If you had Tiny selected, pick a model again in Settings → AI.

Fixed

  • Pairing says straight away when the sync relay can’t be reached. Joining a group whose relay was off the network sat on “Contacting the other device… (keep the pairing panel open on it)” indefinitely, which read as progress. The join now checks the relay first and, if nothing answers, stops within a few seconds and names the address, the port and the usual causes.

  • Sync notices when the relay goes away, in seconds rather than minutes. A device could show “Syncing…” and a green “reachable” relay for ten minutes after the computer hosting the relay left the network — nothing had failed, the requests were simply waiting forever. Every request now has a time limit, each sync round checks the relay before reaching for it, and a relay that stops answering is reported as offline. A single dropped packet is not an outage: an unreachable verdict has to repeat before Pellet acts on it, so a wifi roam or a cell handover doesn’t flip the status.

  • The status says “Trying to connect…” while it is connecting. Nothing can sync until the relay answers, so a sync round that is still reaching for one no longer describes itself as syncing.

  • Leaving a sync group is final. A device that left in the middle of its first download quietly resumed that download the next time it opened — so files deleted after leaving came back. Leaving now ends the download for good. (Rejoining a group still downloads its contents, which is the point of rejoining.)

  • The join screen stops showing a failed attempt as a live one. After a failed join the panel kept a “Checking that the sync relay can be reached…” status and a countdown beside the code, and canceling and reopening the form brought all of it back. Each attempt now starts from a clean form, and a failure leaves only the error.

  • Renaming a file changes its name, not its type. The rename box for a PDF, image or other attachment was filled with the whole filename, extension included — and since it selects everything for you to type over, the extension was easily lost. It now offers the name alone and keeps the extension.

  • Confirmations and prompts no longer fill the whole screen on a phone. A two-line “Move this folder to the trash?” was drawn as a full-height sheet. Small dialogs are sized to their content; full-screen sheets are still used where there is a screenful to show.

  • A pasted link kept as “Text” looks like text. Choosing Text from the paste bar means the address stays as plain words rather than becoming a link, but it was still colored like one — which promised a click that did nothing.

  • Error messages in Settings read as sentences. Some failures arrived with internal plumbing in front of the message; the message now begins with what actually went wrong.

  • Long recordings transcribe on Android instead of crashing the app. A 48-minute meeting used to kill Pellet within seconds of starting the built-in transcriber — the recording was being decoded in a way that briefly needed hundreds of megabytes. It is now decoded natively, and the same recording completes in a few minutes.

  • The built-in transcriber is much faster on Android — the same 48-minute recording that took around ten minutes now takes about three, and about two and a half with the compact model. The engine was being built without the processor features every supported phone has had since 2019.

  • Calendar events no longer vanish from the Task list until the app is restarted. A fetch that failed — typically the first one after a phone woke up, before its network did — showed as an empty list and was never retried, so the list stayed empty for days while other devices looked fine. A failed fetch now keeps the events already on screen, retries shortly after, and the app refetches whenever it returns to the foreground.

  • Devices stop rewriting the shared settings file around the clock. The Google Calendar sign-in synced with its hourly-refreshed access token inside, so every device’s routine token refresh republished settings to the whole group. Only the durable sign-in syncs now — each device keeps its own short-lived token, which also means that token never leaves the device.

  • The Tags and Properties views always show the whole vault. Opening the Trash and then switching to Tags left the trashed files listed, and picking a tag from there filtered the Trash instead of your notes — the same after the Archived and Conflict copies views. A tag isn’t a place and neither is a property, so neither view pays attention to the folder you were last in. The heading follows too (it could read “Trash” over a tag’s results), and the Properties view no longer offers an “Empty Trash” button. The two views also now agree on arrival: Properties used to open on a blank list where Tags showed your files, so the same gesture gave two different answers.

0.15.0
28 August 2026
public beta

Embed a heading, and sync a library

Added

  • A card shows its task’s description. A Card badges switch turns it off, and an optional body preview can be shown underneath — which leaves out the sections Pellet writes itself and the checklist lines that already have badges of their own.

  • Each board can file its cards in its own folder. Set Board folder in the board’s settings and every card it creates lands there — quick add, New task, converting a checklist line, and the API all follow it. Left unset, the board uses the Inbox folder from Settings. It governs where new cards are created and nothing else: a card belongs to a board however its file is filed, so changing the folder moves nothing on its own, and renaming the folder in the explorer carries its boards with it.

  • A board can gather up the cards filed elsewhere. When some of a board’s task files sit outside its folder, it offers to move them — counting them first (“Move 3 task files here”) and confirming before anything happens. Links are rewritten and open tabs follow. Anything already under Archived/ stays where it is, since hauling settled work back would undo the filing, and so does anything inside a subfolder of the board’s own folder.

  • Typing # in a link or embed now lists that note’s headings. ![[Note#Heading]] embeds just that heading and everything under it, and [[Note#Heading]] opens the note scrolled to it — in the editor and the reading view alike. A link that names a heading in the note you’re already in jumps there rather than telling you you’re already there.

  • Every property row shows its type, so a value in the wrong shape is obvious at a glance instead of only on hover. The type reads dimmed when Pellet worked it out and solid once you’ve set it.

  • A value that doesn’t match its property’s type offers a fix. Where the property itself is what needs changing, one click sets it — no note is edited. Where this note’s value can be corrected without losing anything, the fix does that instead. When neither is safe, nothing is offered and the value is left exactly as written.

  • Tags written any of the ways Obsidian allows are now read the same way everywhere. A note whose tags were written as a single value (tags: Type/quote), with a capital Tags:, or as a list flush against the margin now shows its tags as clickable pills — and a list written flush against the margin is no longer skipped entirely, which had left those notes with no tags at all in search, the Tags pane and everywhere else.

  • Tag formatting that isn’t valid says so instead of quietly looking empty. A tags: line written as one comma-separated value is marked the way Obsidian marks it, with a note explaining what to change — Pellet still reads the tags so nothing is lost — and one click rewrites it as a proper list, keeping the tags exactly as they were.

  • tags is always a list. It used to read as Text on a note that wrote a single tag and List on the note beside it, and could be set to something else entirely — so one property had two types in the same vault. Its type is now settled and no longer offered for editing, matching how the Table has always treated it. Tag values stay as editable as ever.

Fixed

  • A folder name can contain a space again. The board’s folder field tidied its value on every keystroke, so the space never survived being typed and “Q3 Planning” could not be entered at all.

  • A folder name that won’t work says which character is wrong, marked in the field where it sits rather than as a message underneath. Saving is blocked while the name is refused — otherwise the board would point at a folder whose first card silently failed to save.

  • A folder name that matches nothing now says whether that’s a typo or a new folder, naming it and offering to create it. Creating it is optional — the first card makes the folder either way.

  • Typing inbox where Inbox already exists no longer produces two folders. On macOS and Windows those are one folder, so nothing new was made on disk while the folder list grew a second row for it — and a board could end up pointing at a path its own vault didn’t contain, which on Linux or a synced device meant tasks genuinely splitting across two folders. The vault’s own spelling now wins, in the board’s folder field and the explorer’s new-folder row alike.

  • Device Sync no longer crawls through large files. A vault of PDFs, EPUBs or long recordings synced at a few megabytes a second, because every file was read into the app in full just to be fingerprinted — on a large library that meant hours of waiting before the first sync could finish, with no sign of progress. Pellet now fingerprints those files where they sit, without reading them in: the same shelf of books that took nearly two minutes takes just over a second. Nothing about how files are identified has changed, so devices already syncing carry on as they are and nothing is re-uploaded.

  • An embed naming a heading that isn’t there says so, instead of silently embedding the whole note — which is what a typo, a renamed heading, or a block reference used to do.

  • An embed’s title bar goes where it says it goes. It reads “Note › Heading”, and clicking it now lands on that heading rather than the top of the note.

  • Opening a note at a heading no longer snaps back. The remembered scroll position for the tab could land a frame after the jump and undo it, leaving you where the previous note had been.

  • Following [[Note#Heading]] in the editor no longer offers to create a note. It treated the whole thing as the filename, failed to find it, and offered to create a note with a # in its name — one that no link could point at afterwards.

  • A single value in a List property shows again. Once one plain value counted as a list of one, the row rendered empty — the value was there on disk and valid, and the panel simply showed nothing.

  • The column dialog lists a property once. A property whose type had been set from a note spelling it differently appeared twice in the label suggestions, as though there were two of them.

0.14.0
26 August 2026
public beta

Tables that add up

Added

  • Table columns can calculate. Pick Calculate in a column’s menu — Sum, Average, Median, Min, Max or Range — and a calculation row appears at the bottom of the table, recomputing as you edit. The header is never counted, and a cell that isn’t a number is left out and highlighted so you can see why it didn’t count. The row is written into your note as a real table row, so exports, the reading view and the raw markdown all show the same values — and it follows its column when you move, insert or delete columns.

  • Numbers can be formatted per column. Pick Format — Number, Percent or Currency, with every currency on offer and US Dollar first — and the column’s numbers are rewritten in that format (89 becomes $89.00), calculation row included. Cells that aren’t numbers are left alone, switching between formats converts cleanly rather than stacking symbols, and Number puts the column back to plain digits.

  • Columns can be aligned left, center or right, written as standard markdown alignment (:---:) — so the table reads the same way anywhere else it’s opened, not just in Pellet.

  • Select table cells and copy them. Drag across cells — any number of rows and columns — or shift-click to extend, then copy: what you paste arrives as a table in a document and as columns in a spreadsheet. Pasting works the other way too, filling from wherever you are and adding rows or columns if what you pasted needs them, including a markdown table copied from anywhere.

  • Tags are clickable wherever they appear — in the editor, the reading view, frontmatter, Table and Kanban cards, the task banner, checklist chips and the right panel. Clicking one opens the Tags pane with that tag selected and the files carrying it listed beside it. The pane now also shows the lines a tag is on, with the tag highlighted, so you can click straight to the place it’s used rather than to the top of the file.

  • Tags can have their own color. Right-click a tag in the Tags pane and pick one — every pill for that tag takes the color everywhere it’s drawn. “Child tags too” passes it down to nested tags that have none of their own, and a color set on a child always beats one inherited from its parent. There’s also a single tag color in Appearance → Custom formatting for every tag you haven’t colored individually.

  • Move several cards at once. Click a card to select it, Shift-click to take a run, ⌘-click to add or remove one, then drag any of them and the whole selection goes — the drag shows a stack and a count of how many are coming. Clicking a card’s title still just opens it, and clicking anywhere else clears the selection. Board columns and the Backlog behave identically.

  • A camera button on events with a meeting link. Calendar chips, week and day blocks, the agenda and the task list all show it when an event has a conference link — and only then, so the icon tells you at a glance which entries are calls. Clicking it joins without opening the event first.

  • New Bulk Actions in the Table view. Archive/Unarchive and a Properties button to add, edit or clear custom column (property) values.

  • The built-in statuses can be recoloured, from Settings → Tasks or from a board’s own settings. Their names stay fixed, because Pellet reads those to decide whether a task is finished.

  • Links in frontmatter are clickable. A property whose value is a URL, a [[wikilink]] or a [markdown](link) opens it, and clicking beside it still edits the field. Typing [[ in a property field completes note names the way the body does.

Changed

  • /table inserts a table, not its markdown. The new table appears as a table, with the cursor already in the first header cell and Tab moving to the next one.

  • Tables no longer carry a </> button. A table is edited in place, cell by cell, and the button sat in the way of the cells. The raw markdown is still there in source mode.

  • Saving a table view is its own toolbar button rather than something tucked inside the Filter popover — because what it saves is the whole view: kinds, sort and grouping as well as the filter.

  • The explorer toggle moved to the left of the top bar, the side the panel it opens is on.

Fixed

  • A lost or stolen device can be removed even while another device is still catching up. Removing it explains what that means for the device that’s behind, then asks you to type the name to confirm — instead of refusing with no way forward, which is what actually happened before: the “Remove anyway” option never appeared.

  • A device that missed changes during a device removal now repairs itself. It could previously say “Synced” while quietly missing them, with re-pairing the only cure. Now your other devices tell it what it missed, it rebuilds from one that has everything, and the Live activity panel shows the whole repair, file by file.

  • Pellet wears its own icon on Android. Until now the app installed with the placeholder icon its build tooling ships with, and flashed that same mark on every launch. It’s the green P now — on the home screen, in the app drawer, and on the launch screen.

  • The Linux AppImage starts on current distributions again. It carried an old AppImage runtime that needed FUSE 2, which Fedora 43 no longer installs and Fedora 44 removes altogether — so on those systems the download simply would not run, with an error that didn’t explain itself. It now ships a runtime that needs no FUSE 2 and starts on Fedora 43 and later.

  • Deleting a folder no longer fails silently. On Windows, a folder held open by another program — a sync client, an editor, a virus scanner — could not be moved to the trash, and Pellet skipped it without a word: the folder stayed where it was, its notes stayed in the sidebar, and nothing said why. It now retries briefly, which handles the usual case, and tells you plainly when something else still has the folder open.

  • PDFs stay where you left them. Switching tabs, or opening a highlight and coming back, no longer drops you at page one — the page you were reading is restored, and stays right even if the window was resized in between. Whether the highlights pane was open is remembered with it, per document.

  • Meeting links now show on Google events. A Google Meet event keeps its join link in a field of its own and leaves the description and location empty, so Pellet found no meeting on exactly the events most likely to be a call. Those now show the camera button like any other.

  • Typing in a table behaves. Arrow-keying into a table puts the caret in the cell you moved onto, ready to type, instead of hiding it — and typing no longer breaks the table out into raw markdown. Landing at the end of a row now lands in that row’s last cell, and pressing Enter beside a table adds a blank line underneath instead of breaking the table in half.

  • Tag colors apply to exports. A tag prints as the colored pill it is on screen; the “Tag color” setting had no effect on an exported HTML or PDF file at all. Per-tag colors set from the Tags pane stay inside the app — an export uses the one document-wide color.

  • Android could show an empty vault after an update, or when the storage provider was slow to answer — a listing that failed to read a folder was treated as a folder with nothing in it.

  • Pellet says why saving is locked. If your machine has no working keyring, or the license has run out, that decision — and the first change it refused — is now written to the log, so a Pellet that has “stopped working” can be explained instead of guessed at. A keyring that hangs rather than answering no longer leaves the app waiting on it.

0.13.0
23 August 2026
public beta

Transcription that stays on your device

Added

  • Built-in audio transcription. Choose Local (built-in), download a Whisper speech model once (75–150 MB, your pick of four), and recordings transcribe entirely on your device — Mac, Windows, iPhone, and Android. No server to set up, no account, and nothing is sent anywhere. The cloud providers and your own Whisper server remain exactly where they were.

  • Built-in handwriting recognition for Paper. Choose Built-in OCR (fast) and pages transcribe instantly using your device’s own recognition — Apple’s on Mac and iPhone, Google’s on Android. Free, offline, and quick; for hard-to-read pages, diagrams, or layout, the AI providers still read better, and they’re one dropdown away. On Android the recognition model (about 20 MB) downloads only when you press the button — nothing is fetched without you choosing it.

  • Each provider remembers its models. Testing a model now saves it to that provider’s own list — switch providers and each one keeps what you proved works. A model that stops working is marked with the date rather than silently forgotten, and you can remove any you no longer want.

  • Pellet runs on Linux, as an x64 AppImage — Ubuntu 22.04, Debian 12, Fedora 35 or newer. Download it, make it executable, and run it; there’s no installer and nothing to add to your package manager. Every Linux build is launched and opened on a real machine before it can be released, so the download you get has actually been run. Built-in audio transcription works there too. Built-in handwriting recognition does not — the fast engines are Apple’s and Google’s — so Ollama or an AI provider is the way to read handwriting on Linux.

  • Move a file to another folder from the menu. Right-click a note, or use any document’s ⋯ menu, and pick “Move to folder…” — with a searchable outline of your vault. Dragging onto a folder still works; it just isn’t the only way any more, which matters on a long list and on a phone. Several files selected at once can move together.

  • Deleting a note asks about its attachments. If the note links images or PDFs, Pellet lists them and offers to move them to the trash as well — and tells you how many other documents still use each one, so you don’t pull a picture out from under another note by accident. Leaving them alone is the default.

Changed

  • iPhone and iPad now require iOS 16.4 or later.
  • The audio model list offers Tiny and Base in English and multilingual variants; larger models were removed after testing showed Base reads speech well at a fraction of the size.
  • On Linux, Pellet needs a system keyring. Licenses and sync keys are kept in your OS keyring, and Pellet won’t fall back to writing them into a plain file. GNOME and KDE include one and need no setup. On a minimal desktop without one, Pellet stays readable but saving is off until you install and unlock a keyring — it now says so plainly, and tells you what to install rather than trying to sell you a license it couldn’t store either.

Fixed

  • Clicking a table column header now sorts by that column only. It used to add the column to a multi-level sort and keep whatever was already there, so clicking two headers built a sort you didn’t ask for — and then the table seemed to stop responding to header clicks altogether. Multi-level sorting is still there when you want it, from the Sort button.
  • /wikilink no longer leaves an extra ]]. Picking a note after running the command produced [[Note]]]].
  • Typing [[ now finds attachments, not just notes. A wikilink has always worked for a PDF, image or any other file — the suggestion list simply never offered them, so you could paste a picture but not link one. Embeds (![[…]]) find them too.
0.12.2
22 August 2026
public beta

Nine things you told us about

Added

  • Sort the Tags and Properties panes. A new button in each header offers name A–Z or Z–A, and most or fewest notes first. Each pane keeps what you choose, and starts where it always did.

  • Note counts can be turned off in the Properties pane, the way they already could in Tags.

Fixed

  • Android can reach a sync relay you host yourself. Android refuses plain connections unless an app asks for them, and Pellet never did — so joining a group could fail before the request left the phone.

  • Leaving a sync group works when the relay cannot be reached. “Leave & forget keys” could sit there doing nothing at all. Leaving now goes ahead regardless, and says when your other devices could not be told.

  • A join that fails says what it tried. It names the relay it was aiming at, and tells apart never reaching it — where a sleeping computer or a firewall is the usual cause, and it says which port to allow — from reaching it and being turned away.

  • The page number in the PDF viewer follows the page you are on. Zoomed out, with several pages on screen, the arrows did not move it by one and it could stall near the end. It now shows the topmost page in view, and the last page once you reach the bottom.

  • The Columns menu in the table no longer opens cut off on a narrow pane, which could leave it looking empty.

  • Clicking a card on a canvas brings it into view when it sits half outside the pane, so its controls are reachable. A card already in full view does not move.

  • “Will be created at…” shows a Windows path correctly when creating a vault. The folder was always made in the right place; only the preview had a slash the wrong way round.

0.12.1
21 August 2026
public beta

Connect an AI client by pasting

Added

  • Copy your AI client’s config straight from Settings → AI & MCP. Two buttons: one for a client that connects over a URL, one for a client that starts a command — the two ways clients connect, and most support only one of them. Each is already filled in with the port and access token this copy of Pellet is using, so it is paste-and-go.
0.12.0
21 August 2026
public beta

Android 10 and up

Changed

  • Android 10 is now the minimum. The download page and the help docs have said “Android 10 or newer” for a while, but the build itself allowed Android 7.0, so the app could be installed on 7, 8 and 9 without that ever being a configuration anyone tested or supported. The two now agree. If you are on a supported phone nothing changes; on Android 9 or older, Pellet will no longer install.
0.11.0
20 August 2026
public beta

Every device starts the same way

Added

  • Any vault you aren’t using can be taken off the list. On a phone, a vault kept inside Pellet had no way to be removed at all. The folder and its files stay exactly where they are — it leaves the list, not the disk.
  • “Create Default Vault” on Android actually sets one up. It creates Documents/PelletVault and opens your files on that folder, so there is one thing to confirm instead of a folder to go and make.

Changed

  • The same first screen on iPhone, iPad and Android. Android could open on “Vault unavailable” instead of the ordinary choice, because a restored settings backup names a vault the phone has no permission to — and may never have opened. A vault that can’t be opened is now forgotten, and every device starts on the same two choices. The vault stays in your list, and pointing Pellet back at the folder rejoins it, keeping its open tabs and layout.
  • A vault’s location reads the same everywhere, and matches your file app. The place it lives, then the path inside it: iCloud Drive · Pellet → Notes, On My iPhone · Pellet → Notes, Internal storage · Documents → Pellet.
  • Leaving a sync group signs that device out of the calendar accounts the group shared, instead of leaving it writing task events into a calendar it is no longer part of. Your other devices keep working, and events already on your calendar are untouched.
  • Messages in Settings appear where you are looking, and can be dismissed.
  • “Turn on” is hidden when sync keys are missing, since it could only fail.

Fixed

  • One folder can no longer become two vaults. Adding a folder that was already a vault made a second entry for it. Pellet now recognizes the folder and opens the vault you already have.
  • A vault whose folder can’t be reached no longer dead-ends — the message said to reconnect while offering nothing to press.
  • Settings → General reported the wrong build. Every released build called itself “build 1” and claimed to have uncommitted changes when it did not.