Safely synchronize Markdown and supported native workspace files with Youdao Note.
YNote Sync is an unofficial, desktop-only Obsidian plugin for synchronizing a Youdao Note workspace with an Obsidian vault.
It is designed as a working two-way client rather than a read-only exporter: it can pull cloud changes, track local changes, review conflicts, and push approved changes back to Youdao Note.
[!WARNING] This project is under active development. Back up both your Obsidian vault and important Youdao notes before using it with production data.
YNOTE_PC), and MCP authentication profiles.Feature availability depends on the selected provider and file format. Some native formats are editable, while others are currently view-only or require a compatible Obsidian community plugin.
There is no stable community-plugin release yet.
git clone <repository-url>
cd obsidian-ynote
npm install
npm run build
Create the following directory in your vault:
<vault>/.obsidian/plugins/ynote-sync/
Copy these files into it:
main.js
manifest.json
styles.css
Restart Obsidian, open Settings → Community plugins, and enable YNote Sync.
The plugin stores credentials, synchronization state, reports, and caches under the configured root:
.ynote-sync/
Do not commit this directory, cookies, Client Tokens, logs, or captured network traffic.
The primary command performs one coordinated workflow:
The left-ribbon sync button and the command-palette entry use the same implementation.
Use Initial/full pull only for first-time initialization, rebuilding a vault, or recovery. It is separate from quick daily synchronization.
Use the file or folder context menu to push a specific item. The local repository manager can scan, filter, convert, and queue multiple local files.
obsidian-ynote/
├── src/
│ ├── adapters/ Special-file adapters
│ ├── assets/ Embedded resource handling
│ ├── auth/ Authentication and credential storage
│ ├── commands/ Command and file-menu entry points
│ ├── converter/ Native-to-Markdown conversion
│ ├── local-repository/ Local repository manager
│ ├── provider/ Web, MCP, and CLI provider boundaries
│ ├── sync/ Pull, Push, Journal, conflict, and job logic
│ ├── ui/ and views/ Obsidian modals and custom views
│ └── main.ts Plugin lifecycle and registration
├── scripts/ Diagnostics and provider smoke-test CLIs
├── schemas/ Provider and Web model schemas
├── tests/ Unit and integration tests
├── manifest.json Obsidian plugin manifest
├── styles.css Plugin styles
└── package.json Build and development commands
Runtime data is written to .ynote-sync/ inside the configured vault root.
On upgrade, the plugin automatically renames the legacy .youdao-sync/
directory when .ynote-sync/ does not already exist. If both directories
exist, neither is overwritten and the plugin reports the conflict.
npm install
npm run typecheck
npm test
npm run build
Useful diagnostic commands:
npm run ynote:doctor
npm run ynote:web:smoke
npm run ynote:mcp:smoke
Update all release metadata with one command:
./set-version.sh 0.1.4
This synchronizes manifest.json, package.json, package-lock.json, and
versions.json. The equivalent npm command is
npm run version:set -- 0.1.4.
Commit and push the release source.
In GitHub Actions, run Release Obsidian plugin and enter that exact
version without a v prefix.
The manual workflow type-checks, tests, builds, validates the release metadata,
and publishes main.js, manifest.json, styles.css, and
ynote-sync-x.y.z.zip as Release assets.
Commands that can modify cloud data require explicit confirmation or an explicit apply flag. Never use real credentials in fixtures, logs, issues, or screenshots.
This project is not affiliated with or endorsed by Youdao.
Licensed under the MIT License.