Vesta 🍒
V1 — Harpie · A batteries-included Python web framework.
Vesta is a strongly opinionated, minimalist framework for building full-stack web
applications. Routing, a PostgreSQL ORM, authentication, mailing, WebSockets, and a
companion JavaScript front-end library all ship in a single package — so you can go
from vesta init to a running app without wiring together a dozen dependencies.
✨ Features
- HTTP server — fast WSGI-based routing with a simple
@exposedecorator - WebSocket server — real-time messaging and notifications
- PostgreSQL ORM — lightweight, parameterized query helpers
- uniauth — built-in authentication: JWT sessions, email verification, password reset
- Mailing — SMTP delivery with DKIM signing and HTML templates
- Front-end library — reactive HTML templating, navigation, i18n, and a Markdown renderer
- Tooling — project scaffolding, DB management, and nginx/systemd setup via one CLI
📋 Requirements
- Python 3.8+
- PostgreSQL (used by the ORM and uniauth)
⏬ Installation
pip install vesta-web
Or install the latest from source control:
pip install git+https://gitlab.com/Louciole/vesta.git/
Minimal example
from vesta import Server
from os.path import abspath, dirname
PATH = dirname(abspath(__file__))
class App(Server):
features = {"errors": {404: "/static/404.html"}}
@Server.expose
def index(self):
return self.file(PATH + "/static/home/home.html")
@Server.expose
def hello(self, name="world"):
return f"Hello, {name}!"
App(path=PATH, configFile="/server.ini")
A method decorated with @Server.expose becomes a route: index is served at /,
and hello at /hello (query/JSON/form parameters are passed as arguments).
🛠️ CLI
| Command | Description |
|---|---|
vesta init |
Scaffold a new project (choose server type & features) |
vesta install |
Install front-end dependencies declared in the project |
vesta update |
Update the bundled front-end libraries |
vesta test |
Run the project's test suite |
vesta db create |
Create and initialize the database (+ uniauth) |
vesta db init |
Initialize the schema on an existing database |
vesta db reset |
Drop and re-initialize the database |
vesta nginx setup |
Install an nginx site config |
vesta service setup |
Install and enable a systemd service |
⚙️ Configuration
Settings live in server.ini (parsed with ConfigParser). A typical file:
[server]
IP = 0.0.0.0
PORT = 9876
DEBUG = true
DEFAULT_ENDPOINT = /
SERVICE_NAME = MyApp
[security]
SECRET_KEY = change-me # signs JWT sessions — use a long random value
[DB]
DB_USER = myapp
DB_PASSWORD = ...
DB_NAME = myapp
DB_HOST = localhost
DB_PORT = 5432
Keep secrets out of version control.
server.iniholds credentials and the JWT signing key — don't commit a real one. To stop tracking changes to a local copy:git update-index --assume-unchanged server.ini.
📚 Documentation
Full guides and the API reference: https://louciole.gitlab.io/vesta-docs/
📁 Build from source
python3 -m pip install --upgrade build
python3 -m build
pip install dist/vesta_web-*.whl
Metadata
Release files for vesta-web 1.2.19
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vesta_web-1.2.19.tar.gz | 4.7 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vesta_web-1.2.19-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 4.8 MB
Release files / vesta_web-1.2.19.tar.gz
| Download URL | vesta_web-1.2.19.tar.gz |
|---|---|
| Size | 4.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
635b2f8f5f31e710e1bc281b51b6f2519546bf41439503ce429d4ec9a7b3f27d
|
|
BLAKE2b-256 checksum How to use checksums |
8a5cb0c6bc3fded6420f43334d3fa4e666acbff1380a68c600c1ff990147f6d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.17
|
Release files / vesta_web-1.2.19-py3-none-any.whl
| Download URL | vesta_web-1.2.19-py3-none-any.whl |
|---|---|
| Size | 69.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7cbe10e96358fefb46ff0f97825f3a2573ef003e5a01ac60e92fe837e959159c
|
|
BLAKE2b-256 checksum How to use checksums |
dd5515eb7bbca7faa57522d499682eadd8b9f7055237f35b3e33f2f2ffbdb9ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.17
|