A Crow app defines an interface to allow the developer access to all the different parts of the framework, without having to manually deal with each one.
An app allows access to the HTTP server (for handling connections), router (for handling URLs and requests), Middlewares (for extending Crow), among many others.
Crow has 2 different app types:
## SimpleApp
Has no middlewares.
## App<m1, m2, ...>
Has middlewares.
## Using the app
To use a Crow app, simply define `#!cpp crow::SimpleApp` or `#!cpp crow::App` if you're using middlewares.
The methods of an app can be chained. That means that you can configure and run your app in the same code line.
``` cpp
app.bindaddr(192.168.1.2).port(443).ssl_file("certfile.crt","keyfile.key").multithreaded().run();
```
Or if you like your code neat
``` cpp
app.bindaddr(192.168.1.2)
.port(443)
.ssl_file("certfile.crt","keyfile.key")
.multithreaded()
.run();
```
!!! note
The `run()` method is blocking. To run a Crow app asynchronously `run_async()` should be used instead.
For more info on middlewares, check out [this page](../middleware).
For more info on what functions are available to a Crow app, go [here](../../reference/classcrow_1_1_crow.html).