Metadata-Version: 2.4
Name: uvicore
Version: 0.4.4
Summary: The Fullstack Async Web, API and CLI Python Framework
License-Expression: MIT
License-File: LICENSE
Author: Matthew Reschke
Author-email: mail@mreschke.com
Requires-Python: >=3.12
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Environment :: Web Environment
Classifier: Environment :: Console
Classifier: Framework :: AnyIO
Classifier: Framework :: FastAPI
Classifier: Framework :: Pydantic
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: OS Independent
Classifier: Topic :: Internet
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Typing :: Typed
Provides-Extra: database
Provides-Extra: redis
Provides-Extra: web
Requires-Dist: aiofiles (==25.1.0) ; extra == "web"
Requires-Dist: aiomysql (==0.3.2) ; extra == "database"
Requires-Dist: aiosqlite (==0.22.1) ; extra == "database"
Requires-Dist: alembic (==1.18.4) ; extra == "database"
Requires-Dist: annotated-doc (==0.0.4) ; extra == "web"
Requires-Dist: annotated-types (==0.7.0)
Requires-Dist: anyio (==4.14.0)
Requires-Dist: argon2-cffi (==25.1.0)
Requires-Dist: argon2-cffi-bindings (==25.1.0)
Requires-Dist: async-timeout (==5.0.1) ; (extra == "database" or extra == "redis") and python_version == "3.10" or extra == "redis" and python_full_version < "3.11.3"
Requires-Dist: asyncpg (==0.31.0) ; extra == "database"
Requires-Dist: backports-datetime-fromisoformat (==2.0.3) ; python_version == "3.10"
Requires-Dist: certifi (==2026.6.17)
Requires-Dist: cffi (==2.0.0)
Requires-Dist: click (==8.4.1) ; extra == "web"
Requires-Dist: colorama (==0.4.6) ; platform_system == "Windows"
Requires-Dist: colored (==2.3.2)
Requires-Dist: colorful (==0.5.8)
Requires-Dist: cryptography (==49.0.0)
Requires-Dist: environs (==15.0.1)
Requires-Dist: exceptiongroup (==1.3.1) ; python_version == "3.10"
Requires-Dist: fastapi (==0.137.2) ; extra == "web"
Requires-Dist: greenlet (==3.5.2) ; extra == "database" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32")
Requires-Dist: gunicorn (==26.0.0) ; extra == "web"
Requires-Dist: h11 (==0.16.0)
Requires-Dist: hiredis (==3.4.0) ; extra == "redis"
Requires-Dist: httpcore (==1.0.9)
Requires-Dist: httptools (==0.8.0) ; extra == "web"
Requires-Dist: httpx (==0.28.1)
Requires-Dist: idna (==3.18)
Requires-Dist: itsdangerous (==2.2.0) ; extra == "web"
Requires-Dist: jinja2 (==3.1.6)
Requires-Dist: mako (==1.3.12) ; extra == "database"
Requires-Dist: markupsafe (==3.0.3)
Requires-Dist: marshmallow (==4.3.0)
Requires-Dist: merge-args (==0.1.5)
Requires-Dist: packaging (==26.2) ; extra == "web"
Requires-Dist: prettyprinter (==0.18.0)
Requires-Dist: pycparser (==3.0) ; implementation_name != "PyPy"
Requires-Dist: pydantic (==2.13.4)
Requires-Dist: pydantic-core (==2.46.4)
Requires-Dist: pygments (==2.20.0)
Requires-Dist: pyjwt (==2.13.0) ; extra == "web"
Requires-Dist: pymysql (==1.2.0) ; extra == "database"
Requires-Dist: python-dotenv (==1.2.2)
Requires-Dist: python-multipart (==0.0.32) ; extra == "web"
Requires-Dist: redis[hiredis] (==8.0.0) ; extra == "redis"
Requires-Dist: sqlalchemy (==2.0.51) ; extra == "database"
Requires-Dist: starlette (==1.3.1) ; extra == "web"
Requires-Dist: tomli (==2.4.1) ; extra == "database" and python_version == "3.10"
Requires-Dist: typing-extensions (==4.15.0)
Requires-Dist: typing-inspection (==0.4.2)
Requires-Dist: uvicorn (==0.49.0) ; extra == "web"
Requires-Dist: uvloop (==0.22.1) ; extra == "web"
Project-URL: Documentation, https://github.com/uvicore/framework
Project-URL: Homepage, https://github.com/uvicore/framework
Project-URL: Repository, https://github.com/uvicore/framework
Description-Content-Type: text/markdown

