Experimenting with implementing ActivityWatch using Tauri.
Holds great promise as a much simpler way to build a cross-platform version of ActivityWatch.
Features:
- Tray icon
- Module manager for watchers
- WebView serving the web UI
- Uses aw-server-rust by default
- Replaces aw-qt
- Builds like a dream, minimal custom build & release config
Benefits of Tauri:
- Builds cross-platform nicely (see their docs)
- Generates deb and AppImage with a simple
npx tauri build
- Uses Gtk on Linux, and tao on Windows and macOS
- No more messy PyInstaller for the main entrypoint (aw-qt)
- Good docs for code-signing on all platforms
- Includes an updater for
MSI
,.AppImage
,.app
bundle.
- Generates deb and AppImage with a simple
- Contains a webview with an easy interface to Rust code
- Trayicon support
- Mobile support is WIP, and will support iOS.
- Node.js
- Rust
- Tauri CLI (
npm install -g @tauri-apps/cli
) - Tauri dependencies (see their docs)
To run:
npm install
make dev
To build:
make build
- The frontend is in the root folder (NOTE: not yet the actual aw-webui code)
- All rust code is in
src-tauri/
(will likely be moved)
Primary goal is feature-parity with aw-qt. Secondary goal is to add extras supported by Tauri (updater, autostart).
- Run aw-server-rust as part of main executable
- Run ActivityWatch web app within WebView (wry)
- Get basic module manager working
- Start watchers
- Tray icon
- Basic version (open, exit)
- Menu for module manager
- Responsive running/stopped state for watchers (no "update" button)
- Start/stop via modules menu
- Detect bundled & system modules
- Polish
- Remove placeholder Vue app
- Or replace with new UI for module management? (a bit redundant)
- Build aw-webui as part of build process
- Error dialog when module crashes, restart logic
- https://tauri.app/plugin/autostart/
- https://tauri.app/plugin/single-instance/
- Remove placeholder Vue app
This project was initialized with:
sh <(curl https://create.tauri.app/sh)
Click to expand original README
This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 <script setup>
SFCs, check out the script setup docs to learn more.
- VS Code + Volar + Tauri + rust-analyzer
Since TypeScript cannot handle type information for .vue
imports, they are shimmed to be a generic Vue component type by default. In most cases this is fine if you don't really care about component prop types outside of templates. However, if you wish to get actual prop types in .vue
imports (for example to get props validation when using manual h(...)
calls), you can enable Volar's Take Over mode by following these steps:
- Run
Extensions: Show Built-in Extensions
from VS Code's command palette, look forTypeScript and JavaScript Language Features
, then right click and selectDisable (Workspace)
. By default, Take Over mode will enable itself if the default TypeScript extension is disabled. - Reload the VS Code window by running
Developer: Reload Window
from the command palette.
You can learn more about Take Over mode here.