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.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 colour, page size, template, pen and ink colour 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: coloured 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. Colour 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 colour 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 neighbours each note reaches for and how alike they must be. The neighbours 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 neighbours 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 capitalisation; [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 colour 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 centre 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 centred — top and end of the note included. Clicking around doesn’t yank the view; the next keystroke re-centres.

  • 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 colours 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 cancelling 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 coloured 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, centre 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 colour. Right-click a tag in the Tags pane and pick one — every pill for that tag takes the colour everywhere it’s drawn. “Child tags too” passes it down to nested tags that have none of their own, and a colour set on a child always beats one inherited from its parent. There’s also a single tag colour in Appearance → Custom formatting for every tag you haven’t coloured 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 colours apply to exports. A tag prints as the coloured pill it is on screen; the “Tag colour” setting had no effect on an exported HTML or PDF file at all. Per-tag colours set from the Tags pane stay inside the app — an export uses the one document-wide colour.

  • 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 licence 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. Licences 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 licence 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 recognises 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.
0.10.1
20 August 2026
not yet released

Names that differ only by capitalisation

Fixed

  • Two notes whose names differ only by capitalisation no longer overwrite each other. On macOS and Windows Test task.md and test task.md are the same file, but Pellet treated them as two. Creating the second silently replaced the first’s contents on disk, while the list went on showing both — two entries, one file, each remembering something different. Every name Pellet picks or accepts now compares the way those filesystems do, so the second one gets a free name instead.
  • Renaming onto a name that is already taken is refused, with a message, instead of quietly destroying the other file. This includes a name taken by a differently-capitalised file.
  • An entry whose file has gone missing can be removed. Deleting one used to do nothing at all. It now says plainly that the file was already gone, and nothing lands in the trash, because there is nothing to restore. Opening one warns you first: editing an entry with no file behind it would create a new file and bring back something you thought was deleted.
  • Setting a property no longer duplicates a note’s front matter. A note whose opening --- carried a trailing space was read as having no front matter by the part of Pellet that writes properties, which then added a second block above the first. Every part of Pellet now agrees on where front matter begins and ends.
  • Copying a code block with line numbers on gave you one long line. The numbers are drawn beside the code rather than inserted into it, so every line is its own element with no line break between them — and Copy read straight through that. It copies the code as written now.

Changed

  • A code block’s options are on the block. Line numbers and Wrap are two buttons in the block’s header beside Copy, showing at a glance which are on, instead of two rows in Settings. They are the same options as before, and still travel between your devices. The old Wrap button applied only to the block you pressed it on and forgot immediately; the button now sets the option for good, and one more click turns it back off.

  • Turning off “sync completed tasks” offers to clear the events already on your calendar. It only applied to tasks completed afterwards, so events for tasks already done stayed until something touched them again. Pellet now asks; either way the setting is saved.

0.10.0
18 August 2026
not yet released

Every file is a row, and tables you can embed

Added

  • Every file in the vault is a Table row. The Table used to be a task view. It now lists notes, canvases, PDFs, recordings — anything in the vault — and any of them can carry properties, stored in the file’s own front matter where the file supports it and in a sidecar where it does not.
  • Tables can be embedded in a note. A pellet-table block renders as a live table in both the editor and the reading view, built from a filter rather than copied in by hand, so it stays current as the vault changes. You can author one from a menu instead of typing the block, and each embed says how many rows it is showing.
  • An embedded table exports as a real markdown table. Sending a note elsewhere turns the block into ordinary pipe-and-dash markdown, so what lands in another editor is a table rather than a code fence.
  • Saved filters remember their kinds. Kinds now sits beside Filter, can be cleared on its own, and is stored with the filter — so a saved view comes back the way you left it.
  • Kanban boards follow the status and type registry. Boards read the same statuses and types as the rest of the app, so renaming one is a single change rather than a change and then a hunt for the places that disagreed.
  • Recordings can be transcribed by a Whisper server on your own machine. Audio is converted to WAV first, which is what a local Whisper server expects.
  • Sync activity can be saved as a note. The log is written into the vault, named for the device that wrote it, so a sync problem can be looked at later instead of only while the window is open.

Changed

  • Statuses and Types moved into the Tasks settings tab, where the things they configure already lived.
  • The Calendar Sync settings tab is now just Calendar.

Fixed

  • On Windows the folders pane showed the vault’s whole path as its name. It read C:\Users\you\Documents\Pellet where it should have read Pellet. The name was taken by splitting the path on /, and a Windows path has none — so the whole string came back instead of the last part.
  • The toggle switches were hard to read, in both themes and in both states.
  • A renamed file on Android is verified before it is trusted. The system file picker can report a rename that did not land under the name asked for, so Pellet now checks rather than assuming.
0.9.2
16 August 2026
not yet released

Code blocks that behave like code

Added

  • Code blocks are properly code now. Fenced blocks are syntax-highlighted as you write them and stay highlighted in reading view — in the same colours either way — across the roughly 150 languages Pellet knows.

    Type three backticks and it offers the language: start typing py, js, yml and pick from the list. Everything offered is something Pellet can actually colour, so a language from that menu never leaves you with a block that comes out looking like plain text.

    In reading view each block gets a strip along the top with the language it worked out, a Copy button, and Wrap for the one long line you would rather read whole than scroll sideways. Two new settings under General → Code blocks: line numbers, and wrapping long lines by default.

    A block with no language, or one naming something Pellet has no colours for, is left as plain text on purpose — guessing would mangle whatever you pasted in.

  • Transcribe recordings on your own machine. A new Local Whisper server option points Pellet at a whisper.cpp server you run, so audio is transcribed there rather than by a cloud service. The same Whisper models, no API key, and nothing to install beyond the server itself. It works from a phone too, as long as the phone can reach that machine.

  • Read handwriting on your own machine too. Point Paper transcription at a local Ollama running a model that can see images, and a page never leaves the computer. No API key — just the address it is listening on.

  • Attachments show what kind of file they are. A recording, a video, a PDF, an e-book, an archive, a spreadsheet and a script each get their own icon in the note list and the gallery, instead of everything that is not an image sharing one document mark.

  • See which notes have conflict copies. When two devices edit the same note at once Pellet keeps both, and the count at the bottom of the window is now a list you can work through — every conflict copy in the vault, wherever it lives, each opening with the compare-and-resolve view.

  • Paper remembers how far you had zoomed in, per document, on that device.

Changed

  • Phones stay in portrait. The phone layout is a column, and turning the device sideways gave it a shape nothing was laid out for. Tablets are unaffected and rotate as they always did.
  • Vault health only reports names that are genuinely a problem. Filenames that Pellet can link to perfectly well are no longer listed, and the tab is four folding cards — one per check — that say what they found before you open them.
  • Settings → Device sync is shorter. The paragraph explaining what travels with a synced vault moved behind a ? on the heading. Nothing was cut.

Fixed

  • Syntax highlighting was switched off entirely. Code in the editor rendered as flat text even though the language support had been there all along. The colours that came back with it are new too — the previous set was built for a light background and was close to unreadable on the dark theme.
  • A long note title no longer squashes the icon beside it. The file-type mark was being squeezed narrower as a title wrapped onto more lines, keeping its height — so it was not merely smaller but flattened, by a different amount on every row.
  • Changing a Paper’s colour or template no longer resets the page. On iPad, picking a paper colour rebuilt the whole writing surface and threw away your zoom and scroll position.
  • Controls at the top of the Settings window could not be clicked on macOS. The strip you drag the window by was floating over them.
  • “Reconnect your account” never appeared in the Settings window when an Apple or Google calendar sign-in expired — which is the one place you go to reconnect it.
  • The conflict count did nothing when tapped on a phone, and opened Settings on desktop. It now does the same thing everywhere.
0.9.1
16 August 2026
not yet released

See which notes have conflict copies

Added

  • A list of your conflict copies, not just a count of them. When two devices edit the same note at once, sync keeps both and gives the losing one a name like Plan (conflict 3f9a2c1b from iPad).md. Pellet could tell you how many of those existed and offer to delete them all; it could not tell you which notes they were, so finding them meant going folder by folder.

    The conflict chip in the status bar now lists them. Clicking it shows every conflict copy in the vault, wherever it lives, and each row opens that note with its usual compare-and-resolve banner — so they can be worked through one at a time. The same list has a permanent home at the bottom of the folder tree while any conflicts exist, and Settings → Device sync has a Show in Library button next to the bulk delete.

    Only real conflict copies are listed: a note that happens to be called “Where (conflict came from) in Kashmir” is left alone, and nothing in the trash is shown.

Changed

  • Vault health is one card per check. Unsupported characters, capitalisation clashes, look-alike names and numbered copies are now folding cards, each saying what it found before you open it. A healthy vault reads as four green rows instead of four headings and four paragraphs about problems it does not have, and a card with something to fix opens itself.
  • Vault health no longer lists filenames that work. A name containing ] or # was reported because Pellet’s own [[…]] links cannot address it — but the [[ menu writes those links in a form that does work, so there was nothing to fix. The tab now lists only names a device genuinely cannot store, which means what is left in it is what needs doing. Two spellings of the same name still cannot coexist, and that is still reported.
  • Settings → Device sync gives back the space its “App settings” note was taking. The paragraph explaining what travels with a synced vault held four permanent lines to answer a question you have once. It is now behind a ? on the heading. Nothing was cut.

