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

# Production overview

> What the core install brings, which extras to enable, and the DEBUG behaviour that causes unstyled pages in production.

## Dependencies

The core install is what every Feather app uses: Flask, Flask-SQLAlchemy, Flask-Migrate,
Flask-Login, Flask-WTF, Werkzeug, SQLAlchemy, Alembic, Authlib, Requests, Jinja2 and
urllib3.

Everything else is an extra, so an app that renders no PDFs does not install a PDF
renderer.

| Extra       | Brings               | Enable it when                                      |
| ----------- | -------------------- | --------------------------------------------------- |
| `postgres`  | psycopg2-binary      | `DATABASE_URL` is a `postgresql://` URL             |
| `redis`     | redis, rq            | `CACHE_BACKEND=redis` or `JOB_BACKEND=rq`           |
| `email`     | resend               | Sending transactional email                         |
| `gcs`       | google-cloud-storage | `STORAGE_BACKEND=gcs`                               |
| `pdf`       | WeasyPrint           | Generating PDFs                                     |
| `ratelimit` | flask-limiter        | Rate limiting that works across workers (auth apps) |
| `prod`      | gunicorn             | Running `feather start` or the Docker web process   |
| `test`      | pytest, pytest-cov   | Running the app's own tests                         |
| `all`       | all of the above     | Reproducing the pre-0.9.8 install                   |

```bash theme={null}
pip install "feather-framework[postgres,redis,prod,test]"
```

`feather new` writes a `requirements.txt` naming the extras your answers enabled, so this
is usually handled for you. `feather --version` and
[`feather security-check`](/tooling/security-check) report which extras are installed.

<Note>
  Importing a feature whose extra is missing raises an error naming the exact install
  command, rather than an import traceback.
</Note>

### Frontend libraries

Bundled via npm, no CDN: HTMX, Idiomorph, Apache ECharts. Loaded from Google: Google
Fonts and Material Icons.

## DEBUG mode behaviour

Understanding this is crucial for production.

| Setting       | Asset loading                      | Description                    |
| ------------- | ---------------------------------- | ------------------------------ |
| `DEBUG=True`  | Vite dev server (`localhost:5173`) | Hot reload, no build needed    |
| `DEBUG=False` | Built assets from `static/dist/`   | Requires `feather build` first |

<Warning>
  **Unstyled pages in production** happen when `DEBUG=False` but `feather build` was
  never run, or when `static/dist/` is missing or outdated. Always run `feather build`
  before deploying.
</Warning>

## Configuration shorthand

`FLASK_CONFIG` accepts shorthand names. These are equivalent:

```bash theme={null}
FLASK_CONFIG=production
FLASK_CONFIG=ProductionConfig
FLASK_CONFIG=prod
```

Supported: `development`/`dev`, `production`/`prod`, `testing`/`test`.

<CardGroup cols={2}>
  <Card title="Deploy with Docker" icon="container" href="/deployment/docker">
    Eight files, one machine, Caddy in front.
  </Card>

  <Card title="Full configuration reference" icon="sliders" href="/reference/configuration">
    Every key Feather reads, with its default.
  </Card>
</CardGroup>
