Could you help me reduce the number of steps required to publish an article? Ideally, I’d like to click the “Publish” button in the top right corner of the editor and have the article go live immediately, without the additional steps. Is there a way to simplify the process and eliminate the extra clicks?
Perhaps you know of a Code Injection that could override the publish flow?
- Editor > Publish
- Editor > Publish > Continue, final review →
- Editor > Publish > Continue, final review → > Publish post, right now

p.s. - By the way, it’s been a solid year or so since I’ve tried out Ghost and the editor has been FANTASTIC, so far so great… I think it’s the best editor I’ve ever used.
There’s no way to affect this wide code injection. This change would require forking Ghost and the ember app that does the admin pages, editing, and rebuilding it from source.
I don’t think you should do that. I think you should resign yourself to a couple extra clicks. You don’t want to maintain a fork for this.
100% don’t want to maintain…
Does the CTRL + SHIFT + P work for you? This also seems broken…
I’ll start looking to use a tampermonkey script to bypass this editor publish flow.
Here is working tampermonkey script to bypass all the flow if anybody is looking for results.
// ==UserScript==
// @name Ghost One-Click Publish (Persistent)
// @namespace http://tampermonkey.net/
// @version 3.0
// @description Always skip Ghost's publish modal — one click to publish, works even after multiple posts
// @match *://*/ghost/*
// @grant none
// ==/UserScript==
(function () {
'use strict';
const bindPublishAutomation = () => {
const publishBtn = document.querySelector('[data-test-button="publish-flow"]');
if (publishBtn && !publishBtn.dataset._autoBound) {
publishBtn.dataset._autoBound = 'true';
publishBtn.addEventListener('click', () => {
console.log('🟢 One-Click Publish triggered');
autoPublishSteps();
});
console.log('✅ Bound one-click publish to button');
}
};
const autoPublishSteps = () => {
const stepInterval = setInterval(() => {
const continueBtn = document.querySelector('[data-test-button="continue"]');
const confirmBtn = document.querySelector('[data-test-button="confirm-publish"]');
if (continueBtn) {
console.log('➡️ Clicking Continue...');
continueBtn.click();
} else if (confirmBtn) {
console.log('✅ Clicking Confirm Publish...');
confirmBtn.click();
clearInterval(stepInterval);
}
}, 300);
};
const observeEditorChanges = () => {
const observer = new MutationObserver(() => {
if (location.hash.includes('#/editor/post/')) {
bindPublishAutomation();
}
});
observer.observe(document.body, {
childList: true,
subtree: true
});
};
window.addEventListener('load', () => {
observeEditorChanges();
bindPublishAutomation(); // Initial load
});
})();
The choices are there for a reason, to validate whom should have access, when it should post, etc. It’s suboptimal to not have posts set into the future to keep posting while you take a break, vacation, etc.
I would learn to work with the system not try to actively fight it.
It’s suboptimal to not have posts set into the future to keep posting while you take a break, vacation, etc.
I’m having trouble understanding your point, but to clarify, this Tampermonkey script allows me to publish a post with just one click. However, I find that Ghost is better suited for individual users who don’t intend to build an audience or share their content with others. In my situation, the system seems to be working against me, causing unnecessary delays and wasting my time.