This document provides a high-level overview of the Char/Hyprnote repository, an AI-powered note-taking and transcription application. It covers the monorepo structure, technology stack, major applications, and how the system components relate to each other.
For detailed information about specific subsystems:
Sources: High-level system architecture diagrams, Cargo.toml1-380 package.json1-30 pnpm-lock.yaml1-100
The codebase is organized as a monorepo combining Rust and TypeScript workspaces. The repository uses:
Workspace Configuration:
| Component | Directory | Workspace Definition |
|---|---|---|
| Rust crates | crates/, plugins/, apps/{api,cli,desktop/src-tauri} | Cargo.toml10-19 |
| TypeScript packages | packages/, apps/{desktop,web,bot} | pnpm-lock.yaml7-783 |
| Applications | apps/ | Top-level directories |
Sources: Cargo.toml10-380 pnpm-lock.yaml1-783 package.json1-30
The desktop application is built on Tauri 2.x, combining a Rust backend with a React frontend.
Key Dependencies:
| Layer | Technology | Version | Purpose |
|---|---|---|---|
| Frontend Framework | React | 19.2.4 | UI components |
| Frontend Router | TanStack Router | 1.159.5 | Type-safe routing |
| State Management | TinyBase | 7.3.2 | Persistent reactive stores |
| State Management | Zustand | 5.0.11 | Ephemeral runtime state |
| Build Tool | Vite | 7.3.1 | Development and bundling |
| Desktop Framework | Tauri | 2.10 | Native app wrapper |
| IPC Bridge | tauri-specta | 2.0.0-rc.21 | Type-safe bindings |
| Actor System | ractor | 0.15.10 | Concurrent task management |
| Async Runtime | tokio | 1.x | Asynchronous operations |
| AI Integration | Vercel AI SDK | 6.0.111 | LLM streaming |
Sources: apps/desktop/package.json17-178 apps/desktop/src-tauri/Cargo.toml22-100 Cargo.toml158-380
Sources: apps/web/package.json1-117
Sources: Cargo.toml293-327
The desktop application's main entry point is in apps/desktop/src-tauri/src/lib.rs1-381 The initialization sequence follows this pattern:
Plugin Registration:
The application registers plugins in a specific order (lib.rs79-145):
| Plugin Category | Examples | Purpose |
|---|---|---|
| Core | tauri_plugin_opener, tauri_plugin_dialog | Basic OS integration |
| Authentication | tauri_plugin_auth | Supabase auth |
| Database | tauri_plugin_db2 | Local database |
| Audio | tauri_plugin_listener2, tauri_plugin_local_stt | Audio capture and transcription |
| UI | tauri_plugin_windows, tauri_plugin_overlay | Window management |
| Storage | tauri_plugin_store2, tauri_plugin_fs2 | Persistent storage |
Sources: apps/desktop/src-tauri/src/lib.rs1-381 apps/desktop/src-tauri/Cargo.toml22-83
The application supports multiple build channels through configuration overlays:
Build Channels:
| Channel | Identifier | Auto-update | Deep Link Scheme | DMG Background |
|---|---|---|---|---|
| Dev | com.hyprnote.dev | No | hyprnote, char | stable |
| Staging | com.hyprnote.staging | No | hyprnote-staging | staging |
| Nightly | com.hyprnote.nightly | Yes | hyprnote-nightly | nightly |
| Stable | com.hyprnote.stable | Yes | hyprnote | stable |
Sources: apps/desktop/src-tauri/tauri.conf.json1-75 apps/desktop/src-tauri/tauri.conf.staging.json1-29 apps/desktop/src-tauri/tauri.conf.nightly.json1-32 apps/desktop/src-tauri/tauri.conf.stable.json1-18
The application uses tauri-specta to generate type-safe TypeScript bindings from Rust command definitions:
Exported Commands:
Commands exported via collect_commands! (lib.rs340-356):
get_onboarding_needed, set_onboarding_neededget_dismissed_toasts, set_dismissed_toastsget_env, show_devtoolresize_window_for_chat, resize_window_for_sidebarget_tinybase_values, set_tinybase_valuesget_pinned_tabs, set_pinned_tabsget_recently_opened_sessions, set_recently_opened_sessionslist_pluginsSources: apps/desktop/src-tauri/src/lib.rs338-380
The application defines granular permissions through Tauri's capability system:
The capability file grants permissions to:
Sources: apps/desktop/src-tauri/capabilities/default.json1-107
macOS-specific entitlements are defined in apps/desktop/src-tauri/Entitlements.plist1-17:
| Entitlement | Purpose |
|---|---|
com.apple.security.device.audio-input | Microphone access |
com.apple.security.personal-information.calendars | Calendar access |
com.apple.security.personal-information.addressbook | Contacts access |
com.apple.security.cs.allow-jit | JIT compilation (V8/Deno) |
com.apple.security.cs.allow-unsigned-executable-memory | Dynamic code execution |
Privacy descriptions are provided in apps/desktop/src-tauri/Info.plist1-17 for:
Sources: apps/desktop/src-tauri/Entitlements.plist1-17 apps/desktop/src-tauri/Info.plist1-17
Package Exports:
| Package | Key Exports | Purpose |
|---|---|---|
@hypr/ui | components/*, hooks/*, globals.css | Shared React components |
@hypr/tiptap | editor, chat, prompt, shared | Rich text editing |
@hypr/utils | . (index) | Utility functions |
@hypr/api-client | Generated API client | Type-safe API calls |
Sources: packages/ui/package.json1-68 packages/tiptap/package.json1-71 packages/utils/package.json1-31
The workspace defines 100+ Rust crates organized by domain (Cargo.toml28-149):
| Domain | Example Crates | Purpose |
|---|---|---|
| Audio | hypr-audio, hypr-audio-device, hypr-audio-utils | Cross-platform audio capture |
| Transcription | hypr-transcript, hypr-whisper-local, hypr-transcribe-proxy | Speech-to-text |
| LLM | hypr-llm-proxy, hypr-llm-types, hypr-local-llm-core | LLM integration |
| Calendar | hypr-apple-calendar, hypr-google-calendar, hypr-outlook-calendar | Calendar providers |
| Database | hypr-db-core, hypr-db-parser, hypr-db-user | Database abstractions |
| Storage | hypr-storage, hypr-supabase-storage, hypr-s3 | Cloud storage |
Sources: Cargo.toml28-156
| Command | Purpose | File |
|---|---|---|
pnpm -F desktop dev | Start desktop dev server | apps/desktop/package.json7 |
pnpm -F desktop tauri:dev | Start Tauri in dev mode | apps/desktop/package.json14 |
pnpm -F web dev | Start web dev server | apps/web/package.json6 |
cargo build | Build Rust crates | - |
dprint fmt | Format code | package.json4 |
oxlint --type-aware | Lint TypeScript | package.json5 |
Environment Variables:
The desktop app loads environment variables via dotenvx (apps/desktop/package.json11):
.env.supabase - Supabase configuration.env - Local overridesSources: apps/desktop/package.json6-16 apps/web/package.json6-11 package.json3-6
Rust build profiles are configured in Cargo.toml1-9:
This configuration:
opt-level = 1 for better performanceSources: Cargo.toml1-9
The repository uses GitHub Actions for continuous integration. A reusable action handles pnpm installation:
Sources: .github/actions/pnpm_install/action.yaml1-14
Service Integration:
| Service | Purpose | Desktop | Web | API |
|---|---|---|---|---|
| Supabase | Authentication, PostgreSQL database | ✓ | ✓ | ✓ |
| Stripe | Payment processing, subscription management | ✓ | ✓ | ✓ |
| Sentry | Error tracking, performance monitoring | ✓ | ✓ | ✓ |
| CrabNebula | Desktop app auto-updates | ✓ | - | - |
Sources: High-level system architecture diagrams, apps/desktop/src-tauri/Cargo.toml88-96
The Char/Hyprnote repository is a sophisticated monorepo containing:
tauri-specta eliminating runtime type errorsThe architecture emphasizes:
For deeper exploration of specific subsystems, refer to the linked pages at the top of this document.
Sources: All referenced files throughout this document
Refresh this wiki
This wiki was recently refreshed. Please wait 3 days to refresh again.