## starlette_web

`starlette_web` is a native-asynchronous web-framework, based on [Starlette](https://www.starlette.io/) 
and inspired by [Django](https://www.djangoproject.com/) and its ecosystem.
It aims to provide most of the relevant features of Django in async-all-the-way setting.

Its priorities, from most important to least important, are as follows:

- **Providing a strict ecosystem** - all parts of framework are aimed to work well together and follow same ideas. 
  In a way, this goes against idea of mini-frameworks like Starlette, which favor a lot of contrib plug-ins, 
  written by different authors.
  Developer must follow the conventions of the framework in most cases.
- **Robustness** - `starlette_web` is written with **anyio** and aims to follow principles of structured concurrency.
- **Feature completeness** - while the aim is not to cover all the Django ecosystem 
  (especially, because a lot of it is legacy), many useful libraries are included.
- **Cross-platform support** - most of the features are supported for both POSIX and Windows systems. 
  However, a number of contrib modules aim specifically at certain OS, and obviously it's mostly Linux. 
- **Speed** - while framework is being used in multiple projects without speed issues, speed is not properly benchmarked.
  Probably, the framework is slower than all other async Python frameworks, though not by a large amount.

**SQLAlchemy** is used as framework's database toolkit and ORM.  
**Marshmallow** is used for (de)serialization in API.  
**OpenAPI** documentation (redoc) can be autogenerated with apispec contrib module.

The framework is not well suited for novice users. It assumes prior knowledge of Django and async development in Python.

<u>The framework is in active development stage, so expect some breaking changes.</u>

## Installation, usage and supported features

Installation and deploy instructions are in [docs/howto](./docs/howto/README.md) section.

For supported features, see [docs/README.md](./docs/README.md) section.

See tests for more examples of usage.

## Code borrowing

starlette-web borrows/adopts a lot of code from other open-source Python libraries. 
List of libraries is given in the [docs](./docs/borrowing.md), with links to repositories and licences.
