# Run

> Publish a finished web app at its own address on komplai.run, for your organisation or for everyone, and let it use komplai through the app SDK.

Run publishes a finished browser app at its own address, such as `name.komplai.run`. You upload the built files, an HTML file, a ZIP file or a build folder such as `dist`, and the new version is live at once. Run is in the hub's menu at [hub.komplai.dk/publish](https://hub.komplai.dk/publish) when it is turned on for your organisation.

Apps run in the visitor's browser, and Run does not run server code. Through the app SDK, an app can show who is signed in, use AI and Redact with each person's own access, save data in komplai and write to the Audit log, once an administrator has approved each of these for the app.

## Who can open an app

| Access | Who can open the app |
| --- | --- |
| Organisation only | Every current member of your organisation, after signing in to komplai. Guests cannot open it. |
| Public | Anyone, without signing in and without being sent the link. Every file in the live version can be fetched, also files no page links to. |

A new app is Organisation only. To make it public, open the app's page in Run, choose **Change access**, select **Public**, type the app's name and choose **Make the app public**. Keep confidential information out of a public app: files someone has already fetched cannot be withdrawn if you limit the app to your organisation again.

An app that uses identity, AI, Redact, saved data, events or error reports from komplai can only be Organisation only. From komplai, a public app may only count anonymously and send requests to the origins its manifest names.

Only the person who created an app and your organisation's administrators can change it, publish new versions and create publishing keys. Other members of your organisation can view the app in Run.

## Ways to publish

On the app's page, under **Publish a new version** (or **Publish the first version**), you choose how:

- **Upload file**: choose or drag an HTML file, or a ZIP file with `index.html` at the top level or inside one folder.
- **Terminal**: create a publishing key and run the command Run shows. It packs your build folder, shows which app it goes to and asks before it uploads. [Publish with Run](https://developers.komplai.dk/guides/run) takes you through it.
- **AI coding assistant**: download the guide for Claude Code, Codex or another assistant, create a publishing key and let the assistant build and publish the app. You paste the key yourself when the terminal asks.

You can also let AI write the app inside Run. On **New app**, **Build with AI** opens Build an app: describe the app, try it in a preview with test data and publish it as a new app. On an app's page, **Keep building with AI** continues from the live version when it is one HTML file of at most 1 MB. Build an app uses your access to Chat. What you write and the app's code go to the AI model you choose, in komplai's EU cloud within your organisation's monthly AI spending cap, or through one of your organisation's own AI connections. It never uses local infrastructure.

## Versions and addresses

Every version is complete: files from earlier versions are not carried over. Run keeps the 5 newest versions of each app, so publishing a sixth deletes the oldest. Under **Versions** on the app's page, **Use this version** makes an earlier version live again. **Take the app offline** stops anyone from opening it and keeps the saved versions. The app keeps its address through all of this.

Each app has its own address on komplai.run. A readable address has 3 to 40 characters, a-z, 0-9 and hyphens, and starts and ends with a letter or digit; letters such as æ, ø and å cannot be used, and some words, such as admin and www, are reserved. When you change the address, the old one forwards to the new one for a year, after which others can take it. An address is not secret, so keep confidential words out of it.

## What an app can use from komplai

An app declares what it uses in its manifest, `komplai.json`, with a reason for each use. An administrator approves each use on the app's page under **What the app may use**. The app never gets more than the person using it already has access to.

| Use | Capability | What the app gets |
| --- | --- | --- |
| Identity | `identity` | A member id that stays the same in the organisation, and the fields you ask for: name, organisation, role, groups, department, job title or email |
| AI | `ai.chat` | Answers through the person's own access to Chat, in komplai's EU cloud or through your organisation's own AI connections |
| Redact | `redact.text` | Findings and pseudonymised text through the person's own access to Redact. The list of labels stays in the browser |
| Saved data | `data` | Up to 20 collections, each for one person only, shared in the app or shared between apps |
| Events | `log.events` | Named events in the Audit log, with the person and the app |
| Error reports | `log.errors` | Errors from the browser, shown on the app's page in Run |
| Anonymous counters | `log.counters` | Daily counts without address or identity. A public app may use this |
| Outbound requests | `connect` | Exact `https://` origins the app may send requests to. A public app may use this |

In `komplai.json`, the uses sit under `uses`, with events, error reports and counters together under `log`. `connect` is a list of origins at the top level.

A version that asks for the same or less keeps its approval. A version that asks for more waits for a new approval, and the rest keeps working. For AI, the administrator chooses where the app may run it and sets the app's own monthly limit. For Redact, the administrator chooses whether the app may also use Redact's language model in komplai's EU cloud. [Publish with Run](https://developers.komplai.dk/guides/run) shows the manifest and the SDK calls.

## Limits

| Limit | Value |
| --- | --- |
| One upload | 10 MB |
| One version, unpacked | 50 MB |
| One file | 10 MB |
| Files in one version | 2,000 |
| Saved versions per app | 5 |
| Active publishing keys per app | 10 |
| Lifetime of a publishing key | 7 days |
| One saved document | 64 KB as JSON |

Run counts 1 MB as 1,024 × 1,024 bytes. Every saved version counts towards your organisation's storage, and each file takes up at least 8 kB.

On servers shared with other organisations, an organisation has up to 10 apps, 5 GB of stored app files and 100 GB of traffic per month. On a server used only by your organisation, the defaults are 1,000 apps, 40 GB of stored app files and 1 TB of traffic per month. Traffic is what the apps send to visitors, counted per calendar month in UTC. When the month's traffic is used, your organisation's apps cannot be opened until the next month starts. Run shows your organisation's storage and traffic under **Capacity and limits**.

Supported file types: html, htm, css, js, mjs, json, txt, csv, png, jpg, jpeg, gif, webp, avif, svg, ico, woff, woff2, ttf, otf, pdf, mp3, mp4, webm, ogg, wav and wasm. Hidden paths and source maps are refused. Publishing a file is not a security review of the app.

## Where data is processed and stored

- **App files** are stored on komplai's server at Hetzner in the EU, in Falkenstein or Nuremberg in Germany or in Helsinki in Finland, on a server shared with other organisations or used only by yours. Run names the place under **Capacity and limits**.
- **AI** from an app goes to komplai's EU cloud or to an AI connection the administrator approved, never to local infrastructure. Usage in the EU cloud counts towards your organisation's monthly AI spending cap and the app's own monthly limit. Run has no AI allowance of its own.
- **Redact** from an app runs patterns and NER on komplai's servers at Hetzner in Germany, and Redact's language model in komplai's EU cloud only if the administrator approved it.
- **Saved data** is encrypted in komplai's database at Hetzner in Germany and included in the daily backup. A collection can delete documents that have not changed for a set number of days. Administrators can download an app's data, including what each person saved for themselves only, and delete a collection's data.
- **Events** in the Audit log hold only the event's name, who, when, the app and perhaps an id.
- **Error reports** are encrypted in komplai's database for 30 days, without who got the error.
- **Anonymous counts** keep only the number per day, with no address or identity, for 400 days.
- **Data an app keeps in the browser** stays on that device, unless the app itself sends it to another service.

---

https://developers.komplai.dk/tools/run
