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)