{"id":45653495,"url":"https://github.com/pher-lab/knot","last_synced_at":"2026-04-27T08:05:09.744Z","repository":{"id":337639506,"uuid":"1153971845","full_name":"pher-lab/knot","owner":"pher-lab","description":"Privacy-first encrypted note-taking app. Zero-knowledge, fully offline.","archived":false,"fork":false,"pushed_at":"2026-03-07T08:18:30.000Z","size":1566,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-07T15:42:10.833Z","etag":null,"topics":["e2e-encryption","encryption","note-taking","privacy","rust","tauri"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pher-lab.png","metadata":{"files":{"readme":"README.ja.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-09T21:56:40.000Z","updated_at":"2026-03-07T08:18:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pher-lab/knot","commit_stats":null,"previous_names":["pher-lab/knot"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/pher-lab/knot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pher-lab%2Fknot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pher-lab%2Fknot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pher-lab%2Fknot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pher-lab%2Fknot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pher-lab","download_url":"https://codeload.github.com/pher-lab/knot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pher-lab%2Fknot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30284628,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["e2e-encryption","encryption","note-taking","privacy","rust","tauri"],"created_at":"2026-02-24T07:20:14.017Z","updated_at":"2026-03-09T06:01:11.389Z","avatar_url":"https://github.com/pher-lab.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"**日本語** | [English](README.md)\n\n# Knot\n\n**あなたにしか解けない結び目。**\n\nKnotは、プライバシーを最優先にした暗号化ノートアプリです。すべてのデータはローカルで暗号化されます。サーバーなし、クラウドなし、平文がディスクに触れることもありません。ゼロ知識アーキテクチャ——あなたのノートを読めるのはあなただけです。\n\n\u003e **ステータス**: アルファ (v0.4.0) — Windowsでテスト済み。macOS/Linuxビルドは動作するはずですが未検証です。\n\n![メインエディタ](docs/screenshots/main_editor.png)\n\n## 機能\n\n- **二重暗号化** — SQLCipherがデータベース全体を暗号化し、XChaCha20-Poly1305がノート内容を個別に暗号化\n- **強力な鍵導出** — Argon2id（メモリ64MB、3イテレーション、4並列レーン）\n- **リカバリーキー** — BIP39の12単語ニーモニック。PDF出力対応。HKDF-SHA256で導出\n- **Markdownエディタ** — CodeMirror 6ベース。シンタックスハイライト、ツールバー、自動保存\n- **Markdownプレビュー** — 編集とプレビューをワンクリックで切り替え。GFM対応（テーブル、タスクリスト、打ち消し線）\n- **Wikiリンク** — `[[ノート名]]` でノート間リンク。存在しないノートはクリックで自動作成\n- **AND検索** — スペース区切りでタイトル・本文・タグを横断検索\n- **タグ** — ノートにタグを付けて整理。サイドバーでタグフィルター、オートコンプリート\n- **ピン留め** — 重要なノートをリストの先頭に固定\n- **インポート/エクスポート** — Markdownファイル（.md）の単体・一括インポート/エクスポート\n- **パスワード変更** — データを失わずにボールトのパスワードを変更\n- **自動ロック** — 設定可能なアイドルタイムアウト。ロック時にメモリから鍵を消去\n- **ブルートフォース保護** — 5回失敗で30秒ロックアウト（再起動後も持続）\n- **右クリックメニュー** — ノートリストからピン留め、エクスポート、削除\n- **テーマ** — ダーク / ライト / システム（スムーズなトランジション付き）\n- **日本語/英語対応**\n- **キーボードショートカット** — `Ctrl+N` 新規ノート、`Ctrl+F` 検索、`Ctrl+L` ロック\n\n\u003cdetails\u003e\n\u003csummary\u003eスクリーンショット\u003c/summary\u003e\n\n### Markdownプレビュー\n![Markdownプレビュー](docs/screenshots/markdown_preview.png)\n\n### ボールト作成\n![セットアップ](docs/screenshots/setup.png)\n\n### 検索・タグ\n![検索](docs/screenshots/sidebar_search.png)\n\n\u003c/details\u003e\n\n## セキュリティ\n\n### アーキテクチャ\n\n```\n  パスワード                    リカバリーフレーズ（12単語）\n     │                                │\n     ▼                                ▼\n  Argon2id                      HKDF-SHA256\n  (64MB/3/4)                  (ドメイン分離)\n     │                                │\n     ▼                                ▼\n  Master Key                    Recovery KEK\n     │                                │\n     └──────────────┬─────────────────┘\n                    ▼\n                   DEK  ← ランダム生成\n                    │\n              ┌─────┴─────┐\n              ▼           ▼\n          SQLCipher    XChaCha20-Poly1305\n        (DB全体)     (ノート個別)\n```\n\n- **ディスク上に平文なし** — ノートの内容もタイトルも暗号化してから保存\n- **鍵はメモリ上のみ** — ロック時にDEKをゼロクリアして破棄\n- **最小権限** — Tauri APIは `all: false`、`shell.open` のみ許可\n- **テレメトリなし、ネットワーク通信なし** — 完全オフライン\n\n### セキュリティに関する注意\n\n\u003e **本ソフトウェアは正式なセキュリティ監査を受けていません。** 暗号化の設計はベストプラクティスに従っていますが（RustCryptoライブラリ、Argon2id、XChaCha20-Poly1305）、第三者による独立したレビューは実施されていません。**現段階では、重要なデータの唯一の保存先としての使用は推奨しません。**\n\n既知のセキュリティ上のトレードオフは [`docs/DESIGN_DECISIONS.md`](docs/DESIGN_DECISIONS.md) に記録しています。特に：\n- フロントエンドのパスワードや復号内容はJavaScript/WebViewのメモリモデルの制約上、確実なゼロクリアが困難\n\n### セキュリティレビュー歓迎\n\nコミュニティからのセキュリティレビューを歓迎します。脆弱性や暗号化実装への懸念がある場合：\n\n- **責任ある開示**: 公開Issueの前に [knot.wackiness531@passinbox.com](mailto:knot.wackiness531@passinbox.com) へメールしてください\n- **コードレビュー**: 暗号化の実装は [`src-tauri/src/crypto/`](src-tauri/src/crypto/) にあります\n- **設計ドキュメント**: [`docs/DESIGN_DECISIONS.md`](docs/DESIGN_DECISIONS.md) と [`docs/SPECIFICATION.md`](docs/SPECIFICATION.md) を参照\n\n## インストール\n\n### ビルド済みバイナリ（推奨）\n\n[リリースページ](https://github.com/pher-lab/knot/releases)から `.exe` または `.msi` インストーラーをダウンロードして実行してください。\n\n### ソースからビルド\n\n**前提条件:**\n- [Node.js](https://nodejs.org/) (v18+)\n- [Rust](https://rustup.rs/) (最新のstable)\n- [Strawberry Perl](https://strawberryperl.com/) (Windowsのみ — SQLCipherビルドに必要。MSYS2のPerlでは不可)\n  - `C:\\Strawberry\\perl\\bin` がPATH内でMSYS2より前にあること\n\n```bash\n# 依存関係のインストール\nnpm install\n\n# 開発\nnpm run tauri:dev\n\n# インストーラーのビルド\nnpm run tauri:build\n```\n\nビルドされたインストーラーは `src-tauri/target/release/bundle/` にあります。\n\n## 使い方\n\n1. **ボールトを作成** — マスターパスワード（8文字以上）を設定。オプションでリカバリーキーを生成し、PDFを安全な場所に保管。\n2. **ノートを書く** — Markdown記法が使えます。ツールバーで簡単にフォーマット。入力中に自動保存。\n3. **プレビュー** — ツールバーの目のアイコンをクリックして、編集とプレビューを切り替え。\n4. **ノートをリンク** — `[[ノート名]]` と入力してノート間にリンクを作成。\n5. **整理** — タグを付けて分類、ピン留めで固定、サイドバーでタグフィルター。\n6. **検索** — サイドバーの検索バーか `Ctrl+F` で検索。スペースでAND検索。\n7. **ロック** — ロックアイコンか `Ctrl+L` でロック。暗号化キーがメモリから消去されます。\n8. **リカバリー** — パスワードを忘れた場合、12単語のリカバリーフレーズで新しいパスワードを設定。\n\n## 既知の制限事項（アルファ版）\n\n- **Windowsのみテスト済み** — macOSとLinuxビルドは動作するはずですが未検証\n- **同期なし** — 現時点では完全ローカル\n- **自動アップデートなし** — 新バージョンは手動更新が必要\n\n## 技術スタック\n\n| レイヤー | 技術 |\n|---------|------|\n| フロントエンド | React 19, TypeScript, Vite 7, Tailwind CSS 4, Zustand, CodeMirror 6 |\n| バックエンド | Rust, Tauri 1.8, SQLCipher, RustCrypto (chacha20poly1305, argon2, hkdf, bip39) |\n| テスト | 131テスト（Rust 100 + フロントエンド 31） |\n\n## 開発\n\n```bash\nnpm run tauri:dev      # 開発サーバー起動（フロントエンド + バックエンド）\nnpm run tauri:build    # プロダクションビルド\n\n# テスト実行\ncd src-tauri \u0026\u0026 cargo test    # Rustテスト (100)\nnpm run test:run              # フロントエンドテスト (31)\n```\n\n## フィードバック・連絡先\n\nフィードバックをお待ちしています。\n\n- **バグ報告・機能要望**: [GitHub Issues](https://github.com/pher-lab/knot/issues)\n- **セキュリティ脆弱性**: [knot.wackiness531@passinbox.com](mailto:knot.wackiness531@passinbox.com)（責任ある開示をお願いします）\n- **一般的なお問い合わせ**: [knot.wackiness531@passinbox.com](mailto:knot.wackiness531@passinbox.com)\n- **メンテナー**: [@pher-lab](https://github.com/pher-lab)\n\n## 謝辞\n\n### AI支援開発\n\nこのプロジェクトは [Claude Code](https://claude.ai/code)（Anthropic）を活用して開発されました。透明性はこのプロジェクトの核となる価値観です。\n\n- **AIが生成**: コード、テスト、ドキュメントの大部分はClaude Codeが記述\n- **人間が指揮**: アーキテクチャ、機能の優先順位、セキュリティのトレードオフ判断はすべて開発者が決定\n- **人間がレビュー**: すべてのコード変更は開発者がレビュー・承認してから統合\n- **AIセキュリティレビュー**: AIによるセキュリティレビューを実施（結果は [`docs/HANDOFF.md`](docs/HANDOFF.md) を参照）——正式な監査の代替では**ありません**\n\n## ライセンス\n\n[AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html) — プライバシーツールは透明であるべきだから。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpher-lab%2Fknot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpher-lab%2Fknot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpher-lab%2Fknot/lists"}