Jotura

Docs / Using the app / Settings reference

Settings reference

Every Jotura desktop setting with a UI control, grouped as the settings screen groups them, with its effect, its default, and where it is stored on disk.

Settings open from the gear button at the top of the sidebar, or from the Open Settings command in the command palette (Cmd/Ctrl+Shift+P). Clicking the dimmed area outside the panel closes it too.

Escape also closes it, with one exception. The global Escape handler runs a strict cascade, and the command palette comes first. If the palette is open on top of Settings, the first Escape closes the palette and the second closes Settings.

There is no Save button. Every control writes through immediately, so the footer buttons labeled Close and Done do exactly the same thing, and a stray click outside loses nothing. The panel is a single scrollable column of section cards rather than a set of tabs.

How the screen is organized

SectionWhat it covers
AppearanceTheme, fonts, and visual preferences.
EditorHow notes open and behave inside the editor.
Daily NotesCalendar and task timing for the right sidebar.
Semantic searchSearch by meaning alongside keyword search. The model and index stay on this device.
Account & syncEnd to end encrypted cloud sync. Notes are encrypted on this device before upload.
AgentsKeeps agent instruction files, skills, and subagent definitions in sync between the vault’s Agents/ folder and this machine’s config directories.
AdvancedDefaults, maintenance, and diagnostics you will not need often.
AboutThe app logo, the installed version number, and the tagline.

Six sub groups start collapsed. Open one to reach the rows inside it.

Sub groupLives inside
TemplatesEditor
Security & recoveryAccount & sync
Files & foldersAdvanced
Document conversionAdvanced
DiagnosticsAdvanced
Command-line toolAdvanced

Rows in this panel have three parts: a label on the left, a helper line under it, and a control on the right. The label and the button text often differ, so this page names both wherever they do.

Appearance

SettingEffectDefault
ThemeMatch the operating system or pick a fixed mode. Options are System, Light, and Dark.System
Editor font familyThe typeface used for the editor surface. The list is populated from the fonts installed on your machine, and the first option is literally (default monospace).ui-monospace, SF Mono, Menlo, Consolas, monospace
Editor font sizeText size in the editor, between 10 and 24 pixels.15
Sidebar font sizeText size in the file tree and the search pane, between 10 and 20 pixels.14

All four apply live, with no restart. When Theme is set to System, the app watches the operating system’s light and dark preference and follows it as it changes.

Editor

SettingEffectDefault
Open in source modeShow raw Markdown by default instead of the formatted view. You can still toggle either way per note with Cmd/Ctrl+Shift+E.false
Load remote imagesAllow images hosted on the web to load inside notes. This is off by default for privacy, because loading a web image reveals your IP address and your reading activity to whoever hosts it.false

See The editor for what source mode changes and Keyboard shortcuts for the full chord list.

Templates

The Templates sub group is not a stored setting. It is a manager for template files, which live in your vault at .jotura/templates/<name>.md. A template body may use the variables {{date}}, {{datetime}}, {{filename}}, and {{title}}.

It needs a vault. With no vault open the group shows a single row reading Open a vault to manage templates. and no editor. With a vault open but no templates yet, it shows a No templates yet row and a New template… button.

Nested names such as work/standup are allowed. Renaming a template is not supported, so the name field is read only when you edit an existing one. Deleting asks you to confirm, and notes already created from that template are not affected.

The CLI reads and writes the same files:

jotura templates list --json

More on templates in Daily notes, tasks, and templates.

Daily Notes

SettingEffectDefault
Enable daily notesShow the calendar in the right sidebar and pre-create notes for upcoming days. Turning this off hides the two settings below.true
Auto-create windowHow many upcoming days are pre-created when the app starts, from 1 to 60.14
Task windowHow far back to look for tasks in recently modified notes and recent daily notes, from 1 to 365 days. Tasks dated in the future always appear regardless of this value.30

One limitation worth knowing before you commit to daily notes: there is no setting anywhere for the daily notes folder. It is always Daily.

Clicking any cell in the calendar creates that day’s note, including the grayed-out cells that belong to the previous or next month.

Semantic search finds notes related to your query even when the words differ. Its state does not live in the settings file. It is backed by the vault’s own index and by model files on disk, and the settings screen polls that state every two seconds while it is open.

