Everything you can do with noteser, organized by feature. Skim the table of contents; jump to what you need.
- Notes and folders
- Daily notes
- Wikilinks
- Tags
- Tasks
- Tasks queries (the ```tasks fence)
- Workspace: tabs and split editor
- GitHub sync
- Offline use
- Search
- Export and import
- Keyboard shortcuts
Click New note in the sidebar ribbon or press Alt+N from anywhere.
The note opens in a tab and gets focus.
Folders work the same way — New folder in the ribbon or Ctrl+Shift+N.
You can nest folders by right-clicking a folder → New subfolder.
Drag-and-drop: grab a note in the sidebar to move it to a different folder. Grab a folder to move it (and everything inside) under another one.
Right-click menu on any note or folder: rename, move, delete, new
subfolder. Renaming inline edits the title; pressing Enter saves.
Soft delete: deleting a note marks it as deleted but keeps it in storage. The sidebar's Trash view lists soft-deleted notes; you can restore or permanently delete from there.
Open the calendar view in the sidebar. Clicking a date creates a note titled with the date if one doesn't exist, or opens the existing note. Use this as a journal, daily standup, or scratch pad anchored in time.
The current day is highlighted. The calendar shows the current month; click left/right to navigate.
Type [[ anywhere in a note to start a wikilink. An autocomplete dropdown
appears with matching note titles; arrow keys to highlight, Enter to
insert. Close with Esc or by typing ]] manually.
Rendered: wikilinks become clickable links in both the live preview
(while editing) and the rendered preview (Ctrl+E). Click to open. If
the target doesn't exist the link is red.
Aliasing: [[note title|display text]] shows "display text" while
linking to "note title". Useful when the note's actual title is too long
or differs from your prose.
Ctrl/Cmd+click a wikilink in the editor to jump to it without exiting the editor.
Type #word anywhere in a note body — that's a tag. No registration step,
no separate tag list. Tags are derived from your note text.
Examples that work: #project, #deep-work, #proj/client/2026,
#a1. Not tags: foo#bar (only counts at word boundaries),
# inside fenced code blocks.
Sidebar Tags view lists every tag found across your active notes, with a count. Clicking a tag filters the note list to notes that mention it. Click again (or click another tag) to switch.
Styling: tags get a tinted background everywhere they appear — live preview, rendered preview, and the sidebar.
Two task syntaxes work, both based on Markdown task lists:
- [ ] open task
- [x] completed taskIn the editor (live preview):
Alt+Lon a plain line → prepends- [ ](converts to a task)Alt+Lon a task line → strips- [ ](converts back to plain text)Alt+Shift+Lon a task line → checks/unchecks. Checking appends✅ YYYY-MM-DDfor today; unchecking strips it. (Obsidian Tasks-plugin behavior.)- Click the
[ ]marker directly to check/uncheck (also stamps the ✅ date).
In the rendered preview (Ctrl+E):
- Click any rendered checkbox to check/uncheck (stamps the ✅ date).
Alt+Lon the task at cursor → check/uncheck.Alt+Shift+Lon the task at cursor → strip the- [ ]prefix.
The ✅ date format is YYYY-MM-DD in your local timezone — the same
format the Obsidian Tasks plugin produces, so notes round-trip cleanly.
Write a fenced code block with tasks as the language to render a live,
filtered view of tasks across all your notes:
```tasks
not done
path includes Projects
group by folder
```Renders inline as a styled task list. Toggling a checkbox in the rendered list updates the underlying note. Works in both the live preview and the rendered preview.
Supported filters:
not done/done— by completion statepath includes <text>/path does not include <text>— by folder pathtag includes <text>/tag does not include <text>— by tagcreated on <YYYY-MM-DD>/created before <date>/created after <date>done on <date>/done before/after <date>(matches the ✅ date)description includes <text>— substring match on the task body
Grouping: group by folder, group by tag, group by filename.
Explain: add explain on its own line to render a human-readable
summary of the query at the top — useful while you're tuning it.
Limit: limit 10 to cap result count.
Each note open in the editor area is a tab. Tabs work like in VS Code:
- Single-click a note in the sidebar → opens as a preview tab (italic title). Typing into the note promotes it to a pinned tab.
- Double-click in the sidebar → opens pinned directly.
- Middle-click a tab → closes it.
- Drag a tab → reorder within the pane, or drag to the right edge of the editor area to create a second pane (horizontal split). Max two panes.
- Drag between panes to move a tab.
The split is horizontal only — two side-by-side panes, each with its own independent tabs. Useful for cross-referencing two notes while writing.
Use any GitHub repo (public or private) as your notes vault.
One-time setup:
- Click the cloud icon in the sidebar → Connect GitHub.
- Approve the device-flow code at the GitHub URL it shows you.
- Pick a repo and branch.
That's it. Your notes now sync to that repo as .md files under whatever
folder structure you have in noteser.
Pushing changes: click Sync (cloud icon when there are pending changes). The push:
- Pulls first — fetches the remote, classifies each
.mdas unchanged / new / updated / deleted / conflict. - Applies non-conflicts locally (new remote notes appear, remote deletions soft-delete locally, etc).
- Opens conflicts as merge tabs — one tab per conflicting file, with a VS Code-style inline merge UI (line-level diff, accept-yours / accept-theirs / keep-both buttons).
- Pushes once all conflicts are resolved — single commit, fast-forward the branch.
Conflict resolution: in a merge tab, each conflicting hunk gets three buttons: accept local, accept remote, keep both. Once every hunk has been chosen, the tab's Apply button writes the merged content back to the note. Closing the last merge tab auto-retries the sync.
Three-way merge: noteser remembers the last SHA it pushed for each
note (gitLastPushedSha), so a remote-only edit OR a local-only edit
each merges cleanly. Only when both sides edit the same lines does it
flag a conflict.
For the full deep-dive on the sync pipeline, see sync.md.
Noteser keeps a full read-only copy of your vault in the browser. If you reload while offline (on a plane, on a flaky connection, etc.), the app boots straight into the cached vault — every note you had at the last sync is there, the tree is there, search works.
What is cached:
- Note bodies and frontmatter.
- The folder tree.
- Your open tabs (so the workspace looks the same as when you closed it).
- Attachments you've already viewed.
- The app shell itself (HTML, JS, CSS, fonts, icons) via the service worker, so the page can boot with no network at all.
What is NOT cached:
- New writes do not yet replay automatically when you come back online. Edits made offline are kept locally; you have to click Sync once you're connected to push them.
- GitHub authentication. The first time you connect a repo needs the network. Once connected, the OAuth token is stored locally, so a later offline boot still recognizes you.
Install as an app: On Chrome / Android the address bar shows an "Install" affordance, or the in-app banner offers it. On iOS Safari, tap Share → Add to Home Screen. Installed apps boot in standalone mode with no browser chrome and the same cached behaviour.
When you're offline the sync button shows "Offline — using cached vault" instead of a red error toast. The moment connectivity returns, the next auto-sync runs automatically.
Ctrl+K opens the search modal. Searches across all your notes —
titles weighted heaviest, then body content, then tags. Fuzzy matching
via Fuse.js, so typos are forgiven.
Results show a snippet of the matching context. Click to open the note.
Sidebar menu → Export. Choose:
- Markdown — one
.mdfile per note (folder structure preserved), bundled in a zip. - JSON — single file with the full state (notes, folders, metadata). Useful for backup or transferring to another browser/device.
- HTML — rendered notes as standalone HTML pages.
Import accepts the JSON format. The Markdown/zip format is one-way for now (no batch markdown import).
The full list is in the README. Highlights:
| Shortcut | What it does |
|---|---|
Ctrl+K |
Open search |
Ctrl+E |
Toggle preview |
Ctrl+B |
Toggle sidebar |
Alt+N |
New note (always at root) |
Ctrl+Shift+N |
New folder (always at root) |
Alt+L (editor) |
Convert line ↔ task |
Alt+L (preview) |
Check/uncheck task at cursor |
Alt+Shift+L (editor) |
Check/uncheck task (with ✅ date) |
Alt+Shift+L (preview) |
Strip - [ ] prefix |
Ctrl+/ |
Show the full shortcut list |
Ctrl+/ opens a modal listing every shortcut — useful when you forget.