Coasti Planning Framework — Backend
The backend is a Python 3.13 FastAPI application managed with uv. It serves the framework and content-package assets from local Vite build directories.
Setup
Run this command from the repository root:
uv sync --directory backend --locked
The repository root also provides a Nix/direnv development shell that installs the required tools automatically. See the root README.
Build the frontend distributions
The backend does not build the frontend itself. Build the framework and the example extension before running the backend in local distribution mode; the framework build is also bundled into the package when building a wheel (see Package the backend).
Framework distribution
Install the frontend workspace dependencies and build the planner framework:
pnpm --dir frontend install --frozen-lockfile
pnpm --dir frontend build
This creates the framework distribution in frontend/app/dist.
Example extension distribution
Install the extension dependencies and build the example content package:
pnpm --dir cp_example_extension install --frozen-lockfile
pnpm --dir cp_example_extension build
This creates the extension distribution in cp_example_extension/dist. The
build includes the generated manifest.json and Module Federation entry point.
Configuration
The server accepts a server command and an optional YAML configuration path.
The legacy form with only the configuration path remains supported.
The example configuration is available at config.example.yml:
backend:
host: 127.0.0.1
port: 8000
framework:
dist_folder: ../frontend/planner/dist
extension:
dist_folder: ./dist
Configuration is loaded by EYConf using its
Pydantic validation backend. The configuration is represented by three pairs of
schema/runtime types in coasti_planner.config:
BackendConfigSchema/BackendConfigdefine the listening host and port.AssetSourceSchema/AssetSourcedefine a local distribution or remote development server.ServerConfigSchema/ServerConfigcombine the backend, framework, and extension settings.
Each asset source defines a local dist_folder. Relative paths are resolved
relative to the configuration file, not relative to the current working
directory.
Run the backend
From the repository root, after building both distributions:
uv run --directory backend coasti-planner ../cp_example_extension/config.example.yml
Run the full stack in development mode
Development mode does not require either frontend distribution directory. Run the backend from the backend project directory:
cd backend
uv run backend server --dev
The backend uses Uvicorn autoreload and the example configuration by default. Run the Vite development servers in separate terminals:
pnpm --dir frontend dev
pnpm --dir cp_example_extension dev
The frontend development server proxies API requests to the autoreloading backend, while the frontend and extension servers reload their own source files.
HTTP endpoints
/serves the frameworkindex.htmland its root-relative assets./api_v1/framework/{path}serves framework distribution files./api_v1/extension/{path}serves extension distribution files./api_v1/extension/manifest.jsonserves the extension's generated manifest.
The manifest is read from the extension distribution. It is not duplicated in the backend.
Package the backend
Building the backend bundles the framework build into the wheel:
pnpm --dir frontend build # produces frontend/app/dist
uv build --directory backend # bundles it into the package
The CustomBuildHook in backend/hatch_build.py copies frontend/app/dist
into src/coasti_planner/assets before packaging, and hatchling includes that
directory in both the wheel and the sdist through the artifacts entries in
pyproject.toml. The installed backend serves those bundled assets by default,
so it needs no separate framework distribution. Packaging fails with a clear
error when the framework has not been built yet.
Metadata
Release files for coasti-planner 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| coasti_planner-0.1.1.tar.gz | 523.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| coasti_planner-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 994.4 kB
Release files / coasti_planner-0.1.1.tar.gz
| Download URL | coasti_planner-0.1.1.tar.gz |
|---|---|
| Size | 523.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
05d7f392f010dbeed533d0e20ea4f07569c331bfcdf8f7b69e1a14000221b013
|
|
BLAKE2b-256 checksum How to use checksums |
03e895accf0f79d64426011cc24a3a45682073f79bfd1d00968ea93c61fa9211
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / coasti_planner-0.1.1-py3-none-any.whl
| Download URL | coasti_planner-0.1.1-py3-none-any.whl |
|---|---|
| Size | 470.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
93cab981c463d65de5ebc654307000f180941f3d2abceeaa3b71e0794352c7d2
|
|
BLAKE2b-256 checksum How to use checksums |
443c693d4af0d5cb3998837e013ac3f401cc9b6652ed2c93bce3e0392bbc9859
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|