No description
  • Vue 53.5%
  • JavaScript 38.9%
  • Rust 7.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-19 12:17:02 +02:00
.github/workflows Add release workflow, local macOS build script, and version bump command 2026-07-18 06:46:50 +02:00
media Initial project setup 2026-06-13 13:34:38 +02:00
scripts Add release workflow, local macOS build script, and version bump command 2026-07-18 06:46:50 +02:00
src Fix title-bar close being blocked by a missing destroy permission 2026-07-19 12:14:23 +02:00
src-tauri Bump version to 0.8.1 2026-07-19 12:17:02 +02:00
tests Fix Touch ID password loss and flush saves on window close and quit 2026-07-19 11:50:20 +02:00
.gitignore Require embedded Developer ID provisioning profile for signed builds 2026-07-18 23:26:33 +02:00
.gitlab-ci.yml Fix GitLab CI Linux job: install xdg-utils for AppImage bundling 2026-07-18 19:42:36 +02:00
.prettierignore Add lint/format tooling, BaseModal a11y refactor, and auth tests 2026-06-18 14:40:24 +02:00
.prettierrc.json Add lint/format tooling, BaseModal a11y refactor, and auth tests 2026-06-18 14:40:24 +02:00
bun.lock Add lint/format tooling, BaseModal a11y refactor, and auth tests 2026-06-18 14:40:24 +02:00
eslint.config.js Add release workflow, local macOS build script, and version bump command 2026-07-18 06:46:50 +02:00
index.html Add lint/format tooling, BaseModal a11y refactor, and auth tests 2026-06-18 14:40:24 +02:00
LICENSE Initial commit 2026-06-13 13:29:41 +02:00
package.json Bump version to 0.8.1 2026-07-19 12:17:02 +02:00
README.md Add release workflow, local macOS build script, and version bump command 2026-07-18 06:46:50 +02:00
TestDatabase.kdbx Add auto-lock, entry history, hotkeys, key file management, and GPLv3 2026-07-18 06:31:01 +02:00
vite.config.js Initial project setup 2026-06-13 13:34:38 +02:00

Kivarion logo

Kivarion

Kivarion is a modern, fast, and secure desktop password manager that works with the KeePass format (.kdbx files). Built with Tauri 2 and Vue 3, it provides a native user experience with a strong focus on security.

Key Features

  • Full KDBX 4 support — securely work with KeePass 2.x databases.
  • Secure decryption — uses Argon2 (WASM) for key derivation.
  • Flexible unlock — open a database with a master password, a key file, or both. The key file is remembered per database.
  • Create databases — make a brand-new .kdbx from the app, protected by a master password.
  • Three-column interface — convenient navigation with a group tree, entry list, and resizable detail panel.
  • Structure management — create, rename, and delete groups and entries.
  • Global search — the search field in the top bar filters entries across the entire database, regardless of the selected group. It searches the Title, UserName, URL, Notes, and custom fields by both name and value. Matching is case-insensitive and substring-based. Protected fields, including passwords and hidden custom fields, are excluded from search.
  • Attachment support — view, preview (images and PDFs), and export files attached to entries.
  • Website favicons — automatically fetch icons for entries through icon.horse.
  • Password generator — create strong passwords with configurable options.
  • Auto-save — immediately write changes to the file after every operation.
  • Personalization — supports light, dark, and system themes.
  • Native experience — integrates with the operating system through Tauri, including dialogs, filesystem access, and system paths.

Platform support

Kivarion targets desktop macOS, Windows, and Linux via Tauri. Some features are platform-specific:

  • Touch ID unlockmacOS only. On other platforms the biometric commands report "not supported" and the option is unavailable; unlock there is password-only.
  • Quick Look attachment previewmacOS only (uses qlmanage). In-app image/PDF preview and export work on all platforms.

Current limitations

