Skip to main content

Skaal

CI Python License Targets Status

Your Python app is your architecture.

Write classes and functions. Skaal infers the infrastructure, generates the Pulumi, and your primitive classes are the typed clients. Pylance follows every call site straight down to the underlying SDK. One codebase. One mental model. skaal deploy knows what to build.

What Skaal looks like

from skaal import App, BlobStore, Cron, Store, Topic
from pydantic import BaseModel

class User(BaseModel):
    id: str
    email: str

class Users(Store[User]):
    """One table. The class is the table."""
    by_email = "email"  # declarative secondary index

class Avatars(BlobStore):
    """One bucket. The class is the bucket."""

class SignupEvents(Topic[User]):
    """One topic. The class is the topic."""

app = App("acme")

@app.expose
async def signup(user: User) -> User:
    await Users.put(user.id, user)
    await SignupEvents.publish(user)
    return user

@app.schedule(Cron("0 * * * *"))
async def hourly_compact() -> None:
    ...

The class is the typed client, importable from anywhere with no codegen step:

from acme.users import Users
user: User | None = await Users.get("u1")   # Pylance: user is User | None

When you need a backend-specific feature, you pin the type and get the real SDK client back, typed:

from skaal import Store
from skaal.backends.redis import Redis

class Sessions(Store[SessionRecord, Redis]):
    """Session rows backed by Redis in every environment."""

r = await Sessions.native()    # redis.asyncio.Redis, in every environment

The CLI is symmetric:

skaal run                      # local: SQLite + filesystem + in-memory topic
skaal plan --env prod          # diff: Users -> DynamoDB, Avatars -> S3, ...
skaal deploy --env prod        # Pulumi up against AWS

There is no constraint DSL. There is no catalog you maintain. There is no solver. The shape of the code is the deployment plan; an environment picks the backend by a fixed table the framework owns.

How it works

  1. Declare classes (Store[T], BlobStore, Topic[T], Table) and functions (@app.expose, @app.schedule, @app.job).
  2. Infer an environment-independent Blueprint by walking the App graph.
  3. Bind the blueprint against an environment (local, aws, gcp) using a fixed defaults table.
  4. Generate Pulumi programs, Dockerfiles, and handler entrypoints from the bound plan.
  5. Deploy via Pulumi. The skaal.lock file pins each binding so the next plan is empty unless code changed.

For full HTTP routing, mount any ASGI app (FastAPI, Starlette, Litestar) — Skaal deploys it; the framework you already know owns the routes:

from fastapi import FastAPI
api = FastAPI()
app.mount("/api", api)

What Skaal targets

  • Local — SQLite, filesystem, in-process topics, async functions, APScheduler.
  • AWS — DynamoDB, S3, SQS, Lambda, EventBridge, RDS Postgres, Secrets Manager.
  • GCP — Firestore, GCS, Pub/Sub, Cloud Run, Cloud Scheduler, Cloud SQL, Secret Manager.

The 0.4.0 cut ships AWS first; GCP follows in a 0.4.x point release.

Installation

pip install skaal                       # base
pip install "skaal[serve,runtime]"      # local development
pip install "skaal[deploy,aws,runtime]" # AWS
pip install "skaal[deploy,gcp,runtime]" # GCP

Status

Alpha (0.4.0a0). The framework is functional end-to-end on the local target and against AWS via Pulumi. The public surface (App, Module, Store[T, B], BlobStore[B], Topic[T, B], Table[B], @app.expose, @app.schedule, @app.job) is the supported surface going forward — see notes/redesign-status.md for the live progress tracker against ADR 028.

Roadmap and design decisions: ADR index.

License

GPL-3.0-or-later. See LICENSE.

Metadata

Release files for skaal 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for skaal 0.4.0
File Size Uploaded Provenance Actions
skaal-0.4.0.tar.gz 505.0 kB With provenance Details for skaal-0.4.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for skaal 0.4.0
File Interpreter ABI Platform Actions
skaal-0.4.0-py3-none-any.whl Python 3 none any Details for skaal-0.4.0-py3-none-any.whl

Total release size: 822.0 kB

Release files / skaal-0.4.0.tar.gz

Download URL skaal-0.4.0.tar.gz
Size 505.0 kB
Tags Source
SHA-256 checksum
How to use checksums
e66e632b15fb4116bf9353cdb886011da002410264cd815a651e94f3efb917fd
BLAKE2b-256 checksum
How to use checksums
56f7aab0707bec78e1556115ec903e1c4692e0f4801fe4f5a2df60871eba8693
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

Release files / skaal-0.4.0-py3-none-any.whl

Download URL skaal-0.4.0-py3-none-any.whl
Size 317.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
daceb6968efc73c9b3c1d3f7445e240af61aced1b829de6896285b81df27be2e
BLAKE2b-256 checksum
How to use checksums
12a341182f094f266f7a95a215ac5b828f7994097d2e3e3927a1c58c29e76eab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

Security for skaal 0.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for skaal-0.4.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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