A handwritten note-taking app built for students, combining the natural feel of pen and paper with the power of digital documents.
All features are completely free, including cross-device sync. Your notes stay private: no data leaves your device, and all AI features run entirely on-device.
| F-Droid | Google Play | APK |
|---|---|---|
|
|
|
| Available | Coming Soon! | Available |
- Local storage and AI processing on device.
- Fuzzy notebook search across text, tables, handwriting, and text found inside images.
- On-device handwriting and formula recognition, including math solving, evaluation, and graphing tools docs.
- Highly performant Ink rendering (7ms on over 10k strokes).
- Free-form page infinite canvas.
- Rich-text editing.
- Inline and free-form LaTeX equations with native rendering.
- Handwriting with configurable pens, pressure, smoothing.
- On-device image OCR.
- Custom paper: ruled, multiple grid sizes, dotted, hexagonal.
- Automatic database snapshots, and revision restoration.
- Open source export file format .vive , docs.
- Hardware keyboard shortcuts and configurable stylus buttons mappings.
|
|---|
|
|
|
|
|---|---|
|
![]() |
- Fdroid release
- Play Store
- Linux & windows port
- Apple
- Web Client
| Item | What this project uses |
|---|---|
| JDK | 21 in CI |
| Android SDK platform | Android 37.0 (compileSdk 37) |
| Android SDK Build Tools | A compatible version selected by AGP; 37.0.0 is a known-good choice |
| Python | python3.13 executable |
| Android NDK | 28.2.13676358, selected by AGP 9.2.1 |
| Platform Tools and a device or emulator | Android API 35 or newer; arm64-v8a or x86_64 for debug and -PtestRelease |
The Gradle wrapper downloads Gradle 9.7.0; the build pins Android Gradle Plugin 9.2.1 and Kotlin 2.2.10 in gradle/libs.versions.toml.
Gradle invokes python3.13 directly; the exact Python 3.13.14 pin in the root pyproject.toml is for a separate Python environment.
Install the SDK packages with Android Studio's SDK Manager or the Android SDK command-line tools:
sdkmanager 'platforms;android-37' 'build-tools;37.0.0' 'ndk;28.2.13676358'For a first build, use the debug variant. An Android device is needed only for installDebug:
./gradlew :app:assembleDebug
./gradlew :app:installDebugAn unsigned release can be built without signing credentials:
./gradlew :app:assembleReleaseTo sign and install a release, put the upload-key values named in env.example in a gitignored .env at the repo root, and keep the keystore outside the working tree.
Then run ./gradlew :app:installRelease. The normal release APK includes arm64-v8a only; use debug or -PtestRelease for an x86_64 emulator.
local.properties may also hold the optional public Google Web client ID and cloud URL settings described in app/build.gradle.kts. They are not required to compile the app.
Local tests need no device:
./gradlew :app:testDebugUnitTestThe release instrumented suite tests the R8-minified app on a connected API 35+ device or emulator.
It installs as com.vivenotes.testrelease, so it neither collides with nor uninstalls a signed
com.vivenotes.
./gradlew connectedAndroidTest -PtestReleaseThe debug instrumented suite uses the same device requirements:
Reports are written under app/build/reports/androidTests/connected/.
./gradlew connectedDebugAndroidTest
./gradlew connectedDebugAndroidTest \
-Pandroid.testInstrumentationRunnerArguments.class=com.vivenotes.ui.editor.PageViewTest- SymPy , powers the math engine
- Chaquopy, also the math engine
- PaddlePaddle , using their local models
- Claude & Codex


