README file from
GithubHackMD Push
One-click push your Obsidian notes to HackMD.
Features
- Push the current note to HackMD with a single command or ribbon click
- Create or update — the plugin remembers the remote note ID and syncs to the same note on subsequent pushes
- Title & tags synced automatically from frontmatter
- Frontmatter stripped before upload so HackMD shows clean content
- Auxiliary commands: copy link, open in browser, unlink note
Installation
Manual (current)
- Download the latest
obsidian-hackmd-push.zipfrom Releases - Unzip and place the
obsidian-hackmd-pushfolder into your vault's.obsidian/plugins/directory - In Obsidian: Settings → Community plugins → Enable HackMD Push
Only main.js and manifest.json are required to run the plugin.
Setup
- Open Settings → HackMD Push
- Click ① 開啟 HackMD 設定頁 to open
hackmd.io/settings#apiin your browser (you must be logged in) - Create a new API token on that page
- Paste the token into ② 貼上 Token
- Click ③ 驗證 — you should see your HackMD username appear
Usage
With any Markdown note open:
| Action | How |
|---|---|
| Push to HackMD | Command palette → Push current note to HackMD, or click the cloud icon in the ribbon |
| Copy link | Command palette → Copy HackMD link |
| Open in browser | Command palette → Open in HackMD |
| Unlink note | Command palette → Unlink from HackMD |
On first push the plugin creates a new HackMD note and writes three fields into your frontmatter:
hackmd-id: abc123xyz
hackmd-url: https://hackmd.io/@username/note-slug
hackmd-pushed-at: 2026-07-28T00:00:00.000Z
Subsequent pushes update the same remote note.
Frontmatter integration
The plugin reads the following frontmatter fields before uploading:
title: My Note Title # used as the HackMD note title; falls back to filename
tags: [CISSP, security] # synced to HackMD tags; string or array both accepted
The frontmatter block itself is stripped from the uploaded content.
Default permissions
| Permission | Default |
|---|---|
| Read | Everyone (guest) |
| Write | Signed-in users |
| Comment | Disabled |
All three can be changed in Settings.
Security note
Your API token is stored in plain text at .obsidian/plugins/hackmd-push/data.json. If your vault is synced via iCloud, Obsidian Sync, or Git, the token travels with it. Treat it like a password and regenerate it if you suspect exposure.
Known limitations
- Local attachments (
![[image.png]]) are not uploaded — HackMD cannot access files on your machine - Wikilinks (
[[note]]) are not converted — they appear as plain text on HackMD - Sync is one-way: Obsidian → HackMD. Edits made on HackMD will be overwritten on next push
- Obsidian callouts (
> [!note]) are not converted to HackMD container syntax
Development
git clone https://github.com/EnyaWu/obsidian-hackmd-push
cd obsidian-hackmd-push
npm install
# watch mode (symlink main.js into your vault's plugin folder for live reload)
npm run dev
# production build
npm run build
See ARCHITECTURE.md for a detailed breakdown of every source file.
License
MIT