Jotura

Changelog.

v0.1.52

Your vault is now a plain folder of Markdown files — exactly like Obsidian. Open your notes with any app, grep them, back them up, script against them; there's no on-disk encryption layer and nothing to unlock, ever. For protecting the files on your computer, use your system's full-disk encryption (FileVault, BitLocker) — it guards everything on the machine, not just your notes. Cloud sync is unchanged where it matters: notes are still encrypted on your device before upload, the server still only ever sees ciphertext, and your sync password and recovery phrase work exactly as before. If sync is waiting for its password, nothing blocks — you keep reading, writing, and searching while sync resumes when you're ready. The jotura CLI is simpler to match: the unlock and lock commands are gone (they had nothing left to do), and a new jotura sync status / login / logout manages the sync key, shared automatically with the desktop app.

v0.1.51

Sync conflicts fixed for good. A bug could make a note conflict with itself on a single device: after certain sync hiccups (a dropped connection mid-sync, or a force resync), Jotura would mistake your own earlier save for a change from another device, roll the note back under your cursor, and leave behind .conflict files. That can no longer happen — the sync engine now recognises its own history and never conflicts a device against itself. Real conflicts (the same note edited on two devices at once) are handled more gracefully too: the version you're actively editing always stays put, and the other device's version is saved alongside it as a clearly named conflict copy — no interruptions, no rollbacks, and nothing is ever lost. Sync activity and any conflict events are now also recorded in the local diagnostics log, so if anything ever looks off, the "Copy diagnostics" report will show exactly what happened.

v0.1.50

Reliability and diagnostics. Jotura now keeps a small local log of background activity (conversion and sync errors), and Settings has a "Copy diagnostics" button that gathers a shareable report — app version, system, converter status, and recent log lines — so if something goes wrong you can paste the details into a bug report. As always, it stays entirely on your machine; nothing is sent anywhere. Under the hood, the encrypted vault's database is now integrity-checked when it opens, so a damaged vault is caught and reported clearly (and can be restored from your cloud copy) instead of failing in confusing ways later.

v0.1.49

Better handling and visibility for documents that can't be converted. Files that genuinely can't be read — corrupt PDFs, password-protected documents — are no longer retried over and over in the background, which was quietly wasting CPU and battery; they're attempted, and then left alone unless the converter is upgraded or the file changes. Settings → Documents now shows a clear breakdown of how many documents are converted, failed, and still pending, lists the ones that failed, and gives you a "Retry failed conversions" button to force another attempt whenever you want.

v0.1.48

Converted folder now fills in properly on large vaults. Previously, if you had hundreds of documents, the background converter worked through them in small batches spaced minutes apart, so the Converted folder could take hours to catch up and looked like it was missing files. It now works through the entire backlog continuously in the background, and always converts documents it hasn't seen yet before re-trying ones that previously failed — so everything shows up far sooner. The manual "Convert pending documents" button in Settings now kicks off the whole backlog at once too.

v0.1.47

Windows fix: documents now convert reliably. Conversion was failing on Windows for almost any real document — anything containing a curly quote, an em-dash, an accented letter, or an emoji would error out and never become searchable, because the converter was writing its output using an older Windows text format that can't represent those characters. Conversions now use full Unicode (UTF-8) throughout, so PDFs, Word docs, spreadsheets, and presentations convert correctly regardless of the characters they contain.

v0.1.46

Windows fix: no more flashing terminal windows. On Windows, a black console window briefly popped up when Jotura started and again every time it converted a document — the bundled converter runs as a small background program, and Windows was showing its window each time it launched. Those windows are now hidden, so conversion and startup happen quietly in the background as they should. No change to how anything works; the flicker is just gone.

v0.1.45

Document conversion now actually works on macOS. The bundled converter could never load on a Mac — a code-signing rule (library validation) blocked its embedded Python runtime, so every PDF, Word, and PowerPoint quietly failed to convert and stayed unsearchable. The converter is now signed correctly and runs as intended. Two related fixes: Jotura only converts real document types now (Word, PowerPoint, PDF, Excel, and similar) instead of trying to "convert" images and other files that have no text to extract; and any junk entries an earlier version created for images are cleaned up automatically the next time you open your vault, so the Converted folder shows only genuine documents.

