HermesMarkdown Documentation

How can we help?

Everything HermesMarkdown does, feature by feature. Plain .md files, saved straight to your machine.

Get Started

Open a folder or a browser vault and write your first file.

Installation

HermesMarkdown is a web app — there's nothing to download or install in the traditional sense.

Every modern browser can run HermesMarkdown. What differs is where a vault can live: opening a folder on disk needs the File System Access API, which only Chromium-based browsers implement. Everywhere else, you use a browser vault.

Chrome / Edge / Brave / Arc / OperaDisk folders, browser vaults
FirefoxBrowser vaults
Safari (macOS, iOS, iPadOS)Browser vaults

Install it as an app: use Install in the address bar (Chromium), Add to Dock (Safari on macOS), or Share → Add to Home Screen (iOS). The installed app opens in its own window and starts without a network connection once it has been loaded online.

Browser vaults

A vault stored in the browser's private storage — for Safari, Firefox, phones, and tablets.

Choose Create Vault… from the vault menu or the start screen, pick In this browser (browsers that can't open folders skip this step), name the vault, and click Create Vault. It works like any other vault — folders, WikiLinks, tasks, attachments — but the files live inside this browser's storage instead of a folder you can see on disk.

Browser vaults…Create, reopen, rename (pencil), or delete browser vaults
Rename vault…Rename the open browser vault; its files stay as they are
Export vault as zipDownload every file as a backup (any vault)
Export vault to folder…Copy the vault into a folder on disk (Chromium)
Import files into vault…Add a zip or files
Import folder into vault…Add a whole folder (desktop browsers)

Imports never overwrite: a file whose name is taken is saved as name (1).md. To move a vault to another browser or device, export it as a zip there and import the zip into a new browser vault.

Need the same files on several devices? Use a folder on disk that a sync service or git keeps in step.

Create a vault

A vault is any folder on disk that HermesMarkdown reads and writes Markdown files in directly.

Choose Open Vault from the command palette and pick an existing folder, or create a new one in the picker.

The browser grants HermesMarkdown direct read/write access to that folder for the session. Nothing is uploaded — files stay where they are on disk.

Everything in the folder — your files, your subfolders — is yours; HermesMarkdown never restructures it. The only thing it adds on its own is an assets/ folder at the vault root, created the first time you paste or drop an image into a file.

Opening folders on disk needs a Chromium-based browser. In Safari and Firefox, choose a browser vault instead.

New vault

Create a fresh, empty vault — name it, pick a location, and start writing.

Choose New Vault from the command palette.

Type a vault name (this becomes the folder name on disk) and click Choose parent folder to pick where the folder will be created, then click Create Vault.

HermesMarkdown creates the folder and opens the vault, with its files in the sidebar. No example content is added.

Your first file

Start typing. On its first save the file goes into your New Files folder, named after its first line.

Press CTRL+ALT+N, click New file at the top of the sidebar, or choose New File from the command palette. A blank file opens, ready to type, with no name prompt.

The first time you open HermesMarkdown there is nothing to set up: you land in the editor on a blank file, ready to type. Once it has text, a bar at the bottom asks where your files live. Choose Folder… picks a folder (you can make a new one in the picker) and saves the note there; in browsers that can't open folders it reads Keep Files in This Browser and creates a browser vault. Not Now shrinks it to a small “Not saved to a folder” mark; until you choose, the file is kept only in this browser. CTRL/CMD+S asks the same question.

The note is saved to your vault once you finish the first line, or when you press CTRL/CMD+S. The file is named after the first line, for example Trip ideas.md. If the first line has no usable text, the date and time are used instead, like 2026-09-28 1432.md. An existing file is never overwritten: a taken name becomes Trip ideas (1).md, so nothing you typed is lost.

The file goes into your New Files folder (the vault root unless you set one in Settings → Files), with no dialog. Move it anywhere later from the file tree.

A file you leave empty is never saved, so no empty files pile up in your vault. Renaming the first line later does not rename the file; use Rename File for that.

Default folder for new filesVault root · Settings → Files → Vault → New Files Folder
Start in a specific folderNew File in that folder's menu in Files
Create from a searchType a title in the palette, then Create "…"

No template or metadata is added. Want frontmatter? Type /frontmatter to insert a starter block. See Frontmatter. Autosave can be changed under Settings → Files → Autosave: After Delay (the default, two seconds after you stop typing) or Manual Only. With autosave set to manual, a new file is saved only when you press CTRL/CMD+S. To get a copy of a file outside your vault, run Export as Markdown: it always downloads the file as a .md file and never changes the saved file.

Pinned

Keep what you come back to at hand: files, folders, tags and pages, first in the sidebar.

Pin a file or a folder by right-clicking it in the sidebar's Files and choosing Pin. A file can also be pinned with Pin File in its right-click menu (on the button at the top of the page), the Pin File command, or CTRL/CMD+D on it in the command palette. Pin a tag with the Pin button beside its name on the Tags page, and a page (All Files, Tags, Tasks, Templates, Trash or Settings) with Pin Page to Sidebar… in the palette. With two or more vaults pinned, Switch Vault… in the palette jumps between them.

Everything you pin is listed in the sidebar's Pinned section, at the top, in the order you pinned it, up to nine. A click opens it: a folder opens in Files, a tag on the Tags page.CTRL/CMD+1–9 opens the pin in that place from anywhere; each row shows its key. Drag rows to reorder them, or press Alt+↑ / Alt+↓ on one. Click a row's icon (or right-click the row) for its menu: it sets an emoji icon, shown only there, or unpins it. A pin whose file or folder was moved or deleted outside the app shows faint, and can be unpinned; renaming or moving it in the app keeps it pinned.

Pins are kept in this browser, for each vault, and never change the vault: another device or browser has its own. Pinned files still lead the command palette before you type anything. In the palette you can pin commands too (CTRL/CMD+D on a command, up to five); those are the palette's own.

Editor layout

A full-screen editor with a slim header. Everything else is in the command palette and a few dedicated views.

There's no formatting toolbar above the text. Formatting happens through Markdown syntax, keyboard shortcuts, and the slash command menu.

There's no toolbar. A quiet header sits at the top left of the page: the file's folder (a deep one shows its first and last folders, with the rest folded into …), and its name. It stays put while you type. A dot after the name shows the save state: grey while the file has unsaved changes, pulsing while it saves, red if it couldn't save. With autosave on it stays hidden while autosave is about to save, and shows only if a save runs late or fails. Hover the dot for the save button and click it to save, or to try again. Click the name to rename the file in place: press Enter or click away to keep the new name, Esc to back out. The search bar in the top-right corner (or CTRL/CMD+P) opens the command palette, where every file and command is: Save, Copy Contents, Export as PDF or HTML, Pin File, Settings, Documentation, Ask AI and the rest. The editor keeps up to 20 files open behind the one in front; switch between them from the command palette (CTRL/CMD+P). Opening another closes the one you looked at least recently, never one with unsaved changes. Click the file's name at the top, or right-click it, for its menu: Copy Contents, Pin File, Rename…, Move to Trash, and Close, Close Others or Close All. While the sidebar is hidden, its button sits in the top-left corner.

Search is the way around: the search bar in the editor's top-right corner, the same one at the top of every page, or CTRL/CMD+P anywhere (or press Shift twice), opens the command palette to find a file, run a command or go to a page: Home, All Files, Tags, Tasks, Templates, Trash or Settings. CTRL/CMD+SHIFT+F searches the text of your files. Every page has ← Editor at the top left to come back to the file you were on.

The sidebar is your library, the same on every editor page: its header names the vault (click it to switch to a recent vault or open another) beside New file and the button that hides it; below come Pinned (up to nine pins, opened with CTRL/CMD+1–9) and Files, the vault's tree, with a Search field above it: type part of a path, or a regular expression (projects/.*plan), and the tree shows only the files that match, their folders open; Esc clears it. Its header has Settings, and the Documentation icon sits beside the command search. For an overview of a long note, turn on the Outline (CTRL/CMD+SHIFT+M, or Settings → Editor → View): the file's headings (in a code file, its functions, classes and other symbols) in the editor's bottom-right corner, the section you're reading marked; click one to jump there. A line sets each section apart, and each has a chevron to fold or unfold it. It sits beside the page and pushes it over rather than covering it.

Show it with the Sidebar button at the top left and hide it with the button in its own header, Escape inside it, or toggle it with CTRL/CMD+\, CTRL/CMD+ALT+S or the Show Sidebar command, and drag its edge to resize it (double-click the edge to reset; with the edge focused, the arrow keys resize it too). Folded sections stay folded.

Every place has its own address, so a refresh or a bookmark brings you back to it: the file in front (/editor?file=notes/plan.md), Tasks, Templates, Trash, All Files, a tag on the Tags page, and each Settings section.

Show Files (CTRL/CMD+SHIFT+E, or CTRL/CMD+B when the cursor isn't in the editor, where it means Bold) shows the sidebar if it's hidden and puts the keyboard in Files, ready to browse, rename, move or delete. On a phone, where there's no sidebar, it opens Files full screen. Tasks has its own view; file search, tags, and headings are available through the command palette.

Files offers the same actions everywhere, in the same order: New File and New Folder, at the top and in every folder's right-click (or ⋯) menu. To start from a template, type /template in the new file. There's no Refresh button: files you add, delete or move outside HermesMarkdown show up on their own (straight away in Chrome and Edge, otherwise when you come back to the window).

SidebarShow: Sidebar button at the top left / Hide: button in the sidebar's header or Escape / CTRL/CMD+\ or CTRL/CMD+ALT+S
Show FilesThe sidebar's Files (full screen on a phone) / CTRL/CMD+SHIFT+E
Quick switcherCTRL/CMD+P or SHIFT SHIFT
Command paletteCTRL/CMD+SHIFT+P
Search file textCTRL/CMD+SHIFT+F
Palette modes# vault tags · > commands · ! tasks · @ current-note headings · / file text
Commands on or offThe > button in the search field
Files controlsNew file, new folder, and file actions
Ask AI (the AI companion)CTRL/CMD+J
Keyboard shortcutsShow Keyboard Shortcuts command

To be alone with the text, close the sidebar (CTRL/CMD+\); it stays how you leave it. See Focus to dim everything but the paragraph you're writing.

Keyboard shortcuts

The full reference, grouped by where you're using it.

Editor

SaveCTRL/CMD+S
BoldCTRL/CMD+B
ItalicCTRL/CMD+I
StrikethroughCTRL/CMD+SHIFT+S or CTRL/CMD+SHIFT+X
Inline codeCTRL/CMD+SHIFT+M or CTRL/CMD+E
Plain text (removes a heading, list or quote)CTRL/CMD+ALT+0
Heading 1–6 (press again to remove)CTRL/CMD+ALT+1…6
Numbered list (press again to remove)CTRL/CMD+SHIFT+7
Bulleted list (press again to remove)CTRL/CMD+SHIFT+8
Quote (press again to remove)CTRL/CMD+SHIFT+9
LinkCTRL/CMD+ALT+K
Code blockCTRL/CMD+ALT+C
Format Code (code file, or the code block at the caret)SHIFT+ALT+F
Insert a tableCTRL/CMD+SHIFT+I
Find and replace in fileCTRL/CMD+F
Fold / unfold current sectionCTRL/CMD+SHIFT+.
Unfold all sectionsCTRL/CMD+SHIFT+,
Add next match to the selectionCTRL/CMD+D
Select all matchesCTRL/CMD+SHIFT+L
Add a cursor (not on a link or task)CTRL/CMD+CLICK
Column selectionALT+DRAG
Undo / redoCTRL/CMD+Z / CTRL/CMD+Y
Emoji menu{ or :name
Indent / outdent list item (4 spaces a level)TAB / SHIFT+TAB
Line break (lists and quotes are not continued)ENTER
Cycle task statusCTRL/CMD+ENTER
Open helper at cursor (link, date, diagram, image)CTRL/CMD+SHIFT+ENTER
Ask AI (the AI companion)CTRL/CMD+J
Keyboard shortcutsCTRL/CMD+?
Dismiss / closeESCAPE

Files

Show FilesCTRL/CMD+SHIFT+E
New fileCTRL+ALT+N
Open TasksCTRL/CMD+ALT+T
Open TemplatesCTRL/CMD+ALT+P
Open SettingsCTRL/CMD+,
Close the file in frontCTRL/CMD+ALT+W
Open a pinned item (1–9, in the Pinned order)CTRL/CMD+1–9
Back to the previous file (again to return)CTRL/CMD+0
Outline on / offCTRL/CMD+SHIFT+M
Show / hide sidebarCTRL/CMD+\, CTRL/CMD+ALT+S or CTRL+[
Sentence focus on / offCTRL/CMD+ALT+F

Table

Next / previous cellTAB / SHIFT+TAB
Cell below (adds a row at the end)ENTER
Move across cells, leave the tableARROWS
Leave the tableESCAPE
Insert row belowCTRL/CMD+ENTER
Delete rowCTRL/CMD+SHIFT+BACKSPACE
Move row up / downALT+↑ / ALT+↓
Insert row above / belowCTRL/CMD+ALT+↑ / ↓ or CTRL/CMD+ALT+[ / ]
Insert column before / afterCTRL/CMD+ALT+← / → or CTRL/CMD+ALT+- / =
Move column left / rightCTRL/CMD+ALT+SHIFT+← / →
Row, column & table actionsRIGHT-CLICK a cell

Navigation

Open Link or DateCTRL+CLICK
Cycle task statusCTRL+CLICK [ ]
Cycle lifecycle tagCLICK ‹ #tag ›

Command Palette

Open Quick SwitcherCTRL/CMD+P or SHIFT SHIFT
Open Command PaletteCTRL/CMD+SHIFT+P
Search file textCTRL/CMD+SHIFT+F
FilterKeep typing
Switch between files and commandsCLICK >
Navigate results↑ / ↓ or TAB
Pin / unpin the selected itemCTRL/CMD+D
Regex on / off in text search (/)ALT+R
Run commandENTER
DismissESCAPE

Editor

Writing, Markdown marks, tables, templates, tabs, and PDF export.

Writing

Write Markdown with inline highlighting and click actions.

You always edit the Markdown source, styled as you type: headings, emphasis, links, tags and dates are highlighted in place, and tables render as an editable grid. Font and theme live under Settings; word wrap, line numbers and invisibles (¶ on empty lines, dots for spaces) are command palette toggles (Toggle Word Wrap, Toggle Line Numbers, Toggle Invisibles).

The text fills the whole editor by default. For a column about as wide as a page, so lines stay easy to read on a wide screen, turn off Full Width under Settings → Appearance → Typography, or run Toggle Full Width from the command palette. Changing the text size never moves the column's edges; it only changes how much fits on a line.

Dates (2026-09-27, 27/09/2026, [[2026-09-27]], @due(…), a task's @started(…) and @done(…)) and @priority annotations show as pills around their text. CTRL+Click a date to open the date picker.

Press CTRL/CMD+F to find and replace in the file, with match case, whole word and regex options. CTRL/CMD+ALT+1…6 turns the line into a heading (press it again to remove it), CTRL/CMD+ALT+K wraps the selection as a link and CTRL/CMD+ALT+C wraps it in a code block, or removes the block around the caret. CTRL/CMD+D adds the next match of the selection as another cursor, CTRL/CMD+SHIFT+L selects every match, and ALT+drag selects a column.

Paste or drop an image and it's saved to the vault's assets/ folder and linked with ![](assets/…). Paste comma- or tab-separated data outside a table and HermesMarkdown offers to convert it into a Markdown table.

Paste rich text from a web page, Google Docs, Word or an email and it arrives as Markdown: headings, lists, links, tables, bold and italics, cleaned up as it goes. A toast offers Paste as plain text if you wanted the bare text instead, and CTRL/CMD+SHIFT+V always pastes plain text. Pastes into code blocks, bare URLs and copies with no formatting paste as usual.

Shortcodes

Type a shortcode and it expands in place. Type { for a menu of every emoji, and keep typing a name or keyword to narrow it ({thumbs, {flame), or use /emoji in the slash menu. Any emoji's name expands too, like {red_heart}.

{date} · ..d · {time} · {datetime}Current date / time
..tomorrow · ..yesterdayRelative dates
{iso} · {unix} · {day} · {week} · ..logTimestamps & log prefix
{todo} · {done} · {table}Task line / starter table
{check} {error} {idea} {warn} {fix} {bug} {star} {file} {question} {info} {pin} {link} {fire} {rocket} {party} {target} {lock} {key}Emoji
calc(2*21)=Inline calculation

For running totals that keep their working, use the inline calculator instead.

Vim mode

Use familiar Vim motions and editing modes in the source editor.

Turn on Vim mode under Settings → Editor (or the Toggle Vim Mode command). Outside Insert mode, a small pill at the bottom right of the file shows the current mode and any keys of a command you haven't finished. Typing : or / opens the command line in that pill.

Focus

Dim everything but the paragraph or sentence you're writing.

Choose a level under Settings → Editor → Focus, or run one of the Focus: … commands from the command palette. CTRL/CMD+ALT+F (Toggle Sentence Focus) switches sentence focus on, and back to the level you had before. As the caret moves from one sentence to the next, the old one fades out and the new one fades in.

OffEvery line at full strength (default)
Dim other paragraphsOther paragraphs fade and the caret line stays centered
Dim other sentencesOnly the sentence you're writing stays at full strength

Nothing hides while you type, and there's no toolbar to hide: only the button at the top of the page, which opens the command palette. To be alone with the text, close the sidebar (CTRL/CMD+\); the page takes its room, and it stays that way across reloads. The sidebar stays open until you close it; turn on Close Sidebar While Writing (Settings → Editor) to have it put away as soon as you type in a file.

At the strongest level, the current paragraph is the run of non-blank lines around the caret. Everything else dims while the editor has focus and returns to full strength when you click away. Typing, deleting, undo/redo and moving with the keyboard keep the line centered; clicking or selecting with the mouse never scrolls the view.

Turn on Word Count in Settings → Editor (or run Toggle Word Count) to show the file's word count faintly in the bottom-left corner of the editor. It steps aside while you type and comes back when you pause or move the mouse. Frontmatter and Markdown marks on their own, like # or -, aren't counted.

Markdown marks

Marks show where you're writing and step aside everywhere else.

Markdown shows where you're writing: bold, italic, strikethrough and inline-code marks appear, dimmed, only around the word or code span under the caret (or a selection), so the rest of the line stays formatted. A heading's # and a quote's or callout's > hang faintly in the margin, so those lines don't move. Lists look just like their Markdown: the marker before the text, nested items indented by their own spaces, drawn as wide as a letter (Tab adds four), so copying a list gives you what you see. A task's marker takes its status colour. Typing - at the start of a line adds the space after it, so you can go straight to the item; keep typing dashes for a --- rule. Tags and dates keep their chip while you edit the text inside it.

**bold**, *italic*, ~~strike~~, `code`Marks show while the caret is on or next to the word, dimmed; hidden elsewhere
# Heading, > QuoteMarks show on the caret's line, faint, in the margin; hidden elsewhere
- List itemStays as typed: a faint marker before the text, nested items indented by their spaces
- [ ] Task, 1. [ ] TaskStays as typed, the marker coloured by its status as on the Tasks page, so you can write the status ([/], [!], [x]); CTRL+Click it to go To Do → In Progress → Done
1. Numbered itemStays as typed, the number faint
> [!note] TitleShown as a rounded, tinted card; the > and [!note] show on the caret's line, so edit the type in place
> ## Heading, > - item, > | table |Inside a callout, headings, lists, tasks, tables, code and quotes look as they do outside it
> [!note]- TitleStarts collapsed when the file opens (+ starts expanded); folding with the chevron writes the sign for you
# Heading (fold)Hover a heading for a chevron in the margin: it folds everything under it up to the next heading of the same or a higher level, and a … marks the fold. Ctrl/Cmd+Shift+. folds or unfolds the caret's section, Ctrl/Cmd+Shift+, unfolds every section. Folds aren't saved in the file; a file keeps them while you switch away and back during the visit
<details><summary>Title</summary> … </details>Folds like a callout: the summary stays, the body folds. Starts collapsed unless the tag says open; the chevron writes open for you
```js … ```Fences stay as typed, language included
#tag, 2026-10-08Stay chips while you edit them

Tables

Tables always render as a clean grid you edit like a spreadsheet: click a cell and type. The pipe syntax stays out of sight.

Type /table in the slash menu, or the {table} shortcode. Both drop a 3×2 starter table and put you in its first cell.

Click any cell to edit it in place. Tab moves to the next cell, and tabbing out of the last one adds a row. Enter moves down a column. The arrow keys cross cell edges and step out of the table at its borders. The file is updated as you type, so undo and autosave always match what you see. The file on disk is still a plain Markdown pipe table.

A focused cell shows its raw Markdown, such as **bold** or links. Every other cell shows the rendered result. Ctrl/Cmd+B, I and E wrap the selection in bold, italic or code, and Ctrl/Cmd-click opens a link. A pipe you type is stored escaped, so it can't split the cell.

While you edit a table, column letters (A, B, C…) and row numbers (1, 2, 3…) appear around it, like in a spreadsheet, with the current cell's row and column highlighted. Click a letter or number for that column's or row's menu, or right-click any cell (long-press on touch). Nothing is drawn on top of the cells.

RowInsert above / below, move up / down, delete
ColumnInsert left / right, move, sum, sort, align, delete
TableEdit as Markdown, copy as CSV or JSON, delete (confirm with a second click)

Paste a range copied from a spreadsheet (or multi-line CSV) into a cell. It fills the cells from there, adding rows and columns as needed. Smart sorting recognizes dates, currency and plain numbers. Each structural change is a single undo step.

If a table looks wrong (say, a line you typed just below it turned into a row), choose Edit as Markdown from the menu or press Ctrl/Cmd+Shift+Enter in a cell. The table shows as plain pipe text so you can fix it by hand, and turns back into a grid when you move the caret out of it.

Formulas

Start a cell with = to compute it, like a spreadsheet. The cell shows the result, and clicking it shows the formula for editing. Columns are lettered A, B, C… and the header is row 1, so the first data row is row 2, matching the letters and numbers shown around the table while you edit. Sum column in the table menu adds a totals row for you. Rows you add at the end (Tab or Enter) go above the totals row, and its ranges grow to include them.

Cell & range=B2 · =SUM(B2:B5) · =AVERAGE(B2:D2)
FunctionsSUM, AVERAGE, COUNT, COUNTA, MIN, MAX, ROUND, ABS, IF, AND, OR, NOT, CONCAT
Another table=SUM(Income!B) — named by the heading above it
Another file=[[Budget]]!B5 · =[[Budget#Income]]!B5

Amounts like $2,000 or 1000 RON count as numbers, and totals keep their currency. So does a share of an amount (=B2*10%), while a ratio of two amounts (=C2/B2*100) and a count are plain numbers. Errors show spreadsheet-style (#REF!, #DIV/0!, #CIRCULAR!, #NAME? for an unknown function, #VALUE! for text where a number is needed). Rows containing a formula are treated as summary rows and are never moved by sorting. Inserting, deleting, moving or sorting rows and columns updates the references in the table's formulas so they keep pointing at the same cells; a reference to a deleted cell becomes #REF!.

A table takes its name from the heading right above it, with only blank lines between them. Text between the heading and the table leaves the table without a name, and formulas that refer to it show #REF!. Put a description below the table instead.

AI features know this syntax too. See AI & table formulas.

Inline calculator

Type math into any file and see the answer at the end of the line, with named values you can reuse further down.

Write an expression on its own line and its result appears in faint text at the end of that line. Give a value a name with name = … and use it on any later line of the same file. Names can be several words and ignore case, so Monthly rent and monthly rent are the same value. In this example you type the left side; the editor adds the = … results:

rent = 1200
utilities = 180
rent + utilities          = 1380
rent + utilities + 15%    = 1587
+ − * / ( )Arithmetic
450 + 15%= 517.5 · percent of the left side
15% of 200= 30
1,200 * 3= 3600 · thousands separators
rent = rent + 100Redefines a value from its old one

Only lines that are math get a result. Prose, headings, plain numbers (1200), simple definitions (rent = 1200), dates and phone numbers are left alone, and so is everything in frontmatter, code blocks and $$ math blocks. List items work: - rent + utilities still shows its total. Comparisons such as a == b or a >= b never define a value.

Results are rounded to four decimals and have no thousands separator. If a line can't be worked out, for example because it uses a name that isn't defined above it, it simply shows no result.

Code, diagrams & math

Fenced code blocks get real syntax highlighting, and Mermaid diagrams and LaTeX math render right in the file.

Any fenced code block (/code in the slash menu, or typing ```` ```lang ```` yourself) is syntax-highlighted as you type, for any language CodeMirror recognizes from the fence's language tag. Inserting one from the slash menu offers a language picker.

Format Code (SHIFT+ALT+F, or the palette) tidies the code block under the caret with Prettier: JavaScript, TypeScript, JSON, CSS, SCSS, Less, HTML, Vue, YAML and GraphQL. It follows the nearest Prettier config in the vault (see Code files), runs only when you ask, and is one undo step.

Insert a diagram with /mermaid or type a ```mermaid fence. Once the fence is closed, the editor shows the rendered diagram in its place. Double-click it (or use its Edit button, or press CTRL/CMD+SHIFT+ENTER with the cursor next to it) to edit the source with a live preview. From there, Open viewer lets you zoom, fit-to-width, and download the SVG. Syntax errors show in place of the diagram.

Display math works the same way: put LaTeX between $$ lines (or on one line, as $$ E = mc^2 $$), or in a ```math fence, and it renders with KaTeX.

```mermaid
graph TD
  A[Start] --> B{Decision}
  B -->|Yes| C[Do it]
  B -->|No| D[Skip it]
```

Boards

Sketch on an infinite canvas: freehand, shapes, arrows and text, saved inside a Markdown file.

Open the command palette and run New board (with a vault open). It asks for the board's name, creates Sprint plan.board.md (for a board named Sprint plan) in your New Files folder and opens it as a canvas. If the name is taken you get Sprint plan (1).board.md. To link a new board from the file you're writing, type /board: it asks for the name, creates the board without leaving the file and inserts a link to it (a board that already has that name is linked as it is). You can also start one from an empty note: click the Board pill under the first line (from a fresh, unsaved note it asks for a name and creates a new board file), or pick Board when a missing link asks how to create its file.

A board is still a Markdown file. The drawing is stored in a fenced block, so you can write a caption above it, add [[links]] and tags, and it syncs like any other file. Drawing changes are saved automatically, like text.

Edit as MarkdownRight-click the board's title (or use the palette's Edit Board as Markdown) to see the raw file
Open as BoardSwitch back from the raw file to the canvas

Embedding files

Show another file, a CSV table, an image or a code file inside this one: ![[Note name]] or /path on a line of its own.

Put ![[Note name]] on a line of its own and the file's text shows right under it, read-only. The line stays as you typed it. Add a heading to show only that section: ![[Roadmap#Q3 goals]] shows the Q3 goals heading and everything under it, up to the next heading of the same level.

A line holding only a slash and a file name works too, and not only for files:

/Chapter 1.mdThe file's text
/data/sales.csvA table; the first row is the header
/assets/chart.pngThe image (png, jpg, gif, webp, svg, avif)
/scripts/auth.tsThe code with syntax colours (most languages, plus txt and log); long files show their first 400 lines

A file path is looked up next to the file first, then from the vault root. Start a line with / and type the start of a file's name: the rest of the best match appears in faded text, and Tab (or →) accepts it. The slash menu also lists matching notes; picking one writes its path for you. Or type /embed anywhere and pick Embed file: it puts a / on a line of its own (splitting the line if you were mid-sentence) and opens the menu there, so you can choose a file or type a file's path.

Embeds stay current: a file open in the editor shows its unsaved edits, and other files are checked again whenever you come back to the window, so a CSV you just changed in a spreadsheet app shows its new rows. Click a file's name above its embed to open it. Private files stay hidden until you show them, and a board shows its caption.

To build one document from many, such as a book whose main note holds only /01-introduction.md, /02-analysis.md and so on, use Export as PDF or Export as Compiled Markdown: every embed is filled in, embeds inside embedded files too, CSV files become tables, code files code blocks, and images keep working. A file that would end up inside itself is left as its line, so nothing loops.

Slash menu

Type / at the start of a line or after a space for a searchable menu of insertable content, plus AI actions when AI is configured.

The menu opens grouped by kind. Keep typing after / to search: a command is found by its name, any word of it, a short alias (/h1, /todo, /ul, /hr, /yaml, /url) or a word of its description, best match first. ↑/↓ to move the selection, Enter to insert, Escape to dismiss.

The basic blocks turn the current line into that block and keep its text: type /h2 on an empty line for a new heading, or at the end of a line to turn it into one.

Text · Heading 1–3Plain text or a heading
Bulleted · Numbered · To-do listA list item or checkbox
Quote · DividerA quotation, or a line between sections
EmojiPick from the emoji shortcodes
Link · WikiLinkOpen the link dialogs
DatePick a date from a calendar
TaskChecklist task with status, due date & tags
TableStarter table
Code · MermaidFenced code / diagram block
BoardName a new drawing board and link it at the caret (with a vault open)
A file's nameAt the start of a line, matching files are offered to embed as /path.md
Callout · CollapseCallout / collapsed callout
FrontmatterInsert or reveal the YAML block
Template (/template, /tpl)Insert a template from your vault
Ask AIOpens the AI companion; only when AI is configured

Templates

A template is a file you start other files from. Fields like Today's date or Ask: Owner fill in each time you use it.

Make a template

Run New template… from the command palette, or press New template on the Templates page. Pick a file or a folder template, give it a name, and start blank or from an example; it opens so you can add what you need. Nothing is overwritten. See the Templates page.

Or turn a file you already like into one: run Save as template… from the command palette, or type /save-template in the file. Only a name is asked, prefilled from the note's first heading. The note is copied into _templates/ as a plain .md file.

Edit a template like any note: open it from Files, or hover it in the template list and press the pencil (⌘E / Ctrl+E). The line at the top says Editing template, with a link back to the Templates page. Changes save as you type and apply the next time you use it.

Add fields

A field is a spot that fills itself in when the template is used. Press + Add field in the line at the top of the template, or type /field, and pick one:

Ask a question…Asks you each time, e.g. Owner. Questions you already ask are listed first, so reusing one fills in the same answer
Today's date2026-10-05; any format, see below
Current time14:30
File titleThe new file's title
Year, Month number, Day of the month2026, 10, 05
Day name, Month nameMonday, October; short forms Mon, Oct
Week number, Quarter41, Q4
Title as file nameThe title in kebab-case: auth-spec
ClipboardWhat you last copied
Start typing hereWhere the caret lands
Selected textWhat you had selected when inserting the template
Tomorrow's date2026-10-06; also any other day, week, month or year away
Yesterday's date2026-10-04
Long dateMonday, 5 October 2026
This week's name2026-W41
Blank to fill in…Stays in the new file as a highlighted blank, e.g. Task 1

In a template, fields show as small labelled boxes. Click one to see what's really written in the file. If something won't fill in, such as a misspelled field, the line at the top tells you.

Fill in the blanks

Blanks left by a template show as grey boxes in the new file. Press Tab to select the next one and type to replace it, or Shift+Tab to go back. Clicking a blank selects it too. When none are left, you'll see Template ready ✦. Press Esc to use Tab normally again in that file.

Where new files go

A template only gives a file its text. A file made from a link is named by the link and goes in the link's folder if it has one ([[rfcs/auth-spec]] goes in rfcs/), else in your New Files folder.

Use a template

  • An empty file shows your templates as small buttons under the first line; click one to fill the file. With no templates yet, the built-in examples (meeting notes and a project brief) are offered instead, and New template makes your own.
  • /template in a file inserts a template where you're typing. Click a template to preview it, then Use template, or press ⌘1–⌘9 (Ctrl+1–9).
  • Links: clicking a link to a file that doesn't exist yet, or the From template tab when adding a link, lets you pick a template or a blank file. The template the name points to comes first: one named after the folder (rfcs/ → rfc), one whose name starts it ("Meeting notes 2026-10-05"), or your journal for a date.

Folder templates

A folder template creates a whole set of files at once, such as a project with its folders and starter files. Make one with New template (choose Folder), or by hand: add a folder to _templates/ and put scaffold: true in the frontmatter of its README.md. Everything in the folder is copied: notes, other files and empty subfolders. The README is copied too, without the scaffold line, and opens when the folder is done.

  • Run it from the command palette (New from folder template…, then pick where it goes), or right-click a folder in Files (or the empty space) and choose New from Folder Template….
  • Fields and dates work in file and folder names as well as in notes. A folder called _templates/{{prompt:Client}} engagement/ asks for the client once and creates Acme engagement; {{date:YYYY-MM}} review.md becomes a dated name. Characters a name can't have (such as : or /) become -.
  • It never replaces anything. If the new folder already exists, or two names would end up the same, nothing is created and you are told why. If a write fails halfway, what was made is removed again.
  • Two examples come built in: a Project folder (README, Tasks, Decisions and a Kickoff meeting) and a Research folder (README, Sources and Open questions). Both ask for the folder's name. Use them as they are from New from folder template…, or press Start from this on the Templates page to make your own copy.

Under the hood

Templates are the .md files in _templates/ at the root of your vault, directly or one folder down in a pack. The folder is made the first time you need it. They stay plain text: a field is written {{date}} and a question {{prompt:Owner}}. You can also type these by hand. Typing {{ opens the same field list:

---
status: draft
---
# {{title}}
Owner: {{prompt:Owner}}
{{cursor}}

Dates take a format after a colon, such as {{date:dddd, D MMMM}} (Monday, 5 October) or {{time:H.mm}}, using YYYY YY MMMM MMM MM M dddd ddd DD D HH H mm ss, ww (ISO week), GGGG (that week's year), Q (quarter) and [literal text]. Date math works too: {{date+1d}}, {{date-2w}}, {{date+1m}}, {{date+1y}}, and with a format, {{date+1d:dddd}}. {{selection}} is the selected text. The date parts have short names too: {{year}}, {{month}}, {{day}}, {{weekday}}, {{monthName}}, {{week}}, {{quarter}}, and {{slug}} is the title as a file name. Field names work in any case: {{Year}} is {{year}}. Any other name, like {{task_1}}, is a blank.

This week{{date:GGGG-[W]ww}} → 2026-W42
This month{{date:YYYY-MM}} → 2026-10
This quarter{{date:YYYY-[Q]Q}} → 2026-Q4
This year{{date:YYYY}} → 2026
Last week's file[[{{date-1w:GGGG-[W]ww}}]]

Use these in headings and links, for example in weekly, monthly or yearly files. Frontmatter lines (author, status, …) are copied into each new file. Templates stay out of the Tasks page. The AI companion can write templates for you; see AI templates.

Templates page

Make your own templates with New template, keep them in packs, and start from an example when you like.

Open Templates from the sidebar, or run Open Templates from the command palette. The page is about the templates you make: New template leads, your templates follow, then a few examples to start from. While an action runs, its button shows it's working and can't be pressed again.

New template

New template asks three things: a File or a Folder template, its name, and what it starts from: blank, an example, or for a folder template a folder you already have. A file template can go in a pack: one of yours, or a new one you name right there. A folder template can ask for the new folder's name each time you use it. The template opens as soon as it's made, so you can shape it. Nothing you have is ever replaced.

Your templates

Templates live in _templates/ at the root of your vault. A pack is a folder inside it, like _templates/Work/; templates directly in _templates/ are listed first, under Not in a pack. Edit opens a template itself; changes apply the next time you use it. Delete moves it to the Trash, with Undo. To use a template, type /template in a file, pick one from an empty file's buttons, or from a link to a file that doesn't exist yet.

Each pack has New (New template, already set to that pack), Duplicate (copy the pack under a new name, to change it without touching the original) and Delete (move it to the Trash, with Undo). Packs are ordinary folders, so you can also rename or move them in Files, sync them, or copy one into another vault to reuse it there.

Your folder templates are listed after the packs, by name. Edit opens the folder's README; Delete moves the whole folder to the Trash.

Examples

Meeting notesA note: agenda, decisions, action items
Project briefA note: goal, scope, milestones
Project folderA folder: README, Tasks, Decisions and a Kickoff meeting
Research folderA folder: README, Sources and Open questions

Start from this opens New template on that example, so the template you get is your own copy to change. The examples also work as they are, without copying: from /template and an empty file's buttons, and from New from folder template….

Tasks page

A vault-wide checklist — every checkbox task across every file, on a Board or in four lists: Now, Today, Upcoming and All.

Open it from the command palette (Open Tasks). The page scans every file in the vault for Markdown task lines.

- [ ] taskTo Do
- [/] taskIn Progress
- [!] taskOn Hold
- [x] taskDone
- [-] taskCancelled

A task's status is the character in its box, and nothing else: tags on the line never change it. In the editor the box shows as typed, so you can write the status by hand, like [/] for In Progress (keep one character between the brackets). Ctrl/Cmd+Click on the box or Ctrl/Cmd+Enter cycles To Do → In Progress → Done → To Do (on hold resumes, cancelled reopens), and the command palette has Task: Start, Task: Put on hold, Task: Cancel and Task: Reset to To Do.

Status changes from the box, the shortcut, the palette or the Tasks page date the task for you (a status typed by hand doesn't). Starting it adds @started(2026-10-12) (once: pausing and resuming keeps the first date), and completing it adds @done(2026-10-12), both at the end of the line. Reopening a done task removes @done; resetting it to To Do removes both, as if it was never started. The Tasks page shows them under the task, like Started 2 days ago or Done today, and you can edit or delete them like any other text.

A task can also carry a due date (@due(2026-01-31)), a priority (@priority(high|med|low)), and any number of custom #tags — all stripped from the display text and shown separately under the task. Due dates are color-coded: overdue tasks are flagged in red, tasks due today in amber.

BoardA column per status: To Do [ ], In Progress [/], On Hold [!], Done [x]. The page opens on it
NowIn Progress, then Up Next: the next five to-dos by due date
TodayOverdue, then due today
UpcomingLater due dates, one section per day
AllEvery task, grouped by status or by file

Switch lists with the control under the title; each shows how many tasks it holds, and the page remembers the last one. Now, Today and Upcoming list only open tasks (to do, in progress, on hold). Type in the search field to filter by text, or type # to pick a tag; picked tags show as chips under the field, and a task must carry every one. Search and tags apply to every list. In All, the ⋯ menu groups by status or by file and sorts by due date, priority, status, file or title, ascending or descending.

Click a task's status ring to move it on, as in the editor: To Do → In Progress → Done → To Do (on hold resumes, cancelled reopens). For any other status, right-click the ring (long-press on touch) or use the ⋯ button at the end of the row. The change writes straight back to the source line in the file, no need to open it first. To open its file at that line, click the task text, double-click the row, or choose Open File from the same menu.

On the Board, drag a card to another column to give it that status; it moves at once. Cancelled tasks stay off the board. On a narrow screen the columns scroll sideways; the ring, the menu and swiping work there too.

After a change, the task stays where it is for a moment, already showing its new status, so you can tick off several in a row without the list moving under you; then it moves to its new place. A toast says what changed, with Undo to put the line back exactly as it was, dates included.

On a touch screen, swipe a task. Swipe right to move it forward: Start a to-do, Complete a task in progress, Resume one on hold, or Reopen a done or cancelled one. Swipe left to set it aside: Hold, or Cancel a task already on hold. The action runs once the row passes the point where its label brightens; let go before that to leave the task as it was.

Tags page

Every tag in your vault, how many files carry it, and those files, newest first.

Open Tags from the sidebar, or run Open Tags from the command palette. A tag is an inline #tag in a file, or one listed under tags: in its frontmatter. The page lists every tag with how many files carry it; pick one to see those files, the most recently changed first, and click a file to open it.

The tag you pick is in the address (/editor/tags?tag=release), so a refresh or a link lands on it. Pin beside its name keeps it in the sidebar. With Privacy Mode on, private files are left out of the counts as well as the list.

Frontmatter

The YAML block at the top of a file — edited as plain text, with a shortcut to add one.

Type /frontmatter to insert a starter block with title and tags and put the cursor on the title. If the file already has frontmatter, the same command jumps to its title instead.

---
title:
tags: []
---

The editor shows frontmatter exactly as typed, on a subtle tinted panel. Hover it for a chevron in the margin by the opening ---: it folds the whole block into one line showing just its title (its name when there is no title) and its tags as pills; click that line to unfold it. Folding or unfolding moves the cursor to the top of the file, so the page stays where it is. With the caret inside, Ctrl/Cmd+Shift+. folds or unfolds it too. The file keeps it folded while you switch away and back during the visit.

Typing inside the frontmatter offers what your vault already uses: keys at the start of a line (ti → title), your tags inside tags: [ ] or a - list, and values other files repeat, like status: draft. Nothing is inserted until you pick an option.

Callout blocks

Obsidian-compatible callout syntax — a typed, foldable blockquote, written in plain Markdown.

> [!tip] Optional title
> Body text, same as a regular blockquote.

Insert one from the slash menu: /callout adds a plain [!note] callout and /collapse adds a foldable one that starts collapsed. A menu of types opens right away; pick one, or press Esc to keep note. To change it later, type any type below in place of note.

Add + or - after the type to make it foldable: + starts expanded, - starts collapsed. No suffix means a plain, non-foldable callout.

> [!warning]- Collapsed by default
> Click the title to expand.

Add one more > to nest: a quote inside a callout gets its own bar, and a callout inside a callout draws as an inset card in its own color. Plain quotes nest the same way, one bar per level.

> [!note] Outer
> > [!tip] Inner
> > Inside the tip.
> Back in the file.

The type is case-insensitive and any word works, but these have dedicated colors and icons:

note📝
abstract📋
infoℹ️
tip💡
success✅
question❓
warning⚠️
failure❌
danger🔥
bug🐛
example📑
quote💬

Command palette

A fuzzy-searchable list of every app-level action — open it instead of hunting for a menu.

Open it anywhere with CTRL/CMD+P (files; pressing Shift twice opens it the same way) or CTRL/CMD+SHIFT+P (commands). (commands). On mobile, tap the active-file bar. The palette opens in Quick Open mode, where plain text searches file names and paths. To search inside files, start with / or press CTRL/CMD+SHIFT+F.

With nothing typed it lists your pinned and recent files, then a short menu of what you reach for most: Search in Files… (file text), Ask AI, New File, Insert template…, Toggle Focus Mode; then, set apart, the pages it can take you to: Open Tasks, Open Templates, Open Settings and Open Documentation. An arrow marks a row that opens another page; Open Documentation opens in a new tab, so your file stays put. A row with a chevron opens a menu in place; Backspace in its empty search field, or the back button, goes up a level.

Plain textFiles by name or path
#All unique vault tags; choose one to filter Files
>Commands by name, description, category, or keyword
!Tasks; choose one to open its file at the source line
@Headings in the active file; choose one to place it at the top
/File text across the vault, including readable code and text files; choose a line to open it at that match
~Your templates; Enter inserts one into the file, CTRL/CMD+Enter starts a new file from it

Text search ignores case and finds files that contain every word you type, in any order (at least 2 characters; no fuzzy matching). Frontmatter isn't searched; code blocks are. Exact phrases rank first, and each file shows up to three matching lines. Private files never appear in text results, whatever the Privacy Mode. Right after a vault opens, a footnote shows how many files are still being indexed.

Turn on Regex at the foot of the palette, or press Alt+R, to search with a regular expression instead, such as ^todo or fetch\w+\(. It ignores case, and ^ and $ match at the start and end of each line. Regex stays on until you turn it off. A pattern that takes too long is stopped, and the palette says so.

Replace in Files changes a text across many files at once. Open it from the palette (Replace in Files…), or click the Replace… chip at the foot of the palette while searching with /: it opens the page with your search filled in. Type what to find and what to replace it with; Match case, Whole word and Regex narrow or widen the search, and with Regex on $1, $<name> and $& in the replacement stand for what the pattern captured. Files are searched whole, frontmatter included; turn on Include code files to change code and text files too. The page lists every match as before and after. Uncheck a match, or a whole file, to leave it as it is, then press Replace. A file you edited since the preview is skipped and reported rather than overwritten. Afterwards Undo (in the message, and on the page) puts back every file that still holds the replaced text. Private files, the Trash and board drawings are never changed.

The palette's footer lists these modes as chips (Tags, Tasks, Headings, Text, Templates, Commands): click one instead of typing its prefix, and click it again to go back to files.

Matching is fuzzy and deterministic. Recently opened files and recently run commands receive a ranking boost. Commands that need a vault, active file, selection, or AI provider remain visible when useful and explain why they are disabled. Async commands show a running state and cannot be submitted twice. Press CTRL/CMD+D to pin the selected file or command (up to five) to the top of the palette.

SaveCTRL+S
FilesNew File, Open File from Disk…, Export as Markdown (always a .md download, never a save), Copy Contents, Rename / Duplicate / Move / Delete File
FoldersNew folder (one level at a time)
EditingUndo, redo, focus, formatting, tasks, and templates
AIAsk AI (CTRL/CMD+J): opens the AI companion with the file and selection
Pin FileKeep the file first in the palette and in Files
Export as PDFPrint the file, or save it as a PDF
Export as HTMLDownload the file as a standalone web page
Show FilesCTRL/CMD+SHIFT+E
Open Tasks—
Open TemplatesYour templates, New template and examples
Open filesNext/previous, close current/other/all
TasksGrouping, due-date filters, and clear filters
Toggle Hidden Files—
Theme: Light / Dark / System—
Light Theme: … / Dark Theme: …The palette each mode uses
Toggle Full Width / Word Wrap / Line Numbers / Invisibles / Word Count / Vim Mode—
Toggle Focus ModeDim other paragraphs, or turn Focus off
Focus: …Off, or dim other paragraphs or sentences
SettingsEditor Font, Text Size, Autosave, Open Settings
Open Vault / Close Vault / Refresh Vault—
Create New Vault—
New FileBlank file, named from its first line
New FolderChoose a vault folder, then enter a name
Rename / DeleteUses the same prompts for files and folders
Ask AICTRL/CMD+J · when AI features are on
NavigateOpen All Files, Open Tags, Open Tasks, Open Templates, Open Trash, Open Settings, Open Documentation, Send Feedback…, Show Keyboard Shortcuts

Searching for a file that doesn't exist? The last result, Create "…", starts a new file with that title.

Use ↑/↓ (or Tab/Shift+Tab) to move through results, Enter to run the selected item, and Escape to close. The controlled clear button resets the query without closing the palette and returns focus to the search field.

Combine this with the per-context shortcuts in Keyboard shortcuts and the slash command menu (/) for inserting content, and the editor is fully operable without ever reaching for the mouse.

Export as PDF

Save a clean, printable PDF of any file. It's made on your device; the file never leaves it.

Run Export as PDF from the command palette (the button at the top of the page, or CTRL/CMD+P). A dialog shows the page setup and a preview of the pages. Save as PDF… opens your browser's print dialog; choose Save as PDF as the destination (on iPhone and iPad, share the preview or save it to Files).

PrintedHeadings, lists, task boxes, tables, code, callouts (folded ones open), <details> sections (open), Mermaid diagrams, math and vault images
Left outFrontmatter, comments and other raw HTML
LinksWeb links stay clickable; wikilinks print as their text
LookAlways light, whatever your theme, with page breaks that keep rows, code blocks and headings together

Set the page up in the dialog; your choices are remembered for the next export.

PaperA4 (the default) or Letter
MarginsNarrow, Normal (the default) or Wide
Header and footerText with {title}, {date} (the export day), {page} and {pages}, e.g. {title} | {date} or {page} / {pages}. On its own it's centred; | splits it into left | right, or left | centre | right. Leave it empty for none.
Page breaksA line that's exactly <!-- pagebreak --> starts a new page. Turn on New page at each rule to break at every horizontal rule (---) too.
PreviewFollows your choices as you make them. Each page break starts a new sheet; long sections run onto more pages when printed, and faint lines show roughly where

The PDF's title comes from the file's first heading, or its file name. A file marked private can only be exported once you've shown it. CTRL/CMD+P still opens the command palette.

Export as HTML

Download any file as one standalone web page. It's made on your device; the file never leaves it.

Run Export as HTML from the command palette (the button at the top of the page, or CTRL/CMD+P). The file downloads as a single .html file named after it, ready to open in any browser, send, or put on a website.

IncludedEverything Export as PDF prints: headings, lists, task boxes, tables, code, callouts, <details> sections (open or closed as in the file), Mermaid diagrams, math, embeds and vault images
StandaloneImages, diagrams and styles are inside the file, so it opens offline and loads nothing else (images the file links to on the web stay links)
LookA centred reading column that follows the reader's light or dark setting, and prints like the PDF

The page's title comes from the file's first heading, or its file name. Like Export as PDF, a file marked private can only be exported once you've shown it.

Vault

How files are stored: folders on disk and browser vaults, and using git.

Vault overview

A vault is a folder. HermesMarkdown reads and writes plain Markdown files in it and otherwise leaves it alone.

Any folder you open becomes a vault. Subfolders, file names, and organization are entirely yours — HermesMarkdown doesn't enforce a structure or move files around.

my-vault/
  projects/         ← yours
    roadmap.md
  daily/            ← yours
    2026-06-25.md

Every file is a plain .md file, optionally with a YAML frontmatter block. Open the folder in any other editor, sync it with Dropbox or Google Drive, or move it to another machine — nothing about it depends on HermesMarkdown being installed. The only folders HermesMarkdown creates on its own are assets/, for images you paste or drop into a file, and the hidden .hermesmarkdown/trash/, which holds what you delete for 30 days. What you pin to the sidebar is kept in this browser, not in the vault.

Folder on diskChrome, Edge, Brave, Arc, Opera
Browser vaultEvery modern browser, including Safari, Firefox, iPhone, iPad

A browser vault holds the same plain files, just inside the browser's private storage instead of a folder you can see. Nothing is locked in: Export vault as zip hands you every file, and Import files into vault… brings a zip or folder into any vault.

Organizing files

Files, in the sidebar or on the mobile Files page, works like a Finder list: select, drag, rename in place, and undo.

Click a row to select it, CMD/CTRL-click to add or remove rows, and Shift-click to select a range. Drag a selected row onto a folder to move the whole selection; hovering a closed folder while dragging opens it. Right-click a row (or use its ⋯ button) for its actions, or empty space for New File and New Folder. Empty folders always show, so you can set up a structure before filling it.

Files shows every file by its full name, extension included. Besides your files it lists the vault's other text files (code, JSON, YAML, CSV, plain text…); see Code files. A file's type: in its frontmatter (or a #type/… tag) picks its icon: project, task, meeting or bookmark.

New files and folders, and renames, are named right in the list: type, then press Return or click away to keep the name, or Esc to back out. The new name shows at once. While a rename, move or move to Trash is still working on a large folder or a slow disk, its row shows a spinner and can't be opened, renamed, moved or deleted again until it's done.

The folder path above a file is clickable: click a folder in it to see that folder's files and subfolders right there. Click a subfolder to step in, the ← to step up, or a file to open it; type to filter. Show in Files opens the folder in the sidebar.

↑ / ↓Move the selection (Shift extends it)
→ / ←Open or close a folder; step in or out
Return (Mac) / F2Rename
CMD+O or CMD+↓ (Mac) / EnterOpen
CMD+Backspace (Mac) / DeleteMove to Trash
CMD/CTRL+ZUndo the last rename, move or move to Trash
CMD/CTRL+ASelect all

Code files

Code and other text files in the vault open in the same editor, as plain text with code editing.

Files with a code or text extension (.ts, .py, .json, .yaml, .sh, .txt…) and known names (Dockerfile, Makefile, LICENSE, and with hidden files shown, .gitignore or .editorconfig) open as plain text in the code font, with no Markdown rendering. Their lines are always numbered. When the language is recognized, it's highlighted, brackets are matched, typing an opening bracket or quote adds its pair, and blocks fold from the gutter. With Outline on (CTRL/CMD+SHIFT+M), its box lists the file's namespaces and modules, classes, structs and their methods, fields and properties, functions, types, enums and their members, top-level constants and variables (in Python, only ALL_CAPS ones), a JavaScript export default, CSS selectors, or JSON and YAML keys, each with a small icon for its kind (C# included); click one to jump there. They stay out of All Files, tags and tasks; .env files are never listed.

Quick Open (CTRL/CMD+P) finds them by name. To create one, type its name with the extension (util.ts) in New File; renaming a file to a code file name drops .md.

Format CodeSHIFT+ALT+F or the palette: the whole file, or a file's code block
FormatsJavaScript, TypeScript, JSON, CSS, SCSS, Less, HTML, Vue, YAML, GraphQL
Search insideUse / in the palette; Settings → Files can limit this to Markdown files

Format Code uses Prettier with the vault's own settings: the nearest .prettierrc, .prettierrc.json, .prettierrc.yaml or package.json "prettier" key, from the file's folder up to the vault root, with matching overrides. A JavaScript config such as prettier.config.js can't run in the browser, so Prettier's defaults are used and the toast says so.

Using git

HermesMarkdown doesn't run or read git: commit, pull and push with the tools you already use.

A vault on disk is a plain folder of Markdown files, so it can be a git repository (or a folder inside one). Commit, pull and push from a terminal or a git app as usual. The .git folder, node_modules and other tool folders are never listed or indexed.

When a pull changes a file you have open, the editor picks up the new text; if you have unsaved edits in that file, the conflict dialog lets you keep, take or merge the versions.

Frontmatter conventions

Frontmatter is optional and free-form. A few fields are read by the app.

titlestring · optional
tagslist · optional
privatetrue · optional
Anything elseKept as-is

title

A display title for the file. Files save fine without it — the file name is the identifier.

tags

Free-form tags. Together with inline #tags, they feed the palette's # mode.

private

private: true, or a private tag, marks a file as private.

Private files

Keep files with revenue figures, keys or personal details off the screen while you share or record it.

A file is private when its frontmatter says so, so the marker travels with the plain Markdown file. Either form works:

---
private: true
---

or

---
tags: [finance, private]
---

Or type /privacy in a note: Privacy: mark as private adds private: true; on a private file, Privacy: mark as public removes it and the private tag. An inline #private in the body doesn't count.

A private note opens behind a veil showing only its title, until you choose Show file or Show all private files this session (both last until you reload). It never shows up in text search (/) and is never sent to AI. In lists, Privacy Mode decides; set it under Settings → Files → Privacy or with the Privacy mode: … commands:

Mask in lists (default)Pinned files, quick open and Tasks show the title with a lock; preview and task text are bullets
Hide from listsLeft out of pinned files, quick open and Tasks

AI Features

Bring your own key for chat, drafting, formulas and more.

BYOK setup

AI is optional and off by default. Turn it on with your own Anthropic or Google Gemini key — there's no default model HermesMarkdown provides.

Anthropic ClaudeModels fetched from your account
Google GeminiModels fetched from your account

AI is optional and off until you turn it on. Settings → AI Features → switch on AI features, pick a Provider (Claude or Gemini) and paste your API key. Then pick a Model (the refresh button reloads the list) and, if you like, Test connection. With a key set, the AI companion opens from Ask AI in the palette, the slash menu and the selection toolbar. With the switch off, none of them show.

Nothing is sent until you use an AI feature. The key is stored in your browser. Each AI request passes through HermesMarkdown's servers on its way to Anthropic or Google — the key is never logged or saved there. See Privacy model for the full picture.

The AI companion

One AI, in a panel beside your file. Ask it about your files, or ask it to change them.

Press CTRL/CMD+J, or choose Ask AI in the command palette, the slash menu or the toolbar that appears on a selection. On a phone, tap the AI button in the file bar. The panel opens on the right and the page moves over; drag its edge to make it wider. The file in front and your selection come along as chips above the message field. Remove a chip to leave it out.

Type @ to add another file, a folder or the whole vault. Attach images or files. Replies stream in as they're written, in Markdown. Pick the model from the panel's header. Type / to list the commands and pick one. Start over with New chat (the chat bubble in the header, or type /new or /clear). When a conversation grows long, Summarize chat (/compact or /summarize, optionally followed by what to keep) replaces it with a short summary the companion goes on from; Stop cancels a summary and keeps the conversation. Both are also in the command palette as New AI chat and Summarize AI chat. The conversation stays when you close the panel or reload the page.

Each thing the companion does shows as a quiet line in its reply, like Read Projects/Roadmap.md or Edited Projects/Roadmap.md · 2 edits.

What the companion can change

It proposes edits and new files for you to review, and renames, moves and organises files on request.

Ask for a change and the companion proposes it: it reads the file first, then drafts the exact edits. Nothing is written until you review the proposal, accept the changes you want and apply them. The same goes for new files and templates it suggests. It can also create folders, rename an item (links to it follow the new name) and move items into a folder (their links follow too); those save at once, and an open file shows them straight away.

To move something to the Trash it asks first, in the thread: Keep leaves everything as it is, Move to Trash goes ahead. Items stay in the Trash for 30 days.

Undo

Under a reply that changed files you'll see what changed and Undo. It takes back everything that reply did at once, newest first: applied proposals, new folders, renames, moves and the Trash. CTRL/CMD+Z in Files does the same, as for your own renames and moves. A file you've edited since is left as it is, and the panel says which.

AI templates

Ask the companion for a template and it saves one in _templates/, checked first.

Ask for a template, for example “make me an RFC template that asks for an owner”. The companion knows the template tokens and proposes the template, saved as _templates/RFC.md for example once you apply it. It shows up in /template straight away.

Each template is checked before it's saved, for things like an unknown token or two {{cursor}}s. When there's a problem the companion fixes it and tries again; nothing is saved until it passes. It never replaces a template you have: ask it to change one and it edits that file. Undo under the reply removes a new template again. You need an open vault.

How the companion looks things up

With a vault open, the companion reads your files instead of guessing.

It can search your files (by text, name or tag), read a file, list a folder, look at the file you have open (your selection and the code block the cursor is in) and list your open tasks: all of them, in progress, due today, overdue or upcoming, or by tag.

AI & table formulas

The AI knows how table formulas work. It writes totals as live formulas and never replaces your formulas with numbers.

Ask the companion for a table with totals, averages or counts, and you get formulas like =SUM(B2:B5) in a totals row, not numbers the AI worked out itself. The table keeps computing correctly as you edit it. You can also ask it to add or fix a formula, or explain why a cell shows #REF! or #CIRCULAR!.

Tables the AI writes keep their heading right above them, with any description below the table, so formulas such as =SUM(Income!B) can find them by name.

When it edits a file, the companion is told to keep formulas exactly as written. It never swaps a =SUM(...) for its current result.

AI & your files' syntax

The AI writes tasks, links and callouts the way HermesMarkdown reads them, and keeps them intact when it rewrites text.

The companion knows HermesMarkdown's own syntax. Tasks get their status in the box ([ ] [/] [!] [x] [-]), never a #todo tag, with @due() and @priority() at the end of the line. Links to other files are [[wiki links]], and callouts use the > [!tip] form.

When it edits a file it keeps task boxes, their @started() and @done() dates, links, tags and callout headers exactly as written.

Privacy model

No AI request leaves your machine unless you've configured a key, and the key itself is never stored on HermesMarkdown's servers.

HermesMarkdown is local-first: your vault is read and written directly from the browser, with no upload step and no HermesMarkdown database holding your files.

Local vault filesNever leave your machine
AI requestsRelayed to Anthropic / Google, not stored
Web searches (when on)Run by Anthropic during the reply
App settings (theme, font, editor layout)Browser localStorage / IndexedDB
AI API keyBrowser localStorage
Companion conversationBrowser localStorage (New chat clears it)

Settings

Appearance, Home and vault options, and keyboard shortcuts.

Appearance

Pick a theme, the font you write in and the text size.

System/light/dark theme controls are available in Settings → Appearance and from the command palette (Theme: Light, Theme: Dark, Theme: System). System follows your operating system automatically. Each mode has its own color theme: Paper (the default), Sepia, Solarized or Plain for light, and Ink (the default), Nord, Solarized or Graphite for dark. Paper and Ink are paper and blue ink (Ink is the dark paper); Sepia is a warm cream page for long reading; Plain and Graphite are neutral, with no tint. Every theme has a faint paper grain. You can also pick them on the home page before you start. Each theme has its own accent hue, kept to the caret, text selection, focus rings, toggles and selections; icons and buttons stay quiet ink on paper. In code blocks, keywords take that accent, and strings, numbers and function names each get a color of their own from the theme. Settings → Appearance shows the colors for the mode you picked, and both under System; the command palette also has Light Theme: … and Dark Theme: …. The editor font, code font (for code blocks and inline code), text size and Full Width (on by default) are set under Settings → Appearance → Typography and apply across the editor. Vim mode and Focus are under Settings → Editor. Word wrap, line numbers and invisibles (¶ on empty lines, dots for spaces) are command palette toggles: Toggle Word Wrap, Toggle Line Numbers, Toggle Invisibles.

ThemeSettings → Appearance
Light / Dark themePaper, Sepia, Solarized, Plain / Ink, Nord, Solarized, Graphite
SidebarThe Sidebar button, CTRL/CMD+\, CTRL/CMD+ALT+S or Show/Hide Sidebar: navigation and the vault's files on the window's left edge, on every editor page (desktop)
TypefaceQuattro by default, Duospace or Geist Mono
Code fontGeist Mono by default, JetBrains Mono, Fira Code or your system's monospace

New files & templates

Choose where new files go. Templates always live in templates/.

New Files FolderEmpty = vault root, or a folder like inbox

New drafts are saved there, and so are files made from a template or a link that names no folder. It lives under Settings → Files; a folder that doesn't exist yet is created the first time a file is saved there.

Templates are in _templates/ at the root of your vault, made the first time you need it: every .md file directly in it, or one folder down (a pack, see the Templates page), is a template.

Keybindings

Shortcuts are fixed — there's no remapping screen yet.

Every shortcut in HermesMarkdown is built in and not user-configurable. See Keyboard shortcuts for the full reference grouped by context.

Mobile

Using HermesMarkdown on a phone or tablet.

Mobile layout

Below a 768px viewport, the palette button becomes a fixed file indicator bar, and Files opens full screen.

A thin bar stays fixed at the top of the screen showing the active file's name and save status — there's no keyboard shortcut for the command palette on mobile, so tapping this bar is the one always-present way to open it. From there, Show Files, Search, Open Tasks, New File, and every other command work exactly as they do on desktop.

Files and Search open full screen rather than as docked panels.

Vaults on phones and tablets

iPhone and iPad use browser vaults; install the app to your home screen to write offline.

iPhone / iPad (Safari)Browser vault
Android (Chrome)Folder on the device or browser vault
Other mobile browsersBrowser vault

From the command palette, choose Browser vaults… to create or reopen one. On iOS, use Share → Add to Home Screen: the installed app opens full-screen and starts without a connection.

Table editor on mobile

Tables edit in place, same as desktop.

Tables use the same in-place cell editing as desktop. Tap a cell to type in it, and tap a column letter or row number (or long-press a cell on Android) for the table menu.

Cell navigation works the same as desktop. Only the surrounding chrome changes.

Differences from desktop

Mobile trades some desktop-only surfaces for touch-first equivalents — the underlying editing model is unchanged.

FilesFull screen instead of the sidebar
VaultsBrowser vaults on iPhone/iPad; see Vaults on phones and tablets

Selecting text shows the same toolbar on both: Turn into (text, headings, lists, quote), Bold, Italic, Link, and Ask AI when AI is set up. On desktop it sits above the selection; on mobile it sits at the bottom of the screen, above the keyboard, clear of the phone's own Copy/Paste bar. Ask AI is also in the command palette.