Files
app/README.md
T
stroblmeandClaude Opus 5.5 48aac3855b One image for the whole app: engine, API and dashboard on one port
The backend image now builds the SPA and serves it on the API's own origin
(fluksio/spa.py), so an instance is a single container with no proxy, DNS,
port 80 or .env: `docker compose up -d` with the new compose.yml runs it on
localhost:8080. It starts on fluksio serve (persisted secret key, first
admin printed once) and brings its own Redis when REDIS_HOST is unset.

Slimmer: python:3.13-slim, no dev group, uv once, fastapi without the cloud
CLI. Optional features are per-feature extras (mqtt, influx, email, sentry,
ml, server for all) picked with the EXTRAS build argument; numpy moved to
`ml`. ffmpeg left the image for imageio-ffmpeg via the Modules screen.

The operator stack runs the same image with app. and api. routed to it; the
nginx frontend service, the LAN nginx proxy and DOMAIN in the backend are
gone, and the MCP issuer is FRONTEND_HOST.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 11:40:02 +02:00

104 lines
3.0 KiB
Markdown

# Fluksio App
Fluksio is a node-based automation software that brings trust and reliability to your flow.
It just works and looks good.
The core of Fluksio: a node-based, test-driven automation software built to scale. This
repo holds the FastAPI backend, the flow engine, and the dashboard SPA, built into one
image that serves all three on one port.
## Layout
```text
backend/ FastAPI + SQLModel + Alembic + SQLite
fluksio/flow/ the flow engine (nodes, pipeline, state backends, controller)
fluksio/cli.py `fluksio serve` / `enroll` / `worker`
worker/ the `fluksio-worker` distribution: the agent and the node runner
frontend/ React 19 + TanStack Router + Tailwind 4 + shadcn/ui
docs/ the public documentation site (zensical), served on docs.${DOMAIN}
compose.yml the single container, as the getting-started guide runs it
docker/ the operator stack: compose.yml → compose.dev.yml → compose.local.yml (+ compose.traefik.yml)
scripts/ generate-client.sh, test.sh
```
## Install without Docker
Get started quickly by running
```sh
pip install fluksio
fluksio serve
```
Then, head over to [fluksio.com](https://fluksio.com), sign up and add a new instance.
Using the code provided, run
```sh
fluksio enroll <code>
```
and you're ready to rock.
Fluksio is distributed at it's heart.
A machine that should only *run nodes* for an engine elsewhere installs less:
```sh
pip install fluksio-worker
FLUKSIO_WORKER_TOKEN=… fluksio-worker --url wss://api.fluksio.com/api/v1/workers/attach --labels gpu
```
## Getting started
Needs Docker with Compose v2.
```sh
docker compose up -d # http://localhost:8080
docker compose logs fluksio # the admin password, printed once
```
Optional features (MQTT, InfluxDB, mail, …) are build-time extras; see `EXTRAS` in
`compose.yml`.
For development, with hot reload behind Traefik on port 80 (also needs `make` and `openssl`):
```sh
make init # once: .env with generated secrets, `proxy` network, prints the admin login
make dev-local # full stack at http://app.localhost
make down # stop it
```
Without Docker:
```sh
make install # uv sync + bun install
make dev-utils # proxy and mailcatcher only
make dev-backend # FastAPI on :8000, hot reload
make dev-frontend # Vite on :5173
```
```sh
make test # pytest + Playwright (the e2e half on its own stack, behind make dev's Traefik)
make lint # ruff + mypy + biome
make generate-client # regenerate the frontend SDK from the OpenAPI schema
```
`make help` lists every target.
## Documentation
The public site lives in [`docs/`](docs/) and is built with zensical:
```sh
make docs-serve # live preview on :8000
make docs # static build into ./site
```
It is served at `docs.${DOMAIN}` by the `docs` service in `docker/compose.yml`,
and `.gitea/workflows/docs.yml` builds it with `--strict` on every push.
## License
Copyright (C) 2026 Melvin Strobl - GNU Affero General Public License v3.0 or
later. See [LICENSE](LICENSE).