packages/core/src/vault/. The underlying storage is SQLite via libsql, with optional Turso cloud sync.
Storage Location
By default, the vault database is at~/.grind/vault.db. This can be overridden via GRIND_VAULT_PATH.
Encryption
The vault is encrypted at rest using libsql’s AES encryption extension. The key is stored at~/.grind/.key and set via GRIND_ENCRYPTION_KEY.
Turso Sync
For optional cloud backup and multi-device sync, configure a Turso database:Migrations
Migrations are SQL files inpackages/core/drizzle/. The migration runner in vault/client.ts applies them on startup.
The standard Drizzle migration runner uses Postgres-compatible syntax for migration tracking. Grind replaces it with a custom SQLite-compatible runner that uses a simple drizzle_migrations table.
To generate a new migration after schema changes:
Schema
13 tables defined with Drizzle ORM invault/schema.ts: users, quests, quest_logs, proofs, skills, rituals, signals, forge_rules, forge_runs, trust_log, companion_settings, conversations, messages. All timestamps are Unix epoch integers; primary keys are UUIDs.