@10x-media/content-lock
v0.1.0-beta.2
Published
Planned and unplanned maintenance windows that freeze Payload content: 503 on every write channel, read-only admin, localized banners.
Readme

@10x-media/content-lock
Planned and unplanned maintenance windows for Payload v3. While a window is active, every write to the frozen collections and globals is rejected with a 503 on every channel, the admin turns read-only, and a banner tells editors why and until when.
Part of the @10x-media Payload plugins collection. In beta: published under the beta dist-tag until a stable 1.0.
Features
- Lock windows as documents: start now or schedule ahead, announce in advance, end at a time or by hand, with drafts and time zones.
- Blocks writes on REST, GraphQL, the admin and the Local API, including
overrideAccess: true, withRetry-After. - Maintenance code (migrations, imports) writes through a lock with
withoutContentLock. - Freeze everything, configured groups, or individual collections and globals; exempt what the public site writes to.
- An admin banner that pages through windows, with localized per-window messages and live lock value tokens.
- Works with
@10x-media/jobs: full locks pause the queues, interrupted jobs fail cleanly or defer until the lock ends. - Typed translations with per-key overrides via
@10x-media/content-lock/i18n.
Quick start
pnpm add @10x-media/content-lock// payload.config.ts
import { buildConfig } from 'payload'
import { contentLock } from '@10x-media/content-lock'
export default buildConfig({
plugins: [
contentLock({
groups: [{ key: 'catalog', label: 'Catalog', collections: ['products', 'categories'] }],
}),
],
})Then regenerate the import map, and on Postgres create a migration. Open Content locks in the admin and press Lock now.
Documentation
Full documentation at docs.10xmedia.de:
License
MIT. Copyright 10x Media GmbH.
