Dwata is a local-first Rust backend for connecting email accounts, storing mail
in SQLite, and using LLM agents to extract financial data and knowledge-graph
entities. Email data stays on the machine running dwata-api unless you choose
an external AI provider.
Warning
Dwata is an active restart. The native cross-platform UI is planned but is not shipped yet. This repository currently provides the backend API and Rust agent components; it does not provide a downloadable desktop application.
dwata-api: an Actix-web JSON-over-HTTP API with local SQLite storage, email/OAuth integration, search, download jobs, and extraction endpoints.dwata-agents: Rust agents for financial and knowledge-graph extraction.shared-types: Rust domain and API types shared by the backend and agents.
The API is intended to be the server boundary for the restart. A future native Rust UI will compose with the same application capabilities; the former web and Tauri desktop applications are no longer part of the project.
Install the Rust toolchain, then start the API from the repository root:
cargo run -p dwata-apiBy default it listens on 127.0.0.1:8080. Verify that the service and SQLite
connection are available:
curl http://127.0.0.1:8080/api/healthThe first start creates a configuration file in the OS configuration directory
when neither config.toml nor ../config.toml exists:
- macOS:
~/Library/Application Support/dwata/config.toml - Linux:
~/.config/dwata/config.toml - Windows:
%APPDATA%\dwata\config.toml
Copy and adapt config.example.toml if you need to set
the listen address, OAuth client credentials, AI-provider keys, or search
index path. See the developer guide for configuration, database,
and agent-development details.
Gmail OAuth uses a Google OAuth client configured under [google_oauth] in
config.toml. The redirect URI is derived from [server] as
http://<host>:<port>/api/oauth/google/callback; register that exact URI with
your OAuth application.
For local inference, install Ollama and pull the default model:
ollama pull qwen3.5:2bOpenAI and Gemini keys can instead be configured in
[ai_provider_api_keys]. Using an external provider sends the applicable
extraction prompts and content to that provider.
- SQLite data is local. Its default path is OS-specific; see DEVELOP.md.
- Credentials are stored as SQLite metadata plus secrets in the OS keychain.
- Ollama inference is local; third-party AI providers are not.
Backend development needs Rust. SQLite's CLI is optional for inspecting the database. Node.js, TypeScript, Tauri, and a web GUI are not required or included in the current workspace.
Useful commands:
cargo fmt --check
cargo test --workspace
cargo build --workspaceGPL v3 — see LICENSE.