Skip to content

About

Encrypted Markdown notes for Android, in Kotlin: per-folder vaults, reading cards and colours, on-device Whisper dictation, backlinks, panic mode. 100% local, no Internet permission. Apache 2.0.

Topics

Resources

Security policy

Stars

11 stars

Watchers

1 watching

Forks

Latest commit

ย 

History

490 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Notes Tech

Your notes stay in your pocket. Encrypted, and offline.

๐Ÿ‡ซ๐Ÿ‡ท Version franรงaise

v3.2.2 โ€” October 2026 ยท Privacy policy ยท Terms of use ยท Security

Encrypted Markdown note-taking app for Android, written in Kotlin with Jetpack Compose. 100% local, no Internet permission. Interface in English, French, German, Italian and Spanish. Per-folder vaults (Argon2id passphrase or Keystore-bound PIN), an app lock with PIN and strong biometrics, FTS5 full-text search, on-device Whisper voice dictation, [[note]] backlinks, notes read as cards in their colour, multi-step panic mode.

For thinkers, therapists, students, researchers, writers and journalists who want to take sensitive or dense notes without them ever leaving their phone.

What sets it apart from Notesnook / Obsidian / Bear / Logseq: no Internet permission โ€” the app is technically unable to send anything, and you can check that in its manifest.


What's new in 3.2.2

  • Fixed: the selection toolbar of the title, search and vault fields offered the text actions of other installed apps, which received the selected text. They are gone on every Android version, as they already were in the note body; Cut, Copy, Paste and Select all remain. ("Translate" was turned off in 3.1.1.)

What's new in 3.2.1

  • Fixed: two quick taps on a note's back arrow left a blank white screen โ€” the second tap, during the closing animation, left the note list too (also in 3.1.1 and 3.2.0; Back closed the app, nothing was lost). A screen that is leaving no longer navigates.
  • Fixed: a quick double tap on "New note" created a second, empty note, and a double tap on a note opened it twice.

What's new in 3.2.0

  • Encrypted backup (Settings โ†’ Encrypted backup): your notes and folders, trash included, in one .ntbackup file, encrypted (Argon2id, AES-256-GCM) by a generated code or a passphrase you choose. A passphrase vault travels as it is, still sealed by its own passphrase; an open PIN vault travels inside the backup's encryption and gets a new PIN when restored. Restoring adds and never overwrites: the whole file is checked first, then written in one transaction.
  • Import Markdown or text files, or a ZIP of them โ€” a Notes Tech export, an Obsidian vault: folders kept, frontmatter read, never into a vault. At most 500,000 characters per note.
  • Find in note: matches highlighted, "3 / 12", previous and next, while reading and writing; a note opened from a search result opens with its search.
  • Share to Notes Tech from another app: a text becomes a note in the Inbox, text files are imported โ€” after the app lock, when it is on.
  • Long notes: the body is now written in Android's own text field, which draws only the lines on screen โ€” on a Galaxy S9, from about 1 s per keystroke at 100,000 characters to about 20 ms. The keyboard reads only the text around the cursor, scrolling flings, and reading a very long note no longer freezes.