When it is off, the section shows one row labeled Search by meaning with an Enable button. Enabling downloads the bge-small-en-v1.5-int8 embedding model, version v1, which is roughly 34 MB in two files, model.onnx and tokenizer.json.

Both files come from this base URL, and each is verified against a SHA-256 checksum:

https://releases.jotura.io/models/bge-small-en-v1.5-int8/v1/

They are stored at <config dir>/jotura/models/bge-small-en-v1.5-int8/v1/, where <config dir> is the same directory that holds settings.json (see Where settings are stored). While the download runs, the helper line reads Downloading the embedding model… <pct>% and the Enable button is replaced by that percentage. The app then builds the index in the background.

Once it is on, the section shows three rows and offers two actions.

Row labelButtonWhat it shows or does
StatusnoneThe model version, with the compute backend as its value: one of GPU (CUDA), GPU (DirectML), GPU (CoreML), CPU, or Unknown.
IndexnoneThe number of indexed chunks and the number still pending, plus an estimated time remaining while embedding is running.
Re-index vaultRe-index vaultClears the existing chunks and rebuilds them in the background.
Turn off semantic searchTurn off & delete indexDisables semantic search and deletes the local index. Your notes are untouched, and re-enabling rebuilds the index from scratch. This action asks you to confirm.

If enabling or indexing fails, a Last error row appears carrying the message, with the value Failed. The same pattern is used by the document conversion, sync, and command-line tool groups.

Nothing is sent anywhere beyond that one model download. The model runs on your machine and the index stays in the vault.

The CLI can query this index but never builds it, so notes written from the CLI are not findable by meaning until the desktop app indexes them. Running a semantic query with no index exits with code 13:

jotura search --mode semantic "onboarding decisions" --json

See Search and Reading and searching.

Account & sync

Sync is optional, and it requires a paid subscription. Pricing is on the pricing page.

When you are signed out, the section shows one row: label Status, helper Sign in to enable cross-device sync., and a Sign in button. Signing in asks for your email address and then a six digit code, which expires in 15 minutes. A Resend code button is limited to one send every 30 seconds.

When you are signed in, the section adds up to three account rows above the sync status.

Row labelButtonWhat it does
Signed in asSign outThe helper line is your email address. Signing out asks you to confirm first.
PlanManage billingShown only while you have a subscription. The helper names the plan and its renewal, trial end, or cancellation date. The button opens https://jotura.io/account in your browser.
Restore vault from cloudRestore from cloudPicks a vault from your account and downloads it into a local folder you choose.

The sync status below those rows depends on where the current vault stands. The first matching case wins.

SituationWhat you see
No vault openA Status row reading Open a vault to enable sync.
Signed in with no subscriptionAn upgrade card explaining what sync adds.
Sync not configured on this vaultA row labeled Enable sync with an Enable sync… button that sets a sync password and issues a recovery phrase.
Sync key not cached on this deviceA row labeled Sync password needed with an Unlock sync… button. Its helper reads Sync is paused until you enter your sync password. Notes stay fully usable meanwhile.
Sync configured and runningA Status row plus an Actions row carrying Pause sync or Resume sync.

In the running case the Status row’s helper is one of these ten sentences.

Status helperMeaning
Idle. All changes pushed.Everything local is on the server.
Registering vault on the server…First time setup for this vault is in progress.
Syncing <n> of <n> notes… or Syncing…An upload pass is running.
Pulling <n> of <n> notes…A download pass is running.
Error: <message>The last pass failed. The message is shown verbatim.
Offline. Will retry when online.The app has no network connection.
Not registered.The vault has never been registered with the server.
Not signed in.No account session on this device.
Sync key needed. Unlock sync with your password.The key is not cached here.
Paused. Server copy preserved. Resume to push pending edits.You paused sync. Edits queue locally.

When sync reports an error, an extra row appears. It is labeled Last error, its helper carries the message, and its button reads Retry, which starts a fresh push. That row also appears for a transient failure from an action you just triggered. In the error state the Actions row is hidden, so Retry is the only sync control on screen.

Sync never blocks local work. Reading, writing, and search all keep working when sync is paused, offline, or missing its key.

Security & recovery