v0.1.44

You can now see what your documents were converted into. When Jotura imports a PDF, Word doc, or spreadsheet, it builds a searchable text version behind the scenes — until now that lived entirely out of sight. A new read-only "Converted" folder in the sidebar mirrors your document folders and lets you open and read the extracted text of any document, so you can confirm a file was picked up and see exactly what search is matching against. These views are clearly badged and read-only — you edit the original document, not the converted copy — and they appear automatically for every document already in your vault, with nothing to migrate.

v0.1.43

A big responsiveness fix for vaults with documents. After the documents release, unlocking a vault or converting files could make the app feel frozen — heavy background work (building the search index, converting documents, syncing) was holding a lock that everything else had to wait behind. That's fixed: the app is now usable the instant you unlock, while indexing and conversions fill in quietly in the background. Search works immediately on what's already indexed and tells you when it's still catching up, filename quick-open is instant, and document conversion never blocks your typing. A new activity indicator next to the sync status shows what's happening in the background — indexing, converting, or syncing — so you always know the app is working, never stuck.

v0.1.42

Documents come to Jotura. Drop a PDF, Word doc, spreadsheet, or other file into your vault — it's encrypted exactly like your notes, and Jotura automatically builds a searchable markdown mirror of it so you can find it by its contents, not just its filename. Add documents however suits you: drag them into the app, paste them into a note, run jotura import from the terminal, or turn on the optional OS folder where dropping a file in Finder/Explorer imports it. Open any document in its native application (Word, Preview, Excel…) straight from the vault — when you save, your changes re-encrypt back into the vault automatically, and if the app ever closes mid-edit it offers to recover your changes on next unlock. Everything works offline and syncs across your devices: the document converter ships inside the app, so there's nothing extra to install, it runs sandboxed with no network access for safety, and a document converted on one device arrives already-converted on the others. Your AI agents can search and read documents too — the jotura CLI's new search-documents command searches the converted text and hands back the original document paths.

v0.1.41

Small visual polish. Scrollbars throughout the app now match Jotura's dark and light themes — slim, rounded, and translucent — instead of the chunky OS-default ones, with the ember accent showing through when you drag. Table headers in the editor also tighten up vertically so they read more like column labels and less like another row of body content.

v0.1.40

The jotura command-line tool now installs itself on Windows. Previously the CLI shipped inside the Windows installer but nothing put it on your PATH, so typing jotura in a terminal turned up "not recognized" — the macOS and Linux AppImage builds had a first-launch prompt that handled this, and Windows did not. On first launch the desktop app now offers to add Jotura's install directory to your user PATH (no admin prompt, no setx-style PATH truncation — it writes the registry via the proper Windows API and broadcasts the change so new terminals pick it up immediately). The same Install button is available later in Settings → Command-line tool, so users who declined the prompt or upgraded from an earlier version can opt in any time.

v0.1.39

Vault-shape features for the jotura CLI. jotura backlinks <path> lists every note that links to a given note via [[wikilinks]] or [markdown](links); jotura links <path> lists outgoing links. jotura trash <path> soft-deletes a note (recoverable via jotura trash restore / list / empty), backed by a new trashed_entries table in the manifest — your AI agent can no longer permanently lose a note by mistake. jotura templates list/show/create/delete manages reusable note templates stored encrypted alongside your notes; jotura create --template meeting <name> spins up a new note from a template with {{date}}, {{datetime}}, {{filename}}, {{title}} variables substituted. jotura grep <pattern> runs ripgrep-style regex search over decrypted bodies with --ignore-case, --line-regexp, --include, --files-with-matches, and the rest of the familiar flags. All four are documented in the CLI skill file your AI agents read.

v0.1.38