What's new in 3.1.1

  • Fixed: in 3.1.0, a long press inside a note being edited closed the app, so text could not be pasted, copied or selected from the menu (#36). What a vault note copies still goes the protected way.
  • No more "Translate" in the selection menu. Android added it, and one tap sent the selected text to another app (Google's, which searched it online). The app now turns Android's text classifier off; Cut, Copy, Paste and Select all remain.
  • Fixed: the Whisper Tiny dictation model could not be imported โ€” the fingerprint the app checks it against was wrong. Whisper Base, the recommended one, was not affected.
  • Support the project: a link in About to the donation page, opened in your browser (the app still has no Internet permission).
  • Legal texts clarified: the liability clause, and what happens to an e-mail you send.

What's new in 3.1.0

  • Reading: tapping a note opens it to be read, drawn as a card in its colour โ€” its title, the rendered text, its date โ€” with an Edit button; the โœ“ tick saves and goes back to reading. A blank note opens to be written.
  • Long press on a note: edit, move to trash (with Undo) or delete permanently. A vault note's actions are offered only once its vault is open.
  • Colours: eight pastel colours per note, from the โ‹ฎ menu, shown in the lists. A vault note shows its colour only while its vault is open; like its tags, the colour is stored outside the vault's own encryption (in the encrypted database) โ€” the privacy policy says so.
  • "+" in a closed vault creates the note once the vault is unlocked.
  • One blue for the main buttons; legal pages dated and checked against the code; build toolchain moved to AGP 9. The database moves to schema 10 (one column added, every note kept).

What's new in 3.0.0

Notes Tech is rewritten in Kotlin. Versions 1.x and 2.x were built with Flutter. The 3.0.0 keeps your data: installed over a 2.0.x, it opens the same encrypted database and the same vaults โ€” measured over 2.0.3, 2.0.4 and the published 2.0.9, passphrase and PIN vaults included.

  • App lock: a PIN asked when Notes Tech opens, plus fingerprint (or face, where the phone rates it as strong) if you wish; a relock delay; its content is hidden in the recent-apps screen.
  • German, Italian and Spanish, on top of English and French.
  • A much smaller app: the arm64 APK is about 8 MB, down from 27 MB.
  • Hardening from a full security audit (September 2026):
    • closing a vault clears the note open on screen;
    • deleted text, and text moved into a vault, is also erased from the search index;
    • copying from a vault note goes through the protected clipboard, and the keyboard is asked not to learn what you type in it;
    • other apps' text actions no longer appear in the selection menu, and no emoji font is requested from Google services;
    • a panic wipe that was interrupted completes at the next launch;
    • plain-text files left in the cache by 2.x are erased at the first launch.
  • Before Android 9, no new PIN vault: Android cannot bind its key to the phone's unlock there. An existing PIN vault still opens and says so.

โš ๏ธ This update is one-way. Android refuses to reinstall a 2.x over the 3.0.0, and uninstalling erases your notes along with their key. Export what you want to keep before updating if in doubt.

โš ๏ธ F-Droid and GitHub copies do not update each other: F-Droid signs Notes Tech with its own key. A copy installed from F-Droid receives the 3.0.0 through F-Droid.


Privacy promise

  • No INTERNET permission. The merged release manifest holds exactly four permissions:

    • RECORD_AUDIO โ€” asked at run time, only if you turn on dictation;
    • USE_BIOMETRIC and USE_FINGERPRINT โ€” added by AndroidX Biometric for the app lock; granted at install, they give access to no data;
    • com.filestech.notes_tech.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION โ€” added by AndroidX, signature level, internal to the app.

    tools/check-manifest-permissions.py checks the merged manifest, not the source one, which declares INTERNET only to remove it.

  • No account, no sign-up, no tracker, no ads, no telemetry.

  • Open source under Apache 2.0: the whole code can be inspected.

  • allowBackup=false and full dataExtractionRules: nothing leaves through Android backup or a device-to-device transfer.

  • The Whisper model is imported by you through the system file picker โ€” never bundled, never downloaded by the app.


Features

Markdown editing

  • Create, edit, autosave.
  • Reading and writing: a note opens to be read โ€” headings, lists, emphasis and links rendered โ€”, and Edit writes it. A [[Title]] link opens the note it points to; an http, https or mailto link opens in the system app, any other scheme is ignored. Images are never loaded: their alternative text stands in.
  • Pin, favourites, colours, archive, trash (30-day retention), sort order, light / dark / system theme.

Per-folder vaults

  • Passphrase mode โ€” Argon2id (64 MiB, t = 3) and AES-256-GCM. The vault key (32 random bytes) is wrapped by the key derived from the passphrase and stored in the SQLCipher database.
  • PIN mode โ€” 4 to 6 digits, lighter Argon2id (32 MiB, t = 2) plus a dedicated Keystore key per vault; 5 failed attempts wipe the vault key. Requires Android 9 or later.
  • Authenticated encryption bound to its context (the folder for the key, the note for the content), and a constant-time verifier that detects a wrong secret without decrypting the notes.
  • Auto-lock when the app goes to the background, and after a delay you choose (5, 15, 30 or 60 minutes, or never; 15 by default).

App lock

  • PIN of 4 to 6 digits, verified through Argon2id and a Keystore-held HMAC key; growing delays after five wrong attempts.
  • Optional strong (class 3) biometric unlock, backed by its own Keystore key.
  • Relock immediately, or after 15 seconds, 1 minute or 5 minutes in the background.

Search

  • Instant FTS5 full-text search (unicode61 tokenizer, diacritics folded). Deleted text is erased from the index too (secure-delete).
  • Find in note: the matches of a search highlighted in the note on screen, one after the other.

Backup, import and sharing

  • Encrypted backup to a .ntbackup file you keep, restored on this phone or another one.
  • Import of Markdown or text files and ZIP archives; share text or files from other apps.

Whisper voice dictation

  • whisper.cpp 1.8.3, compiled into the app from source and run on the device.
  • Whisper Base q5_1 (57 MB) or Tiny q5_1 (32 MB), downloaded by your browser from the official source and imported; checked by SHA-256 before use.
  • Recordings are deleted once transcribed.

Backlinks

  • [[Title]] links with autocompletion, a Mentions / outgoing links panel; dangling links resolve when the target note appears.

Markdown export

  • One note as .md with a frontmatter readable by Obsidian, Logseq, Bear, Foam or Dendron.
  • Everything as a ZIP: one folder per notes folder, plus a README.

Panic mode

  • Settings โ†’ Panic mode, confirmed by typing the word it asks for (WIPE in English).
  • An ordered sequence, where a failing step does not stop the next ones: secure window, dictation stopped and forbidden, clipboard cleared, vaults locked, vault PIN keys and app lock keys deleted, database key destroyed, exports and recordings erased, database header overwritten and files deleted, voice model, preferences and cache erased. Interrupted, it resumes at the next launch.

Screen protection

  • On by default: no screenshots and no preview in the recent-apps screen.

Installation

  1. Published APK โ€” from GitHub Releases, the universal APK (notes-tech-universel-3.2.2.apk, any phone), or the lighter one for your device (arm64-v8a fits almost every phone since 2016). Check the SHA-256 published in the release notes.
  2. F-Droid โ€” f-droid.org/packages/com.filestech.notes_tech, built and signed by F-Droid.
  3. Local build โ€” next section.

No Play Store: no account is needed to install.


Local build

Requirements: JDK 17, Android SDK 37, NDK 27.0.12077973 and CMake 3.22.1 (pinned in app/build.gradle.kts). Gradle 9.8.1 comes with the wrapper.

./gradlew testDebugUnitTest lintDebug
./gradlew assembleRelease -Pnotestech.replaceInstalledApp=true

โš ๏ธ Without -Pnotestech.replaceInstalledApp=true, the build is installed beside Notes Tech under com.filestech.notes_tech.next, with its own empty storage: it cannot see, nor replace, an installed copy. That is how the port was developed without ever touching real data.

The version lives in version.properties; each ABI split gets versionCode ร— 10 + ABI (1 = armeabi-v7a, 2 = arm64-v8a, 3 = x86_64), the scheme F-Droid requires, and the universal APK versionCode ร— 10.

Stack

  • Kotlin 2.4, Jetpack Compose (Material 3), Hilt, Room on SQLCipher 4.16, DataStore
  • Bouncy Castle (Argon2id), Android Keystore, AES-256-GCM from the platform
  • org.jetbrains:markdown (preview), whisper.cpp through JNI (dictation)
  • No network library

Third-party components and their licences: THIRD_PARTY_NOTICES.md.

Targets

  • minSdk 24 (Android 7.0), targetSdk 36
  • Tested on Samsung Galaxy S9 (Android 10) and S24 FE (Android 16)

How it was built

The port's design notes, decisions, traps and security audit are in docs/ and audits/, in French โ€” start with docs/README-PORTAGE.md.


License

Apache License 2.0 โ€” see also NOTICE and THIRD_PARTY_NOTICES.md.

Files Tech suite

Notes Tech is part of the Files Tech suite of privacy-focused Android apps:

About

Encrypted Markdown notes for Android, in Kotlin: per-folder vaults, reading cards and colours, on-device Whisper dictation, backlinks, panic mode. 100% local, no Internet permission. Apache 2.0.

Topics

Resources

Security policy

Stars

11 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages