# Couper > Couper is a lightweight open-source API gateway that acts as an entry point for clients and an exit point to upstream services. It adds access control, observability, and backend connectivity on a separate configuration layer using HCL 2.0 syntax. Install via Docker (`docker pull coupergateway/couper`) or Homebrew (`brew install couper`). Supports file/SPA serving, API proxying, request/response manipulation, JWT, Basic Auth, OAuth2, OIDC, SAML, TLS/mTLS, WebSockets, CORS, rate limiting, and Prometheus metrics. ## Getting Started - [Running Couper](https://docs.couper.io/getting-started/running-couper): Couper is available as _docker image_ from Docker Hub Running Couper requires a working Docker setup on your computer. Please visit the get started guide to get prepared. To download/install Couper... - [Examples](https://docs.couper.io/getting-started/examples) - [Beta Features](https://docs.couper.io/getting-started/beta-features): We use _beta_ features to have the possibility to develop new, complex features for you while still being able to maintain our compatibility promise. You can see beta features as a feature preview.... - [Introduction](https://docs.couper.io/getting-started/welcome): Overview how Couper could work within a project. ## Configuration - [Access Control](https://docs.couper.io/configuration/access-control): List of configurable access control layer blocks. - [Command Line Interface (CLI)](https://docs.couper.io/configuration/command-line): Configure Couper with cli arguments. - [Configuration File](https://docs.couper.io/configuration/configuration-file): Overview how to configure Couper with its configuration file. - [Errors](https://docs.couper.io/configuration/error-handling): Handling different error types. - [Expressions](https://docs.couper.io/configuration/expressions): Basic explanation of how to use hcl expressions. - [Functions](https://docs.couper.io/configuration/functions): Overview of usable function expressions - [Merge of Configuration File(s)](https://docs.couper.io/configuration/multiple-files): For more complex situations you can configure Couper with multiple files. - [Modifiers](https://docs.couper.io/configuration/modifiers): A set of `*_headers` attributes to manipulate HTTP header. - [Variables](https://docs.couper.io/configuration/variables): Powerful usage for different kinds of variables. ## Configuration Blocks - [API](https://docs.couper.io/configuration/block/api): The api block bundles endpoints under a certain base_path. If an error occurred for api endpoints the response gets processed as JSON error with an error body payload. This can be customized via er... - [Backend](https://docs.couper.io/configuration/block/backend): The backend defines the connection pool with given origin for outgoing connections. - [Basic Auth](https://docs.couper.io/configuration/block/basic_auth) - [CORS](https://docs.couper.io/configuration/block/cors): The cors block configures the CORS (Cross-Origin Resource Sharing) behavior in Couper. - [Client Certificate](https://docs.couper.io/configuration/block/client_certificate): The `client_certificate` block is part of its parent `tls` block. Enables mTLS configuration. - [Defaults](https://docs.couper.io/configuration/block/defaults): The defaults block lets you define default values. - [Definitions](https://docs.couper.io/configuration/block/definitions): Use the definitions block to define configurations you want to reuse. ⚠ access control is **always** defined in the definitions block. - [Endpoint](https://docs.couper.io/configuration/block/endpoint): endpoint blocks define the entry points of Couper. The required _label_ defines the path suffix for the incoming client request. Each endpoint block must produce an explicit or implicit client resp... - [Environment](https://docs.couper.io/configuration/block/environment): The environment block lets you refine the Couper configuration based on the set environment. - [Error Handler](https://docs.couper.io/configuration/block/error_handler): The error_handler block lets you configure the handling of errors thrown in components configured by the parent blocks. The error handler label specifies which error type should be handled. Multipl... - [External Authorization (Beta)](https://docs.couper.io/configuration/block/beta_external_authz): The beta_external_authz block lets you delegate the authorization decision for client requests to an external service. - [Files](https://docs.couper.io/configuration/block/files): The files blocks configure the file serving. Can be defined multiple times as long as the base_path is unique. - [Health](https://docs.couper.io/configuration/block/health): Defines a recurring health check request for its backend. Results can be obtained via the backends.