Bambu Bar
Monitor Bambu Lab printers from your Mac menu bar: print progress, the live camera, AMS filament, alerts and desktop widgets. Bambu Bar for macOS 26+.
Papy(페이피)는 PDF·한글(HWP/HWPX)·Word(DOCX·DOC) 문서를 보고 편집하는 소스 공개 문서 앱으로, 개인·비상업 용도는 무료입니다. 보기·편집 모드 전환, 저장·형식 변환을 회원가입·광고·서버 업로드 없이 내 컴퓨터에서 합니다. Windows·macOS·Linux.
Translation pending
ProductivityGitHub @namjh654OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
Source-available cross-platform PDF·HWP/HWPX document viewer and editor (PolyForm Noncommercial 1.0.0)
Loading the full README.
Read the full README ↗Source-available cross-platform document viewer and editor (PolyForm Noncommercial 1.0.0).
PDF 와 한국어 문서(HWP/HWPX)를 우선 지원하는 비상업 용도 무료·오프라인 우선 통합 문서 앱입니다. 회원가입·광고·서버 업로드 없이, 사용자가 선택한 파일만 로컬에서 엽니다.
상태: 안정판 v0.4.1. PDF·HWP·HWPX·DOCX·DOC(Word 97–2003) 보기, HWP·HWPX·DOCX 편집·저장(DOC 는 DOCX 등 다른 형식으로 저장), PDF 로 내보내기를 할 수 있습니다. 옮기지 못하는 요소가 있으면 열 때 알려 주지만, 중요한 문서는 사본으로 써 주세요. 시험판 v0.5.0-rc.1: 선택 설치하는 AI 도우미 플러그인(대화창·MCP 서버, ADR 0009). 지원 포맷·기능은 실제 테스트 문서와 회귀 테스트로 검증된 범위만 이 README 에 표시합니다.
| 영역 | 상태 |
|---|---|
Rust 엔진 (engine/) | 세션·상한·취소·오류 코드, 포맷 판별. PDF = PDFium(papy-pdf), HWP/HWPX = rhwp(papy-hwp): 열기·렌더·텍스트, 목차(PDF 책갈피·HWP/HWPX 개요 문단·DOCX 제목 스타일), 문서 글자 찾기, 그리지 못한 개체(차트·OLE·데이터 없는 그림) 쪽마다 알림, 암호 문서. HWP 3.x 는 보기 전용(PDF·텍스트로 내보내기). 편집: HWP/HWPX 본문(입력·서식·되돌리기), PDF 주석·쪽 편집. 저장·변환: HWPX·HWP·PDF·텍스트 |
데스크톱 (apps/desktop/) | Tauri 2. 보기 모드: 열기(대화상자·끌어다 놓기·파일 더블클릭), 연속 스크롤, 확대/축소, 썸네일·목차·찾기·텍스트 사이드바, 암호, 최근 문서. 편집 모드(⌘E): HWP/HWPX/DOCX 글자 입력·한글 입력기·서식·정렬, PDF 형광펜·밑줄·취소선·펜·텍스트 상자·메모·쪽 회전/삭제/이동·쪽의 글자 고쳐 쓰기. 저장(⌘S)·다른 이름으로 저장·다른 형식으로 내보내기. 고급 편집(표·개체·머리말·각주)은 rhwp-studio 를 앱에 넣어 처리(ADR 0005, macOS 확인). 화면 한국어·English. macOS·Windows·Linux 패키징을 CI 에서 빌드 |
웹 (apps/web/) | Vite + React 골격. 문서 기능 없음 |
모바일 (apps/mobile/) | KMP 템플릿(namjh654/kmp)을 편입해 Rust 엔진을 UniFFI 로 연결(ADR 0006). 최근 문서·문서 보기(HWP·HWPX·DOCX 는 엔진, PDF 는 운영체제)·암호, 확대 후 다시 그리기, 커서 편집·글자 모양·서식 지키는 문단 바꾸기·되돌리기·저장, 표 칸·글상자 안 편집과 표 넣기·행열·합치기, 그림 넣기·크기·지우기, 칸 안 위·아래 줄 이동, 목차·찾기, PDF 로 내보내기, 앱 안 오픈소스 라이선스 화면. Android 에뮬레이터·iOS 시뮬레이터에서 확인, Android 릴리스 준비(R8·16KB·ABI) |
| 회귀 테스트 | 손상 파일 168가지(기본 cargo test), rhwp 샘플 1,268개·16,320쪽 기준값 비교·첫 쪽 표시 시간, 무작위 손상 반복·장시간 반복(손으로 실행) — test-corpus.md |
| Word (DOCX) | 열기·편집·DOCX 저장, HWP·HWPX·PDF·텍스트와 상호 변환(papy-office: DOCX ↔ rhwp 문서 구조). 본문·글자/문단 서식·표(병합)·그림(읽기·쓰기) 지원. 머리말·꼬리말·각주·미주·번호 목록(글자)·도형(사각형·타원·선·글상자, 묶음 도형은 풀어서)·제목(목차)도 옮김. 차트·묶음 안 그림·표 안 각주·첫 쪽 머리말은 아직 옮기지 않으며 열 때 빠진 개수를 알림 |
| XLSX·PPTX | 미구현 |
papy/
├── engine/ Rust 문서 엔진 workspace (UI 프레임워크에 의존하지 않음)
├── apps/
│ ├── desktop/ Tauri 2.x stable + React/TypeScript (Windows/macOS/Linux)
│ ├── web/ Vite + React/TypeScript 브라우저 뷰어 (골격, WASM PoC 전)
│ └── mobile/ KMP — Android Compose + iOS SwiftUI, 엔진은 UniFFI
├── packages/ web·desktop 이 실제로 공유하는 JS 코드만 (현재 config)
├── docs/ 아키텍처·엔진·포맷·결정 기록·개발 가이드
├── tests/ 포맷별 테스트, fixtures(배포 권리가 확인된 문서만)
├── scripts/ 빌드·검증 자동화
├── website/ 소개·다운로드·설치·사용법 사이트 (Vercel)
└── .github/ CI, Issue/PR 템플릿
의존 방향은 항상 engine → 앱 입니다. 엔진은 Tauri·React·Compose·SwiftUI 를 참조하지 않습니다. 자세한 구조는 docs/architecture/overview.md, 단계별 진행·남은 일은 docs/development/roadmap.md.
| 도구 | 버전 (고정 위치) |
|---|---|
| Rust | 1.99.1 (rust-toolchain.toml) |
| Node.js | 24 이상 (package.json engines) |
| pnpm | 10.27.0 (packageManager) |
| Tauri | crate 2.12.5 / CLI·API 2.12.4 (stable) |
| 모바일 | JDK 21(Gradle 데몬, 자동 내려받기), Android SDK, Xcode(macOS) — apps/mobile/README.md |
Tauri 의 OS 별 선행 조건(Xcode Command Line Tools, Windows 의 WebView2·MSVC Build Tools)은 Tauri 공식 문서를 따릅니다. 전체 버전 목록은 docs/development/versions.md.
pnpm install
pnpm engine:vendor # 외부 엔진(rhwp 소스, PDFium) 고정 버전 받기 — 엔진·데스크톱 빌드 전에 한 번
# 엔진
cd engine && cargo test --workspace
# 데스크톱 (개발 실행 / 패키징)
pnpm desktop:dev
pnpm --filter @papy/desktop tauri build
# 웹
pnpm web:dev
# 모바일 (apps/mobile)
cd apps/mobile && scripts/orca.sh check
소스 코드와 배포 파일(설치 프로그램·바이너리) 모두 PolyForm Noncommercial 1.0.0
(SPDX: PolyForm-Noncommercial-1.0.0)을 따릅니다.
LICENSE 전문(또는 URL)과 Required Notice: 줄을 함께 전달해야 합니다.