Hyeoncheol Choi67 downloadsAutomatically sync a mapped folder to NAVER MYBOX (upload/rename/move/trash) with a manual pull, via the MYBOX Open API.
Sync a mapped folder in your Obsidian vault with NAVER MYBOX cloud storage. File creations, edits, renames, moves and deletions inside the mapped folder are pushed automatically; remote changes are pulled on demand. Built on the MYBOX Open API, following the "event trigger + batch" model of obsidian-git.
MVP scope: one-way automatic push (local → remote) plus a manual pull, a single mapped folder, and delete-as-trash. Two-way sync with conflict resolution, scheduled polling, multiple folder mappings, OAuth and shared folders are planned for later versions.
이 플러그인은 아래 항목에 해당하므로, Obsidian 개발자 정책에 따라 명시합니다.
An account is required. You need a NAVER account with MYBOX enabled, and a Personal Access Token (PAT) issued from the MYBOX web settings. Without a PAT the plugin cannot sync anything. The plugin itself is free; MYBOX storage quota follows your own NAVER account plan.
Network use. The plugin sends requests to exactly one remote service: the MYBOX Open API, whose base URL is set in the plugin settings. It is contacted only to list, upload, download, rename, move and trash files inside the folder you mapped — that is the entire purpose of the plugin. No other host is contacted.
No telemetry, no ads. The plugin collects no analytics and displays no advertisements. Diagnostic
logging is entirely local: it is on by default and writes only to
.obsidian/plugins/mybox-sync/mybox-sync.log inside your vault, trimmed to the last 2000 lines.
You can turn it off in the plugin settings.
Files outside the vault are never accessed. All local reads and writes go through the Obsidian vault API and stay within your vault.
⚠️ Security note: your PAT is stored in plain text in the plugin's data file, as Obsidian provides no credential store. Anyone with access to your vault files can read it. Treat the token like a password and revoke it from MYBOX web if your vault is ever exposed.
파일을 지우면 원격에서도 휴지통으로 이동할 뿐 영구 삭제하지 않습니다(FR-25).
npm install
npm run test # 단위 테스트 (vitest run)
npm run typecheck # 타입체크
npm run build # 프로덕션 번들(main.js)
npm run dev # 워치 빌드
빌드 산출물을 로컬 볼트에 바로 넣어보려면:
scripts/deploy-to-vault.sh "/절대경로/내Vault"
실제 MYBOX 서버를 호출하므로 기본 테스트에서는 제외되어 있습니다.
MYBOX_PAT과 MYBOX_BASE를 모두 지정해야 실행되며, 하나라도 없으면 조용히 건너뜁니다.
MYBOX_PAT=mbx_pat_xxx MYBOX_BASE=https://open-api.mybox.naver.com \
npx vitest run --config vitest.integration.config.ts
src/
├─ main.ts 엔트리(라이프사이클·이벤트·명령 조립)
├─ pluginPaths.ts 플러그인 데이터 파일 경로 계산(순수)
├─ settings/ 설정 스키마·UI
├─ sync/
│ ├─ VaultWatcher.ts 디바운스 버퍼
│ ├─ coalesce.ts 이벤트 병합(순수)
│ ├─ diff.ts push/pull 결정 로직(순수, 핵심)
│ ├─ SyncEngine.ts 오케스트레이션
│ ├─ SyncStateStore.ts 매핑·baseline 영속화
│ ├─ pathMap.ts 경로 매핑(순수)
│ └─ ObsidianLocalGateway.ts Vault 파일 IO
├─ api/
│ ├─ MyboxApiClient.ts Open API 클라이언트
│ ├─ ObsidianHttpClient.ts requestUrl 래퍼
│ ├─ RateLimiter.ts 스로틀러·백오프·일일 카운터(순수)
│ └─ HttpClient.ts HTTP 경계 인터페이스
└─ ui/
├─ StatusBar.ts 상태 표시·알림
├─ RemoteFolderModal.ts 원격 폴더 선택 모달
└─ folderNav.ts 모달 탐색 상태(순수)
스펙: docs/specs/obsidian-mybox-plugin-spec.md · 플랜: docs/plans/obsidian-mybox-plugin-mvp.md