Skip to main content

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.

Python PostgreSQL


✨ Features

  • HTTP server — fast WSGI-based routing with a simple @expose decorator
  • 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.ini holds 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)

Source distribution for vesta-web 1.2.19
File Size Uploaded
vesta_web-1.2.19.tar.gz 4.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for vesta-web 1.2.19
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

1.2.19 This release

2 release files

1.2.18

2 release files

1.2.16

2 release files

1.2.15

2 release files

1.2.14

2 release files

1.2.13

2 release files

1.2.11

2 release files

1.2.9

2 release files

1.2.8

2 release files

1.2.7

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.9

2 release files

1.1.8

2 release files

1.1.7

2 release files

1.1.6

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page