---
question: How do I scaffold an app folder?
kind: task
via_web: available
via_cli: available
via_python: na
via_api: available
via_config: na
ref_web: Apps › File › New App
ref_cli: abi new app
ref_api: POST /api/app-projects/
next:
  - /v2/capabilities/build/apps/overview
  - /v2/capabilities/build/apps/delete-an-app
  - /v2/capabilities/build/modules/creating-a-module
---

> **You are reading the v2.x docs (engine modules). New projects use v3.** [Read this page in v3](/capabilities/build/apps/create-an-app) · [Migrate from 2.x to 3.0](/capabilities/upgrade/migrate-to-3)

# Create an app

An app is a folder under `apps/` that Nexus discovers from `manifest.json`.

## Web UI

The Nexus app builder writes a static app (HTML, CSS, JavaScript) with the Apps agent. It needs the platform's git storage (Forgejo) and an object store.

### Start the app

In the workspace, open Apps. Choose **File › New App**, type a name, and click **Create**. The editor opens on the new app.

![Apps with the File menu open](/abi/Screenshot_Apps_New.png)

*Apps › File › New App. This workspace has no apps yet.*

### Build it

Edit the files, or ask the Apps agent to write them.

### Submit it

Click **Submit**. Nexus saves the app and opens a branch in the module repository with it. Nothing goes live until that branch is merged. Then turn the app on in the workspace Apps settings.

## CLI

### Scaffold the folder

From the module directory:

```bash
abi new app review apps
```

That writes `apps/review/` with `manifest.json`, `index.html`, and a README, plus an `AGENTS.md` in `apps/`. The arguments are `<name> [path]`; without a path the folder lands in the current directory. The manifest `url` can be `html:index.html`, which serves that page. The command is [`abi new app`](/user-guide/reference/cli#abi-new-app). The full command list is the [CLI reference](/user-guide/reference/cli).

### Load it

A module's apps are read when the engine loads the module, and the list is kept per process: restart the API to see a new app. Then turn it on in the workspace Apps settings.

## Python

Not applicable. A module needs no Python code for an app: Nexus discovers it from the `apps/<name>/manifest.json` folder. Scaffold the folder with the [CLI steps](/v2/capabilities/build/apps/create-an-app?via=cli).

## REST API

The Nexus API creates the same app project as the Web UI. Auth: a Nexus user session with access to the workspace.

### Create the project

```http
POST /api/app-projects/
```

Body: `workspace_id` and `title`, plus optional `description` and `icon_emoji`. The response carries the project's `slug`.

### Submit it

```http
POST /api/app-projects/{slug}/submit
```

Body: `workspace_id`, plus `module` to choose which module holds the app. This saves, then opens the review branch in the module repository, as **Submit** does.

## Config

Not applicable. The app is the manifest folder, not a `config.yaml` entry. Enable it in the workspace Apps settings.