These are known gaps (tracked in docs/ToDo.md), called out here so expectations are honest:

  • Attachments are view / preview / export only; adding, renaming, or deleting attachments inside Kivarion is not yet implemented.
  • Recycle Bin — deleting an entry moves it to the KeePass Recycle Bin (when the database has one enabled), but restoring items from the bin inside the app is not yet implemented (you can empty it).

Technology Stack

Component Technology
Core Tauri 2 (Rust)
Frontend Vue 3 (Composition API)
State Pinia
Routing Vue Router
KDBX kdbxweb
Crypto argon2-browser (Bundled WASM)
Styling Vanilla CSS (Variables & Glassmorphism)

Development

Bun is required.

# Install dependencies
bun install

# Run in development mode (Tauri + Vite)
bun run tauri dev

# Build the production version
bun run tauri build

# Lint and format
bun run lint          # ESLint (Vue + JS)
bun run format        # Prettier (write)
bun run format:check  # Prettier (verify only)

# Unit tests
bun test

# Optional E2E smoke (requires tauri-driver, a built app, and a platform supported by tauri-driver)
bun run tauri build --debug
bun run test:e2e

# Bump the app version everywhere it's duplicated
# (package.json, src-tauri/Cargo.toml, src-tauri/Cargo.lock)
bun run bump 0.6.0

Releases

Windows and Linux packages are built by the Release Application GitHub Actions workflow (release.yml), triggered manually (workflow_dispatch); it tags v<version> and publishes a (draft) GitHub release via tauri-action. The macOS build is produced locally with a signing/notarization script (build-mac.sh, not committed — it contains Apple Developer credentials): ./build-mac.sh [universal|intel|silicon|both].

Note (Linux/AppImage): the release pipeline strips the bundled Wayland/DRM client libraries (libwayland-*, libgbm, libdrm*) from the AppImage after packaging so they resolve from the host — otherwise WebKitGTK's EGL init fails on recent Mesa (see the repack step in release.yml). A locally built AppImage does not get this treatment; if it aborts with EGL_BAD_PARAMETER, remove those libraries from the AppImage the same way.

Test Database

TestDatabase.kdbx is a sample database for local testing only. It contains no real secrets.

Password: 123

License

Kivarion is licensed under the GNU General Public License v3.0 only. See LICENSE.

Project Structure

src/
├── main.js              # Vue and crypto engine initialization
├── App.vue              # Root component and global style tokens
├── store.js             # Pinia store (database, credentials, theme)
├── pages/               # Main screens: HomePage, DatabasePage, SettingsPage
├── components/          # Modular UI (modals, header, EntryDetail, GroupTree, etc.)
├── composables/         # Shared logic (auth, actions, resizing, icons, attachments)
├── crypto-init.js       # kdbxweb configuration for Argon2
├── dbHelper.js          # Low-level filesystem operations
└── utils.js             # Formatting and password generation utilities

src-tauri/
├── capabilities/        # Plugin permission configuration (http, dialog)
├── src/
│   ├── main.rs          # Rust entry point
│   └── lib.rs           # Plugin registration and custom commands
└── tauri.conf.json      # Tauri build configuration

Security

  • The master password is not persisted by default. If you enable Touch ID unlock, the password is stored in the macOS Keychain so it can be retrieved (as plaintext, into the app) after a successful biometric check. It is protected at rest by the OS Keychain, not "never stored". Touch ID is only triggered by an explicit action — Kivarion never prompts for it automatically.
  • Sensitive fields are handled through the kdbxweb library's ProtectedValue.
  • The webview has no direct filesystem access: all database/attachment file I/O goes through dedicated Rust commands operating only on a path you picked via a native dialog.
  • On macOS, previewing an attachment with Quick Look writes the decrypted file to a private temporary location and deletes it after the preview closes; the OS may still cache previews.
  • Saves are durable and atomic (temp file → fsync → rename), and detect external modification before overwriting. Rotating .bak backups (configurable in Settings) are kept next to the database; they are encrypted KDBX copies, not plaintext.