
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
twenty-sdk
Advanced tools
<img alt="Twenty logo" src="https://raw.githubusercontent.com/twentyhq/twenty/2f25922f4cd5bd61e1427c57c4f8ea224e1d552c/packages/twenty-website/public/images/core/logo.svg" height="12
A CLI and SDK to develop, build, and publish applications that extend Twenty CRM.
CoreApiClient (auto-generated per app for workspace data) and MetadataApiClient (pre-built with the SDK for workspace configuration & file uploads)See Twenty application documentation https://docs.twenty.com/developers/extend/capabilities/apps
npm install twenty-sdk
# or
yarn add twenty-sdk
Usage: twenty [options] [command]
CLI for Twenty application development
Options:
--workspace <name> Use a specific workspace configuration (default: "default")
-V, --version output the version number
-h, --help display help for command
Commands:
auth:login Authenticate with Twenty
auth:logout Remove authentication credentials
auth:status Check authentication status
auth:switch Switch the default workspace
auth:list List all configured workspaces
app:dev Watch and sync local application changes
app:build Build, sync, and generate API client
app:publish Build and publish to npm or a Twenty server
app:typecheck Run TypeScript type checking on the application
app:uninstall Uninstall application from Twenty
entity:add Add a new entity to your application
function:logs Watch application function logs
function:execute Execute a logic function with a JSON payload
help [command] display help for command
In a scaffolded project (via create-twenty-app), use yarn twenty <command> instead of calling twenty directly. For example: yarn twenty help, yarn twenty app:dev, etc.
--workspace <name>: Use a specific workspace configuration profile. Defaults to default. See Configuration for details.Authenticate the CLI against your Twenty workspace.
twenty auth:login — Authenticate with Twenty.
--api-key <key>: API key for authentication.--api-url <url>: Twenty API URL (defaults to your current profile's value or http://localhost:3000).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).
twenty auth:list — List all configured workspaces.
twenty auth:switch [workspace] — Switch the default workspace for authentication.
workspace (optional): Name of the workspace to switch to. If omitted, shows an interactive selection.--workspace.Examples:
# 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
# List all configured workspaces
twenty auth:list
# Switch default workspace interactively
twenty auth:switch
# Switch to a specific workspace
twenty auth:switch production
Application development commands.
twenty app:dev [appPath] — Start development mode: watch and sync local application changes.
twenty app:build [appPath] — Build the application, sync to the server, generate the typed API client, then rebuild with the real client.
--tarball: Also pack the output into a .tgz tarball.twenty app:publish [appPath] — Build and publish the application.
npm publish on the output directory.--server <url>: Publish to a Twenty server instead of npm (builds tarball, uploads, and installs).--token <token>: Auth token for the server.--tag <tag>: npm dist-tag (e.g. beta, next).twenty app:typecheck [appPath] — Run TypeScript type checking on the application (runs tsc --noEmit). Exits with code 1 if type errors are found.
twenty app:uninstall [appPath] — Uninstall the application from the current workspace.
twenty entity:add [entityType] — Add a new entity to your application.
entityType: one of object, field, function, front-component, role, view, navigation-menu-item, or skill. If omitted, an interactive prompt is shown.--path <path>: The path where the entity file should be created (relative to the current directory).object: prompts for singular/plural names and labels, then creates a *.object.ts definition file.field: prompts for name, label, type, and target object, then creates a *.field.ts definition file.function: prompts for a name and scaffolds a *.function.ts logic function file.front-component: prompts for a name and scaffolds a *.front-component.tsx file.role: prompts for a name and scaffolds a *.role.ts role definition file.view: prompts for a name and target object, then creates a *.view.ts definition file.navigation-menu-item: prompts for a name and scaffolds a *.navigation-menu-item.ts file.skill: prompts for a name and scaffolds a *.skill.ts skill definition file.twenty function:logs [appPath] — Stream application function logs.
-u, --functionUniversalIdentifier <id>: Only show logs for a specific function universal ID.-n, --functionName <name>: Only show logs for a specific function name.twenty function:execute [appPath] — Execute a logic function with a JSON payload.
--preInstall: Execute the pre-install logic function defined in the application manifest (required if --postInstall, -n, and -u not provided).--postInstall: Execute the post-install logic function defined in the application manifest (required if --preInstall, -n, and -u not provided).-n, --functionName <name>: Name of the function to execute (required if --postInstall and -u not provided).-u, --functionUniversalIdentifier <id>: Universal ID of the function to execute (required if --postInstall and -n not provided).-p, --payload <payload>: JSON payload to send to the function (default: {}).Examples:
# Start dev mode (watch, build, and sync)
twenty app:dev
# Start dev mode with a custom workspace profile
twenty app:dev --workspace my-custom-workspace
# Type check the application
twenty app:typecheck
# Add a new entity interactively
twenty entity:add
# Add a new function
twenty entity:add function
# Add a new front component
twenty entity:add front-component
# Add a new view
twenty entity:add view
# Add a new navigation menu item
twenty entity:add navigation-menu-item
# Add a new skill
twenty entity:add skill
# Build the app (output in .twenty/output/)
twenty app:build
# Build and create a tarball
twenty app:build --tarball
# Publish to npm
twenty app:publish
# Publish with a dist-tag
twenty app:publish --tag beta
# Publish directly to a Twenty server (builds, uploads, and installs)
twenty app:publish --server https://app.twenty.com
# Uninstall the app from the workspace
twenty app:uninstall
# Watch all function logs
twenty function:logs
# Watch logs for a specific function by name
twenty function:logs -n my-function
# Execute a function by name (with empty payload)
twenty function:execute -n my-function
# Execute a function with a JSON payload
twenty function:execute -n my-function -p '{"name": "test"}'
# Execute a function by universal identifier
twenty function:execute -u e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf -p '{"key": "value"}'
# Execute the pre-install function
twenty function:execute --preInstall
# Execute the post-install function
twenty function:execute --postInstall
The CLI stores configuration per user in a JSON file:
~/.twenty/config.json--workspace <name> or by the defaultWorkspace setting.Example configuration file:
{
"defaultWorkspace": "prod",
"profiles": {
"default": {
"apiUrl": "http://localhost:3000",
"apiKey": "<your-api-key>"
},
"prod": {
"apiUrl": "https://api.twenty.com",
"apiKey": "<your-api-key>"
}
}
}
Notes:
apiUrl defaults to http://localhost:3000 until set.twenty auth:login writes the apiUrl and apiKey for the active workspace profile.twenty auth:login --workspace custom-workspace writes the apiUrl and apiKey for a custom custom-workspace profile.twenty auth:switch sets the defaultWorkspace field, which is used when --workspace is not specified.twenty auth:list shows all configured workspaces and their authentication status.twenty auth:login again and ensure the API key has the required permissions.twenty app:dev to refresh the client and types.twenty app:dev).To contribute to the twenty-sdk package, clone the repository and install dependencies:
git clone https://github.com/twentyhq/twenty.git
cd twenty
yarn install
Run the SDK build in watch mode to automatically rebuild on file changes:
npx nx run twenty-sdk:dev
This will watch for changes and rebuild the dist folder automatically.
Build the SDK for production:
npx nx run twenty-sdk:build
After building, you can run the CLI directly:
npx nx run twenty-sdk:start -- <command>
# Example: npx nx run twenty-sdk:start -- auth:status
Or run the built CLI directly:
node packages/twenty-sdk/dist/cli.cjs <command>
FAQs
<img alt="Twenty logo" src="https://raw.githubusercontent.com/twentyhq/twenty/2f25922f4cd5bd61e1427c57c4f8ea224e1d552c/packages/twenty-website/public/images/core/logo.svg" height="12
We found that twenty-sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.