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

# Anwendungen verwalten

> Eine Anwendung über die Application-Klasse einsehen, steuern und betreiben — Status, Logs, Metriken, Lebenszyklus (Start, Stopp, Neustart) und Löschung.

Jede Operation auf dieser Seite beginnt damit, eine `Application`-Instanz zu erhalten:

```typescript theme={null}
import { SquareCloudAPI } from "@squarecloud/api";

const api = new SquareCloudAPI(process.env.SQUARE_API_KEY!);
const app = await api.applications.fetch("abc123def456abc123def456");
```

`api.applications.fetch(id)` gibt eine `Application` zurück. Wenn der App eine Website-Domain zugeordnet ist, wird sie als `WebsiteApplication` zurückgegeben — verfeinere den Typ zur Laufzeit mit `app.isWebsite()`, bevor du `.network` verwendest (siehe [Network](/de/sdks/js/network)).

## Anwendungseigenschaften

| Eigenschaft   | Typ              | Beschreibung                                                                                                      |
| ------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------- |
| `id`          | `string`         | Anwendungs-ID (24 Hex-Zeichen)                                                                                    |
| `name`        | `string`         | Anzeigename                                                                                                       |
| `description` | `string?`        | Beschreibung aus `squarecloud.app`                                                                                |
| `url`         | `string`         | URL des Web-Dashboards                                                                                            |
| `ram`         | `number`         | Zugewiesener RAM in MB                                                                                            |
| `cluster`     | `string`         | Cluster, auf dem die App läuft                                                                                    |
| `language`    | `string`         | `javascript` \| `typescript` \| `python` \| `java` \| `elixir` \| `rust` \| `go` \| `php` \| `dotnet` \| `static` |
| `domain`      | `string \| null` | Standard-Host `<subdomain>.squareweb.app` (`null` bei Nicht-Web-Apps)                                             |
| `custom`      | `string \| null` | Der App zugeordnete Custom-Domain, sofern konfiguriert                                                            |
| `createdAt`   | `Date`           | Erstellungsdatum                                                                                                  |

<Note>
  In v4 ist `app.custom` `null`, wenn keine Custom-Domain gesetzt ist (war in v3 `undefined`).
</Note>

## Den Anwendungsstatus abrufen

`app.getStatus()` gibt eine `ApplicationStatus`-Instanz mit dem aktuellen Laufzeitzustand zurück.

```typescript theme={null}
const status = await app.getStatus();

console.log(status.status);          // "running" | "starting" | "restarting" | "exited" | "created" | "deleting"
console.log(status.running);         // boolean
console.log(status.usage.cpu);       // "0.22%"
console.log(status.usage.ram);       // "70MB"
console.log(status.usage.network);   // { total: "0 KB ↑ 0 KB ↓", now: "0 KB ↑ 0 KB ↓" }
console.log(status.usage.storage);   // "0B"
console.log(status.uptime);          // Date | undefined
console.log(status.uptimeTimestamp); // number | undefined
```

### Zusammengefasster Status für jede Anwendung

Um nicht eine Anfrage pro App zu senden, rufe `api.applications.statusAll()` auf:

```typescript theme={null}
const list = await api.applications.statusAll();

for (const summary of list) {
    console.log(`${summary.applicationId} → running=${summary.running}`);
    if (summary.running) {
        console.log(`  cpu=${summary.usage.cpu}, ram=${summary.usage.ram}`);
    }

    // Promote a summary to the full status with .fetch()
    const full = await summary.fetch();
    console.log(full.uptime);
}
```

## Die Logs abrufen

`app.getLogs()` gibt die letzten Log-Ausgaben als `string` zurück.

```typescript theme={null}
const logs = await app.getLogs();
console.log(logs);
```

## Metriken abrufen

`app.getMetrics()` gibt die letzten 24 Stunden an CPU-, RAM- und Netzwerk-Messwerten zurück (bis zu **288 Punkte**, einer alle 5 Minuten).

```typescript theme={null}
const metrics = await app.getMetrics();

console.log(metrics.length, "data points");
console.log(metrics[0]);
// { timestamp: 1717084800000, cpu: 12.3, ram: 187, network: { ... } }
```

<Warning>
  `getMetrics()` erfordert, dass der Anwendung **mindestens 512MB RAM** zugewiesen sind.
</Warning>

## Echtzeit-Event-Stream

`app.realtime()` öffnet einen [Server-Sent Events](https://developer.mozilla.org/docs/Web/API/Server-sent_events)-Stream. Ein vollständiges Beispiel findest du auf der eigenen [Realtime](/de/sdks/js/realtime)-Seite.

## Lebenszyklus

Alle Lebenszyklus-Methoden lösen zu `boolean` auf (`true` bei Erfolg).

```typescript theme={null}
await app.start();
await app.restart();
await app.stop();
```

## Eine Anwendung löschen

<Warning>
  `app.delete()` entfernt die Anwendung dauerhaft. Sofern du keinen [Snapshot](/de/sdks/js/snapshots) hast, **können die Daten nicht wiederhergestellt werden**.
</Warning>

```typescript theme={null}
const deleted = await app.delete();
console.log(deleted); // true | false
```

## Die Anwendungsdaten aktualisieren

`app.fetch()` lädt die Anwendung erneut von der API und gibt eine völlig neue `Application`-Instanz zurück. Verwende es, wenn du vermutest, dass die zwischengespeicherten Daten veraltet sind.

```typescript theme={null}
const fresh = await app.fetch();
```
