https://github.com/pher-lab/knot
Privacy-first encrypted note-taking app. Zero-knowledge, fully offline.
https://github.com/pher-lab/knot
e2e-encryption encryption note-taking privacy rust tauri
Last synced: 2 months ago
JSON representation
Privacy-first encrypted note-taking app. Zero-knowledge, fully offline.
- Host: GitHub
- URL: https://github.com/pher-lab/knot
- Owner: pher-lab
- License: agpl-3.0
- Created: 2026-02-09T21:56:40.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-03-07T08:18:30.000Z (4 months ago)
- Last Synced: 2026-03-07T15:42:10.833Z (4 months ago)
- Topics: e2e-encryption, encryption, note-taking, privacy, rust, tauri
- Language: TypeScript
- Homepage:
- Size: 1.49 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.ja.md
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
README
**日本語** | [English](README.md)
# Knot
**あなたにしか解けない結び目。**
Knotは、プライバシーを最優先にした暗号化ノートアプリです。すべてのデータはローカルで暗号化されます。サーバーなし、クラウドなし、平文がディスクに触れることもありません。ゼロ知識アーキテクチャ——あなたのノートを読めるのはあなただけです。
> **ステータス**: アルファ (v0.4.0) — Windowsでテスト済み。macOS/Linuxビルドは動作するはずですが未検証です。

## 機能
- **二重暗号化** — SQLCipherがデータベース全体を暗号化し、XChaCha20-Poly1305がノート内容を個別に暗号化
- **強力な鍵導出** — Argon2id(メモリ64MB、3イテレーション、4並列レーン)
- **リカバリーキー** — BIP39の12単語ニーモニック。PDF出力対応。HKDF-SHA256で導出
- **Markdownエディタ** — CodeMirror 6ベース。シンタックスハイライト、ツールバー、自動保存
- **Markdownプレビュー** — 編集とプレビューをワンクリックで切り替え。GFM対応(テーブル、タスクリスト、打ち消し線)
- **Wikiリンク** — `[[ノート名]]` でノート間リンク。存在しないノートはクリックで自動作成
- **AND検索** — スペース区切りでタイトル・本文・タグを横断検索
- **タグ** — ノートにタグを付けて整理。サイドバーでタグフィルター、オートコンプリート
- **ピン留め** — 重要なノートをリストの先頭に固定
- **インポート/エクスポート** — Markdownファイル(.md)の単体・一括インポート/エクスポート
- **パスワード変更** — データを失わずにボールトのパスワードを変更
- **自動ロック** — 設定可能なアイドルタイムアウト。ロック時にメモリから鍵を消去
- **ブルートフォース保護** — 5回失敗で30秒ロックアウト(再起動後も持続)
- **右クリックメニュー** — ノートリストからピン留め、エクスポート、削除
- **テーマ** — ダーク / ライト / システム(スムーズなトランジション付き)
- **日本語/英語対応**
- **キーボードショートカット** — `Ctrl+N` 新規ノート、`Ctrl+F` 検索、`Ctrl+L` ロック
スクリーンショット
### Markdownプレビュー

### ボールト作成

### 検索・タグ

