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.

Sign in Get the Android app Host your own

Just curious? The sign-in page has a read-only demo with a sample vault - type, tick and preview freely; nothing is saved.

notes/projects/garden.mdโ— 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

  1. Download

    On the phone, open GitLab Releases and tap mnemos.apk under the latest release (the button above always points there).

  2. 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.

  3. Set it up

    Choose My notes, grant All files access and pick your vault folder (folders with .obsidian or .stfolder are highlighted). Set a PIN and, if you like, fingerprint unlock. Or tap Demo user to look around first.

  4. Update, even offline

    Install a newer APK the same way, or drop mnemos-<version>.apk into <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:

Markdown it shows

You writeExampleIn the preview
Properties--- tags: [a] ---A small "properties" block; searchable as tags: a.
Task lists- [x] doneCheckboxes 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![](img/a.png)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.
Footnotestext[^1]Numbered notes at the bottom.
Tags#gardenFound 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).

  1. Get the code

    git clone https://gitlab.com/niharokz/mnemos.git
    cd mnemos
    cp .env.example .env
  2. 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 (from id -u / id -g) and MNEMOS_NETWORK (the Docker network your proxy is on).

  3. 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 check lists 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.

  4. 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.

  5. 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
false turns 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

KeysAction
Ctrl KSearch everything
Ctrl SSave now
Ctrl ESwitch between editing and preview (or table)
Ctrl FFind and replace
Ctrl B ยท I ยท KBold, italic, link (in the editor)
Alt N ยท C ยท RNew note, capture, recent
Alt BShow or hide the sidebar

On a Mac, โŒ˜ works instead of Ctrl.

Security