> ## Documentation Index
> Fetch the complete documentation index at: https://docs.get-clara.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Erste Schritte

> Erstellen Sie in wenigen Minuten Ihre erste Twenty-App.

## Was sind Apps?

Apps ermöglichen es Ihnen, Twenty mit benutzerdefinierten Objekten, Feldern, Logikfunktionen, Frontend-Komponenten, KI-Fähigkeiten und mehr zu erweitern — alles als Code verwaltet. Anstatt alles über die UI zu konfigurieren, definieren Sie Ihr Datenmodell und Ihre Logik in TypeScript und stellen es in einem oder mehreren Workspaces bereit.

## Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Folgendes auf Ihrem Rechner installiert ist:

* **Node.js 24+** — [Hier herunterladen](https://nodejs.org/)
* **Yarn 4** — Wird mit Node.js über Corepack mitgeliefert. Aktivieren Sie es, indem Sie `corepack enable` ausführen
* **Docker** — [Hier herunterladen](https://www.docker.com/products/docker-desktop/). Erforderlich, um eine lokale Twenty-Instanz auszuführen. Nicht erforderlich, wenn bereits ein Twenty-Server läuft.

## Erstellen Sie Ihre erste App

### App-Gerüst erstellen

Öffnen Sie ein Terminal und führen Sie Folgendes aus:

```bash filename="Terminal" theme={null}
npx create-twenty-app@latest my-twenty-app
```

Sie werden aufgefordert, einen Namen und eine Beschreibung für Ihre App einzugeben. Drücken Sie **Enter**, um die Standardwerte zu übernehmen.

Dadurch wird ein neuer Ordner namens `my-twenty-app` mit allem erstellt, was Sie benötigen.

### Lokale Twenty-Instanz einrichten

Das Scaffolding-Tool fragt:

> **Möchten Sie eine lokale Twenty-Instanz einrichten?**

* **Geben Sie `yes` ein** (empfohlen) — Dadurch wird das Docker-Image `twenty-app-dev` heruntergeladen und ein lokaler Twenty-Server auf Port `2020` gestartet. Stellen Sie sicher, dass Docker läuft, bevor Sie fortfahren.
* **Geben Sie `no` ein** — Wählen Sie dies, wenn bereits ein Twenty-Server lokal läuft.

<div style={{textAlign: 'center'}}>
  <img src="https://mintcdn.com/clara-1b8b12e1/qLc_oPoqnIeP4kYN/images/docs/developers/extends/apps/start-instance.png?fit=max&auto=format&n=qLc_oPoqnIeP4kYN&q=85&s=26d312181632d0eae788386b19327c99" alt="Soll die lokale Instanz gestartet werden?" width="1476" height="410" data-path="images/docs/developers/extends/apps/start-instance.png" />
</div>

### Melden Sie sich bei Ihrem Arbeitsbereich an

Anschließend öffnet sich ein Browserfenster mit der Twenty-Anmeldeseite. Melden Sie sich mit dem vorab eingerichteten Demo-Konto an:

* **E-Mail:** `tim@apple.dev`
* **Passwort:** `tim@apple.dev`

<div style={{textAlign: 'center'}}>
  <img src="https://mintcdn.com/clara-1b8b12e1/qLc_oPoqnIeP4kYN/images/docs/developers/extends/apps/login.png?fit=max&auto=format&n=qLc_oPoqnIeP4kYN&q=85&s=4bc61128926d8da7e6c0ec2e03012455" alt="Twenty-Anmeldebildschirm" width="3024" height="1502" data-path="images/docs/developers/extends/apps/login.png" />
</div>

### Autorisieren Sie die App

Nach der Anmeldung sehen Sie einen Autorisierungsbildschirm. Dadurch kann Ihre App mit Ihrem Arbeitsbereich interagieren.

Klicken Sie auf **Authorize**, um fortzufahren.

<div style={{textAlign: 'center'}}>
  <img src="https://mintcdn.com/clara-1b8b12e1/qLc_oPoqnIeP4kYN/images/docs/developers/extends/apps/authorize.png?fit=max&auto=format&n=qLc_oPoqnIeP4kYN&q=85&s=15a45295d3db5eb073eab9933190392a" alt="Twenty-CLI-Autorisierungsbildschirm" width="3024" height="1502" data-path="images/docs/developers/extends/apps/authorize.png" />
</div>

Nach der Autorisierung bestätigt Ihr Terminal, dass alles eingerichtet ist.

<div style={{textAlign: 'center'}}>
  <img src="https://mintcdn.com/clara-1b8b12e1/qLc_oPoqnIeP4kYN/images/docs/developers/extends/apps/scaffolded.png?fit=max&auto=format&n=qLc_oPoqnIeP4kYN&q=85&s=bafde02c3f2ee045b2e2cfaed551dfb2" alt="App-Gerüst erfolgreich erstellt" width="1558" height="736" data-path="images/docs/developers/extends/apps/scaffolded.png" />
</div>

### Beginnen Sie mit der Entwicklung

Wechseln Sie in Ihren neuen App-Ordner und starten Sie den Entwicklungsserver:

```bash filename="Terminal" theme={null}
cd my-twenty-app
yarn twenty dev
```

Dadurch werden Ihre Quelldateien überwacht, bei jeder Änderung neu gebaut und Ihre App automatisch mit dem lokalen Twenty-Server synchronisiert. In Ihrem Terminal sollte eine Live-Statusanzeige angezeigt werden.

Für ausführlichere Ausgaben (Build-Protokolle, Sync-Anfragen, Fehlerspuren) verwenden Sie das Flag `--verbose`:

```bash filename="Terminal" theme={null}
yarn twenty dev --verbose
```

<Warning>
  Der Dev-Modus ist nur auf Twenty-Instanzen verfügbar, die im Entwicklungsmodus laufen (`NODE_ENV=development`). Produktionsinstanzen lehnen Dev-Synchronisierungsanfragen ab. Verwenden Sie `yarn twenty deploy`, um auf Produktionsservern bereitzustellen — Details finden Sie unter [Apps veröffentlichen](/l/de/developers/extend/apps/publishing).
</Warning>

<div style={{textAlign: 'center'}}>
  <img src="https://mintcdn.com/clara-1b8b12e1/qLc_oPoqnIeP4kYN/images/docs/developers/extends/apps/dev.jpg?fit=max&auto=format&n=qLc_oPoqnIeP4kYN&q=85&s=08986852f5fa2b14262ddec0282d37c4" alt="Terminalausgabe im Dev-Modus" width="1506" height="1178" data-path="images/docs/developers/extends/apps/dev.jpg" />
</div>

#### Einmalige Synchronisierung mit `yarn twenty dev --once`

Wenn Sie keinen Watcher im Hintergrund ausführen lassen möchten (zum Beispiel in einer CI-Pipeline, einem Git-Hook oder einem skriptgesteuerten Workflow), geben Sie das Flag `--once` an. Es führt dieselbe Pipeline aus wie `yarn twenty dev` — Build-Manifest erstellen, Dateien bündeln, hochladen, synchronisieren, den typisierten API-Client neu generieren — beendet sich jedoch, **sobald die Synchronisierung abgeschlossen ist**:

```bash filename="Terminal" theme={null}
yarn twenty dev --once
```

| Befehl                   | Verhalten                                                                                                               | Wann verwenden                                                                                           |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `yarn twenty dev`        | Überwacht Ihre Quelldateien und synchronisiert bei jeder Änderung erneut. Läuft weiter, bis Sie es stoppen.             | Interaktive lokale Entwicklung — Sie möchten das Live-Status-Panel und eine sofortige Feedback-Schleife. |
| `yarn twenty dev --once` | Führt einen einzelnen Build + Sync aus und beendet sich anschließend mit Code `0` bei Erfolg oder `1` bei einem Fehler. | Skripte, CI, Pre-Commit-Hooks, KI-Agenten und jeder nicht-interaktive Workflow.                          |

Beide Modi erfordern einen Twenty-Server, der im Entwicklungsmodus läuft, und ein authentifiziertes Remote — es gelten dieselben Voraussetzungen.

### Sehen Sie sich Ihre App in Twenty an

Öffnen Sie [http://localhost:2020/settings/applications#developer](http://localhost:2020/settings/applications#developer) in Ihrem Browser. Navigieren Sie zu **Settings > Apps** und wählen Sie die Registerkarte **Developer**. Unter **Your Apps** sollte Ihre App aufgeführt sein:

<div style={{textAlign: 'center'}}>
  <img src="https://mintcdn.com/clara-1b8b12e1/qLc_oPoqnIeP4kYN/images/docs/developers/extends/apps/app-in-ui-1.png?fit=max&auto=format&n=qLc_oPoqnIeP4kYN&q=85&s=8ab93970402d1458834b9f6d3f672578" alt="Liste &#x22;Your Apps&#x22;, die &#x22;My twenty app&#x22; anzeigt" width="3024" height="1812" data-path="images/docs/developers/extends/apps/app-in-ui-1.png" />
</div>

Klicken Sie auf **My twenty app**, um die **Anwendungsregistrierung** zu öffnen. Eine Registrierung ist ein Servereintrag, der Ihre App beschreibt — ihren Namen, den eindeutigen Bezeichner, OAuth-Zugangsdaten und die Quelle (lokal, npm oder Tarball). Sie befindet sich auf dem Server, nicht in einem bestimmten Arbeitsbereich. Wenn Sie eine App in einen Arbeitsbereich installieren, erstellt Twenty eine arbeitsbereichsbezogene Anwendung, die auf diese Registrierung verweist. Eine Registrierung kann in mehreren Arbeitsbereichen auf demselben Server installiert werden.

<div style={{textAlign: 'center'}}>
  <img src="https://mintcdn.com/clara-1b8b12e1/qLc_oPoqnIeP4kYN/images/docs/developers/extends/apps/app-in-ui-2.png?fit=max&auto=format&n=qLc_oPoqnIeP4kYN&q=85&s=969c793206e94f56dcb0a2c2e307a825" alt="Details der Anwendungsregistrierung" width="3024" height="1818" data-path="images/docs/developers/extends/apps/app-in-ui-2.png" />
</div>

Klicken Sie auf **View installed app**, um die installierte App anzuzeigen. Die Registerkarte **About** zeigt die aktuelle Version und Verwaltungsoptionen:

<div style={{textAlign: 'center'}}>
  <img src="https://mintcdn.com/clara-1b8b12e1/qLc_oPoqnIeP4kYN/images/docs/developers/extends/apps/app-in-ui-3.png?fit=max&auto=format&n=qLc_oPoqnIeP4kYN&q=85&s=e61d0e8ed46364ff3e097e8e27262386" alt="Installierte App — Registerkarte About" width="3024" height="1818" data-path="images/docs/developers/extends/apps/app-in-ui-3.png" />
</div>

Wechseln Sie zur Registerkarte **Content**, um alles zu sehen, was Ihre App bereitstellt — Objekte, Felder, Logikfunktionen und Agenten:

<div style={{textAlign: 'center'}}>
  <img src="https://mintcdn.com/clara-1b8b12e1/qLc_oPoqnIeP4kYN/images/docs/developers/extends/apps/app-in-ui-4.png?fit=max&auto=format&n=qLc_oPoqnIeP4kYN&q=85&s=1088a7b94354f81e0d10059417bcdc13" alt="Installierte App — Registerkarte Content" width="3024" height="1816" data-path="images/docs/developers/extends/apps/app-in-ui-4.png" />
</div>

Alles erledigt! Bearbeiten Sie eine beliebige Datei in `src/`, und die Änderungen werden automatisch übernommen.

***

## Was Sie erstellen können

Apps bestehen aus **Entitäten** — jede ist als TypeScript-Datei mit einem einzigen `export default` definiert:

| Entität                    | Was sie macht                                                                                                        |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| **Objekte & Felder**       | Definieren Sie benutzerdefinierte Datenmodelle (wie Post Card, Invoice) mit typisierten Feldern                      |
| **Logikfunktionen**        | Serverseitige TypeScript-Funktionen, die durch HTTP-Routen, Cron-Zeitpläne oder Datenbankereignisse ausgelöst werden |
| **Frontend-Komponenten**   | React-Komponenten, die in der UI von Twenty gerendert werden (Seitenleiste, Widgets, Befehlsmenü)                    |
| **Fähigkeiten & Agenten**  | KI-Funktionen — wiederverwendbare Anweisungen und autonome Assistenten                                               |
| **Ansichten & Navigation** | Vorkonfigurierte Listenansichten und Seitenleisteneinträge für Ihre Objekte                                          |
| **Seitenlayouts**          | Benutzerdefinierte Datensatz-Detailseiten mit Tabs und Widgets                                                       |

Wechseln Sie zu [Apps erstellen](/l/de/developers/extend/apps/building) für eine ausführliche Anleitung zu jedem Entitätstyp.

***

## Projektstruktur

Der Scaffolder erzeugt die folgende Verzeichnisstruktur:

```text filename="my-twenty-app/" theme={null}
my-twenty-app/
  package.json
  yarn.lock
  .gitignore
  .nvmrc
  .yarnrc.yml
  .oxlintrc.json
  tsconfig.json
  tsconfig.spec.json                          # TypeScript config for tests
  vitest.config.ts                            # Vitest test runner configuration
  LLMS.md
  README.md
  .github/
    └── workflows/
        └── ci.yml                            # GitHub Actions CI workflow
  public/                                     # Public assets (images, fonts, etc.)
  src/
  ├── application-config.ts                   # Required — main application configuration
  ├── default-role.ts                         # Default role for logic functions
  ├── constants/
  │   └── universal-identifiers.ts            # Auto-generated UUIDs and app metadata
  └── __tests__/
      ├── setup-test.ts                       # Test setup (server health check, config)
      └── app-install.integration-test.ts     # Integration test
```

### Mit einem Beispiel beginnen

Um mit einem umfassenderen Beispiel mit benutzerdefinierten Objekten, Feldern, Logikfunktionen, Frontend-Komponenten und mehr zu starten, verwenden Sie die Option `--example`:

```bash filename="Terminal" theme={null}
npx create-twenty-app@latest my-twenty-app --example postcard
```

Die Beispiele stammen aus dem Verzeichnis [twenty-apps/examples](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples) auf GitHub. Sie können auch einzelne Entitäten in einem bestehenden Projekt mit `yarn twenty add` erzeugen (siehe [Apps erstellen](/l/de/developers/extend/apps/building#scaffolding-entities-with-yarn-twenty-add)).

### Wichtige Dateien

| Datei / Ordner                           | Zweck                                                                                                                                                              |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `package.json`                           | Deklariert den App-Namen, die Version und Abhängigkeiten. Enthält ein `twenty`-Skript, sodass Sie `yarn twenty help` ausführen können, um alle Befehle anzuzeigen. |
| `src/application-config.ts`              | **Erforderlich.** Die Hauptkonfigurationsdatei für Ihre App.                                                                                                       |
| `src/default-role.ts`                    | Standardrolle, die steuert, worauf Ihre Logikfunktionen zugreifen können.                                                                                          |
| `src/constants/universal-identifiers.ts` | Automatisch erzeugte UUIDs und App-Metadaten (Anzeigename, Beschreibung).                                                                                          |
| `src/__tests__/`                         | Integrationstests (Setup + Beispieltest).                                                                                                                          |
| `public/`                                | Statische Assets (Bilder, Schriftarten), die mit Ihrer App ausgeliefert werden.                                                                                    |

## Lokaler Entwicklungsserver

Der Scaffolder hat bereits einen lokalen Twenty-Server für Sie gestartet. Um ihn später zu verwalten, verwenden Sie `yarn twenty server`:

| Befehl                                 | Beschreibung                                                |
| -------------------------------------- | ----------------------------------------------------------- |
| `yarn twenty server start`             | Lokalen Server starten (lädt das Image bei Bedarf herunter) |
| `yarn twenty server start --port 3030` | Auf einem benutzerdefinierten Port starten                  |
| `yarn twenty server start --test`      | Starten Sie eine separate Testinstanz auf Port 2021         |
| `yarn twenty server stop`              | Server stoppen (Daten bleiben erhalten)                     |
| `yarn twenty server status`            | Serverstatus, URL und Anmeldedaten anzeigen                 |
| `yarn twenty server logs`              | Serverprotokolle streamen                                   |
| `yarn twenty server logs --lines 100`  | Die letzten 100 Protokollzeilen anzeigen                    |
| `yarn twenty server reset`             | Alle Daten löschen und neu starten                          |

Daten bleiben über Neustarts hinweg in zwei Docker-Volumes bestehen (`twenty-app-dev-data` für PostgreSQL, `twenty-app-dev-storage` für Dateien). Verwenden Sie `reset`, um alles zu löschen und neu zu beginnen.

### Eine Testinstanz ausführen

Übergeben Sie `--test` an jeden `server`-Befehl, um eine zweite, vollständig isolierte Instanz zu verwalten — nützlich, um Integrationstests auszuführen oder zu experimentieren, ohne Ihre Hauptentwicklungsdaten anzutasten.

| Befehl                             | Beschreibung                                          |
| ---------------------------------- | ----------------------------------------------------- |
| `yarn twenty server start --test`  | Die Testinstanz starten (standardmäßig Port 2021)     |
| `yarn twenty server stop --test`   | Die Testinstanz stoppen                               |
| `yarn twenty server status --test` | Status, URL und Anmeldedaten der Testinstanz anzeigen |
| `yarn twenty server logs --test`   | Protokolle der Testinstanz streamen                   |
| `yarn twenty server reset --test`  | Alle Testdaten löschen und neu starten                |

Die Testinstanz läuft in einem eigenen Docker-Container (`twenty-app-dev-test`) mit dedizierten Volumes (`twenty-app-dev-test-data`, `twenty-app-dev-test-storage`) und eigener Konfiguration, sodass sie parallel zu Ihrer Hauptinstanz ohne Konflikte ausgeführt werden kann. Kombinieren Sie `--test` mit `--port`, um den Standardport 2021 zu überschreiben.

<Note>
  Der Server erfordert, dass **Docker** läuft. Wenn der Fehler "Docker not running" angezeigt wird, stellen Sie sicher, dass Docker Desktop (oder der Docker-Daemon) gestartet ist.
</Note>

## Manuelle Einrichtung (ohne Scaffolder)

Wenn Sie die Einrichtung lieber selbst vornehmen möchten, anstatt `create-twenty-app` zu verwenden, können Sie dies in zwei Schritten tun.

**1. Fügen Sie `twenty-sdk` und `twenty-client-sdk` als Abhängigkeiten hinzu:**

```bash filename="Terminal" theme={null}
yarn add twenty-sdk twenty-client-sdk
```

**2. Fügen Sie Ihrer `package.json` ein `twenty`-Skript hinzu:**

```json filename="package.json" theme={null}
{
  "scripts": {
    "twenty": "twenty"
  }
}
```

Sie können jetzt `yarn twenty dev`, `yarn twenty help` und alle anderen Befehle ausführen.

<Note>
  Installieren Sie `twenty-sdk` nicht global. Verwenden Sie es immer als lokale Projektabhängigkeit, damit jedes Projekt seine eigene Version festlegen kann.
</Note>

## Fehlerbehebung

Wenn Probleme auftreten:

* Stellen Sie sicher, dass **Docker läuft**, bevor Sie das Scaffolding-Tool mit einer lokalen Instanz starten.
* Stellen Sie sicher, dass Sie **Node.js 24+** verwenden (`node -v` zur Überprüfung).
* Stellen Sie sicher, dass **Corepack aktiviert ist** (`corepack enable`), damit Yarn 4 verfügbar ist.
* Versuchen Sie, `node_modules` zu löschen und `yarn install` erneut auszuführen, wenn Abhängigkeiten fehlerhaft erscheinen.

Hängen Sie immer noch fest? Bitten Sie im [Twenty-Discord](https://discord.com/channels/1130383047699738754/1130386664812982322) um Hilfe.
