Mattermost Scheduled Posts Plugin
Adds scheduled-message support to Mattermost Team Edition (no paid license required). Compose a message now, pick a time, and the plugin posts it on your behalf at the scheduled moment.
Adds scheduled-message support to Mattermost Team Edition (no paid license required). Compose a message now, pick a time, and the plugin posts it on your behalf at the scheduled moment.
The UI works on web and desktop. Slash command works on all platforms including iOS and Android.
What it looks like
Channel header
A clock icon appears in every channel's header. Clicking it opens the scheduling modal with a date, time, and timezone picker. The modal pre-fills with sensible defaults (next whole hour in your browser's timezone).


Left sidebar
A "Scheduled" item appears in the sidebar header. When you have pending scheduled messages it shows a count badge and brightens to match unread items; when you don't it dims to match Threads' resting state. Click it to view, refresh, or cancel pending messages.


Slash command
/schedule "Your message" "2026-06-01 09:30" Australia/Sydney
/schedule "Daily stand-up" "2026-05-04 09:00" repeat=weekdays count=20
/schedule "Monthly invoice" "2026-05-01 10:00" repeat=monthly until=2026-12-31
/schedule list
/schedule cancel <id>
Timezone defaults to your Mattermost profile timezone, then the plugin's configured DefaultTimezone, then UTC. The repeat=, count=, and until= flags are optional.
Features
- No license required - Works on Mattermost Team Edition
- Channel-header UI - Clock icon opens a calendar/time picker modal
- Slash command -
/schedule "msg" "YYYY-MM-DD HH:MM" [timezone] [repeat=...] [count=N|until=YYYY-MM-DD], pluslistandcancel <id> - Recurring schedules - Daily, weekdays-only, weekly, fortnightly, or monthly, ending never / on a date / after N occurrences. DST-correct: a "weekly Mon 9 AM Sydney" series stays at 9 AM Sydney across DST transitions
- Per-user timezone - Picks up your Mattermost profile timezone (automatic if you have it enabled, else manual). Falls back to a configurable plugin default
- Pending list with badge - Sidebar entry shows live count of pending messages and refreshes on create/cancel and every 30s
- Cluster-safe - Uses an atomic per-message KV lock to prevent duplicate sends across multiple Mattermost nodes
- Retries with cap - Failed sends retry up to a configurable maximum (default 3) before being marked
failed. For recurring messages, a permanently-failed occurrence is skipped rather than killing the whole series - Channel membership check - Server validates you can post in the target channel before saving the schedule
You can get the plugin at GitHub, follow the installation instructions there.