Share Obsidian notes as unlisted WordPress pages in seconds.
Quickli consists of two parts working together:
- Obsidian plugin (
obsidian-plugin/) to publish notes, update shares, set passwords, and revoke links. - WordPress plugin (
wordpress-plugin/) to store/render shares and serve unlisted URLs.
- Share any Obsidian note via a unique unlisted URL (
/q/<token>/) - Optional password protection per share
- Optional expiry (
7 days,12 hours, etc.) - Update existing shares instead of creating duplicates
- Revoke shares from Obsidian
- Copy/open/email share links from the Obsidian modal
- Optional upload of local images to WordPress Media before publish
- Share complete standalone HTML documents via the same unlisted
/q/<token>/URL flow vaultredirect pages (/vault/<vault>/<path>) that launchobsidian://open?...
The screenshots below are sanitized (sensitive values are redacted).
quickli/
├─ obsidian-plugin/
│ ├─ main.ts
│ ├─ main.js
│ ├─ manifest.json
│ ├─ styles.css
│ └─ package.json
├─ wordpress-plugin/
│ └─ quickli-share.php
└─ docs/
└─ screenshots/
- In Obsidian, the plugin reads the current note.
- Markdown is rendered to HTML.
- Optional: local images are uploaded to
wp-json/wp/v2/mediaand links are replaced. - Obsidian calls
POST /wp-json/quickli-share/v1/sharewith Basic Auth (WordPress application password). - WordPress stores the share as a private custom post type (
quickli_share) with metadata (token, expiry, source path). - The public unlisted URL is returned and shown in Obsidian.
Install wordpress-plugin/quickli-share.php as a standard WordPress plugin and activate it.
After activation, Quickli provides:
- REST endpoints under
quickli-share/v1 - Unlisted share route:
/q/<token>/ - Vault redirect route:
/vault/<vault>/<path>
Build/copy the plugin in your Obsidian vault plugin directory:
cd obsidian-plugin
npm install
npm run buildThen enable Quickli Share inside Obsidian Community Plugins.
Set these values in the plugin settings:
- WordPress site URL (e.g.
https://quickli.net) - WordPress username
- WordPress application password
- Default expiry (optional)
- Upload local images (optional)
- Open share after upload (optional)
Share noteCopy share URLSet or clear share passwordRevoke share
A status bar item shows whether the current note is shared and if it is password-protected.
Base path:
/wp-json/quickli-share/v1
Endpoints:
POST /share→ create or update a shareGET /share/{id}→ fetch share metadataDELETE /share/{id}→ revoke share
To share a full HTML document, send:
{
"title": "Meeting document",
"share_type": "html_document",
"content_html": "<!doctype html>..."
}HTML document shares are served as-is, without the Quickli wrapper, while keeping the same unlisted token URL, password support, expiry support, and noindex headers. Use this only for trusted HTML generated by you.
Local standalone HTML files can be uploaded with:
QUICKLI_USERNAME=... QUICKLI_APP_PASSWORD=... \
node scripts/share-html.mjs /path/to/document.html "Meeting document"The script stores the returned share_id in .quickli-shares.json next to the HTML file. Running the same command again updates the existing share and keeps the public URL stable. Use QUICKLI_SHARE_ID=... or QUICKLI_STATE_FILE=... when you need to override that mapping.
Auth/permissions:
- Uses WordPress authentication (Application Passwords)
- Permission callback requires capability:
edit_posts
- Share links are unlisted, not indexed pages.
- Tokenized URLs are generated with cryptographically secure randomness (
random_bytes). - Share pages send noindex headers (
X-Robots-Tag: noindex, nofollow, noarchive). - Password protection is supported per share.
- Expiry can auto-delete old shares via daily cleanup cron.
Before publishing this repository:
- Do not commit real credentials, app passwords, or private base URLs.
- Keep screenshots redacted (as in
docs/screenshots/). - Avoid committing local artifacts (
.DS_Store, local logs, exports).
Current versions in this repo:
- WordPress plugin header:
0.4.0 - Obsidian manifest:
0.1.0
No license file is currently included in this repository.
Add a LICENSE file before wider public distribution.


