An offline-first CalDAV task manager built with Tauri 2.0, Rust, and SvelteKit.
# Install from bundle (when available)
flatpak install --user potasko.flatpak
flatpak run net.kurowski.potaskoSee Building Flatpak section below.
This project uses a devcontainer with all dependencies pre-installed. Open in VS Code with the Dev Containers extension or use GitHub Codespaces.
pnpm install
pnpm tauri devThe app database initializes automatically. For CLI usage, set up the dev database:
cd src-tauri
cp .env.example .env
sqlx database create
sqlx migrate runAfter changing SQL queries, regenerate the cache:
cargo sqlx prepareThe potasko CLI tests backend functionality without the GUI:
# Build CLI
cargo build --bin potasko
# Task operations
potasko task list --list 1
potasko task add "Buy groceries" --list 1 --due 2026-01-10 --priority 2
potasko task complete 1
# List operations
potasko list list
potasko list add "Work"
# Account operations (CalDAV)
potasko account list
potasko account add --name "Local" --server http://localhost:5232 --username test --password test
potasko account test 1
# Sync operations
potasko sync account 1 # Discover calendars + sync all lists
potasko sync list 1 # Sync a single list
# Options
potasko --format json task list --list 1 # JSON output
potasko --database ./custom.db task list # Custom DB pathRadicale is a lightweight CalDAV server that auto-starts with the devcontainer (auth disabled for development).
cd src-tauri
# Add the test account (any username/password works)
./target/debug/potasko account add --name "Radicale" --server http://localhost:5232 --username test --password test
# Create a calendar on the server
curl -u test:test -X MKCALENDAR "http://localhost:5232/test/tasks/"
# Sync account - discovers calendars and imports them as lists
./target/debug/potasko sync account 1
# View imported lists
./target/debug/potasko list list
# Add a task and sync
./target/debug/potasko task add "Test task" --list 2
./target/debug/potasko sync account 1Run the sync integration tests against Radicale:
cd src-tauri
# Ensure Radicale is running
sudo service radicale start
# Run E2E tests (sequential due to shared server)
cargo test --test sync_e2e -- --test-threads=1Run end-to-end tests for the GUI using WebdriverIO and tauri-driver:
pnpm test:e2eThis will automatically:
- Build the Tauri app in debug mode
- Start Radicale for CalDAV testing
- Launch tauri-driver
- Run tests that interact with the actual GUI
rm -rf /tmp/radicale-dataOr simply restart the devcontainer.
# Check status
sudo service radicale status
# Start/stop/restart
sudo service radicale start
sudo service radicale stop
sudo service radicale restartFirst, install the Flatpak development tools (only needed once):
scripts/setup-flatpak.shThen build the Flatpak package:
# Build and export to local repo
flatpak-builder --repo=repo --force-clean build-dir net.kurowski.potasko.yml
# Create distributable bundle
flatpak build-bundle repo potasko.flatpak net.kurowski.potasko
# Install locally for testing
flatpak install --user potasko.flatpakRun the Flathub linter before submitting:
# Lint the manifest
flatpak run --command=flatpak-builder-lint org.flatpak.Builder manifest net.kurowski.potasko.yml
# Lint the built repo
flatpak run --command=flatpak-builder-lint org.flatpak.Builder repo repodocs/PLAN.md- Architecture and feature roadmapdocs/IMPLEMENTATION.md- Detailed implementation notes and session log