{"id":48992511,"url":"https://github.com/chrisryugj/docufinder","last_synced_at":"2026-06-11T02:01:52.222Z","repository":{"id":352023070,"uuid":"1134921598","full_name":"chrisryugj/Docufinder","owner":"chrisryugj","description":"Anything — 파일을 찾지 말고, 내용을 찾으세요. HWPX · PDF · Office 수천 건의 본문을 1초 만에. 100% 로컬 · 완전 오프라인 · AI Q\u0026A 옵션 (Tauri · React · Rust) | Local content search for Korean PCs — HWP-first, fully offline","archived":false,"fork":false,"pushed_at":"2026-06-01T14:36:07.000Z","size":30362,"stargazers_count":336,"open_issues_count":2,"forks_count":33,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-01T15:26:40.766Z","etag":null,"topics":["desktop-app","document-search","fts5","hwpx","korean","korean-nlp","offline-first","onnx","rag","react","rust","tauri"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chrisryugj.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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-01-15T11:51:32.000Z","updated_at":"2026-06-01T14:59:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/chrisryugj/Docufinder","commit_stats":null,"previous_names":["chrisryugj/docufinder"],"tags_count":64,"template":false,"template_full_name":null,"purl":"pkg:github/chrisryugj/Docufinder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisryugj%2FDocufinder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisryugj%2FDocufinder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisryugj%2FDocufinder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisryugj%2FDocufinder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chrisryugj","download_url":"https://codeload.github.com/chrisryugj/Docufinder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisryugj%2FDocufinder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34178819,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["desktop-app","document-search","fts5","hwpx","korean","korean-nlp","offline-first","onnx","rag","react","rust","tauri"],"created_at":"2026-04-18T15:01:27.473Z","updated_at":"2026-06-11T02:01:52.216Z","avatar_url":"https://github.com/chrisryugj.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"public/anything.png\" alt=\"Anything\" width=\"80\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eAnything\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003e내 PC 문서를 통째로 검색하는 로컬 검색 엔진\u003c/b\u003e\u003cbr/\u003e\n  파일명 몰라도, 열어보지 않아도. 문서 안의 \u003ci\u003e내용\u003c/i\u003e으로 찾습니다.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/chrisryugj/Docufinder/releases\"\u003e\u003cimg src=\"https://img.shields.io/badge/download-Windows-0078D4?style=for-the-badge\u0026logo=windows\" alt=\"Download\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/chrisryugj/Docufinder/releases\"\u003e\u003cimg src=\"https://img.shields.io/badge/version-2.5.7-blue.svg\" alt=\"Version\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://tauri.app\"\u003e\u003cimg src=\"https://img.shields.io/badge/Tauri-2.10-24C8D8.svg\" alt=\"Tauri 2\" /\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-BSL%201.1-blue.svg\" alt=\"License\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/promo.gif\" alt=\"Anything - 문서 내용 검색 데모\" width=\"820\" /\u003e\n\u003c/p\u003e\n\n---\n\n## 이런 걸 할 수 있습니다\n\n### 문서 내용 검색\n폴더를 등록하면 자동으로 인덱싱합니다. 검색창에 키워드를 치면 **문서 안의 본문**에서 결과를 찾아줍니다. 수천 개 문서도 1초 안에.\n\n### 파일명 검색\nEverything처럼 파일명 일부만 입력하면 인메모리 캐시에서 **즉시** 찾습니다. 인덱싱이 끝나기 전에도 사용 가능.\n\n### AI 질의응답 (선택)\n\"2026년 예산 얼마야?\", \"연차 조건이 뭐야?\" 같은 자연어 질문을 하면 인덱싱된 문서에서 관련 부분을 찾아 답변합니다. **근거 문서 + 페이지**까지 표시. Gemini API 키가 필요하며, 없어도 검색은 정상 동작합니다.\n\n### AI 문서 요약 (선택)\n파일 우클릭 → 요약. 계약서, 보고서, 회의록 등 문서 타입에 맞춰 핵심만 뽑아줍니다. 인터넷 없이도 오프라인 요약(TextRank) 가능.\n\n### 실시간 동기화\n파일을 추가/수정/삭제하면 자동으로 반영됩니다. 수동 재인덱싱 필요 없음.\n\n---\n\n## 지원 파일 형식\n\n| 형식 | 확장자 | 비고 |\n|------|--------|------|\n| 한글 | `.hwpx` `.hwp` | HWP5 + **HWP3 (1996~2002 구버전)** kordoc 엔진으로 자동 변환 |\n| 워드 | `.docx` | |\n| 파워포인트 | `.pptx` | |\n| 엑셀 | `.xlsx` `.xls` | 시트·행 위치까지 추적 |\n| PDF | `.pdf` | 스캔 PDF는 OCR 자동 적용 |\n| 이미지 | `.jpg` `.png` `.bmp` `.tiff` | OCR로 텍스트 추출 |\n| 텍스트 | `.txt` `.md` | EUC-KR/CP949 자동 감지 |\n\n---\n\n## 설치\n\n### 다운로드 — 어느 파일을 받아야 하나?\n\n[Releases](https://github.com/chrisryugj/Docufinder/releases) 페이지에서 본인 환경에 맞게 받으세요.\n\n| 내 PC 상황 | 받을 파일 | 크기 |\n|------------|-----------|------|\n| 집 / 개인 PC, Windows 10 (21H2 이상) / Windows 11 | **`Anything_\u003c버전\u003e_x64-setup.exe`** 하나만 | ~365 MB |\n| 회사 PC인데 관리자 권한이 없거나, Windows 10 LTSC 같은 구버전, 또는 첫 실행 때 WebView2 오류가 떴던 분 | **`Anything_\u003c버전\u003e_x64-setup.exe`** + **`MicrosoftEdgeWebView2RuntimeInstallerX64.exe`** | ~365 MB + ~190 MB |\n\n\u003e **WebView2 런타임이 핵심입니다.** 이 앱은 Windows 의 Microsoft Edge WebView2 런타임 위에서 화면을 그립니다. 개인 PC 는 보통 이미 깔려 있어 setup 하나로 끝나지만, WebView2 가 없는 회사 PC / LTSC 환경에서는 `MicrosoftEdgeWebView2RuntimeInstallerX64.exe` 를 **먼저(가능하면 관리자 권한으로)** 설치한 뒤 앱 setup 을 실행하세요.\n\n**공통 요건**\n- RAM 8GB 이상 (16GB 권장) · 디스크 여유 1GB 이상\n- 최초 1회 인터넷 연결 (검색 모델 자동 다운로드, 약 420MB)\n- 이후 새 버전이 나오면 앱 안에서 자동으로 알려줍니다\n\n**오프라인 사내망 / 망간(단방향) 전송 PC 에 설치하려면**\n\n\u003e 과거의 통합본(`...-ltsc-setup.exe`, ~573MB)은 망간 전송에서 파일이 깨지거나 실행이 안 되는 문제로 폐기했습니다. 아래처럼 **두 파일을 나눠서** 옮기세요 (이슈 #29 제보자 검증 — 큰 단일 파일보다 전송 성공률이 높습니다).\n\n1. 인터넷 가능한 PC 에서 두 파일을 받기\n   - `Anything_\u003c버전\u003e_x64-setup.exe`\n   - `MicrosoftEdgeWebView2RuntimeInstallerX64.exe`\n2. 두 파일을 **각각** USB / 망간 전송으로 사내 PC 로 옮기기 (한 번에 하나씩)\n3. 사내 PC 에서 **`MicrosoftEdgeWebView2RuntimeInstallerX64.exe` 를 먼저 설치** (가능하면 관리자 권한)\n4. 이어서 `Anything_\u003c버전\u003e_x64-setup.exe` 더블클릭 — 끝\n   - WebView2 가 이미 있는 PC 라면 1번에서 앱 setup 하나만 옮겨도 됩니다.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e설치 시 보안 경고가 뜰 때\u003c/b\u003e (클릭)\u003c/summary\u003e\n\n개인 개발 앱이라 Microsoft 코드서명 인증서(연 수십만 원)가 없어서 경고가 표시됩니다. **악성코드가 아니며**, 소스코드는 전부 이 저장소에서 확인할 수 있습니다.\n\n**1. \"Windows의 PC 보호\" 파란 창**\n- 좌측 하단 **\"추가 정보\"** 클릭\n- 아래쪽 **\"실행\"** 버튼 클릭\n\n**2. \"스마트 앱 컨트롤이 차단\" (Windows 11)**\n- 파일 탐색기에서 MSI 파일 **우클릭 → 속성**\n- 하단 **\"차단 해제\"** 체크 후 적용\n- 다시 더블클릭으로 실행\n\n**3. 다운로드 자체가 막힐 때 (Edge/Chrome)**\n- 브라우저 다운로드 창에서 **\"...\"(점 3개)** → **\"유지\"** 선택\n- Edge: **\"안전하지 않은 파일 유지\"** 링크 클릭\n\n**4. 백신이 파일을 자동 격리/삭제할 때**\n- Windows Defender: 설정 → \"바이러스 및 위협 방지\" → \"보호 기록\"에서 **복원**\n- 타사 백신 (V3, 알약 등): 실시간 감시 일시 중지 후 재시도\n- 기업 PC는 IT 관리자 문의 (AppLocker 정책)\n\n**5. 설치 후 앱이 안 열릴 때**\n- `%APPDATA%\\com.anything.app\\crash.log` 내용과 함께 [Issues](https://github.com/chrisryugj/Docufinder/issues) 제보\n\n**6. \"WebView2 런타임 오류\" 가 떠서 앱이 안 열려요**\n- 다이얼로그에 *\"You may have it installed on another user account...\"* 같은 영문이 보이거나, \"WebView2\" 가 어쩌고 하는 오류로 시작 자체가 안 되는 경우.\n- **해결: `MicrosoftEdgeWebView2RuntimeInstallerX64.exe` 를 받아 (가능하면 관리자 권한으로) 설치한 뒤 앱을 다시 실행하세요.** 기존 앱은 제거하지 않아도 됩니다.\n- 인덱싱 / 폴더 설정 등 사용자 데이터는 그대로 보존됩니다.\n- 이래도 안 열리면 `%APPDATA%\\com.anything.app\\logs\\` 안의 최신 로그 파일과 함께 [Issues](https://github.com/chrisryugj/Docufinder/issues) 로 제보해 주세요.\n\n\u003c/details\u003e\n\n### macOS (Apple Silicon)\n\n[Releases](https://github.com/chrisryugj/Docufinder/releases) 페이지에서 `.dmg` 파일을 받아 실행.\n\n- **macOS 11 (Big Sur) 이상** · Apple Silicon (M1/M2/M3) 전용\n- Intel Mac 미지원 (필요 시 [Issues](https://github.com/chrisryugj/Docufinder/issues)에 요청)\n- RAM 8GB 이상 권장 · 디스크 여유 1GB 이상\n- **자동 업데이트 미지원** — 새 버전은 수동 다운로드\n\n**설치 순서**\n1. `.dmg` 더블클릭 → Applications 폴더로 드래그\n2. **첫 실행만**: Applications 폴더에서 Anything 우클릭 → \"열기\" → 경고창에서 다시 \"열기\"\n\n**\"손상된 앱\"으로 표시될 때** (Gatekeeper quarantine)\n\n```bash\nxattr -dr com.apple.quarantine /Applications/Anything.app\n```\n\n\u003e Apple Developer ID 인증서 미보유로 ad-hoc 서명만 적용되어 있습니다. 악성코드가 아니며 소스는 이 저장소에서 확인 가능합니다.\n\n---\n\n## 사용법\n\n1. 앱 실행 → 좌측 **\"폴더 추가\"** → 문서 폴더 선택 (자동 인덱싱 시작)\n2. 검색창에 입력 → 결과 클릭으로 미리보기, 더블클릭으로 파일 열기\n3. (선택) AI 패널에서 자연어 질문 → 문서 기반 답변 확인\n\n### 검색 모드\n\n| 모드 | 설명 |\n|------|------|\n| 키워드 | 기본값. 정확한 단어 매칭 |\n| 하이브리드 | 키워드 + 의미 검색 결합 |\n| 시맨틱 | 의미 기반 유사 문서 검색 |\n| 파일명 | Everything 스타일 파일명 검색 |\n\n\u003e 하이브리드/시맨틱 모드는 설정에서 시맨틱 검색을 활성화해야 사용할 수 있습니다.\n\n---\n\n## 보안 \u0026 데이터 흐름\n\n**AI 기능을 끄면 네트워크 통신이 완전히 제로입니다.** 폐쇄망·내부망 환경에서 그대로 사용할 수 있습니다.\n\n| 기능 | 데이터 위치 | 외부 전송 |\n|------|------------|----------|\n| 문서 파싱·인덱싱 | 로컬 SQLite | 없음 |\n| 키워드·시맨틱 검색 | 로컬 FTS5 + 벡터 DB | 없음 |\n| 임베딩 (KoSimCSE) | 로컬 ONNX 모델 | 없음 |\n| OCR (PaddleOCR) | 로컬 ONNX 모델 | 없음 |\n| 파일명 검색 | 로컬 인메모리 캐시 | 없음 |\n| AI 질의응답 | **Gemini API** | 질문 + 관련 청크만 전송 |\n| AI 요약 (온라인) | **Gemini API** | 문서 텍스트 전송 |\n| AI 요약 (오프라인) | 로컬 TextRank | 없음 |\n\n- **원본 파일은 절대 복사되지 않습니다** — 인덱스만 생성\n- **AI 기능은 설정에서 완전히 비활성화** 가능 → 순수 로컬 검색 도구로 동작\n- **API 키는 사용자 PC 로컬에만 저장** — 서버를 거치지 않음\n- **자동 업데이트 확인**은 GitHub Releases 엔드포인트만 조회 (비활성화 가능)\n\n---\n\n## 아키텍처\n\n```\n┌─────────────────────────────────────────────────┐\n│  React 19 + TypeScript + Tailwind CSS           │  ← UI\n├─────────────────────────────────────────────────┤\n│  Tauri 2 IPC                                    │  ← 브릿지\n├─────────────────────────────────────────────────┤\n│  Rust Backend (Clean Architecture)              │\n│  ┌───────────┬───────────┬────────────────────┐ │\n│  │  Parsers  │  Indexer  │  Search Engine     │ │\n│  │  hwpx     │  FTS5     │  키워드 (FTS5)     │ │\n│  │  docx     │  벡터     │  시맨틱 (usearch)  │ │\n│  │  xlsx     │  파일감시  │  하이브리드 (RRF)  │ │\n│  │  pdf/ocr  │           │  파일명 (캐시)     │ │\n│  │  txt      │           │                    │ │\n│  └───────────┴───────────┴────────────────────┘ │\n│  ┌────────────────────────────────────────────┐  │\n│  │  SQLite (FTS5) · usearch (HNSW) · ONNX    │  │  ← 저장소\n│  └────────────────────────────────────────────┘  │\n└─────────────────────────────────────────────────┘\n```\n\n| 영역 | 기술 |\n|------|------|\n| Frontend | React 19, TypeScript 5.9, Tailwind CSS 4 |\n| Backend | Rust 2021, Tauri 2.10 |\n| 검색 | SQLite FTS5 + usearch HNSW + RRF 병합 |\n| 한국어 처리 | Lindera 2.0 형태소 분석 |\n| 임베딩 | ONNX Runtime, KoSimCSE-roberta (768차원) |\n| AI | Gemini API (RAG) |\n| OCR | PaddleOCR ONNX |\n| HWP 파싱 | [kordoc](https://www.npmjs.com/package/kordoc) (번들 포함) |\n\n---\n\n## 개발자용\n\n```bash\npnpm install          # 의존성 설치\npnpm run download-model  # ONNX 모델 다운로드 (첫 빌드 시)\npnpm tauri:dev        # 개발 모드\npnpm tauri:build      # 프로덕션 빌드 (MSI)\n```\n\n**빌드 요구사항**: Windows 10/11 x64 · Node.js 22 LTS + pnpm 10 · Rust 1.92+ · Visual Studio Build Tools 2022\n\n자세한 내용은 [BUILD_GUIDE.md](BUILD_GUIDE.md) · [DEPLOYMENT.md](DEPLOYMENT.md)를 참고하세요.\n\n---\n\n## FAQ\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e폐쇄망/내부망에서 쓸 수 있나요?\u003c/b\u003e\u003c/summary\u003e\n네. AI 기능을 끄면 앱이 외부와 통신하는 경로가 없습니다. ONNX 모델 파일만 수동으로 복사하면 검색·인덱싱·임베딩·OCR 전부 오프라인 동작합니다.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e파일이 외부로 전송되나요?\u003c/b\u003e\u003c/summary\u003e\nAI 질의응답을 쓸 때만 질문과 관련된 텍스트 조각이 Gemini API로 전송됩니다. AI를 끄면 전송되는 데이터는 없습니다. 원본 파일은 어떤 경우에도 외부로 나가지 않습니다.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHWP 파일도 검색되나요?\u003c/b\u003e\u003c/summary\u003e\n네. kordoc 엔진이 앱에 내장되어 있어서 한컴오피스 없이도 .hwp 파일을 파싱합니다.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e인덱싱은 얼마나 걸리나요?\u003c/b\u003e\u003c/summary\u003e\nSSD 기준 약 1,000개 문서에 2~5분. FTS 인덱싱이 먼저 완료되어 바로 검색할 수 있고, 벡터 인덱싱은 백그라운드에서 이어집니다.\n\u003c/details\u003e\n\n---\n\n## 라이선스\n\n[Business Source License 1.1](LICENSE) — Copyright 2025-2026 chrisryugj\n\n- 비프로덕션(개발·테스트·학습) 자유 사용\n- 프로덕션/상용은 별도 라이선스 필요\n- 2030-04-15 이후 Apache License 2.0 자동 전환\n\n상용 라이선스 문의: ryuseungin@gmail.com\n\n---\n\n버그 리포트·기능 제안은 [Issues](https://github.com/chrisryugj/Docufinder/issues)에서 환영합니다.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisryugj%2Fdocufinder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchrisryugj%2Fdocufinder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisryugj%2Fdocufinder/lists"}