Your notes, plain files, on the web and in your pocket.
Mnemos opens a folder of text files - for example the vault you already use in Obsidian - in your browser and on your Android phone. Write markdown with a live preview, edit CSV as a real table, search everything from one box, and settle Syncthing conflicts side by side. Nothing is locked in: every note stays an ordinary file.
Just curious? The sign-in page has a read-only demo with a sample vault - type, tick and preview freely; nothing is saved.
--- status: open tags: [garden, home] --- # Balcony garden Basil and mint by the window; chillies need **more sun**. - [x] Repot the mint - [ ] Order coco peat
status: open ยท tags: garden, home
Balcony garden
Basil and mint by the window;
chillies need more sun.
- Repot the mint
- Order coco peat
โ๏ธ Markdown, live
Edit, Split or Preview. Highlighting, a formatting bar, find & replace, lists that continue on Enter, and task boxes you can tick right in the preview.
๐ CSV as a table
.csv and .tsv open as a grid: sticky header, sort and filter, edit a cell, add or delete rows, column stats. An untouched file is saved byte for byte.
๐ One search box
File names (fuzzy), full text, #tags and properties like status: open. Results jump to the line. Ctrl K.
๐ค Sync conflicts, settled
Syncthing's .sync-conflict copies are listed and compared side by side. Keep one, or merge by hand; the other goes to the trash.
๐พ Never loses an edit
Autosave with a version check: if Obsidian or Syncthing changed the file meanwhile, you choose - load theirs, keep yours, or save yours as a copy.
๐๏ธ Trash with restore
Delete moves to the vault's .trash, the folder Obsidian uses. Restore from the sidebar, back to where it came from.
โก Capture
A thought, a link, a todo: Alt C appends a time-stamped line to your inbox note. Installed on a phone, Mnemos is a share target too.
๐๏ธ Cards, pins, recent
See a folder as boxes with note previews, pin the notes you live in, jump back to what you opened. New notes from your templates/ folder.
๐ผ๏ธ Images, any file
Paste, drop or pick photos into a note - saved beside it in attachments/. Obsidian ![[embeds]] show too. Logs, JSON, YAML and code open in the editor.
๐ฑ Any screen
Drawer and full-screen panes on a phone, resizable sidebar and split on a desktop. Add it to the home screen like an app.
๐ Private by design
Your account plus an optional read-only demo user. bcrypt, signed cookies, login lockout, strict browser policies, no third-party requests.
๐ชถ Tiny
One Go binary with the web app built in, in an empty, read-only Docker image. No database: the files are the database.
Mnemos for Android
The same vault, fully offline, on your phone.
A native Jetpack Compose app with Material 3 and the nss look, for the folder Syncthing keeps on your phone. The APK has no internet permission at all: no analytics, no crash upload, no Google services.
Android 12 or newer ยท sideloaded, no Play Store ยท signed with one key, so updates install over the top.
๐ Lock
PIN or password plus fingerprint, auto-lock, hidden in Recents.
๐งฉ Widgets & tile
New note, quick capture, recent and pinned notes, a Quick Settings tile, app shortcuts.
๐ค Photos & sharing
Add photos to a note from the gallery or camera, or share a link, text or photo from any app into your share note.
๐ Big files
Logs over 2 MB open in a memory-mapped viewer with search and follow-tail.
๐จ Your colours
Light and dark themes with your own background, card and accent; the icon follows.
๐ Demo user
Try everything on a sample vault before granting any permission.
Install from GitLab
Download
On the phone, open GitLab Releases and tap mnemos.apk under the latest release (the button above always points there).
Allow the install
Open the download. When Android asks, allow Install unknown apps for your browser or file manager, then tap Install. Play Protect may ask to scan an app it has not seen - that is expected for sideloaded apps.
Set it up
Choose My notes, grant All files access and pick your vault folder (folders with
.obsidianor.stfolderare highlighted). Set a PIN and, if you like, fingerprint unlock. Or tap Demo user to look around first.Update, even offline
Install a newer APK the same way, or drop
mnemos-<version>.apkinto<vault>/apps/: once Syncthing brings it over, Settings โ Update โ Check vault for update installs it after checking it is the same app, a higher version and signed with the same key.
Build the APK yourself
Only Docker is needed. The signing key lives outside the repo in ~/.mnemos-keys - back it up, updates must use the same key.
git clone https://gitlab.com/niharokz/mnemos.git cd mnemos/android ./build.sh keystore # once: creates the signing key ./build.sh # โ dist/mnemos-<version>.apk ./build.sh install # optional: adb install over USB
What it is not
Mnemos is an editor for your files, not an Obsidian clone. On purpose, it has no:
- wikilinks, backlinks, graph view, embeds or callouts - use Obsidian for those, on the same files;
- sync of its own - pair it with Syncthing, git or whatever already moves your notes;
- plugins, accounts for other people, or a database.
Markdown it shows
| You write | Example | In the preview |
|---|---|---|
| Properties | --- tags: [a] --- | A small "properties" block; searchable as tags: a. |
| Task lists | - [x] done | Checkboxes you can tick; done items are struck through. |
| Tables | | a | b | | Scrollable tables, also on phones. |
| Links | [x](other.md) | Opens the other note; web links open in a new tab. |
| Images |  | Loaded from your vault, relative to the note; tap for full screen. |
| Embeds | ![[a.png|300]] | Obsidian-style image embeds, found like Obsidian finds them. |
| Footnotes | text[^1] | Numbered notes at the bottom. |
| Tags | #garden | Found by search as #garden. |
Raw HTML inside notes is not rendered, so a note can never run code in your browser.
Host the web app
You need a Linux box with Docker, your notes in a folder on it, and a reverse proxy that serves HTTPS (Caddy, Traefik, nginx, or a Cloudflare tunnel).
-
Get the code
git clone https://gitlab.com/niharokz/mnemos.git cd mnemos cp .env.example .env
-
Set your login
Build the image, then create a password hash and a secret key and paste both into
.env(the hash in single quotes):docker compose build read -rs PW && printf '%s' "$PW" | docker run --rm -i mnemos:local hash-password openssl rand -hex 32 # โ MNEMOS_SECRET
Also set
MNEMOS_USER,NOTE_PATH(your notes folder),TZ,PUID/PGID(fromid -u/id -g) andMNEMOS_NETWORK(the Docker network your proxy is on). -
Check and start
docker compose run --rm mnemos check # settings + any note or folder it could not write docker compose up -d docker logs mnemos # "mnemos โฆ listening on :8080"
If
checklists folders owned by another user (often root, created by another container), give them back to you:sudo chown -R "$(id -u):$(id -g)" /path/to/notes. -
Put it behind HTTPS
notes.example.com { reverse_proxy mnemos:8080 }Open the site, sign in, then use your browser's Install / Add to Home Screen.
-
Update later
git pull && docker compose up -d --build
No Docker? With Go 1.23+: go build ./cmd/mnemos, then
MNEMOS_NOTES=~/notes MNEMOS_PASSWORD=โฆ ./mnemos serves http://localhost:8080.
Coming from Samanote? Your SAMANOTE_* settings keep working; rename them when convenient.
Configure
.env - required
- NOTE_PATH
- host folder with your notes
- MNEMOS_USER
- your login
- MNEMOS_PASSWORD
- a bcrypt hash from
mnemos hash-password(plain text works too) - MNEMOS_SECRET
- signs the session cookie, 32+ characters
- PUID ยท PGID
- the user that owns the notes
- MNEMOS_NETWORK
- Docker network shared with your proxy
.env - optional
- MNEMOS_DEMO
falseturns the read-only demo user off (default on)- MNEMOS_DEMO_USER ยท _PASSWORD
- demo login shown on the sign-in card, default demouser / demo
- MNEMOS_CAPTURE
- note that capture appends to, default
inbox/note.md - MNEMOS_TEMPLATES
- templates folder, default
templates - MNEMOS_HIDDEN
- extra folders to hide, comma separated (dot folders always are)
- MNEMOS_AUTOSAVE_MS ยท MAX_FILE_MB
- autosave delay (1000) and edit size limit (5)
- MNEMOS_MAX_UPLOAD_MB
- largest image you can add to a note (20)
- TZ
- time zone, used in capture stamps and copy names
Keyboard
| Keys | Action |
|---|---|
| Ctrl K | Search everything |
| Ctrl S | Save now |
| Ctrl E | Switch between editing and preview (or table) |
| Ctrl F | Find and replace |
| Ctrl B ยท I ยท K | Bold, italic, link (in the editor) |
| Alt N ยท C ยท R | New note, capture, recent |
| Alt B | Show or hide the sidebar |
On a Mac, โ works instead of Ctrl.
Security
- Passwords can be stored as bcrypt hashes; every sign-in check takes the same time whether the user exists or not.
- The demo user is read-only on the server, not just in the page: every change it sends is refused, and it sees only its own sample vault.
- HMAC-signed, HttpOnly, Secure, SameSite cookie (
__Host-prefixed). Changing a password or the secret signs that account out everywhere. - Five wrong passwords lock that IP out for 15 minutes; the real client IP is read safely behind Cloudflare and proxies.
- Every change must be a same-origin JSON request with a custom header - cross-site forms and requests are refused.
- Paths are locked inside your notes folder: no
.., no symlinks pointing out, hidden folders stay hidden. - Strict Content-Security-Policy, HSTS, no framing, no third-party scripts, fonts or analytics. Files served raw are sandboxed.
- Runs as your user in an empty, read-only container with no capabilities; it can only write to your notes folder.