Diego Eis69 downloadsSync notes to Ghost CMS with post scheduling, YAML metadata control, and periodic sync.
One-way synchronization from Obsidian to Ghost CMS with post scheduling, YAML metadata control, automatic sync, and an editorial calendar view.
g_published_at--members-only--main.jsmanifest.jsonstyles.css.obsidian/plugins/ folderghost-writer-manager.obsidian/plugins/ghost-writer-manager/Clone this repository:
git clone https://github.com/diegoeis/ghost-writer-manager-plugin.git
cd ghost-writer-manager-plugin
Install dependencies:
npm install
Configure your vault path for hot reload:
cp dev.config.example.json dev.config.json
# Edit dev.config.json with your vault path
Start dev mode with hot reload:
npm run dev
This will automatically:
main.js, manifest.json, and styles.css to your vaultEnable the plugin in Obsidian settings
Reload Obsidian (Ctrl/Cmd + R) to see changes
id:secret)Open Obsidian Settings
Navigate to Ghost Writer Manager under Community Plugins
Configure the following:
https://yourblog.ghost.io)Ghost Posts)g_)Click Test Connection to verify your credentials
Note: Your Admin API Key is stored securely using Obsidian's keychain and is not saved in plain text.
Open the editorial calendar from the ribbon icon or via Cmd/Ctrl + P → "Open Ghost editorial calendar". The sidebar shows all published and scheduled posts for the current month:
Available commands (Cmd/Ctrl + P):
Control all Ghost post metadata using YAML frontmatter:
---
g_post_access: paid # Visibility: public, members, or paid
g_published: false # Draft (false) or published (true)
g_published_at: "" # Schedule: ISO date (e.g., "2026-12-25T10:00:00.000Z")
g_featured: false # Mark as featured post
g_tags: [obsidian, ghost] # Post tags
g_excerpt: "Post summary" # Custom excerpt/description
g_feature_image: "" # Featured image URL
g_slug: "custom-url" # Custom URL slug
g_no_sync: false # Disable sync for this post
---
# Your Post Title
Your post content here...
Control where the public preview ends for members-only posts. Add --members-only-- on its own line anywhere in the post body:
# My Post
This paragraph is visible to everyone.
--members-only--
This content is only visible to paying members.
g_post_access: paid or g_post_access: membersControl when posts are published:
g_published: false (ignores g_published_at)g_published: true + g_published_at: ""g_published: true + g_published_at: "2026-12-25T10:00:00.000Z" (future date)g_published: true + g_published_at: "2020-01-01T10:00:00.000Z" (past date)ghost-writer-manager-plugin/
├── main.ts # Main plugin file
├── src/
│ ├── types.ts # TypeScript interfaces
│ ├── ghost/
│ │ └── api-client.ts # Ghost Admin API client
│ └── views/
│ └── calendar-view.ts # Editorial calendar sidebar
├── styles.css # Plugin styles
├── manifest.json # Plugin manifest
├── package.json # Dependencies
└── tsconfig.json # TypeScript config
npm run dev - Build in development mode with watchnpm run build - Build for productionnpm run lint - Run ESLintThe plugin includes a DEV_MODE flag in main.ts that enables auto-sync on file changes:
const DEV_MODE = true; // Set to false for production builds
When DEV_MODE = true:
When DEV_MODE = false (production):
Important: Always set DEV_MODE = false before building for production/release.
--members-only--) with live editor decoration and auto-deduplicationContributions are welcome! Please feel free to submit a Pull Request.
MIT
If you encounter any issues or have questions, please open an issue.