Row labelButtonWhat it does
Change sync passwordChange sync password…Opens three more rows: New sync password, Confirm new password, and Save. The minimum is 12 characters. The master key is re-wrapped on your device first, and only the wrapped result and the key derivation parameters go to the server.
New recovery phraseNew recovery phrase…Generates a fresh phrase and invalidates the old one. It asks for your current sync password first, and the phrase is shown once during the ceremony. The server side is updated before the local commit.
Forget key on this deviceForget keyClears the cached sync key and deletes the session file. Sync moves to the paused, password needed state until you enter your sync password or your recovery phrase again. Your notes stay fully usable on this device. This action asks you to confirm.

The recovery ceremony shows 12 numbered words. It offers a Copy to clipboard button that copies them numbered and one per line, then asks you to type back three of them chosen at random.

More context in Sync and sharing and Sync and shares.

Agents

This section manages the reconciler described in full in The agent surface, from inside the app. It needs an open vault. With none open it does not appear at all.

Two rows sit at the top of the section, always visible.

Row labelControlWhat it does
Auto-synctoggleApplies changes from the vault’s Agents/ folder to this machine automatically. Default on, stored as agentsAutoSync in settings.json.
Sync nowSync now buttonRuns a sync immediately and refreshes the rows below with the result.

Below those, drift is listed by item. Items that already match collapse into one row labeled In sync, reading <n> item in sync or <n> items in sync, helper No action needed. Everything else gets its own row, one of Apply to this machine, Pull into the vault, Adopted into the vault, Conflict, No longer in the vault, or Missing on this machine for a runtime that is not installed here. Each row names the item key as agents status prints it, for example claude/CLAUDE.md.

A Conflict row is the only one with buttons of its own.

ButtonEffect
Keep vaultSyncs only that item, taking the vault’s copy. Equivalent to jotura agents sync --item <key> --prefer vault.
Keep this machineSyncs only that item, taking this machine’s copy. Equivalent to jotura agents sync --item <key> --prefer system.

Resolving a conflict this way touches only the item you picked. Every other pending item is left for the next Sync now click or the next auto-sync run.

After any run, whether triggered by the toggle, the Sync now button, or a conflict resolution, any warnings the run reported, such as a skipped binary file, are listed first, followed by a Last sync row that summarizes it: Applied N, pulled N, conflicts N, pruned N.

If the bundled jotura CLI is not on this device, the whole section collapses to a single row, Agent sync unavailable, because the reconciler runs through that binary under the hood. Reinstalling Jotura restores it.

Auto-sync semantics

Auto-sync runs once when you open the vault, and again whenever a file inside the vault’s Agents/ folder changes on disk, whether the change came from you editing it, another machine’s sync pulling it in, or a hand edit outside the app. Rapid changes are coalesced: the app waits for 2 seconds of quiet after the last change before it runs, so editing several files in a row triggers one run rather than one per file.

Auto-sync never resolves a conflict on its own. If a file changed on both sides since the last sync, an automatic run reports the conflict and leaves it exactly as Sync now would, for you to resolve with Keep vault or Keep this machine. A failed auto-sync run is logged and otherwise silent: it never shows an error dialog and never blocks editing.

Cross-machine flow

The vault’s Agents/ folder is ordinary vault content, so it travels between your machines through Jotura’s normal end to end encrypted cloud sync, the same as any note. Edit Agents/Claude/CLAUDE.md on one machine, and once cloud sync carries the change across, the other machine picks it up: the desktop app applies it automatically through auto-sync, or you can run jotura agents sync from the CLI yourself. Both surfaces read and write the same files, so it makes no difference which one you used to make the change or which one applies it.

See The agent surface for the three-way reconciliation model, the full registry of runtimes, and every CLI flag, including --item for syncing a single item at a time, which is what the conflict buttons above use.

Advanced: Files & folders

These are the default locations for new notes and imported documents.

SettingEffectDefault
Default new-note directoryWhere new notes are created, relative to the vault root. Leave it blank to use the root itself.Blank, meaning the vault root
Default document folderWhere documents you drop or paste into the app are stored, relative to the vault root.attachments
Confirm before deletingShow a confirmation dialog before moving a note to the trash.true

Deleting from the app is one way. A deleted note moves into <vault>/.jotura/trash/ rather than the operating system trash, and there is no trash browser in the desktop app. Listing, restoring, and permanently purging a trashed note are CLI-only:

jotura trash list --json

That side is covered in Creating, moving, and deleting.

