---
title: "Scheduled Publishing in EmDash"
description: "How to schedule content for future publication in EmDash. Set it and forget it — EmDash publishes automatically at your chosen time."
article_type: child
canonical: https://dashstro.com/learn/emdash-scheduled-publishing
---
One of the small frustrations of content publishing is the alarm. You write something Thursday evening, it needs to go live Monday at 8am, and suddenly Monday morning you're fumbling with your phone before coffee just to click a publish button. EmDash eliminates that entirely. Scheduled publishing is built into the core — no plugins, no cron jobs, no third-party services.

## How Scheduling Works

When you set a scheduled publish date, EmDash stores the entry in a pending state with a future timestamp. A Cloudflare Workers cron trigger runs every minute, queries for any entries whose scheduled time has passed, and publishes them automatically. The entry flips from scheduled to published, cache is invalidated, and the content appears on your site — all without you touching anything.

This means the maximum delay between your scheduled time and the content going live is about 60 seconds. For most publishing workflows, that's effectively instant.

## Three Ways to Schedule Content

EmDash gives you three interfaces for scheduling, depending on how you prefer to work.

| Method | How | Best for |
| --- | --- | --- |
| Admin panel | Open the publish dialog, toggle "Schedule", pick a date and time | One-off articles, editorial workflow |
| MCP server | content_schedule tool with ISO 8601 datetime string | AI-assisted content pipelines, agent workflows |
| REST API | PATCH /api/content/:id with scheduled_at field | Custom integrations, headless publishing pipelines |

## Scheduling via the Admin Panel

In the admin panel at `/_emdash/admin`, open any draft entry and click the arrow next to the Publish button. You'll see a "Schedule" option. Select it, choose your date and time, and click Schedule. The entry status changes to "Scheduled" and the admin panel shows a countdown to the publish time. You can edit the entry or change the schedule any time before it goes live.

## Scheduling via the MCP Server

If you're working with EmDash through an AI agent or automation pipeline, the MCP server's `content_schedule` tool handles scheduling programmatically. Pass the content ID and an ISO 8601 datetime string:

```json
// MCP tool call: content_schedule
{
  "collection": "learn",
  "id": "my-article-slug",
  "scheduledAt": "2026-04-07T09:00:00-05:00"
}

// Response
{
  "status": "scheduled",
  "scheduledAt": "2026-04-07T14:00:00.000Z",
  "message": "Content scheduled for publication"
}
```

## Timezone Handling

EmDash stores all timestamps in UTC internally. When you use the admin panel, it reads your browser's local timezone and displays times accordingly — so if you schedule something for 9am, it means 9am wherever you are. When using the MCP server or API directly, always include a timezone offset in your ISO 8601 string (e.g., `-05:00` for Central Time). If you pass a bare datetime without an offset, EmDash assumes UTC.

## What Happens Under the Hood

The scheduler runs as a Cloudflare Workers cron trigger. On each tick, it queries D1 for entries where `status = 'scheduled' AND scheduled_at <= NOW()`. For each matching entry, it creates a published revision, updates the entry status, and invalidates the relevant cache keys. This is the same publication path as a manual publish — there's no difference in the resulting content state.

Because it runs on Workers, there's no server to maintain and no external cron service to configure. It just works as part of your Cloudflare deployment.

:::pullquote
Automation isn't about laziness — it's about redirecting your attention to work that actually needs a human. Scheduled publishing is one less thing that pulls you back to the dashboard at inconvenient hours.
:::

## Modifying or Canceling a Scheduled Entry

Until the scheduled time arrives, the entry is fully editable. You can update the content, change the scheduled time, or cancel scheduling entirely. To cancel, open the entry in the admin panel and click "Unschedule" — this returns the entry to draft status. Via MCP, call `content_unpublish` on a scheduled entry to revert it to draft.

Once the cron trigger fires and the entry is published, you can still unpublish it manually. Scheduling is a one-way gate — it publishes the content, but it doesn't lock you in.

## Building a Content Calendar Workflow

In practice, I use scheduled publishing as part of a batched writing workflow. I spend a few hours on Sunday writing and editing several pieces, then schedule them out across the week — Monday, Wednesday, Friday. The content goes live on a consistent cadence without me needing to be at a computer at publish time. This approach is especially useful when combined with the MCP server: an AI agent can draft, refine, and schedule articles in sequence, leaving me to review and approve the queue.

Consistent publishing frequency is one of the clearest signals to both readers and search engines that a site is active and trustworthy. Scheduling makes that consistency achievable without requiring discipline at the moment of publication.

[Build Your First EmDash Site](/learn/build-first-emdash-website)

