Local-first secret auditing for developers

Audit your secrets before they become breaches.

Local-first security auditing for .env files, API keys, and developer secrets. Runs entirely on your machine. No cloud, no accounts, no telemetry.

dotward scan ./
Scanning 28 variables in ENV_PROD...
[CRITICAL] GH_TOKEN — live GitHub token detected, rotate immediately
[HIGH] SECRET_KEY — weak entropy (1.2 bits/char), use a random value
[HIGH] FILE_STORAGE — known default value detected
[MEDIUM] MAIL_PASSWORD — secret is 9 chars, min 16 recommended
[CLEAN] DATABASE_URL — ok
[CLEAN] ENCRYPTION_KEY — ok
 
Risk Score: 73 / 100 · 1 critical · 7 high · 2 medium · 18 clean
Rotate GH_TOKEN immediately. 28 variables have no expiry set.
Download · $20 one-time · no subscription
No subscription. No account. No cloud. Ever.
Security Overview — actual app
Dotward
Projects Security Settings Lock
ENV 1  Security Report
28 variables · Last analysed: just now
Global View
94
/ 100 Excellent
1
Critical
7
High
2
Medium
0
Low
0
Expired
0
Expiring ≤7D
0
Has Expiry
18
Clean
Conformance Checks
Live Cloud Key
1
Weak / Default Value
7
Placeholder Value
Low Entropy
1
Short Secret
1
URL Format
Low Char Diversity
Security Posture
Credential Strength Value Hygiene Rotation Cover No Live Keys nat Compliance Expiry Health
Recommendations
!
1 live service key(s) detected — rotate immediately and consider using a secrets manager.
7 variable(s) use known weak or default values — replace with strong random secrets.
1 secret(s) have low entropy — use a cryptographically random generator.
i
1 secret(s) are shorter than recommended — minimum 16 chars, ideally 32+.
02 — Analysis

Eight checks. One score.

Runs automatically on import and on manual rescan. Works in memory — never decrypts to audit.

01 Shannon Entropy Scoring

Measures unpredictability per character. A string of all 'a's scores 0. A strong random token scores 3.8+. Below 2.5 bits/char is flagged high risk — the number tells you exactly how weak.

Cryptographic
02 Live Cloud Key Detection

Pattern-matched against known credential prefixes — GitHub (ghp_), AWS (AKIA), Stripe (sk_live_), Google (AIza). A real live key in your file is flagged critical immediately.

Pattern Match
03 Rotation Reminders

Set expiry on any secret — 30d, 60d, 90d, or a specific date. Dotward notifies you before keys go stale. Expired and expiring within 7 days tracked separately, clearly.

Monitoring
04 Master Password Vault

Everything locked behind a master password. The derived key lives in memory only — close the app, it's gone. The file on disk is an encrypted blob. Useless without you.

Encryption
05 CLI Integration

Scan, audit, and export from your terminal and CI pipelines without opening the desktop app. Generate a CLI token in Settings and inject variables directly into your shell.

Pipeline
06 Import / Export .env

Import any .env file. Dotward parses, audits, encrypts, and stores in one pass. Export back to .env at any time — clean, decrypted, ready.

Workflow

03 — Security

Not just hidden. Sealed.

Every cryptographic decision has a reason. Here's exactly what happens to your secrets.

Key Derivation
PBKDF2-SHA256 · 600,000 iterations

OWASP 2023 standard. Your master password is never stored. An attacker with your database file needs ~0.5s per guess. A 10-character password is economically infeasible to brute-force.

Encryption
AES-256-GCM · per variable · unique nonce

Every secret encrypted independently with a random 96-bit nonce. GCM provides confidentiality and authenticity — any tampering detected via a 16-byte auth tag.

Key Storage
Memory only · never written to disk

The derived encryption key lives in session memory only. Close the app and it's gone. The SQLite file contains encrypted blobs — useless without the key.

Recovery
Key wrapping · backup codes · offline

Backup codes wrap your master key using AES-GCM. Recovery returns the original key with zero data loss. No email reset. No server call. Codes shown once, never stored.

crypto.py — per-variable encryption
# Key derived from master password — never stored on disk
enc_key = PBKDF2(password, salt, length=32, iterations=600_000)
session['enc_key'] = enc_key.hex()   # memory only

# Every variable encrypted independently
nonce          = os.urandom(12)          # 96-bit, unique per value
ciphertext, tag = AES_256_GCM.encrypt(
    key   = enc_key,
    nonce = nonce,
    data  = value.encode()
)
stored_blob = base64( nonce + tag + ciphertext )
# this is what touches disk. useless without the key.
04 — Privacy

What Dotward never does.

Security tools should be held to a higher standard. Here's exactly how Dotward handles your data.

Runs fully offlineNo network connections, ever. Your secrets never leave your machine.
No telemetryNo usage tracking, no analytics, no crash reporting sent anywhere.
No cloud syncThere is no server. No account. Nothing to breach on our end.
AES-256-GCM vaultEvery secret encrypted individually. Keys held only in memory while unlocked.
Keys never touch diskDerived from your master password via PBKDF2 · 600k iterations. Gone on lock.
Open architectureNo obfuscation. The crypto implementation is documented and reviewable.
05 — Category

Not a sync tool. An audit tool.

Dotward is not a secret synchronization platform. It's a local-first auditing tool — focused on identifying risky credentials before they become incidents. Doppler syncs your secrets. dotenvx encrypts them. Dotward tells you when they're weak, stale, or dangerous.

Doppler
$10–$30 / user / month
Secrets stored on their servers
No entropy scoring
Subscription required
+ Rotation reminders
Works offline
Dotward
$20 · one-time
+ Fully local, zero cloud
+ Shannon entropy scoring
+ One-time purchase
+ Rotation reminders
+ Works offline, always
dotenvx
Free / open source
+ Local encryption
No security scoring
No rotation reminders
No risk dashboard
No live key detection
06 — Pricing

One price. No tricks.

$20
One-time · Lifetime License
+ Desktop — Mac ARM64 · Windows x64
+ CLI integration · terminal and CI pipelines
+ Unlimited secrets and projects
+ Shannon entropy scoring per variable
+ Live cloud key pattern detection
+ Rotation reminders and expiry tracking
+ Security posture radar dashboard
+ AES-256-GCM · PBKDF2 · 600k iterations
+ Backup codes with key wrapping
+ No cloud · No account · No subscription
Instant download · Works offline · No recurring fees · Ever.