Skip to content

brainless/dwata

Repository files navigation

Dwata

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.

What is available now

  • 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.

Run the backend

Install the Rust toolchain, then start the API from the repository root:

cargo run -p dwata-api

By 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/health

The 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 and AI providers

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:2b

OpenAI 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.

Privacy and storage

  • 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.

Development

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 --workspace

Support

License

GPL v3 — see LICENSE.

About

AI enabled insights from emails, calendars, contacts, files, Slack, databases, web... Fast, private and local. Launching soon!

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages