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.
- 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.)
- 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.
- Encrypted backup (Settings โ Encrypted backup): your notes and folders, trash included, in one
.ntbackupfile, 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.
- 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.
- 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).
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.
-
No
INTERNETpermission. The merged release manifest holds exactly four permissions:RECORD_AUDIOโ asked at run time, only if you turn on dictation;USE_BIOMETRICandUSE_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,signaturelevel, internal to the app.
tools/check-manifest-permissions.pychecks the merged manifest, not the source one, which declaresINTERNETonly 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=falseand fulldataExtractionRules: 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.
- 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; anhttp,httpsormailtolink 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.
- 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).
- 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.
- Instant FTS5 full-text search (
unicode61tokenizer, 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.
- Encrypted backup to a
.ntbackupfile 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.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.
[[Title]]links with autocompletion, a Mentions / outgoing links panel; dangling links resolve when the target note appears.
- One note as
.mdwith a frontmatter readable by Obsidian, Logseq, Bear, Foam or Dendron. - Everything as a ZIP: one folder per notes folder, plus a README.
- Settings โ Panic mode, confirmed by typing the word it asks for (
WIPEin 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.
- On by default: no screenshots and no preview in the recent-apps screen.
- 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-v8afits almost every phone since 2016). Check the SHA-256 published in the release notes. - F-Droid โ f-droid.org/packages/com.filestech.notes_tech, built and signed by F-Droid.
- Local build โ next section.
No Play Store: no account is needed to install.
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-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.
- 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.
- minSdk 24 (Android 7.0), targetSdk 36
- Tested on Samsung Galaxy S9 (Android 10) and S24 FE (Android 16)
The port's design notes, decisions, traps and security audit are in docs/ and
audits/, in French โ start with docs/README-PORTAGE.md.
Apache License 2.0 โ see also NOTICE and
THIRD_PARTY_NOTICES.md.
Notes Tech is part of the Files Tech suite of privacy-focused Android apps: