Files
twenty/packages/create-twenty-app
Raphaël Bosi 0f06fccdee Make page layout tab layoutMode diffable and default standalone pages to vertical list (#23596)
Reported on Discord: an app declared a `STANDALONE_PAGE` layout with one
`FRONT_COMPONENT` widget and got a small bordered card instead of a
full-bleed page, and setting `layoutMode` afterwards changed nothing.

Two bugs:

- `pageLayoutTab.layoutMode` was `toCompare: false`, so it was written
once at create and never diffed again. Changing it in a manifest and
redeploying was a silent no-op, and `updatePageLayoutTab(layoutMode:)`
was accepted by the API then dropped by the runner's update sanitizer.
- A manifest tab that omits `layoutMode` defaulted to `GRID` regardless
of page layout type, and a `GRID` tab always renders its widgets as
cards on a 12-column grid. Standalone pages now default to
`VERTICAL_LIST`, where a lone widget owns the tab.

Also fixes the SDK scaffolder (`twenty add page-layout` emitted a tab
with no `position`, which does not typecheck) and the docs claim that a
single widget is always full-bleed.

Worth knowing for review: this does not migrate workspaces holding
legacy `CANVAS` tabs. The standard-app sync only runs against a fresh
schema, so those rows stay `CANVAS` and keep rendering correctly through
the derived presentation.


<!-- This is an auto-generated description by cubic. -->
<a
href="https://cubic.dev/pr/twentyhq/twenty/pull/23596?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->
2026-07-31 13:12:19 +00:00
..

Twenty logo

Create Twenty App

NPM version License Join the community on Discord

The official scaffolding CLI for building apps on top of Twenty CRM. Sets up a ready-to-run project with twenty-sdk.

Quick start

npx create-twenty-app@latest my-twenty-app
cd my-twenty-app
yarn twenty dev

The scaffolder will:

  1. Create a new project with TypeScript, linting, tests, and a preconfigured twenty CLI
  2. Start a local Twenty server via Docker (pulls the latest image automatically)
  3. Authenticate with the development API key

Options

Flag Description
--name <name> Set the app name
--display-name <displayName> Set the display name
--description <description> Set the description
--url <url> Twenty workspace URL (default: http://localhost:2020)
--authentication-method <method> oauth or apiKey (default: apiKey for local, oauth for remote)

Documentation

Full documentation is available at docs.twenty.com/developers/extend/apps:

  • Quick Start — scaffold, run a local server, sync your code
  • Concepts — how apps work: entity model, sandboxing, lifecycle
  • Operations — CLI, testing, CI, deploy and publish

Troubleshooting

  • Server not starting: check Docker is running (docker info), then try yarn twenty docker:logs.
  • Auth not working: run yarn twenty remote:add to re-authenticate.
  • Types not generated: ensure yarn twenty dev is running — it auto-generates the typed client.

Contributing