Saltar al contenido principal
Cada aplicación debe tener exactamente una llamada a defineApplication. Declara:
  • Identidad — identificador universal, nombre para mostrar, descripción.
  • Permisos — bajo qué rol se ejecutan sus funciones de lógica y componentes de frontend.
  • Variables (opcionales) — pares clave–valor expuestos a tu código como variables de entorno.
  • Hooks de preinstalación / postinstalación (opcionales) — consulta Funciones de lógica.
src/application-config.ts
import { defineApplication } from 'twenty-sdk/define';

export default defineApplication({
  universalIdentifier: '39783023-bcac-41e3-b0d2-ff1944d8465d',
  displayName: 'My Twenty App',
  description: 'My first Twenty app',
  applicationVariables: {
    DEFAULT_RECIPIENT_NAME: {
      universalIdentifier: '19e94e59-d4fe-4251-8981-b96d0a9f74de',
      description: 'Default recipient name for postcards',
      value: 'Jane Doe',
      isSecret: false,
    },
  },
});
Notas:
  • Los campos universalIdentifier son identificadores deterministas que te pertenecen. Genéralos una vez y mantenlos estables entre sincronizaciones.
  • applicationVariables se convierten en variables de entorno para tus funciones y componentes de frontend. En las funciones lógicas (del lado del servidor), están disponibles como process.env.VARIABLE_NAME. En los componentes de frontend, usa getApplicationVariable('VARIABLE_NAME') de twenty-sdk/front-component. Las variables marcadas con isSecret: true solo se inyectan en las funciones lógicas. Los componentes de frontend solo reciben variables no secretas.
  • El rol predeterminado se detecta automáticamente a partir del archivo de rol marcado con defineApplicationRole(); no necesitas hacer referencia a él desde defineApplication().
  • Las funciones de preinstalación y posinstalación se detectan automáticamente durante la compilación del manifiesto; no necesitas referenciarlas en defineApplication().
  • Pasar defaultRoleUniversalIdentifier explícitamente sigue siendo compatible por motivos de retrocompatibilidad, pero está en desuso en favor de defineApplicationRole().

Rol de función predeterminado

El rol declarado con defineApplicationRole() controla a qué pueden acceder las funciones de lógica y los componentes de interfaz de la aplicación:
  • El token en tiempo de ejecución inyectado como TWENTY_APP_ACCESS_TOKEN se deriva de este rol.
  • El cliente de API tipado está restringido a los permisos otorgados a ese rol.
  • Sigue el principio de mínimo privilegio: declara solo los permisos que necesitan tus funciones.
Cuando generas una nueva aplicación, la CLI crea un archivo de rol inicial en src/roles/default-role.ts. Consulta Roles y permisos para obtener la referencia completa.

Metadatos del Marketplace

Si planeas publicar tu aplicación, estos campos opcionales controlan cómo aparece en el marketplace:
CampoDescripción
authorNombre del autor o de la empresa
categoryCategoría de la aplicación para el filtrado en el marketplace
logoUrlRuta al logotipo de tu aplicación (p. ej., public/logo.png)
screenshotsArreglo de rutas de capturas de pantalla (p. ej., public/screenshot-1.png)
aboutDescriptionDescripción en Markdown más extensa para la pestaña “Acerca de”. Si se omite, el marketplace utiliza el README.md del paquete en npm
websiteUrlEnlace a tu sitio web
termsUrlEnlace a los términos del servicio
emailSupportDirección de correo electrónico de soporte
issueReportUrlEnlace al rastreador de incidencias