## セキュリティ
### アーキテクチャ
```
パスワード リカバリーフレーズ(12単語)
│ │
▼ ▼
Argon2id HKDF-SHA256
(64MB/3/4) (ドメイン分離)
│ │
▼ ▼
Master Key Recovery KEK
│ │
└──────────────┬─────────────────┘
▼
DEK ← ランダム生成
│
┌─────┴─────┐
▼ ▼
SQLCipher XChaCha20-Poly1305
(DB全体) (ノート個別)
```
- **ディスク上に平文なし** — ノートの内容もタイトルも暗号化してから保存
- **鍵はメモリ上のみ** — ロック時にDEKをゼロクリアして破棄
- **最小権限** — Tauri APIは `all: false`、`shell.open` のみ許可
- **テレメトリなし、ネットワーク通信なし** — 完全オフライン
### セキュリティに関する注意
> **本ソフトウェアは正式なセキュリティ監査を受けていません。** 暗号化の設計はベストプラクティスに従っていますが(RustCryptoライブラリ、Argon2id、XChaCha20-Poly1305)、第三者による独立したレビューは実施されていません。**現段階では、重要なデータの唯一の保存先としての使用は推奨しません。**
既知のセキュリティ上のトレードオフは [`docs/DESIGN_DECISIONS.md`](docs/DESIGN_DECISIONS.md) に記録しています。特に:
- フロントエンドのパスワードや復号内容はJavaScript/WebViewのメモリモデルの制約上、確実なゼロクリアが困難
### セキュリティレビュー歓迎
コミュニティからのセキュリティレビューを歓迎します。脆弱性や暗号化実装への懸念がある場合:
- **責任ある開示**: 公開Issueの前に [knot.wackiness531@passinbox.com](mailto:knot.wackiness531@passinbox.com) へメールしてください
- **コードレビュー**: 暗号化の実装は [`src-tauri/src/crypto/`](src-tauri/src/crypto/) にあります
- **設計ドキュメント**: [`docs/DESIGN_DECISIONS.md`](docs/DESIGN_DECISIONS.md) と [`docs/SPECIFICATION.md`](docs/SPECIFICATION.md) を参照
## インストール
### ビルド済みバイナリ(推奨)
[リリースページ](https://github.com/pher-lab/knot/releases)から `.exe` または `.msi` インストーラーをダウンロードして実行してください。
### ソースからビルド
**前提条件:**
- [Node.js](https://nodejs.org/) (v18+)
- [Rust](https://rustup.rs/) (最新のstable)
- [Strawberry Perl](https://strawberryperl.com/) (Windowsのみ — SQLCipherビルドに必要。MSYS2のPerlでは不可)
- `C:\Strawberry\perl\bin` がPATH内でMSYS2より前にあること
```bash
# 依存関係のインストール
npm install
# 開発
npm run tauri:dev
# インストーラーのビルド
npm run tauri:build
```
ビルドされたインストーラーは `src-tauri/target/release/bundle/` にあります。
## 使い方
1. **ボールトを作成** — マスターパスワード(8文字以上)を設定。オプションでリカバリーキーを生成し、PDFを安全な場所に保管。
2. **ノートを書く** — Markdown記法が使えます。ツールバーで簡単にフォーマット。入力中に自動保存。
3. **プレビュー** — ツールバーの目のアイコンをクリックして、編集とプレビューを切り替え。
4. **ノートをリンク** — `[[ノート名]]` と入力してノート間にリンクを作成。
5. **整理** — タグを付けて分類、ピン留めで固定、サイドバーでタグフィルター。
6. **検索** — サイドバーの検索バーか `Ctrl+F` で検索。スペースでAND検索。
7. **ロック** — ロックアイコンか `Ctrl+L` でロック。暗号化キーがメモリから消去されます。
8. **リカバリー** — パスワードを忘れた場合、12単語のリカバリーフレーズで新しいパスワードを設定。
## 既知の制限事項(アルファ版)
- **Windowsのみテスト済み** — macOSとLinuxビルドは動作するはずですが未検証
- **同期なし** — 現時点では完全ローカル
- **自動アップデートなし** — 新バージョンは手動更新が必要
## 技術スタック
| レイヤー | 技術 |
|---------|------|
| フロントエンド | React 19, TypeScript, Vite 7, Tailwind CSS 4, Zustand, CodeMirror 6 |
| バックエンド | Rust, Tauri 1.8, SQLCipher, RustCrypto (chacha20poly1305, argon2, hkdf, bip39) |
| テスト | 131テスト(Rust 100 + フロントエンド 31) |
## 開発
```bash
npm run tauri:dev # 開発サーバー起動(フロントエンド + バックエンド)
npm run tauri:build # プロダクションビルド
# テスト実行
cd src-tauri && cargo test # Rustテスト (100)
npm run test:run # フロントエンドテスト (31)
```
## フィードバック・連絡先
フィードバックをお待ちしています。
- **バグ報告・機能要望**: [GitHub Issues](https://github.com/pher-lab/knot/issues)
- **セキュリティ脆弱性**: [knot.wackiness531@passinbox.com](mailto:knot.wackiness531@passinbox.com)(責任ある開示をお願いします)
- **一般的なお問い合わせ**: [knot.wackiness531@passinbox.com](mailto:knot.wackiness531@passinbox.com)
- **メンテナー**: [@pher-lab](https://github.com/pher-lab)
## 謝辞
### AI支援開発
このプロジェクトは [Claude Code](https://claude.ai/code)(Anthropic)を活用して開発されました。透明性はこのプロジェクトの核となる価値観です。
- **AIが生成**: コード、テスト、ドキュメントの大部分はClaude Codeが記述
- **人間が指揮**: アーキテクチャ、機能の優先順位、セキュリティのトレードオフ判断はすべて開発者が決定
- **人間がレビュー**: すべてのコード変更は開発者がレビュー・承認してから統合
- **AIセキュリティレビュー**: AIによるセキュリティレビューを実施(結果は [`docs/HANDOFF.md`](docs/HANDOFF.md) を参照)——正式な監査の代替では**ありません**
## ライセンス
[AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html) — プライバシーツールは透明であるべきだから。