Bu dosya, kod tabanında çalışan herhangi bir geliştirme aracına / asistana / katkı sağlayan kişiye bağlam verir. Buradaki kararlar refleksle uygulanmalı; gerekçesiz değiştirilmemelidir.
Klipo, cross-platform (Windows v0.1, macOS v0.2) bir clipboard manager'dır. Hız + gizlilik + opt-in E2E sync + AI transform katmanlarıyla tasarlandı. Tarihsel olarak ClipFlow adıyla başladı, Klipo'ya rebrand edildi.
| Karar | Değer | Gerekçe |
|---|---|---|
| Framework | Tauri 2.0 | Electron şişman, native çift kod tabanı sürdürülemez |
| Frontend | React 18 + TypeScript 5 + Vite | Aydoğan'ın deneyimi, ekosistem |
| Styling | Tailwind 3 + shadcn/ui (copy-in) | Tasarım sistemi, bundle kontrolü |
| State | Zustand | Redux gereksiz, Zustand 1KB |
| DB | SQLite + sqlx + FTS5 | Yerel-öncelikli, full-text search |
| Backend lang | Rust 1.83+ | Tauri'nin native dili, perf |
| Hotkey | tauri-plugin-global-shortcut |
Resmi plugin |
| Crypto | sodiumoxide (libsodium) |
OpenSSL DEĞİL — libsodium daha az foot-gun |
| Lisans | Apache-2.0 | Patent grant, business-friendly |
| Hotkey default (Windows) | Ctrl+Alt+V |
Ctrl+Shift+V paste-without-formatting çakışması |
| Pkg manager | pnpm | npm DEĞİL |
- Faz A — Mimari & spec'ler:
docs/doldur, benchmark prototip yaz. ✅ tamamlandı. - Faz B — Windows v0.1 MVP build: M1 Skeleton → M7 Release. M1-M5.x.1 tamamlandı.
- Faz C — macOS v0.2: Mac mini erişimi gelince. NSPasteboard watcher, vibrancy, codesign+notarize.
- Faz D — v0.3 Sync + AI: E2E sync server + client, AI transform actions.
- Kullanıcı clipboard içeriği logda asla görünmez. Sadece SHA-256 hash + uzunluk loglanır.
- Telemetri default OFF. Açıkça opt-in olmadan tek byte network gönderilmez.
unsafeRust sadece OS API wrap için, her zaman// SAFETY:yorumlu.- TypeScript'te
anyyasak.unknownkullan, narrow et. - AI sonucu otomatik paste edilmez. Kullanıcı her zaman approve eder.
- Sensitive item tespit edilince RAM'de 30s sonra zeroize.
mlockile swap'a yazılmaz. - Conventional Commits (feat/fix/chore/docs).
- Her PR yeşil olmalı:
cargo fmt --check,cargo clippy -- -D warnings,cargo test,pnpm typecheck,pnpm lint,pnpm test.
klipo/
├── src/ # React frontend (PopupPanel, Settings, ClipCard, ipc.ts)
├── src-tauri/src/ # Rust backend
│ ├── clipboard/ # watcher_windows.rs, normalize.rs, sensitive.rs, paste.rs, pipeline.rs, source_app.rs
│ ├── storage/ # clips.rs, search.rs, blob.rs, migrations/
│ ├── commands.rs
│ └── lib.rs
├── docs/ # Mimari spec'leri
├── bench/ # criterion crate
└── .github/workflows/ # ci.yml, release-windows.yml
- Cold start → popup visible: <300ms p95
- Search 1k clips: <50ms p95
- Insert clip: <20ms p95
- RAM idle: <100MB (WebView2 baseline'ı dahil)
- RAM 10k clips: <250MB
Bu sayılar Faz A benchmark sonuçlarıyla doğrulanır; tutmuyorsa mimari revize edilir.
PRD detaylı ama 6 noktada gerçek-dünyaya çarpıyor — çözümleri uygulandı:
Ctrl+Shift+VWindows'ta meşgul →Ctrl+Alt+V✅tauri-plugin-app-iconmevcut değil → native shim (windows-rs) ✅enigopaste flaky → WindowsSendInput, macOSCGEventPostdirekt ✅- Mica Win 11 only → Win 10 acrylic fallback, ARM64 solid ✅
- NSPasteboard 250ms drain → 500ms default, locked iken 2000ms (Faz C)
- FTS5 Türkçe
ı/i/I/İ→ migration 002_turkish_fts.sql ile rebuild ✅
- Plan → Apply → Verify protokolü. Non-trivial değişiklik öncesi 3-7 satır plan, sonra uygula, sonra
cargo test+ lint. - Mimaride dallandırıcı bir karar varsa dur ve sor.
- "Boring beats clever" — popüler/iyi-belgelenmiş kütüphane > akıllı çözüm.
- Spec varsa ona uy. Spec yoksa, sor veya
docs/altına ek bir spec yazıp PR'la bağla.