Twenty logo

Twenty SDK

NPM version License Join the community on Discord
A CLI and SDK to develop, build, and publish applications that extend [Twenty CRM](https://twenty.com). - Type‑safe client and workspace entity typings - Built‑in CLI for auth, generate, dev sync, one‑off sync, and uninstall - Works great with the scaffolder: [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) ## Prerequisites - Node.js 24+ (recommended) and Yarn 4 - A Twenty workspace and an API key. Generate one at https://app.twenty.com/settings/api-webhooks ## Installation ```bash npm install twenty-sdk # or yarn add twenty-sdk ``` ## Usage ``` Usage: twenty [options] [command] CLI for Twenty application development Options: --workspace Use a specific workspace configuration (default: "default") -V, --version output the version number -h, --help display help for command Commands: auth Authentication commands app Application development commands help [command] display help for command ``` ## Global Options - `--workspace `: Use a specific workspace configuration profile. Defaults to `default`. See Configuration for details. ## Commands ### Auth Authenticate the CLI against your Twenty workspace. - `twenty auth login` — Authenticate with Twenty. - Options: - `--api-key `: API key for authentication. - `--api-url `: Twenty API URL (defaults to your current profile's value or `http://localhost:3000`). - Behavior: Prompts for any missing values, persists them to the active workspace profile, and validates the credentials. - `twenty auth logout` — Remove authentication credentials for the active workspace profile. - `twenty auth status` — Print the current authentication status (API URL, masked API key, validity). Examples: ```bash # Login interactively (recommended) twenty auth login # Provide values in flags twenty auth login --api-key $TWENTY_API_KEY --api-url https://api.twenty.com # Login interactively for a specific workspace profile twenty auth login --workspace my-custom-workspace # Check status twenty auth status # Logout current profile twenty auth logout ``` ### App Application development commands. - `twenty app sync [appPath]` — One-time sync of the application to your Twenty workspace. - Behavior: Compute your application's manifest and send it to your workspace to sync your application - `twenty app dev [appPath]` — Watch and sync local application changes. - Options: - `-d, --debounce `: Debounce delay in milliseconds (default: `1000`). - Behavior: Performs an initial sync, then watches the directory for changes and re-syncs after debounced edits. Press Ctrl+C to stop. - `twenty app uninstall [appPath]` — Uninstall the application from the current workspace. - Note: `twenty app delete` exists as a hidden alias for backward compatibility. - `twenty app add [entityType]` — Add a new entity to your application. - Arguments: - `entityType`: one of `function` or `object`. If omitted, an interactive prompt is shown. - Options: - `--path `: The path where the entity file should be created (relative to the current directory). - Behavior: - `object`: prompts for singular/plural names and labels, then creates a new object definition file. - `function`: prompts for a name and scaffolds a serverless function file. - `twenty app generate [appPath]` — Generate the typed Twenty client for your application. - `twenty app logs [appPath]` — Stream application function logs. - Options: - `-u, --functionUniversalIdentifier `: Only show logs for a specific function universal ID. - `-n, --functionName `: Only show logs for a specific function name. Examples: ```bash # Start dev mode with default debounce twenty app dev # Start dev mode with custom workspace profile twenty app dev --workspace my-custom-workspace # Dev mode with custom debounce twenty app dev --debounce 1500 # One-time sync of the current directory twenty app sync # Add a new object interactively twenty app add # Generate client types twenty app generate # Watch all function logs twenty app logs # Watch logs for a specific function by name twenty app logs -n my-function ``` ## Configuration The CLI stores configuration per user in a JSON file: - Location: `~/.twenty/config.json` - Structure: Profiles keyed by workspace name. The active profile is selected with `--workspace `. Example configuration file: ```json { "profiles": { "default": { "apiUrl": "http://localhost:3000", "apiKey": "" }, "prod": { "apiUrl": "https://api.twenty.com", "apiKey": "" } } } ``` Notes: - If a profile is missing, `apiUrl` defaults to `http://localhost:3000` until set. - `twenty auth login` writes the `apiUrl` and `apiKey` for the default profile. - `twenty auth login --workspace custom-workspace` writes the `apiUrl` and `apiKey` for a custom `custom-workspace` profile. ## Troubleshooting - Auth errors: run `twenty auth login` again and ensure the API key has the required permissions. - Typings out of date: run `twenty app generate` to refresh the client and types. - Not seeing changes in dev: make sure dev mode is running (`twenty app dev`). ## Contributing - See our [GitHub](https://github.com/twentyhq/twenty) - Join our [Discord](https://discord.gg/cx5n4Jzs57)