Advanced: Document conversion

Imported documents such as PDFs, Word files, and spreadsheets are converted to searchable Markdown by a converter bundled with the app. The group header shows an Unavailable badge when that converter is missing, and an <n> failed badge when conversions have failed. With zero failures, which is the normal state, there is no badge at all.

The first row reports the converter itself.

Row labelWhen it showsWhat it says
ConverterThe converter is present.Its value reads Ready.
Conversion unavailableThe converter is missing.Documents still import, but stay un-searchable until the converter is present. Reinstalling Jotura restores it.

That second row is the one to look for when an imported document never becomes searchable.

One real setting sits below it, and it is always visible.

SettingEffectDefault
Allow unsandboxed conversionConvert documents without operating system sandboxing on machines where no sandbox is available. Off by default, which means conversion is skipped rather than parsing an untrusted file with your full account privileges. Only turn it on if you trust every document you import.false

Everything else in the group is conditional. The status row and the five action rows appear only when the converter is present, a vault is open, and that vault has at least one imported document. In a vault with no documents you get a No documents in this vault row instead, reading Conversion options appear once a document is imported.

Row labelButtonWhat it does
Conversion statusnoneReads <n> converted · <n> failed · <n> pending for the open vault.
Reconvert stale documentsReconvert staleRe-runs conversion for documents whose source changed or whose conversion is out of date.
Reconvert all documentsReconvert allRe-runs conversion for every document in the vault. This is heavy on a large vault.
Convert pending documentsConvert pendingRuns the background sweep now for anything missing a searchable copy.
Retry failed conversionsRetry failed conversionsRe-runs the failed documents, bypassing the automatic backoff. Failures are usually corrupt or password protected files.

The last row is nested inside a disclosure that appears only when something has failed. Its toggle reads Show <n> failed…, expands to the list of failed paths, and then reads Hide failed. While a reconversion runs, a Progress row counts documents converted, and when one finishes a Result row reports the outcome.

See Documents for how importing works.

Advanced: Diagnostics

Everything in this group stays on your machine. It has two halves: sync diagnostics at the top, then the support report and the log path.

Sync diagnostics

These rows appear only when three things are true at once. You are signed in, a vault is open, and sync is configured on that vault. Signing in with a vault that has never had sync enabled shows none of them.

While the first reading is in flight you see a single Loading row reading Fetching sync state…. After that, the rows refresh every two seconds.

Row labelWhat it shows
AccountThe email this device is signed in with.
Device IDThe identifier of this install. Both devices must be signed in to the same account.
Vault IDThe server vault this device points at. Two devices must show the same ID for changes to sync.
Pending opsLocal changes queued for the next push. This should drop to zero shortly after you edit.
Server versionThe last manifest version this device pulled.
Last pushHow long ago the last push ran, with the number of operations in the helper.
Last pullHow long ago the last pull ran, with the number of operations applied.
Last push errorShown only when a push has failed. The message is in the helper.
Last pull errorShown only when a pull has failed.
Re-pull from serverThe button reads Force re-sync. It resets the local cursor and re-fetches the entire manifest from the server, keeping your local pending edits. It asks you to confirm first, then reports what it applied in a Result row.

Use Force re-sync when changes from another device are not appearing. Version history covers what the server keeps per note.

Support report and log

Row labelButtonWhat it does
DiagnosticsCopy diagnosticsBuilds a support report and copies it to your clipboard. The button briefly reads Copied, or Copy failed if the clipboard write did not work.
Log filenoneShows the full path to the app’s log file, or (unavailable) if there is no resolvable path.

Read the report before you paste it anywhere public. It opens with the app version, your operating system, and your architecture. It then records whether a vault is open, whether sync is enabled, whether the sync key is loaded, and the vault’s name. It ends with the converter’s availability and version, the sandbox kind in use, the conversion counts, and the last 200 lines of the log.

It contains no filesystem paths, no note contents, and no keys. Nothing is sent anywhere, so you paste it into a bug report yourself.

The CLI has a broader health check that covers the same ground and more:

jotura doctor --json

Both are described in Troubleshooting and Watching and diagnostics.

Advanced: Command-line tool

Every desktop installer ships the jotura command line tool alongside the app. This group puts it on your PATH, and it appears on macOS, on Windows, and in the Linux AppImage build. It is absent in the Linux .deb build, where the tool already lands on the standard PATH.

