Skip to content

Push Workflow

The push workflow is the fastest way to iterate on your content model. Edit your schemas, run one command, and the changes are live in Contentful. No migration files, no history tracking.

edit schema → push
  1. Edit your schema — modify or create files in schemas/.
  2. Push — ctkit diffs local vs. remote and applies changes directly.

That’s it. Two steps.

Create or modify a schema file:

schemas/blogPost.ts
import { contentType, fields } from '@ctkit/core';
export const blogPost = contentType('blogPost', {
name: 'Blog Post',
fields: {
title: fields.symbol({
name: 'Title',
required: true,
}),
body: fields.richText({
name: 'Body',
}),
},
});
Terminal window
ctkit push

ctkit shows a summary of what will change and asks for confirmation:

+ blogPost (new content type)
+ title Symbol (required)
+ body RichText
Apply these changes? (y/n)

To skip the confirmation prompt:

Terminal window
ctkit push --force

To preview without applying:

Terminal window
ctkit push --dry-run
  • No migration files — nothing is written to migrations/.
  • No execution history — ctkit doesn’t record what changed or when.
  • No reproducibility — you can’t replay the same changes against another environment.

This is intentional. Push trades traceability for speed.

ScenarioPush workflow?
Solo developmentYes
Experimenting with content modelsYes
Throwaway or sandbox environmentsYes
Hackathons, spikes, proof of conceptsYes
Team collaborationNo — use migration
Production deploymentsNo — use migration

You can start with push and switch to the migration workflow at any point. There’s no lock-in.

When you’re ready:

  1. Stop using ctkit push.
  2. Start using ctkit generate + ctkit migrate.
  3. Your first generated migration will capture whatever differs between your local schemas and the current remote state.

The migrations/ directory starts fresh — ctkit doesn’t need prior migration history to begin tracking changes.