---
question: Does disabling an app delete the module folder?
kind: task
via_web: available
via_cli: available
via_python: na
via_api: available
via_config: na
ref_web: Settings › Apps
ref_cli: git rm -r apps/<name>
ref_api: PATCH /api/apps/{workspace_id}/{app_id}
next:
  - /capabilities/build/apps/overview
  - /capabilities/build/apps/create-an-app
---

# Delete an app

There are two levels. Turning an app off hides it in one workspace and leaves the module untouched: use the Web UI or the REST API. Removing the app's folder from the module deletes it for every workspace: use the CLI steps.

An app is on in a workspace when its stored setting says so. On every boot, the workspace seed in `config.yaml` writes an enabled setting for each app its `apps:` list names that has none yet. Every other app starts off.

## Web UI

### Open the Apps settings

In the workspace, open **Settings**, then **Apps** under Features. The page lists the apps of the loaded modules, with a search box and Category and Status filters.

### Turn the app off

Click the app's switch. Its label reads **Disable app** while the app is on. The app leaves the workspace's Apps section. The module's `apps/<name>/` folder stays, and the switch turns it back on.

![Workspace Settings on Apps, filtered to one app](/abi/Screenshot_Settings_Apps.png)

*Settings › Apps, searched for one app. The Enabled box turns it off for this workspace.*

## CLI

No `abi` command deletes an app. Remove its folder from the module, then restart.

### Remove the folder

From the module directory:

```bash
git rm -r apps/review
```

An app built in Nexus lives in the module repository too, on the branch that **Submit** opened. Delete that branch if it was never merged.

### Remove its backend, in a remote module

A remote module binds the app's server in `on_initialized`. Delete that `self.expose_app("review", app)` line with the folder.

### Restart the engine

The API reads the apps catalog once per process. Restart it to drop the app:

```bash
abi dev down
abi dev up
```

With Docker Compose, run `abi stack stop`, then `abi stack start`. The commands are [`abi dev`](/user-guide/reference/cli#abi-dev) and [`abi stack`](/user-guide/reference/cli#abi-stack).

## Python

Not applicable. An app is a folder with a `manifest.json`, not a Python class: remove it with the [CLI steps](/user-guide/build/apps/delete-an-app?via=cli).

## REST API

The Nexus API stores one setting per app and workspace. Auth: a Nexus user session with access to the workspace (`POST /api/auth/login` returns the access token).

### Find the app id

```http
GET /api/apps/?workspace_id={workspace_id}
```

Each app carries its `app_id`, `module.path:folder`, and its `enabled` state in that workspace.

### Turn it off

```http
PATCH /api/apps/{workspace_id}/{app_id}
```

Body: `{"enabled": false}`. The call creates the stored setting when there is none. This is what the Settings switch sends.

### Or drop the stored setting

```http
DELETE /api/apps/{workspace_id}/{app_id}
```

The app is off until something writes a setting again. If the workspace seed lists it, the next boot writes an enabled one and the app comes back: use `PATCH` for those. `DELETE` answers 404 `App config not found` when there is no stored setting. Neither call touches the module's `apps/` folder.

## Config

Not applicable. `config.yaml` can only turn apps on: at boot, the workspace's `apps:` seed writes an enabled setting for each listed app that has none, and never turns one off. Turn the app off in [Settings › Apps](/user-guide/build/apps/delete-an-app?via=web) or with `PATCH`, and drop it from `apps:` so new workspaces do not get it.