Fixed

  • Controls at the top of the Settings window could not be clicked. On macOS the strip you drag the window by was floating over the settings pane instead of sitting above it, so it swallowed clicks aimed at anything in that band — at rest, and while scrolling past it. The keyboard could still reach those controls, which is how it went unnoticed.
  • “Reconnect your account” never appeared in the Settings window. An expired Apple or Google calendar sign-in had no way to say so in the very place you go to reconnect it.
  • The conflict chip did nothing when tapped on iPhone and Android, and opened Settings on desktop. It now does the same thing everywhere.
  • With the single-pane explorer turned on, clicking a tag in the right-hand panel landed back on the tree with your selection invisible.
0.9.0
16 August 2026
not yet released

Links to a note, from anywhere

Added

  • pellet:// links, so a note can be opened from another app. “Copy Pellet link” is on every file’s ⋯ menu. Paste the link into a calendar invite, a chat message or a script and it opens that file in Pellet.

    The link names the vault rather than the folder it sits in — pellet://open?vault=Notes&file=Projects/Plan.md — so it does not tell everyone you send it to where your home folder is, and it keeps working if you move the vault. A link naming a vault this device does not have opens nothing and says so, rather than quietly showing you a different file.

    Links work on iPhone, iPad and Android too.

  • The [[ menu can now link every file it lists. A file with ] or # in its name cannot be reached by [[…]] at all — [[C# notes]] means the note “C” — so picking one used to link to a different note, or to nothing. Those files are still listed, and are now inserted in a form that resolves, appears in backlinks, is drawn in the graph, and follows the file when it is renamed.

Changed

  • Pellet no longer creates a name it cannot link to. Renaming a note, creating one from the quick switcher, or naming a folder now turns down ] and #, with the repaired name one click away. The title bar shows the name as invalid while you fix it, saves nothing until it is valid, and puts the real name back if you click away.

    This is a rule about what Pellet writes. A file that arrives from another device, an import or another editor is still perfectly legal, still syncs, and is still listed in Vault health.

  • Transcripts, highlights and subtask lists link correctly to awkwardly named files. A PDF called C# spec.pdf is an ordinary download, and the links Pellet wrote to one resolved to something else or to nothing.

  • Vault health stops reporting names that were never broken. A [ on its own is fine, so those files are no longer listed.

Fixed

  • A markdown link to a file in your vault can be followed. Clicking one did nothing at all, in the editor or the reading view.
  • Backlinks and the graph now agree about a link. A file linked by a markdown link, a canvas card or a highlight was listed as a backlink but drew no line in the graph.
  • A link pointing at the note you are already in says so, instead of appearing to do nothing — which looked exactly like a broken link.
  • A backslash escape no longer shows its backslashes while you type. \*not italic\* displayed as typed in live preview, where the reading view had always got it right.
  • Saving one setting no longer reverts another set a moment earlier. Two changes made at once — a gallery tile size and a collapsed folder, say — could each undo the other.
0.8.6
15 August 2026
not yet released

Sync activity that says what sync is doing

Fixed

  • The Sync activity panel now shows what sync is actually doing. Joining a vault could sit on “Downloading vault…” with the panel underneath reading “Nothing yet” — the one view whose job is to tell you what is happening was the only thing not being told. Checking the folder, fetching the list of files and working out what this device needs are all announced now.

    Each file also says what became of it. Every entry used to be labelled a download, including files already on this device that never transferred at all. Files already here, files that differ and are being kept both ways, folders and deletions now each say so, with the reason.

    Ordinary syncs report what they found too, including when the answer is “nothing changed”. The feed used to simply go quiet, so a healthy idle sync looked exactly like a stuck one.

  • A device removed while another was still downloading no longer strands it. Removing a device re-keys the vault and clears the copies held for transfer — and a device part-way through its first download was invisible to the check that guards that. Its files were deleted mid-transfer and the download could never finish. A device in that position now blocks the removal until it is done, and says so.

  • Files that can no longer be fetched no longer block everything behind them. A file still in flight when a device was removed can go for good, and sync retried it forever, so nothing sent afterwards could arrive. Those files are now listed as skipped, with the reason, and sync carries on. Nothing on your device is altered, and whichever devices still hold those files will send them again the next time they change.

  • “Refusing this device” is no longer said about a missing file. A file that is no longer available answers the same way an unknown device does, so a device that was plainly still a member announced it had been removed from the group.

  • Re-pairing under a new name shows that name straight away, instead of after the whole vault has downloaded — or never, if it did not finish.

  • A relay hosted on this computer no longer collides with itself. Restarting it could leave the previous copy running and holding the port, so every restart after that failed while the status flipped between running and an error. When it does fail to start, it now says why — it used to report the last line of the crash, which is a version banner and tells you nothing.

0.8.5
15 August 2026
not yet released

Pair a device by scanning a QR code

Added

  • Pair a device by scanning a QR code. The device you already set up shows the pairing code as a QR alongside the text, and a phone or tablet reads it with Pellet’s own scanner: Settings → Device sync → Scan or enter a code → Scan QR code. Scanning joins straight away. The code on screen now counts down its fifteen minutes and can be reissued in place when it lapses.

    Scanning is offered on iPhone, iPad and Android, and not on desktop, which shows codes rather than reads them. Pasting the code still works everywhere and is still the only route on a machine with no camera.

    A QR briefly existed once before and was withdrawn, because there was nothing to scan it with — a phone’s own camera app has no idea what to do with a Pellet pairing code. Reading it inside Pellet is what makes it work.

  • A pasted pairing code is checked as you type it. The join screen now tells you which group the code will take you to and how long it has left, before you commit to it — instead of a wrong or stale code failing several seconds later. A damaged code says so in plain words.

Fixed

  • A device restored from a backup can be re-paired under its own name. Backups deliberately leave out sync keys, so a restored device comes back as a stranger and then collided with the entry it had left behind — under its own name. It was refused and told to “change the name on the other device”, which named no device that existed. Pellet now recognises the abandoned entry and asks, on the device showing the code, whether to remove it. Nothing is re-keyed and no file is touched. A name genuinely held by a different device still asks you to pick another, in words that say so.
  • On Android, sync could break for good after reinstalling or moving to a new phone. Every sync action failed with an error mentioning a “secure store” — including the one button that looked like a way out. Android had been backing up the encrypted key store without the key that unlocks it, so a restore left a file nothing could read. Backups now leave it out, which also makes Android match the promise made everywhere else: your sync keys are never in a backup. A phone already stuck like that now clears the unreadable store and asks to be paired again.
  • Generating a second pairing code no longer strands the first, which used to keep contacting the relay with nothing able to stop it.
0.8.4
14 August 2026
not yet released

Focus mode you can find, and a desktop app that opens

The version number moved rather than the tag: files labelled 0.8.3 already existed, and one label must never mean two different things. The two additions below were finished in time for 0.8.3 and are listed here because nobody could have run them there.

Added

  • Focus mode has two stages, and you can find it. It is now the first entry in a note’s ⋯ menu and a button in the Flow view’s toolbar. Before this it existed only as ⇧⌘F, which meant it may as well not have existed. Press ⇧⌘F once to hide Pellet’s own interface, again to go full-screen across the whole desktop, and a third time to come back. Escape leaves from either stage, and the corner control does the same in one click. The Flow view now hides its header too, so it finally gets a clean page — its word count stays as a faint note in the corner.
  • Back and Forward on every document. Whiteboards and Paper pages had no way back after opening in the same tab, and a canvas had Back but no Forward. Every view now carries the same pair, in the same place, in the same order as everything else.

Fixed

  • The desktop app opened a blank window titled “Not Found”. The 0.8.3 installers shipped an empty shell — the build that made them skipped the step that assembles the app itself. Six green test runs said nothing was wrong, because every one of them checked that the files built and were signed, and none checked that the app ran.
  • Quitting reported an error, and left ports held open. Worse than the dialog: the local API server was never stopped, which is exactly what stops a vault being reopened afterwards.
  • Recording no longer offers a marker button that did nothing. It counted your marks and then discarded them when the recording was saved. It is gone rather than half-working.
  • On iPhone and iPad, a recording should now survive the screen locking or the app going to the background. The recorder was written for it, but Pellet had never told iOS it needed to keep running.
  • Audio transcription pointed at a Settings section that does not exist when no API key was set. It now names the right one.
  • The third-party notices file was missing whole sets of dependencies — 325 listed where there are in fact 350.
0.8.3
13 August 2026
not yet released

Two holes in read-only mode, closed

  • The hosted sync relay could briefly serve other devices at launch. The app told the relay about the license before it had actually read it from disk, which restarted a relay the previous run had correctly stopped. The report now waits for the real answer.
  • The Calendar view stopped fetching too. It had its own path to Apple, Google and ICS feeds that bypassed the pause the rest of the app uses. It now pauses with everything else, and refetches the moment a key is entered.
  • Entering a key is now proven to bring everything back. A test drives the whole cycle against the real app: lock it, confirm every gated surface is off, enter a key, and confirm the buttons, sync, calendars, API and relay all return in the same session. Nothing in Pellet asks for a restart — and now nothing needs one.
0.8.2
13 August 2026
not yet released

When the trial ends, Pellet says so — everywhere

Your files are always yours: read-only mode never touches them, and reading and exporting keep working without a license. What changed is that the app now tells the truth about everything else.

  • Buttons that can’t work are disabled, not booby-trapped. Every New button and menu — notes, tasks, folders, whiteboards, recordings — used to open an editor whose save would then be refused. They now grey out with a note saying why, and light back up the moment a key is entered.
  • The read-only banner can no longer be closed. It is the one honest explanation for why nothing saves; hiding it made the app look broken instead of unlicensed. The trial countdown bar is still dismissible.
  • Device sync actually stops. The buttons that lead into sync — Turn on, Create sync group, Join, Re-pair — disable too. The ways out stay available: you can always turn sync off, leave a group, or cancel a join.
  • Calendar sync pauses in both directions. No events are fetched and no tasks are pushed. Changes queued while paused are kept, not dropped — they sync once a key is entered.
  • The local API and MCP server stop listening, so a script or AI agent gets a clear “nothing here” instead of a half-working server. Your port, token and toggles are all preserved.
  • A relay hosted on an unlicensed computer stops serving other devices — and remembers to stay stopped across relaunches. The relay’s stored data and every other device’s files are untouched; they pick up where they left off once a key goes in.
0.8.1
12 August 2026
not yet released

A recreated folder stays, and Vault health calms down

  • Recreating a deleted folder no longer deletes the new folder. With sync on, making a folder with the same name as one deleted in the last week got the new folder silently removed on the next sync pass — an empty folder has no content to prove it is new, so sync read it as a leftover of the old deletion. Folders now announce themselves when created, and every device agrees the folder exists.
  • An empty name means “never mind”. Opening the new-folder row and clicking away used to create a folder called “Untitled”; clearing an existing folder’s name renamed it to “Untitled”. Both now do nothing.
  • Vault health stops crying wolf. It no longer lists the vault itself as a nameless file, no longer warns about long paths (the 260-character limit it guarded is a legacy Windows default that does not apply to Pellet), and no longer flags ^ in a filename — [[Power^2]] links perfectly well. When a name genuinely cannot be linked to, it now explains why, and a repair only counts a rename as done when the file actually moved.
  • Vault health is readable now. One line per file — name, folder, and the problem as a short tag — instead of full paths in monospace wrapping over four lines with the same explanation repeated under each.
  • Typing a bracket with text selected wraps it. Select a phrase and press [ to get [phrase] — again for [[phrase]]. Same for ( { < " ' * _, ~~struck~~ and ==highlighted==; three backticks fence a block. With nothing selected the key types one character, as always.
  • Bullet, numbered and checklist buttons in the selection toolbar, with ⇧⌘8, ⇧⌘7 and ⇧⌘9 to match. Pressing the same one again toggles the list off rather than stacking a second marker; switching kinds keeps your indentation and ticked boxes.
0.8.0
12 August 2026
not yet released

Links you can embed, notes you can send out

  • Pasting a link offers three ways to keep it, and names it for you. Paste a YouTube, Vimeo, Spotify, Apple Podcasts or Apple Music link and a small bar offers Embed (the player), Link (clickable and titled) or Text (leave the bare address). Embed and Link fetch the title once and write it into your note, so it reads “Rick Astley - Never Gonna Give You Up” rather than “YouTube video” — including offline, because the title lives in your file, not a cache.
  • Those links can be embedded as players. Write one in embed syntax — ![](https://youtu.be/…) — and the note shows a card naming what it is; clicking it loads the player, in the editor and reading view alike. A bare link stays a link, so a citation never turns into a video. Nothing is requested until you click: opening a note contacts nobody, offline you see a named card instead of a dead frame, and YouTube plays through its no-cookie host. In an export the card becomes a plain link — a PDF cannot play a video, and a self-contained page should not quietly fetch three players.
  • Export a single note. “Export…” is in a note’s ⋯ menu and right-click menu, with the same five formats as a Flow export and none of the questions that only make sense for a folder of chapters.
  • Exports can carry your own formatting. A Styling picker offers the print default, the formatting you write with, or any saved theme — so a manuscript can go out looking the way it looks on screen. PDF and the new web-page format carry all of it; Rich Text carries what Word has words for, and says so.
  • Web page (.html) export. One self-contained file with the images and recordings inside it, openable in any browser — and, unlike PDF, available on mobile.
  • Embeds and tables no longer sit in a large empty gap. The blank space the editor reserved above and below them is down to a normal margin, and each one shows a </> button on hover to bring the raw markdown back without aiming for what little gap remains.
  • Callouts keep their colour in an exported PDF, and Rich Text exports show ==highlights== as real shading instead of literal equals signs.
0.7.2
12 August 2026
not yet released

The one-axis swipe now holds on iOS

  • The Table’s one-axis swipe now holds on iPhone and iPad. As shipped in 0.7.1 it corrected sideways drift after it happened, which iOS cannot do smoothly — the view shook for a moment before settling, and a fast swipe outran the correction entirely. The table now declares up front that a finger may only pan it vertically, so there is nothing to correct: vertical keeps its native momentum, sideways swipes are handled separately, and both directions keep their place when you switch between them.
0.7.1
12 August 2026
not yet released

The Table stops sliding out from under your finger

  • Table rows are aligned again, and the list no longer runs ahead of your finger. On touch screens the rows were really taller than the list believed, so every row was drawn a little short of where it was — scrolling skipped rows, long tables could not be scrolled to the end, and on iOS a stationary touch could set the list moving on its own. The row height is now measured from the rows themselves, so it cannot drift again when density, zoom or font changes. Timeline bars take the same measurement.
  • A row’s title sits on the same line as the rest of the row, instead of floating above its own underline.
  • A swipe in the Table scrolls one axis. Up and down, or left and right — whichever way the gesture starts — instead of panning diagonally like a canvas. Touch only; a mouse or trackpad is unchanged.
  • No more “…” beside every checkbox in the Table’s select column.
0.7.0
11 August 2026
not yet released

Settings you can read at a glance

  • Sorting works the way it says it does. Picking “Date created” reordered the list against a date that appeared nowhere on screen — every card still showed when it was last modified — so a correctly sorted list looked broken. A card now shows the date it is sorted by. Notes and attachments are also one list now instead of two: a folder holding both used to put every canvas above every recording and PDF whatever the dates said.
  • Sort ascending or descending. Three things to sort by — last modified, date created, name — and two directions, rather than four fixed pairings. Changing what you sort by keeps the direction you already chose.
  • Folder colours can flow down. Tick Subfolders too and everything underneath picks up the colour, so a project folder with eight subfolders is one decision instead of nine. A subfolder with its own colour keeps it, and a folder that is inheriting tells you where from.
  • List guidelines. Vertical rules down the indent of bullet and numbered lists, in the editor and reading view, off until you turn them on. A rule for every level, so a deeply nested item shows the whole chain it hangs off.
  • Choose your bullet. Dot, hollow dot, square, triangle, diamond or dash, and how big it should be. Leave it alone and each level keeps its own marker.
  • Heading formatting is one row per heading. Setting H1 used to mean picking its size, scrolling past five rows for its weight, then five more for its colour. Size, weight and colour now sit together on H1’s own row — nineteen rows down to seven, which also means Body, Quotes, Tables and Callouts are visible without scrolling. Callout colours wrap into columns for the same reason.
  • The API and transcription settings tell you their state. They are cards now, like your calendar accounts: closed by default, with a status you can read without opening them. The local API reads its status from the server rather than the switch, so “turned on but nothing is listening” — a port already in use, say — no longer looks identical to “working”. Transcription reads your keychain, so a section that has no key is flagged before you open it.
  • Folder rows are square, so a run of coloured rows reads as one band instead of a stack of separate pills.
0.6.0
10 August 2026
not yet released

Say it, and it becomes a task

  • Pellet records. The microphone button sits in the left toolbar next to New; on a phone or tablet it’s New Recording in the new-document menu. Pause and pick up again, mark a moment worth returning to, or discard — a discarded recording goes to the trash, not to nothing. The recording pill follows you around the app, so you can wander off to another note or open a board without ending the session. On a phone it keeps going in the background and from the lock screen.
  • It stops into the note you started in. Not the note you happen to be looking at when you press stop — the one you were in when you began. Start with no note open and it still saves; Pellet names the file instead.
  • Recordings are .m4a files — mono, about 21 MB an hour. Double-click one in Finder, open it on your phone, send it to someone who has never heard of Pellet. There are formats that would halve the size, and none of them play everywhere yet; a recording you can’t open in five years isn’t worth the saved megabytes.
  • Audio plays wherever you can embed a file — in the editor, in reading view, on a canvas, on a whiteboard, or opened on its own. A waveform you can scrub, elapsed and total time, and a speed control from 0.75× to 2×. Drop in an existing .mp3, .wav, .flac or .ogg and it behaves the same way.
  • Long recordings seek instantly, including on a phone. Dragging to fifty-eight minutes into an hour-long file fetches that part rather than the whole thing. Video embedded on a phone now loads the same way, which it did not before.
  • Transcribe a recording into a real note. Press Transcribe on the player and Pellet writes a note under Transcripts, with timecodes that match the player’s and a link back to the audio. From then on it is an ordinary note: it turns up in search, in the quick switcher, in backlinks and on the graph. Your own OpenAI or Gemini key, set in Settings → Paper — the same place handwriting transcription lives. On a phone, choose Gemini.
  • What you agreed to becomes a task. Open a transcript and Pellet tells you how many lines in it sound like a commitment. Review the list — each suggestion shows the line it came from, so you can judge it without going back to the audio — untick what isn’t real, and create the rest. Every task quotes what was actually said and links back to the recording at the moment it was said, so six weeks later the thirty seconds that explain the task are one click away. Nothing is created until you say so; the detector deliberately offers too much rather than too little.
  • Exports carry the recording. HTML and PDF get a working player for recordings up to about 6 MB; RTF and plain text name the recording, since neither can play anything; markdown keeps the embed exactly as you wrote it. Audio embeds used to vanish from an export without even leaving their filename behind.
  • The microphone button moved out of the top-right corner and into the left toolbar, where the things you make live.
0.5.13
10 August 2026
not yet released

The phone stops offering what it can't do

  • Mobile Settings only shows what a phone can actually do. Three things need the app to listen on a network socket, which iOS and Android will not allow, so they were controls that could never work: the local API and MCP settings, the Google Calendar sign-in, and starting a new sync group. They are hidden on mobile now rather than offered and then failing. Handwriting transcription is unaffected and stays where it was — the tab is simply named AI there, since MCP is no longer in it.
  • Google Calendar on mobile shows your connection instead of asking you to make one. Signing in opens a browser window, which is the part a phone cannot do. Sign in on your desktop and the connection travels to your phone with your settings; from then on your Google calendars work there exactly as before, and you can still choose which of them to show. Apple Calendar and subscribed calendar feeds are unchanged — both can still be set up on a phone directly.
  • Sync groups are started on the desktop and joined from mobile. Starting one means naming the sync relay that will host it, and the desktop app is the one that can host it for you. Your phone pairs with the code it gives you, which is the same two taps it always was.
  • Your app settings now travel between your devices without being switched on. Folders and templates, task settings, calendar sign-ins and AI keys move with the vault, encrypted with your vault key. This used to be a toggle that was off until you found it, and that was the wrong shape for it: the settings involved include which folder is your inbox and where daily notes and templates live, so two paired devices could quietly disagree about where the same vault writes. Appearance, the local API and file history still stay on the device they belong to. Nothing is shared until you set up sync, and nothing has ever left your devices unencrypted.
  • “Relay” is now “sync relay” wherever you read it. The old name was doing too much work in an app that also relays settings between its own windows.
  • The “Run a relay” section is gone from Device sync. The address and secret fields are exactly where they were; hosting the sync relay from the desktop app is the path we recommend, and that section was pointing at a harder one.
0.5.12
8 August 2026
not yet released

One vault, one window

  • Every vault opens in its own window. Switching vaults used to replace the one you were looking at, and things that belong to a vault went with it: the local API fell silent when the new vault had it turned off, the port looked like it had “reverted” when it was simply a different vault’s port, and an open Settings window carried on describing the vault you had just left. A vault now gets a window that owns its settings, its API/MCP server and its index. Opening another leaves the first exactly as it was, and quitting and relaunching brings the whole set back. Asking for a vault that is already open focuses its window rather than opening a second copy.
  • Settings belongs to a vault, not to the app. Its title names the vault, and each one edits only its own.
  • Fixed: windows opening blank. With a large vault open, opening another window could give you an empty frame and nothing else. The vault watcher was holding one open file descriptor per file — around 3,300 for a single vault — which left the app without the descriptors macOS needs to start a new window’s process. It now uses a single watcher per vault: the same vault went from 3,290 open handles to none.
  • Fixed: a window whose process stops now says so. It used to leave a blank frame with nothing to click and nothing in the log. It retries once on its own, and tells you what happened if that does not take.
  • Fixed: the first vault you open on a new install is properly registered. Choosing a vault on the welcome screen left the app unaware of it — Settings would not open, the local API never started however it was configured, changes made outside Pellet went unnoticed, and the vault was not reopened at the next launch.
  • Fixed: “Open vault” works again. It had started failing with an internal error.
  • Only one copy of Pellet runs at a time. A second launch reaches the running app instead of starting a rival process that shares — and races on — the same settings and saved credentials.
  • A tab cannot be dragged into a window showing a different vault, which would have quietly opened a same-named file belonging to the other one.
0.5.11
8 August 2026
not yet released

Let an AI agent use your whole vault — on your terms

  • An assistant can now reach almost all of your vault. The local connection went from 18 operations to 48. The ones you’ll notice: real search inside your note bodies rather than just titles; asking what’s overdue, due this week or due in the next ten days; your calendar; checklists; daily notes and templates; the archive and the trash; attachments and canvases.
  • You decide what it may do. Three switches in Settings → AI & MCP: read-only, so it can read everything and change nothing; a folder allowlist, so anything outside the folders you name is invisible to it — not merely unwritable, but absent from its searches and listings; and per-operation switches, to turn off anything you’d rather it never did. All three start off, so a connection you already have keeps working exactly as it did.
  • Setting it up got easier. Tools that want to launch a command rather than call an address now have one to copy, right beside the address in Settings.
  • A Status line tells you whether it actually started. If the port is taken it says so and names the port, instead of leaving the switch looking on while nothing works. The default port also moved to 27124, since the Obsidian task manager plugin sits on the old one.
  • Settings → “AI & automation” is now “AI & MCP.”
  • Fixed: archived tasks stayed archived. Archiving a task by hand and then editing anything else about it — its priority, say — silently cleared the archived mark while leaving the task sitting in Archived/. Completing and reopening a task could leave the same mark disagreeing with itself.
  • Board descriptions are no longer read as instructions. An assistant used to be told to follow whatever a Kanban board’s description said. It’s your note, not a command, and it’s now treated as one.
0.5.10
7 August 2026
not yet released

Counts on every task row

  • Every task row in the Tasks table shows how many subtasks it has, as done/total beside the title — so a parent reads as a parent whether or not Hierarchy is switched on, and whether or not its subtasks are filtered out of what you’re looking at.
  • Checklist counts in the table, from the - [ ] lines in a task’s own body. The Kanban cards have shown these for a while; the table had no equivalent.
  • Fixed: the table’s subtask indicator no longer disappears when its subtasks are out of view. It was counting only the child rows currently on screen, so searching down to a parent, or switching Hierarchy off, hid the very marker that says a task has anything under it.
  • Count badges follow your accent colour on both the table and the Kanban cards, instead of the fixed green the cards used. A finished count is no longer highlighted differently — the numbers already say how far along it is.
0.5.9
7 August 2026
not yet released

Google Calendar in one click

  • Google Calendar connects in one click. Settings → Calendar sync → Connect opens Google in your browser and signs you in, the way any other app does. Creating your own OAuth client in Google Cloud Console — roughly ten steps through a developer console — is no longer part of connecting a calendar. The premise behind that requirement was simply wrong: Google requires every application to register a client, not every user.
  • “Use my own OAuth client” is still there, as an advanced section that accepts your own Google Cloud credentials. It’s for organisations that block third-party apps, and for anyone who’d rather grant their own. If you already had one configured, nothing changes: yours takes precedence, and you aren’t asked to sign in again.
  • Calendar sync shows each account as a card with a status light and a status label, so “connected”, “not connected” and “connected but Google is rejecting us” are told apart at a glance instead of all reading the same.
  • Fixed: Google signing you out roughly every week is now explained. An OAuth client of your own left in Google’s “Testing” publishing status is issued sign-ins that expire after seven days, and nothing in Pellet said so. The settings pane now names the cause and the one-click fix — Publish app on the consent screen — beside the reconnect banner.
  • One thing to expect: while Google reviews Pellet, its sign-in shows a “Google hasn’t verified this app” screen; choose Advanced → Continue. The settings pane says so before you click, and the notice disappears once verification is granted.
0.5.8
6 August 2026
not yet released

Attachments show up in All Files

  • “All Files” now lists attachments, not just notes. The vault-level listing showed no PDFs, EPUBs, images or videos at all, so files kept in subfolders were invisible from the top of the vault, and filtering for something like “.epub” there reported nothing found — about files that were sitting right there. Notes were never affected.
  • The show/hide-subfolder-files toggle is offered at the vault level. It reads “Showing every file in the vault”, which is what All Files has always done; turning it off narrows the list to the files sitting loose at the top of the vault, which was previously impossible to ask for. Your setting for the root is remembered separately from the one for browsing a folder, so neither changes the other, and existing vaults keep the vault-wide listing they had.
0.5.7
6 August 2026
not yet released

PDFs and books get it too

  • The PDF and EPUB panes offer the file actions too. Their “⋯” menus now carry the same Open in new tab / Open to the right / Rename / Reveal in file manager / Archive / Delete rows as every other pane — they previously had no menu at all. Deleting a PDF or EPUB from the pane asks about the highlights saved against it, exactly as deleting it from the note list does, so its highlight notes are never silently left pointing at a file that’s gone.
  • An attachment’s right-click menu in the note list gained “Open in new tab” and “Open to the right.” It predates tabs and had neither, while a PDF or an EPUB has opened in one for a long time.
0.5.6
6 August 2026
not yet released

The canvas gets the same menu

  • The canvas, whiteboard and paper panes offer the file actions too. Their “⋯” menus now carry the same Open in new tab / Open to the right / Rename / Reveal in file manager / Archive / Delete rows the note pane and the note list offer, built from one definition.

    On a canvas, note the difference between the two Deletes: the button on the bar removes the selected cards, the menu’s Delete moves the canvas itself to the trash.

0.5.5
6 August 2026
not yet released

Rename and delete without leaving the note

  • The note pane’s “⋯” menu now offers the file actions too — Open in new tab, Open to the right, Rename, Reveal in file manager, Archive and Delete, under the actions that were already there. They used to be reachable only by finding that note’s row in the list and right-clicking it, which is backwards: the moment you want to rename or delete a note is usually while you’re reading it. Both menus are built from one definition, so they can’t drift apart.
0.5.4
6 August 2026
not yet released

Sync status on the phone

  • Sync status is visible on the phone. A coloured dot sits at the right end of the nav bar — green when everything is synced, pulsing while sync runs, amber when the relay is unreachable or some files can’t sync, red when a cycle failed or changes were skipped. It replaces a trip into Settings, and it costs no screen space: the nav bar is already there, and the dot is the same size in every state, so nothing on the row shifts as sync changes. Tapping it opens the live activity feed. The ⋯ More sheet says the same thing in words and opens the same feed. Both are hidden if you’ve never set sync up.
  • Fixed: the live sync activity panel now has a visible close button on the phone. Opened from the new status dot it appeared full-screen with no ✕ — a rule that hides the desktop panel toggles on a phone was hiding the panel’s own close button too, and a full-screen panel has no backdrop to tap and no Escape key.
  • Fixed: the live sync panel’s header no longer prints internal state names. States it hadn’t been taught fell through to the raw value, so it could read “unsyncable” instead of “Some files can’t sync”.
  • The search icon on the phone lost its tinted circle and gained a little stroke weight. The filled pill made it read as the row’s one button, sitting among plain glyphs.
0.5.2
6 August 2026
not yet released

Merge a conflict line by line

  • Conflict copies can be merged line by line. “Compare & resolve” used to offer only the two whole-file answers — keep the current file, or take the conflict copy — so an edit made on each device meant losing one of them and retyping it. The compare view now puts a picker on every disagreement (this copy / the current file / both) and a Save merge button that writes the assembled result. Lines a choice leaves out stay on screen, faded, so what you’re giving up is visible rather than gone.

    Merging replaces the current file by the same path the other resolutions use: what it replaces is snapshotted to file history first, and the conflict copy goes to the recoverable trash. Nothing is destroyed by choosing wrong.

0.5.1
5 August 2026
not yet released

Android opens vaults four times faster

  • Opening a vault on Android is about 4× faster — measured on a Galaxy S24 with a 3,574-file vault: 25.8 seconds down to 6.1. Two different costs were hiding behind the one symptom, and fixing only the first barely moved it.

    Every file was its own trip across the bridge. Opening a vault lists it and reads every note, and on mobile that was one call per directory and one per file — so the batching that makes this cheap on desktop bought nothing. A native plugin now lists the vault in one call and reads files in batches, which is what the desktop app has always done. The reads underneath are the same system calls as before, so which files are visible, and what they contain, is unchanged.

    And the part that overhead was masking: every file open under Android’s shared storage goes through the system’s storage layer and costs several milliseconds no matter how small the file — 500 markdown notes totalling half a megabyte took as long as 66 whiteboards totalling 36. That’s time spent waiting, not working, so those reads now happen eight at a time and the waits overlap instead of adding up. Reading the markdown in that vault went from 3.2 seconds to 0.19.

    If the native plugin is ever unavailable, the app falls back to the old per-file path rather than failing. iPhone and iPad are unaffected.

  • “Opening vault…” now says what it is doing — which phase it’s in and how many files it has read — instead of sitting silent on a large vault. It also says when Android has fallen back to reading files one at a time, which is otherwise indistinguishable from simply having a lot of notes.

0.5.0
5 August 2026
not yet released

Pellet gets a face

  • A real app icon. Pellet had none — the desktop build fell back to the stock Electron logo and iOS was still shipping Capacitor’s blue placeholder. The icon is the wordmark’s own letter in the wordmark’s own typeface, with the mint pellet from the favicon sitting in its counter. One master builds the macOS, Windows and iOS artefacts and the site’s favicon, so the browser tab and the Dock cannot drift apart.
  • Undo and redo on the Canvas — ⌘Z / ⌘⇧Z, plus toolbar buttons. A whole gesture is one step: dragging a card across the board takes one undo, not one per frame. Panning and zooming are not edits and never enter the history.
  • Canvas cards resize from any border. Previously only the bottom-right corner would do it. All four edges and all four corners are grab targets now, each with its own direction cursor, and dragging a top or left border moves that side while pinning the opposite one.
  • Obsidian Excalidraw drawings open in Pellet. An *.excalidraw.md opens on the board rather than showing you a screenful of base64 in the markdown editor. It opens read-only, with a bar offering to convert it to a native board — one click, and nothing on disk changes until you ask. Reading a drawing never writes to it. There’s a bulk converter for a whole vault too, dry-run by default.
  • Reading settings for EPUB, behind a gear. Font family including a dyslexia-friendly face, size, line spacing, margins, alignment, page colour, continuous scrolling versus pages, one page or two — on one panel instead of four separate toolbar buttons. They’re global: set your reading comfort once and every book opens that way. The defaults change nothing, leaving the publisher’s own typography alone.
  • Bookmarks in EPUB, listed above the table of contents, per book.
  • Today’s whole column is highlighted in the Month, Week and Multiday calendars, not just its date number. The tint is weaker than a drop target’s, so a calendar at rest never looks mid-drag. Day view is left alone on purpose — a single column washed end to end has nothing to stand out against.
  • A current-time line in the Week, Multiday and Day calendars: a red rule with a dot, in today’s column only, moving with the clock. It disappears when today isn’t on screen, and never gets in the way of dragging.
  • Checklist and subtask counts on Kanban cards. They’re different things — checklist is the - [ ] lines in the task’s own body, subtask is child task files filed under it. Both read done/total, and a card with neither shows no badge rather than a permanent 0/0. A subtask counts as done when Complete or Skipped; a skipped child isn’t work left to do.
  • Clicking a task opens the task, in both the Table and the task panel, instead of the edit form. Editing is a different intention and has its own control now: hover a row for a pencil beside the title.
  • An Android build. Early — it builds and launches, with a native secure store for sync’s keys. The rest of the platform work is still ahead.
  • Fixed: a first sync interrupted partway could bring back completed tasks. Joining a vault records each file’s version alongside it, but that record was only saved when the download finished. A phone whose app the system reclaims mid-download — the ordinary way a background app dies — kept the files and lost the record, then offered its whole vault back to the group as new work. One interrupted join re-offered 2,836 files and rolled four recurring habits back to an earlier due date, so occurrences already ticked off showed as outstanding again. The record is now saved as the download proceeds, so an interrupted join resumes instead of starting over.
  • Fixed: sync said “Can’t reach the relay” while it was actively downloading — a long transfer was showing the previous cycle’s verdict for its whole duration.
  • Fixed: overdue occurrences of a repeating task never appeared in the task panel, though the Table and the status-bar count both showed them. A monthly task due on the 1st simply vanished from the panel on the 2nd.
  • Fixed: the note list’s New… and Sort buttons did nothing when clicked. Both share the element that renders their menus, and a refactor had dropped it — so the click was handled, the menu state was set, and nothing appeared.
  • Fixed: the active button’s label vanished under the pointer in the light themes, most visibly the selected calendar mode. Measured 4.42:1 at rest, 1.15:1 hovered.
  • Fixed: sync’s record of deleted files grew forever — 3,170 of 7,380 entries on a mature vault, in a file rewritten on every sync. Markers are now dropped once every device has confirmed applying that deletion, and held indefinitely otherwise.
0.4.2
3 August 2026
not yet released

See your whole vault at once

  • The Vault Map. Your whole vault as rectangles, each sized by what is in it — grouped by folder, tag, type or extension, counted by files or by disk. Click one to go inside, click a file to open it. Folder-by-count shows where your writing actually lives; extension-by-bytes shows what is eating the disk, which is usually a surprise. Sizes are eased so a vault where one folder holds most of the files is still readable, and every number on screen is the exact one.
  • Callouts. > [!warning] Title draws a titled, coloured panel, in Obsidian’s syntax and with its thirteen types — so a vault moves between the two apps without one of them leaking [!warning] into the prose. Put the caret on the line and the raw text comes back.
  • Footnotes, also Obsidian’s: text[^1] with [^1]: definition, plus inline ^[a note]. Numbered by the order you reference them, not the order you define them, and the editor shows the same numbers the reading view will.
  • Custom Formatting. Heading sizes, weights and colours, body size and line height, measure, code size, quote and callout colours, bold and italic colour, table borders and shading. Everything drives the editor and the reading view together, so a heading is the same heading wherever you look at it. Save a set as a named theme; themes travel between your devices, while which one is active stays per-device — a phone and a desktop want different body sizes from the same theme.
  • Gallery view for the note list, and dragging a file into a note writes a wikilink to it.
  • Fixed: a re-paired device could never sync again. Pairing a device that had been removed left it offering changes the relay refuses, forever — it looked busy and reached nobody.
  • Fixed: removing a device could quietly lock another one out of the vault. The new key went to the devices that machine knew about rather than to everyone in the group. Removal now refuses, and says which device, until it can reach them all.
  • Fixed: your devices agree on the device list. A device removed on one machine stayed listed on the others indefinitely; one that had just joined showed on neither.
  • App files left the vault root. Pellet’s own shared state now lives in .pellet/ instead of sitting among your notes, and conflicts on those files merge instead of leaving copies behind.
0.4.0
30 July 2026
not yet released

Canvas gets its hands free

  • Drag a whole selection at once. Grab anything already selected and all of it moves. A card that’s both selected and inside a selected group moves once, not twice.
  • Fit to view. Frame a selection or the whole board. It won’t magnify past 100% — “show me these” isn’t “fill the screen with these.”
  • Nested groups move freely now, in and out of a parent, without resizing anything first. Containment used to be decided by a center test, which is symmetric: park a small group over a big one’s middle and each contained the other.
  • Fixed: wheeling over a card did nothing at all — the card didn’t scroll and the board didn’t zoom. Only the two real text editors block zoom now.
0.3.2
18 July 2026
not yet released

Highlights become notes

  • PDF and EPUB highlights now land in Highlights/ as real notes you can link to and search like anything else.
  • Flow view — read a whole folder as one continuous document, and export it as Markdown, plain text, RTF, or PDF.
  • Fixed: a highlight’s overlay could sit on text outside its own quote. Swept 143 rectangles across 15 PDFs; zero left.
0.3.0
2 July 2026
not yet released

Sync, end to end

  • Encrypted multi-device sync through a sync relay running on a computer of your own. Desktop and iOS. The relay stores ciphertext only, and peer keys are pinned at pairing rather than served.
  • Settings sync too, with credentials kept in the system keychain rather than the vault.