A side panel that talks to local Ollama.
Tauri v2 tray app on Windows 10/11. NSIS or MSI installer. Prompts, screenshots, and voice stay on the device. The model is yours to choose (Llama 3, Qwen 2.5, Mistral, Gemma 2, Phi-3, DeepSeek).
Pulse is a local-first AI workspace that ships as one product on
two surfaces: a Tauri v2 side panel for Windows that talks
to a local Ollama instance, and a greenfield markdown editor for
Android with [[wikilink]] backlinks, voice input,
and an in-app update checker. Both are Apache 2.0. Both run
on-device. Both ship free.
Both surfaces share the Smart Engine v3 router, the local-first data model, and the Apache 2.0 license. They differ in input modality and platform idioms — a tray icon and hotkey on Windows, a bottom toolbar and share intent on Android.
Tauri v2 tray app on Windows 10/11. NSIS or MSI installer. Prompts, screenshots, and voice stay on the device. The model is yours to choose (Llama 3, Qwen 2.5, Mistral, Gemma 2, Phi-3, DeepSeek).
Svelte 5 + TypeScript strict + CodeMirror 6 with
[[wikilink]] backlinks, tag autocomplete, voice
input, and an in-app update checker. Notes live in a local
SQLite database, FTS5 search on the same file.
Full release notes live on /changelog/ · pricing on /pricing/ · side-by-side matrix on /compare/
Pulse does three things and does them on device — on Windows and on Android — with no account, no telemetry, and no network round-trip you did not trigger yourself.
On Windows, Pulse talks to a local Ollama instance on
127.0.0.1:11434. On Android, Pulse Notes
stores everything in a local SQLite database with FTS5
search on the same file. The recall step is the same
local model that runs chat. Nothing crosses the
network boundary.
notes.db file is plain SQLite.
v3 prefers the right model for the query 32 percentage
points more often than the v2 baseline, and answers land
in roughly a seventh of the time. v0.6.0 ships with v3
as the default, threshold 5, on both surfaces. The
harness logs every call to
data/smart-engine-v3-ab-*.jsonl for inspection.
Read the code, fork the build, ship a competing product. The same Apache 2.0 license covers the Windows desktop Tauri build, the Android Capacitor 8 + Svelte 5 build, and this site. No "Pro" tier, no "Enterprise" SKU, no premium model hidden behind a paywall.
v0.6.0 was the greenfield Android rewrite. v0.6.1 brought the app icon and splash. v0.6.2 shipped the new onboarding. v0.6.3 revived the in-app UpdateChecker. v0.6.4 added the manifest URL fallback chain. v0.6.5 grew the chain to 7 hosts and shipped the v0.6.5 Windows desktop build. v0.6.6 closes the Android P1 audit: backup rules, voice input, and Settings view.
The Android P1 audit (Roman, 2026-08-02) closes on three
fronts. Backup rules now exclude
app_webview/ from both cloud backup and
device transfer. Voice input (SpeechRecognition) is the
8th tool in the NotesView toolbar. The Settings view
(Profile, Theme, About, Actions) opens from a gear
button in NotesView. 304/304 vitest, 1.29 MB APK,
SHA-256 AD6E3302…45BAB5.
android:allowBackup="false" for the WebView path; android:dataExtractionRules excludes app_webview/ from both cloud-backup and device-transfer.AD6E3302…45BAB5. R93b release.keystore (CN=Pulse, O=Lesside, L=Brest, ST=Brest, C=BY). v1 disabled in R95a; v0.6.6 builds on the same v2+v3 path.
R100 shipped the v0.6.5 Windows desktop build (Tauri v2,
NSIS + MSI, ~6.4 MB installer). On the Android side,
R93 grew DEFAULT_MANIFEST_URLS from 5 to 7
entries. R92 and R90 are added at the head, so v0.6.5+
devices can auto-update forward even if the older hosts
go down. v0.6.3 and v0.6.4 users need to side-load
v0.6.5 once.
DEFAULT_MANIFEST_URLS: 5 → 7 entries. New order: R92 → R90 → R88 → R87 → R85 → R81 → R78.
UpdateChecker now tries a chain of 5 known manifest hosts
instead of a single baked-in URL. Closes the
chicken-and-egg loop where every
website_deploy rotation orphaned the
previous APK's poll target. versionCode 13 → 14. APK
+408 B. v0.6.3 users cannot auto-update — see the
v0.6.4 side-load page.
DEFAULT_MANIFEST_URLS (most-recent first), env override at head.fetchManifestFromChain try-each-URL with attempts[] log.UpdateResult.manifestUrl diagnostic field for triage.R52's in-app UpdateChecker was lost in R73 mavis-trash and the R77 greenfield reset. v0.6.3 brings it back. Polls a remote manifest, surfaces an M3 dialog with force-update support, SHA-256 fingerprint, release-notes link, and a 24h cache TTL. versionCode 12 → 13. APK +1.1 KB.
UpdateChecker core + UpdateCheckerMount.svelte + UpdateDialog.svelte (M3, 0 emoji).@capacitor/browser for APK installs.latest_apk_sha256 in the manifest.Four onboarding screens replace the single splash: Welcome, Capture, Smart Engine, Local-first. M3 components only — no emoji, no celebratory copy, no marketing banner. The 184 vitest cases cover the new onboarding flow, the editor, the search, and the capture intent. versionCode 11 → 12. APK +5 KB.
Tokyo Night adaptive icon (blue P + 4-point spark) with monochrome variant for Android 13+ themed icons. M3 splash screen replaces the white flash on cold start. versionCode 10 → 11. APK +12 KB.
Written from scratch on Svelte 5 + TS strict + Vite.
CodeMirror 6 with split-pane (bottom-sheet on phone),
[[wikilink]] backlinks, tag autocomplete, M3
toolbar, 9 Capacitor plugins. 150/150 vitest,
4.32 MB APK, versionCode 10, appId
app.pulse.notes, minSdk 24,
targetSdk 36. Smart Engine v3 default ON,
threshold 5.
[[wikilink]] backlinks with fuzzy autocomplete.Free, forever. Apache 2.0. No account, no cloud, no telemetry.