leon269 downloadsImport Feishu cloud docs into your local vault as Markdown.
Import Feishu or Lark cloud documents into your Obsidian vault as local Markdown, with browser OAuth login, incremental sync, and optional image and attachment downloads.
npm install
npm run build
Build output is written to:
dist/feishu-importer/main.jsdist/feishu-importer/manifest.jsondist/feishu-importer/versions.jsonCopy those files into your Obsidian plugin folder:
<vault>/.obsidian/plugins/feishu-importer/
This plugin uses user OAuth, which is the right fit for a public community plugin because imports run with the signed-in user's permissions.
Open the Feishu or Lark developer console:
From the app's credentials page, copy:
App IDApp SecretIn the plugin settings, click Copy Redirect URI, then paste it into:
Feishu Open Platform -> Your App -> Security Settings -> Redirect URLs
Default value:
http://127.0.0.1:27124/callback
In the plugin settings, click Copy Permission JSON. Use it as a checklist for:
Feishu Open Platform -> Your App -> Permissions & Scopes
Required scopes:
docx:document:readonlyoffline_accessIf you want local image and attachment download, you may also need the relevant drive/media read permission in your Feishu app, depending on your tenant policy.
If you hit a re-authorization error such as 99991679, start here:
Open Settings -> Community plugins -> Feishu Importer and configure:
Platform: choose Feishu China or Lark GlobalApp IDApp SecretImport folder: where Markdown notes should be savedAssets folder: where downloaded images and attachments should be savedDownload images and attachments: enable local asset syncThen click Connect and complete the browser login.
Feishu Importer: Import Feishu documentFeishu Importer: Connect Feishu accountFeishu Importer: Refresh Feishu loginFeishu Importer: Disconnect Feishu accountFeishu Importer: Sync last imported document incrementallyFeishu Importer: Sync all imported documents incrementallyFeishu Importer: Import Feishu documentThe plugin will:
Once a document has been imported, the plugin stores its latest revision ID.
Sync last imported document incrementally rechecks only the most recent imported documentSync all imported documents incrementally rechecks every tracked documentIf the remote revision has not changed, the plugin skips the rewrite.
Imported notes include frontmatter like:
---
title: "Example Doc"
source: "https://example.feishu.cn/docx/..."
feishu_doc_token: "abc123"
feishu_revision_id: 42
imported_at: "2026-04-15T00:00:00.000Z"
---
When asset download is enabled:
Assets folder/<Document Title>/npm install
npm run typecheck
node --test --import tsx tests/url.test.ts tests/markdown.test.ts tests/feishuClient.test.ts
npm run build
App Secret to the local plugin