Add a PDF, a note, a picture, or a recording to begin.
Tip: press Ctrl+K or tap 🔍 for every command — including passcode & lock settings.
No matches
Add to shelf
or start a new note
Edit details
Export shelf
This file will be fully readable by anyone who opens it — only choose this if you're storing it somewhere you already trust.
Encrypted backups use the new .shelfmark format (v1.52.0+): any shelf size, but versions before 1.52.0 cannot open it. Plain JSON stays readable by every version.
App guide
🔍Command palette
Press Ctrl+K (or tap 🔍 at the top) and start typing. Every action lives here — add, import/export, tags, sort, theme, storage, passcode settings and this guide. Type # to jump to a tag.
🗂️Category index — one note that lists everything
Like an Obsidian index page: a table with one row per category (same order as your shelf) and a tappable link to every item inside it. The header shows how many categories there are, and each row shows its item count. It is rebuilt each time you open the note, so it always matches your shelf — nothing to keep up to date.
Make one:Add → Index of categories, or Ctrl+K → New index note, or type this into any note:
```index
```
It shows in reading view (the editor shows the plain block). Optional lines inside the block:
```index
types: notes, pdf, pictures, recordings
exclude: Category A, Category B
columns: 分类 | 笔记
```
Every line is optional — an empty block already lists everything, with the headers Category and Items. Put each setting on its own line:
types — only list some kinds of items: notes, pdf, pictures, recordings (separate with commas). Default: everything.
exclude — hide categories by name (separate with commas, not case-sensitive). Handy for private or scratch categories.
columns — rename the two headers as Left | Right, in any language. Only needed if you don't want the default Category | Items.
Good to know: categories follow your shelf order (drag a category header on the shelf to reorder; Uncategorized is always last), and the links inside each one are sorted A–Z. You can write a heading or a short intro around the block, and use several index blocks in one note — for example one with types: pdf under a “PDFs” heading and another with types: notes under “Notes”.
🔒Passcode is optional
You can lock Shelfmark with a passcode or open it straight to your shelf. Either way your data is stored encrypted; a passcode also keeps other people on this device out. You can switch at any time.
Want to wipe everything and start fresh? Ctrl+K → Erase this shelf and start over works in either mode.
✍️Writing notes
Notes use Markdown — headings, lists, checklists, tables, [[wiki links]], #tags, pictures and audio. The full cheat-sheet is in Ctrl+K → Markdown formatting help.
Passcode & lock
🔑With a passcode
A lock screen appears every time you open Shelfmark. Your shelf is encrypted with a key made from your passcode, and that key is never saved — so nobody who gets hold of this device can read it without the passcode. There is no recovery: forget it and the only option is to erase the shelf (or restore from an encrypted export).
🔓Without a passcode
No lock screen — Shelfmark opens straight to your shelf. Your data is still stored encrypted, but the key is kept in this browser next to it, so anyone who can open this browser on this device can read your shelf. Best on a personal device you trust. If the browser ever loses that key (clearing site data, for example) the shelf can’t be opened, so keep an encrypted export as a backup.
⏲️Auto-lock
Lock the shelf by itself so it isn’t left open. Locking forgets the key and returns to the lock screen; an unsaved note edit is kept as a draft. It waits while sound is playing (a recording set to repeat keeps the shelf open until you stop it) or an export/import is running.
🔄Switching
You can switch at any time: every item is re-encrypted in one all-or-nothing step, so if anything goes wrong your current setup keeps working. Removing a passcode asks for it first.
Exports use their own passphrase and aren’t affected by this setting.
🗑️Starting over
With a passcode, the lock screen has a Forgot passcode? Erase this shelf link. Without one there is no lock screen, so use Ctrl+K → Erase this shelf and start over (or the button below). Either way it deletes everything on this device and cannot be undone — export an encrypted backup first if you might want anything back.
Tip: press Ctrl+K (or tap 🔍) and type “passcode” to get back here.
The B and H toolbar buttons insert bold and a heading for you. B is an on/off switch — select bold text and tap it again to remove the **. Italic has no button: use Ctrl/⌘+I (see Typing shortcuts below).
In reading view, tap the arrow at the right of a heading to fold everything under it, up to the next heading of the same or higher level. The outline (☰) has Collapse all / Expand all. Folds are remembered per note and don't change the text.
🖍️Strikethrough & highlight
~~strikethrough~~ · ==highlight==
Or select some text in the editor and tap the S or A toolbar button — tap it again on the same text to take the marks off.
More details
Select several lines and tap once to mark each line separately; list, checkbox and quote markers stay in front, so - [ ] buy milk becomes - [ ] ~~buy milk~~ and is still a tappable checklist item.
They combine with other formatting (==**bold**==) and work inside tables and callout titles. Keep the text snug against the marks — == word == with spaces inside stays as typed — and nothing is marked inside code.
📋Lists
- item for a bullet list, 1. item for a numbered list.
Tappable checklist — tap in the reader to check it off, no need to open the editor:
More details
Press Enter at the end of a list line and the next line starts with the same marker — - , * , the next number (2. ) or, for a checklist, a fresh unchecked - [ ] . Press Enter again on the empty item to end the list. Inside a fenced code block nothing is added.
Tab / Shift+Tab indent / outdent by two spaces on any line — and on every selected line — instead of jumping focus out of the editor (reading view shows the indent as left spacing). To move focus to the toolbar, press Esc and answer No if it asks about unsaved changes, then Tab.
💬Quotes & callouts
> text makes a plain quote. Start it with [!type] for a colored callout card instead. Enter at the end of a quote line continues it with > ; Enter on an empty > line ends the quote:
> A plain quote looks like this
📝Note
> [!note] — general info
⚠️Watch out
> [!warning] Watch out — the text after [!warning] becomes the card's title
💡Idea
> [!idea] — any other [!type] still renders a card, just in a neutral color
Add - or + right after the type to make the card foldable — - starts collapsed, + starts open. Tap the title row to fold or unfold:
📝Tap to expand
> [!note]- Tap to expand — collapsed until tapped. Search matches inside a folded card open it automatically.
💡Starts open
> [!idea]+ Starts open — foldable, but shown open. Fold state isn't saved: the card returns to its starting state whenever the note is reopened.
💻Code blocks
Fence a block with three backticks; an optional language name after the first fence is shown as a label. Every block gets a one-tap Copy button.
js
console.log("hello");
Want to copy the lines one at a time? Write lines after the first fence. It stays one card, but each line gets its own Copy button (the top button, Copy all, still copies everything): Start a line with # to make it a small caption for the line below it: they share one row, and the caption is not copied.
lines
first thing to paste
second thing to paste
a caption (typed as: # a caption)third thing, with a caption
▦Tables
| Col | Col | then a | --- | --- | row, then your data rows:
Name
Age
Ann
29
Merge cells: tap a cell, then Merge → (join it with the cell on its right) or Merge ↓ (with the cell below); Unmerge splits it again. Repeat to build bigger blocks. The neighbour has to line up exactly with the cell (same rows for →, same columns for ↓), only the top-left text is kept, and the header row can merge sideways but not down. In the note text a merged-away cell is written << (merged into the cell on its left) or ^^ (merged into the cell above), so you can also type them yourself; other Markdown apps will show them as plain text.
More details
In reading view you can edit a table without opening the editor: tap a cell and type. Enter starts a new line inside the cell; save with Ctrl/⌘+Enter, the ✓ Done button, or by tapping elsewhere (Esc cancels, Tab moves to the next cell — in the last cell it adds a row). While a cell is open, the bar under the table adds or deletes a row or column. Use \| for a literal pipe inside a cell. A multi-line cell is stored as line one<br>line two — you can type <br> yourself in the note editor to get the same result.
🖼️Images & dividers
 for an image — or just tap the 📷 toolbar button to insert one from your device — you can also paste a copied picture (Ctrl/⌘+V) or drag picture files from your computer into the editor. Dragging an audio file in works the same way: it is embedded in the note (up to 15 MB each) and shows as a player in reading view. In reading view pictures show as small thumbnails — tap one to view it full-screen (tap it again for actual size, tap outside or press Esc to close). --- on its own line draws a divider.
🔗Links
[label](https://…) — an ordinary link. Point it at an audio file URL (.mp3, .m4a, .wav, .ogg, .oga, .opus, .aac, .flac, .weba) and it renders as a playable widget instead — the one feature in Shelfmark that makes a live network request.
📎Link something already on your shelf
Use the 🎵 / 🔗 / 📄 toolbar buttons to pick a recording, note, or PDF and drop in a working link — no syntax to remember:
🎵 Audio → inline player
📜🔗 Note → jump-to-note card→
📄📄 PDF → jump-to-PDF card→
More details
These stay linked even if you rename the target later — only deleting it breaks the link (tapping it will say so).
[[ ]]Wiki-style links
Type [[ and start typing a title for an autocomplete dropdown, or write it by hand: [[Note title]], or [[Note title|shown text]] to display something else. Unlike the picker links above, this one is matched by title, so renaming the target note keeps it working automatically — but renaming this note's own reference breaks it. Linking a title that doesn't exist yet shows a dashed "missing" pill you can tap to create that note on the spot.
#Tags
Write #word anywhere in the text to tag the note — as many as you like, alongside its one category. Browse them all from the 🔍 command palette → Browse tags.
⌨️Typing shortcuts
Ctrl/⌘+B bold · Ctrl/⌘+I italic — both switch on and off, like the toolbar buttons, and work line by line on a multi-line selection.
Ctrl+Alt+H (Ctrl+Option+H on Mac) toggles a heading on the current line.
Ctrl/⌘+Z undo · Ctrl/⌘+Shift+Z or Ctrl/⌘+Y redo · Ctrl/⌘+F find.
Esc goes back one step: it leaves the editor (asking first if there are unsaved changes), then closes the note, a popup or a panel.
Enter / Tab in lists and quotes: see Lists and Quotes & callouts above.
💡Tips
Find in a note
tap 🔍 in the note's top bar (or press Ctrl/Cmd+F). Matches are highlighted, with ↑ ↓ buttons to step through them and Aa to match case. While editing, the bar also has Replace and All — Replace All can be undone in one step with ↩. In reading view, Replace… opens the editor with your search carried over.
Drafts
while you edit, your text is saved automatically every few seconds as a draft. If you leave without saving, the note shows an Unsaved draft banner next time so you can continue or discard it. Only Save changes the note itself.
Search note text from the shelf
the shelf search box only looks at titles and categories. Tap the button beside it to also search inside your notes' text — slower, since every note has to be decrypted, so it switches itself off each time you reopen the app.
🗂️Category index
List every category and its items in one note
type ```index on its own line, then ``` on the next (or use Add → Index of categories, or Ctrl+K → New index note). In reading view it becomes a table with one row per category — the category count in the header, an item count beside each name — and a tappable link to every item inside. It is rebuilt each time you open the note, so it always matches your shelf.
All optional lines inside the block: types: notes, pdf, pictures, recordings (default is everything), exclude: Category A, Category B, and columns: 分类 | 笔记 to rename the two headers (default: Category | Items). More in Ctrl+K → App guide.
No match — try another word.
Move to category
Start page
What opens when you open Shelfmark (after unlocking). If you never pick, it stays the Shelf, exactly as before.