# Welcome to Uvicore

The Full Stack Asynchronous Python Framework with the performance of [FastAPI](https://github.com/fastapi/fastapi) and the elegance of Laravel!

## About Uvicore

Uvicore is a fullstack async API, Web and CLI python framework.  Uvicore is built on great technologies such as:

- Blazing fast dual routing engine based on [FastAPI](https://github.com/fastapi/fastapi) and [Starlette](https://github.com/encode/starlette)!
- Await all the things, even your CLI's thanks to [AsyncClick](https://github.com/python-trio/asyncclick)!
- Powerful **IoC container!** Full control to your app! Override everything!
- Adapter pattens for multiple backends to caching, auth, events, databases and more.
- Robust modular and deep-merged config system across uvicore modules.
- Custom and expressive ORM built on top of [SQLAlchemy Core](https://docs.sqlalchemy.org/en/20/core/).

Uvicore is the missing fullstack asynchronous framework for elegant and rapid python development


## Getting Started

View the Uvicore documentation to get started https://uvicore.io


## Quick Install

https://uvicore.io/getting-started/installation/

![](https://uvicore.io/files/uvicore-installer.gif)


### The CLI

After starting your preferred virtual environment and installing dependencies...

```bash
./uvicore
./uvicore wiki welcome
```
![](https://uvicore.io/files/uvicore-cli01.png)


### Web and API

Assuming you chose the `web` extras

```bash
# Still in your virtual environment
./uvicore http routes
./uvicore http serve
```

- Visit http://127.0.0.1:5000
- Visit http://127.0.0.1:5000/api/docs
- Try `curl http://127.0.0.1:5000/api/welcome`

![](https://uvicore.io/files/api-docs-welcome01.png)


## Benchmarks?

Lets see how fast uvicore is!

Install https://github.com/wg/wrk on your os

```bash
# Still in your virtual environment
./serve-gunicorn
```

In another terminal

```bash
curl http://127.0.0.1:5000/api/welcome
wrk -c50 -t8 -d10 http://127.0.0.1:5000/api/welcome
```

40,000 requests a second, pretty good for a hello world!  Thanks [FastAPI](https://github.com/fastapi/fastapi)!
```
Running 10s test @ http://127.0.0.1:5000/api/welcome
  8 threads and 50 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.23ms  354.23us  10.40ms   69.95%
    Req/Sec     4.92k   432.18     6.15k    65.30%
  394740 requests in 10.10s, 57.97MB read
Requests/sec:  39083.14
Transfer/sec:      5.74MB
```

What about [Starlette](https://github.com/encode/starlette) with our Welcome [Jinja](https://github.com/pallets/jinja) templates?

```bash
curl http://127.0.0.1:5000/api/welcome
wrk -c50 -t8 -d10 http://127.0.0.1:5000/api/welcome
```

Wow 44,000 requests a second! [Starlette](https://github.com/encode/starlette) is blazing fast!

```
Running 10s test @ http://127.0.0.1:5000
  8 threads and 50 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.11ms  348.15us  12.08ms   72.46%
    Req/Sec     5.44k   664.22     7.26k    66.91%
  436883 requests in 10.10s, 0.85GB read
Requests/sec:  43255.92
Transfer/sec:     86.30MB
```

## Supported Python

- Uvicore 0.1 - Python 3.9
- Uvicore 0.2 - Python 3.9, 3.10
- Uvicore 0.3 - Python 3.10+


## License

The Uvicore framework is open-sourced software licensed under the [MIT license](https://mreschke.com/license/mit).