Batch operations for the jotura CLI, aimed at AI agents that need to make multiple changes at once. jotura edit --apply <edits.json> applies several edits to one note sequentially with a single hash check and one atomic write — rewrite five sections in one call instead of five round-trips. jotura batch <ops.json> does the same across multiple notes: all preconditions verified up front, then changes apply together or not at all. Both compose with --dry-run for previews and a new --diff flag that returns unified-diff output (also added to every other mutating command). When a hash conflict happens, the error response now includes a diff between what the CLI was about to write and what's actually on disk — so your agent sees exactly what changed under it and can decide whether to retry, merge, or abort instead of guessing.

v0.1.37

Major polish pass on the jotura command-line tool. Every mutating command (write, edit, create, rename, delete, frontmatter, tag) gains --dry-run, which previews the exact change with before/after content and the resulting hash without writing to disk — your AI agent can verify an edit looks right before committing it. A new jotura doctor command runs nine diagnostic checks (PATH, vault detection, session cache, version skew with the desktop) and reports JSON pass/fail per check. jotura skill install <claude|codex|gemini|all> writes the agent skill file directly to the right place in each AI tool's config, replacing the manual curl step entirely. jotura today opens or creates today's daily note (matching the desktop's Daily/YYYY/MM convention). jotura watch streams vault change events to stdout one JSON line per event, so scripts can react to anything that touches the vault — yours, the desktop's, or sync's. Plus shell completion for bash/zsh/fish (including vault-aware path completion when unlocked), and a CI fix that lipos the macOS aarch64 + x86_64 CLI builds into the universal sidecar that Tauri expects.

v0.1.36

The jotura command-line tool now ships inside the Jotura desktop installer. On Linux (deb) and Windows the CLI lands on your PATH automatically at install time. On macOS, a new Settings → Command-line tool section adds a one-click "Install" button that symlinks /usr/local/bin/jotura to the bundled binary (asks for admin password once); the AppImage flow on Linux offers an equivalent first-launch prompt to copy the CLI into ~/.local/bin. Once installed, jotura works in any terminal — and shares your unlocked vault with the desktop app via the same session cache, so one passphrase covers both surfaces. Also fixes the CI workflow paths that broke after the workspace refactor and caused v0.1.35's macOS build to fail at the ad-hoc signature verification step.

v0.1.35

Build-tooling fix: the v0.1.33 and v0.1.34 installer builds never completed because the Tauri JS package (@tauri-apps/api) and the Rust tauri crate drifted onto different minor versions, and Tauri's CLI refuses to build on that mismatch. This release pins the JS side to match the Rust crate's 2.11.x line, so the CLI + cooperative-unlock work from v0.1.33 and the /agents documentation page from v0.1.34 finally ship in real downloadable installers.

v0.1.34

The website now has a dedicated agents page at /agents that walks through installing the v0.1.33 jotura CLI and teaching Claude Code, OpenAI Codex, or Gemini CLI to talk to your encrypted vault. The same skill file every agent reads is shown inline on the page and offered as a download, so you can drop it straight into your AI tool's config and your agent immediately understands the safe-edit workflow — unlock once, read with a hash, edit with --if-hash, and never silently clobber a note you have open in the desktop.

v0.1.33

Jotura now ships a companion command-line tool, jotura, for reading, searching, and editing your vault from a terminal — useful for shell scripting, custom workflows, and AI-agent integrations like Claude Code. The CLI shares the desktop's encrypted vault, atomic writes, and conflict detection; unlocking the vault in the desktop also unlocks it for the CLI in the same session, so your passphrase is asked once. Changes made through either surface now propagate to the other within a second, so a note edited in the terminal updates the desktop's tree, search, and any open tab automatically. The desktop also gained a visible warning when you're signed out on a sync-enabled vault — both as a titlebar indicator and a banner above the editor — so you can no longer silently miss a sync because you forgot to sign in.

v0.1.32

Images now display inside encrypted vaults. Because an encrypted vault stores every file as a sealed blob, pasted, dropped, and inserted images were saved correctly but rendered blank. Jotura now decrypts vault images on demand as it draws them, so they appear inline just as they do in an unencrypted vault.

v0.1.31

Pasting images just works now. Drop or paste an image straight into a note and Jotura copies it into the vault's assets folder and inserts it inline — the same as choosing Insert image from the slash or selection menu. However an image arrives, it is stored alongside your notes (keeping its original filename, de-duplicated if a name is already taken), so your vault stays self-contained and portable. An image you pick that already lives inside the vault is linked in place rather than copied again.

v0.1.30

Sign-in email delivery is sturdier. Auth emails now send from the verified jotura.io domain, and if the mail provider rejects a message the app gets a clear retryable error instead of a generic internal-server failure. Undelivered sign-in codes are cleaned up immediately so stale codes do not linger after a failed send.

v0.1.29

Sync now recovers when another device has already advanced the vault. If one machine pushes first, the next device pulls those remote changes, preserves any true local divergence as a conflict file, and retries its queued edits instead of getting stuck behind a version_conflict error.

v0.1.28

Jotura has a proper identity now. The app and the website share one look — a geometric "jot" mark (a dot resting on a baseline), a warm near-black and cream palette with an ember-orange accent, and a Newsreader serif wordmark. Inside the app the mark appears on the welcome screen, the sidebar, and the unlock and sign-in dialogs, Settings gains an About panel, and the desktop and taskbar icons are refreshed. This release is purely cosmetic — nothing about how your notes are stored, synced, or edited has changed.

v0.1.27

Task lists now roll up across your vault in the right sidebar. The new Tasks tab finds ordinary markdown checkboxes, groups open work by overdue, today, upcoming, and undated, lets you filter and toggle tasks in place, and links daily-note tasks to the calendar. Tasks inside `Daily/YYYY/MM/YYYY-MM-DD.md` inherit that date automatically; tasks anywhere can use `@due(YYYY-MM-DD)` to appear on the calendar without leaving plain markdown. A configurable task window keeps the list focused on recently modified notes and recent daily notes, while future-dated tasks always stay visible and the pane shows recent past-task completion.

v0.1.26

Tables behave like real editor furniture now. Hovering a table reliably reveals the row and column gutters, cells stay clickable across the full table, and column resizing is saved into the editor document instead of disappearing when the view reloads. Unsized columns still size to their contents; once you drag a column to a fixed width, that column wraps long content cleanly inside the chosen size.

v0.1.25

Notion-grade tables. Type `/table` (or pick Table from the slash menu) to drop a 3×3 with a header row; click any cell to edit, Tab and Shift-Tab move between cells, Tab on the last cell adds a new row, and Mod+Enter inserts a row below. Hover the table to reveal row and column gutters with drag handles, alignment dropdowns (left, center, right, default), one-click insert + and × delete buttons, and a session-only column-resize grip that never writes to your file. Right-click a row or column gutter for a full insert / delete / align context menu. Saved tables are strict GFM markdown — the same `:---:` alignment markers and pipe escapes that render identically in Obsidian, GitHub, and VS Code preview.

v0.1.24

Daily notes. A right-side calendar sidebar opens or creates a markdown note for any date you click — daily files live flat at `Daily/YYYY/MM/YYYY-MM-DD.md`, with the next two weeks pre-created when you open the vault. Settings has a toggle and a knob for the auto-create window; the sidebar starts collapsed with a thin always-visible icon rail and remembers its width. Also: sync now auto-recovers from `ref_count_underflow` errors that could previously deadlock the push queue after a large batch of renames — the client drops the stale Delete op the server has already rejected and retries silently.

v0.1.23

Push queue scrubber now drops orphan-blob ops too. v0.1.21 cleared oversized pending ops but left Put ops whose backing blob is missing from local storage — those still jammed sync with an ENOENT. Both kinds are now scrubbed before each push.

v0.1.22

Re-release of v0.1.21's queue-scrubbing fix. The v0.1.21 build failed in macOS release CI because a stray rustup-init shim was reappearing between workflow steps; the build step now pins cargo explicitly via PATH + the CARGO env var so it can't get shadowed again.

v0.1.21

Sync no longer gets stuck behind a queue full of legacy oversized blobs. If you upgraded from a build before the size filter, you may have had hundreds of pending ops jamming on a guaranteed 413 every push cycle. Push now scrubs any Put op whose local blob exceeds the server cap before sending, so the rest of the queue drains. Files still live locally — only the dead sync ops are removed.

v0.1.20

Republishes v0.1.19's oversized-file sync filter. The v0.1.19 release workflow died on the macOS runner because a rustup-init shim shadowing `cargo` got reintroduced after a runner image refresh; the release CI now deletes any system-level cargo/rustc/rustup that isn't the rustup-installed one, so this won't bite us each image rotation.

v0.1.19

Files above the server's 16 MiB upload limit no longer hammer sync with repeated 413 errors. They're still stored locally (encrypted, visible in the sidebar, openable) — just not queued for the next push. Re-enabling sync for bigger files needs a server deploy plus a client cap bump (the constant is documented inline).

v0.1.18

Task list checkboxes redesigned: larger, rounded-square, custom-rendered (no more native OS chrome) with proper hover and focus states, and a crisp white checkmark on the accent fill when ticked. Completed task text now fades and strikes through.

v0.1.17

Bigger files sync. The client-side 25 MiB cap is gone — large presentations, PDFs, and similar files now appear in the sidebar, migrate into encrypted vaults, and push through sync. The server's blob limit is bumped from 16 MiB to 100 MiB (the practical Cloudflare Workers request ceiling); oversize uploads surface as a clear 413 in the Sync diagnostics panel instead of silently being skipped. The file-type allowlist still gates what's eligible for sync.

v0.1.16

Sync hardening. Two real bugs were keeping changes from propagating: pulling a folder from another device never refreshed the file tree, and pushing a folder broke the entire push batch because we tried to upload a non-existent blob for it. Both fixed, with regression tests. New Sync diagnostics panel in Settings shows your signed-in email, device ID, vault ID, pending op count, last push/pull timestamps, and any recent errors — the first place to look when sync isn't behaving. Includes a Copy diagnostics button for bug reports and a Force re-sync button that re-fetches the entire manifest from the server when local state has drifted. Auto push/pull loops now record errors instead of silently swallowing them.

v0.1.15

Paste or drop images straight into a note. Clipboard images land in an `assets/` folder next to your vault root as `pasted-<timestamp>.<ext>`; files dropped from Finder or Explorer keep their original filename. The markdown reference is inserted at the cursor with the correct relative path. Sync no longer creates spurious `.conflict-*` files on routine remote updates — conflicts now only get written when both devices have unsynced edits to the same file. The version number in the sidebar finally renders on macOS bundles too.

v0.1.14

Sync any common document or image, not just markdown. PDFs, Word, Excel, PowerPoint, OpenDocument, RTF, EPUB, and all major image formats are now encrypted and synced alongside your notes. Video, audio, and archives are deliberately excluded; individual files over 25 MiB are skipped. Click a non-markdown file in the sidebar and it opens with your OS's default app. Version number now shows in the bottom-left of the sidebar. Cleaner tab overflow when many notes are open — hidden scrollbar, mouse wheel scrolls horizontally, the active tab auto-scrolls into view. Recovery-phrase screens no longer overflow the modal on small windows.

v0.1.3

Multi-device sync polish. Editor now refreshes when another device's edits arrive (no more close-and-reopen). Always-keep conflict semantics — any divergent version becomes a sibling .conflict-* file rather than being silently overwritten. Saved an `[object Object]` error from leaking into the UI when an autosave hit a hash conflict.

v0.1.2

Fixed two sync bugs — server-side ops_blob encoding and client-side own-device echo suppression. Required for fresh-restore on a second device.

v0.1.1

Restore folder check accepts non-empty folders (only refuses if a Jotura vault is already there). Pull failures during restore clean up partial state. More specific decrypt error messages.

v0.1.0

First release. Encrypted local-first markdown editor with cross-device sync.

Each release is published to the download page.