zktww48 downloadsSync Feishu and Lark documents into your local vault.
Feishu Lark Sync is a desktop-only Obsidian plugin for mirroring Feishu and Lark documents into a local vault.
Version 1.0.1 includes a Sync Center, guided setup, conflict resolution, recovery and verified release packaging for the doc/docx pull workflow:
lark-cli profile configurationlark-cli through stdin and never persisted by the plugin_attachments foldersSheet, Base, Slides and Mindnote are discovered but not yet converted. Ordinary Drive files are not imported. Whiteboards are represented by a placeholder. Remote disappearance never deletes a local note.
<!-- feishu-sync:start --> and <!-- feishu-sync:end -->.feishu_* frontmatter is preserved.Resolve conflicts in Sync Center → Compare / resolve. Choose keep-local (pause), preserve the local managed content in a separate local section and apply remote, or back up and use remote. Applying remote always backs up the complete local note first. Edits after the preview abort the operation. Missing notes require explicit restoration or relinking; do not delete files to force a sync.
lark-cli, bind your own app, authorize read-only user access, then verify identity.Settings and UI follow Obsidian's English / Simplified Chinese language. Changes during a task take effect on the next run. Changing the target folder does not move existing notes; changing media policy does not rewrite already-synced documents. Scheduled runs with no changes stay quiet. Failures delay the next attempt with exponential backoff, capped at 6 hours.
Obsidian 1.13+ uses searchable settings sections; versions 1.11.4–1.12 use the compatible legacy settings page. Real-app and cross-platform acceptance is tracked separately from automated tests in the release checklist.
Existing source/schedule settings are retained. New installations use manual sync by default. Reload the plugin after updating. State is validated and migrated on first load, keeping data.pre-v1.json; subsequent writes atomically replace data.json and retain data.backup.json. Each completed document is checkpointed. A note found without its baseline is treated as a conflict, not automatically adopted.
Damaged or unknown-version state blocks synchronization. Use Sync Center's explicit recovery confirmation. The current file is retained as data.recovered-*.json; auto-sync is disabled after recovery. If no backup is available, keep the files and ask for recovery help—do not reset state to force adoption.
Conflict backups are private note-backup-*.md files in the plugin directory. State, history and backups contain document metadata or contents. They are ignored by Git and excluded from the release ZIP, but your vault backup/sync software may still copy them. No automatic backup or unused-media deletion is performed.
Requirements:
lark-clinpm install
npm run dev
For a production build:
npm run check
Build a verified, local-only release archive:
npm ci --ignore-scripts
npm run package
dist/feishu-lark-sync-1.0.1.zip contains nine allowlisted files: main.js, manifest.json, styles.css, the two READMEs, LICENSE, CHANGELOG.md, PRIVACY.md and THIRD_PARTY_NOTICES.txt. Standalone files and SHA256SUMS.txt are also generated under dist/1.0.1/. Complete bundled-dependency notices are embedded in main.js, including community installs. The ZIP has its own checksum. Packaging never traverses the working directory or includes state/note backups. It does not publish anything. CI is configured for Linux, macOS and Windows. See the release checklist before public release.
Maintainers prepare public releases using the manually dispatched Prepare release workflow on an existing version tag. It requires the three-platform CI matrix, verifies that the tag, manifest and workflow commit agree, and generates GitHub build-provenance attestations for the standalone assets and ZIP. Publishing is a separate, explicit step using those exact artifacts. Never replace assets or move tags on an already published version; release a new patch version instead.
Copy these files to an Obsidian vault plugin directory for local testing:
manifest.jsonmain.jsstyles.cssExample target:
<vault>/.obsidian/plugins/feishu-lark-sync/
When lark-cli is installed through NVM, enter the absolute path returned by command -v lark-cli in plugin settings. The plugin adds that executable directory to the child-process PATH so Obsidian launched from Finder can resolve the matching Node.js runtime.
wiki:wiki:readonly, docx:document:readonly, and drive:drive:readonly.lark-cli config init --app-secret-stdin.child_process.spawn with shell: false.See docs/architecture.md for the component design.
Use requires a Feishu/Lark account, your own application and a separately installed official lark-cli. The plugin does not automatically install/update the CLI. The CLI manages configuration, profiles and credentials outside the vault using its own platform-dependent storage (the official CLI describes OS-native credential storage). Not persisting credentials in plugin settings does not mean the CLI stores nothing.
The CLI contacts Feishu/Lark API/auth services. Media downloads contact trusted CDN hosts or explicitly allowed extra domains; rendering remote images can also make network requests. There is no plugin telemetry or maintainer-operated relay. The configured executable runs with your user privileges. State, conflict backups, resource URLs and notes may be private, including signed media links. Disabling/uninstalling does not delete notes or revoke external CLI authorization. See PRIVACY.md.
See CONTRIBUTING.md, SECURITY.md, and open-source readiness. Use synthetic or redacted examples in public issues; never attach the working plugin directory.
MIT for this project. Bundled dependencies retain their own licenses; see THIRD_PARTY_NOTICES.txt, generated during build and embedded in main.js.