The group has two rows. Status reports where the tool currently is, and the action row’s button reads Install or Reinstall depending on that status.

StatusMeaning
Not installedThe tool is not on your PATH yet.
Installed (<path> is on PATH)Windows only. The install directory is on your user PATH.
Installed at <path>The link or copy points at the binary bundled with this app.
Installed at <path> (points elsewhere; reinstall to update)Something else is answering to jotura, such as a separate build. Reinstall to point it at this app’s binary.
Unable to detectThe app could not read the install state.

What the action does depends on your platform.

PlatformWhat happensHow to remove it later
macOSCreates a symlink at /usr/local/bin/jotura. This needs administrator rights, so macOS prompts you for your password.sudo rm /usr/local/bin/jotura
WindowsAdds Jotura’s install directory to your user PATH. New terminals pick it up automatically. If it fails, a Last error row reports Could not update PATH.Edit PATH under System Properties, Environment Variables.
Linux AppImageCopies the binary to ~/.local/bin/jotura. Make sure that directory is on your PATH.rm ~/.local/bin/jotura

On Windows and on the Linux AppImage, the app also offers to do this once at startup, but only when the tool is not already installed. That prompt records that it has been shown whether you accept or decline, so it never asks a second time and it cannot be reset from Settings. Use this Settings group if you dismissed it and later changed your mind. On macOS this group is the only offer.

Full setup notes are in Install and setup.

About

The About section shows the Jotura logo and wordmark, the installed version number, and the tagline Local-first markdown notes. There are no controls in it.

Where settings are stored

Settings are a single JSON file in your operating system’s configuration directory.

PlatformPath
Windows%APPDATA%\jotura\settings.json
macOS~/Library/Application Support/jotura/settings.json
Linux~/.config/jotura/settings.json

If no configuration directory resolves at all, the app falls back to ./jotura/settings.json, relative to the process working directory. That is rare, and it is worth checking if your settings appear to live nowhere.

Three more things about that file are worth knowing.

The file is written in place, without a temporary file and rename, and it is not flushed to disk explicitly. If the app is killed part way through a write, the file can be left truncated. On the next start an unparseable settings file is silently replaced by the defaults, so the symptom of that failure is your preferences resetting rather than an error message.

Field names are camelCase and each missing field falls back to its own default, so a settings file written by an older version still loads. There is one migration in place: a stored API address pointing at the retired staging server is rewritten to https://api.jotura.io on load. The JOTURA_API_URL environment variable overrides the address for a single run and is never written back to the file.

The frontend applies your change optimistically and does not surface a failure from the backend write. If a change does not survive a restart, check that the settings file is writable.

Preferences stored outside settings.json

Some preferences live in the app’s own browser storage instead. They are per device and are not synced.

PreferenceHow you set itRange and default
Sidebar widthDrag the divider between the sidebar and the editor. The handle is also keyboard reachable: Tab to it, then ArrowLeft and ArrowRight resize in 16 pixel steps, saved immediately.200 to 600 pixels, default 300
Right sidebar widthDrag the divider on the right side. This one is mouse only, with no keyboard equivalent.No fixed range documented
Right sidebar collapsedToggle the right sidebar.Collapsed by default
Recently closed tabsBuilt automatically as you close tabs.20 entries per vault
Show autosaves in historyThe Autosaves filter chip in the version history tab.Off until you turn it on
History diff layoutThe Unified and Split toggle in version history, covered in Version history.Unified

What the CLI shares

The jotura CLI reads some of the same state, which is why the two surfaces agree without any extra configuration.

Shared stateHow the CLI uses it
Last opened vaultWhen you do not pass --vault and JOTURA_VAULT is unset, the CLI resolves the vault from the desktop app’s lastVaultPath in settings.json.
Sync key cacheBoth surfaces cache the per vault sync key in the same session directory under your configuration directory. Signing in to sync from either one resumes it for the other.
TemplatesBoth read and write .jotura/templates/ in the vault.
Semantic indexThe CLI queries the index the desktop app builds. It never indexes.
App versionjotura doctor reports the desktop app version it finds in settings.json.

The CLI has environment variables of its own, including overrides for the session directory and the model directory, and those are covered in Install and setup. Its exit codes and JSON conventions are in Exit codes and JSON output.