0f06fccdee
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. -->
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:
- Create a new project with TypeScript, linting, tests, and a preconfigured
twentyCLI - Start a local Twenty server via Docker (pulls the latest image automatically)
- 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 tryyarn twenty docker:logs. - Auth not working: run
yarn twenty remote:addto re-authenticate. - Types not generated: ensure
yarn twenty devis running — it auto-generates the typed client.