A quiet space for daily reflection.
Local-first journaling with AI-powered analysis, sentiment tracking, and smart tagging — all stored on your machine.
Dhyana (धyाना — Sanskrit for meditation) is a desktop journaling app built for people who want a calm, distraction-free space to write. It stays out of your way while you write, then surfaces patterns and insights once you're done.
Everything runs locally. No accounts, no cloud sync, no data sent anywhere except the AI analysis calls you explicitly trigger.
- One entry per day — focused, distraction-free editor with full Markdown support
- Auto-save — changes are persisted automatically as you write with a short debounce
- Rich text editor — powered by TipTap with support for headings, lists, links, and more
Rishi (ऋषि) is the Sanskrit word for a sage or seer — a witness who observes without judgement. It was chosen because the AI's role is not to evaluate or advise, but simply to reflect back what's already in your writing: who appeared, what you felt, and the overall tone of the entry.
- Summarization — generates a concise one-sentence summary of your entry
- Sentiment analysis — scores each entry on a -1.0 to +1.0 scale
- Smart extraction — identifies people and emotions mentioned in your writing
- Runs automatically 30 seconds after you stop typing
AI is fully optional. You can disable Rishi entirely from Settings — no API key required, no outbound calls made. The rest of the app (editor, tagging, analytics) works without it.
Write naturally and use trigger characters to tag inline:
| Character | Purpose |
|---|---|
@ |
Tag people mentioned in your entry |
# |
Track emotions and moods |
$ |
Custom user-defined tags |
/ |
Insert Markdown blocks (headings, lists, etc.) |
All trigger characters are configurable in settings.
- Sentiment trend — line chart of your mood over the past 90 days
- People mentions — bar chart of who appears most in your entries
- Mood cloud — frequency visualization of tracked emotions
- All entries stored locally in SQLite — nothing syncs to the cloud
- Rishi AI can be completely disabled in Settings — when off, the app makes zero outbound network calls
| Layer | Technology |
|---|---|
| Desktop shell | Tauri 2 + Rust |
| Frontend framework | React 19, TypeScript |
| Routing | TanStack Router (file-based) |
| Editor | TipTap 3 |
| Styling | Tailwind CSS 4, Radix UI |
| Charts | Recharts |
| AI | Vercel AI SDK + Google Gemini |
| Database | SQLite via Tauri SQL plugin |
| Build tooling | Vite 7, Biome |
| Runtime | Bun |
- Bun — JavaScript runtime and package manager
- Rust toolchain — required for Tauri desktop compilation
git clone https://github.com/shouryan01/dhyana.git
cd dhyana
bun installRishi AI requires a Google Gemini API key. Create a .env file in the project root:
VITE_GEMINI_API_KEY=your_key_hereGet a free key at aistudio.google.com.
Run the app in development mode:
bunx tauri devRun the frontend only (browser):
bun run devBuild a production desktop app bundle for your current platform:
bunx tauri buildOutput bundles (.dmg, .exe, .AppImage, etc.) are placed in src-tauri/target/release/bundle/.
Other commands:
bun run test # Run tests with Vitest
bun run lint # Lint with Biome
bun run format # Format with BiomeContributions are welcome. Please open an issue before submitting a large pull request so we can discuss the approach.
- Fork the repo
- Create a feature branch (
git checkout -b feat/your-feature) - Commit your changes
- Push and open a pull request