You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(tauri): UI fixes - mic button state and window persistence (#9)
* fix(tauri): remove mic button state changes and prevent empty window opening
- Remove recording button color changes (now just a link to recording window)
- Simplify CSS by removing recording state classes and animations
- Fix window opening without document on startup
* feat(macos): add debug build with dev version display
- Add BUNDLE_VERSION variable in project.yml (dev for Debug, 0.2.0 for Release)
- Update Info.plist to use $(BUNDLE_VERSION) for version strings
- Add 'make dev' and 'make build-debug' targets for Debug builds
- About panel now shows 'Version dev' in development builds
* docs: mark macOS native app as deprecated in CLAUDE.md
The Tauri version is now the primary and actively maintained version.
macOS native (apps/macos/) is no longer receiving updates.
* fix(tauri): enable window-state plugin to persist window position
The plugin was installed but not initialized. Now windows will save and restore their position/size between sessions.
* fix(tauri): await loadFile to ensure window shows when opening via CLI
* fix(tauri): use correct button classes in modal dialogs
Replace modal-btn with btn and modal-btn-primary with btn-primary
to fix styling in dark theme.
* fix(tauri): exclude recording window from window-state persistence
The recording window should always start hidden, not restore previous visibility state.
* feat(tauri): add double-click on toolbar to toggle maximize
Adds native macOS behavior - double-clicking the title bar toggles maximize/restore.
* fix(tauri): adjust toolbar padding to center macOS window buttons
* feat(build): add Makefile and local dev build script
- Add apps/tauri/Makefile with targets: dev, build, build-dev, install, clean
- Add scripts/build-dev.sh for local builds with git hash (0.0.0-{hash})
- Update CLAUDE.md with Makefile usage and build documentation
- Local builds clearly show version 0.0.0-abc1234 to differentiate from releases
* feat(ui): add active state tracking for outline headings
- Highlight current visible heading in outline sidebar
- Use IntersectionObserver to track scroll position
- Auto-scroll outline to keep active heading visible
- Add visual styling for active heading with border and color
* docs: update README with Makefile build commands
* fix(whisper): use None for automatic language detection
Changed from Some("auto") to None as per whisper.cpp API specification for automatic language detection
* fix(ui): keep last active heading highlighted in outline
Persist last active heading when scrolling between sections to prevent outline from losing active state
* fix(build): ensure ~/Applications exists before install copy
* docs: include Info.plist in set-version description
* fix(build): add dev target to .PHONY in macOS Makefile
* fix(macos): add microphone permission description to Info.plist
macOS requires NSMicrophoneUsageDescription in Info.plist for apps
that access the microphone. Without it, the system silently blocks
microphone access when the app is launched via Finder/Spotlight,
causing Whisper transcription to return [BLANK_AUDIO].
The app worked when launched from terminal because it inherited
permissions from Terminal.app.
* fix(whisper): ensure audio stream is properly closed on stop
Implements Drop trait for AudioRecorder to explicitly close the
audio stream when the recorder is destroyed. Adds a 100ms delay
after stopping the stream to give macOS time to update the
microphone indicator icon in the menu bar.
This prevents the microphone icon from staying active after
recording is stopped or cancelled.
* docs: clarify build-dev.sh must run from repo root
* fix(whisper): explicitly pause audio stream before dropping
Calls stream.pause() before dropping to ensure the audio device
is properly released. Increases delay from 100ms to 200ms to give
macOS more time to update the microphone indicator in the menu bar.
Applies to both stop() method and Drop trait implementation.
Arandu is a Markdown viewer application built with Tauri (Rust backend + vanilla HTML/JS frontend). It uses `comrak` for GFM rendering and provides:
8
+
- GitHub Flavored Markdown support (tables, task lists, strikethrough, autolinks)
9
+
- Theme cycling (system/light/dark)
10
+
- File watching with live reload
11
+
- Sidebar outline navigation
12
+
- CLI installer for macOS
13
+
- Offline voice-to-text via Whisper
14
+
- Plan review comment system
10
15
11
-
Both render GitHub Flavored Markdown (tables, task lists, strikethrough, autolinks), support theme cycling (system/light/dark), file watching with live reload, sidebar outline navigation, and include a CLI installer for macOS.
16
+
**Note:** The macOS native version (`apps/macos/`) is deprecated and no longer maintained. All active development happens in the Tauri version (`apps/tauri/`).
12
17
13
18
## Build Commands
14
19
15
-
### macOS Native (requires Xcode + xcodegen)
20
+
### Tauri (requires Rust + Node.js)
21
+
22
+
**Using Makefile (recommended):**
16
23
```bash
17
-
brew install xcodegen # one-time setup
18
-
cd apps/macos
19
-
make generate# generate .xcodeproj from project.yml
20
-
make build # build Release config
21
-
make install # build + install app to ~/Applications + CLI to /usr/local/bin
22
-
make dist#build + create dist/Arandu.dmg
23
-
make clean# remove build artifacts and .xcodeproj
24
+
cd apps/tauri
25
+
make dev # run in development mode (hot reload)
26
+
make build# production build (uses version from tauri.conf.json)
27
+
make build-dev# local dev build with git hash (e.g. 0.0.0-abc1234)
28
+
make install # install app to ~/Applications + CLI to /usr/local/bin
29
+
make clean# remove build artifacts
30
+
make help# show all available targets
24
31
```
25
32
26
-
### Tauri (requires Rust + Node.js)
33
+
**Using npm/npx directly:**
27
34
```bash
28
35
cd apps/tauri
29
-
npm install # install frontend dependencies
30
-
npx tauri dev # run in development mode (hot reload on localhost:1420)
31
-
npx tauri build # production build (outputs to src-tauri/target/release)
<summary>Deprecated: macOS Native (no longer maintained)</summary>
41
59
42
-
### Shared Assets (`shared/`)
43
-
CSS styles (`style.css`) and highlight.js files shared between both apps. The Tauri frontend has copies in `apps/tauri/src/`; the macOS app bundles them from `apps/macos/Sources/Arandu/Resources/`.
60
+
```bash
61
+
brew install xcodegen # one-time setup
62
+
cd apps/macos
63
+
make generate # generate .xcodeproj from project.yml
64
+
make build # build Release config
65
+
make install # build + install app to ~/Applications + CLI to /usr/local/bin
66
+
make dist # build + create dist/Arandu.dmg
67
+
make clean # remove build artifacts and .xcodeproj
68
+
```
44
69
45
-
### macOS Native App (`apps/macos/`)
46
-
Single-file Swift app (`Sources/Arandu/main.swift`) containing AppDelegate, MarkdownWindowController, CLIInstaller, and all UI logic. Uses `project.yml` (XcodeGen) to generate the Xcode project. Markdown rendering via C library `libcmark_gfm`. File watching uses `DispatchSource`.
70
+
This version is deprecated and no longer receives updates. Use the Tauri version instead.
71
+
</details>
72
+
73
+
## Architecture
47
74
48
75
### Tauri App (`apps/tauri/`)
49
-
-**Rust backend** (`src-tauri/src/`): `lib.rs` defines all Tauri commands (`render_markdown`, `read_file`, `extract_headings`, `watch_file`, etc.) and app setup. `cli_installer.rs` handles macOS CLI installation (conditionally compiled with `#[cfg(target_os = "macos")]`). Markdown rendering via `comrak` crate. File watching via `notify` crate.
50
-
-**JS frontend** (`src/`): `main.js` is the single entry point — communicates with Rust via `window.__TAURI__.core.invoke()`. `index.html` has the full UI including CLI installer modals. No build step or bundler; plain JS served directly.
0 commit comments