Replace the empty LICENSE placeholders with the verbatim GNU AGPL v3 text, fix the invalid "AGPLv3" SPDX string in the package metadata, and name Melvin Strobl as the copyright holder wherever the old footers said "Fluksio ... all rights reserved". Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
89 lines
3.2 KiB
Markdown
89 lines
3.2 KiB
Markdown
# Fluksio App
|
|
|
|
Fluksio has the goal to build a revolutionary system to tackle any sort of automation challenge.
|
|
|
|
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. It is served on
|
|
`app.${DOMAIN}` (SPA) and `api.${DOMAIN}` (API); the marketing site lives in the sibling
|
|
`index` repo.
|
|
|
|
## Layout
|
|
|
|
```text
|
|
backend/ FastAPI + SQLModel + Alembic + SQLite — the `fluksio` distribution
|
|
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}
|
|
docker/ compose.yml → compose.dev.yml → compose.local.yml (+ compose.traefik.yml)
|
|
scripts/ generate-client.sh, test.sh
|
|
```
|
|
|
|
## Install without Docker
|
|
|
|
```sh
|
|
pip install fluksio
|
|
fluksio serve # ~/.fluksio, SQLite, prints an admin password once
|
|
fluksio enroll <code> --portal https://hub.fluksio.com # watch it from the portal
|
|
```
|
|
|
|
Nothing else has to be running. `--data-dir` puts the installation somewhere else —
|
|
worth it on a cluster, where `$HOME` is often a network filesystem SQLite cannot use.
|
|
`git` is not required but is worth having: flows are files either way, and it is what
|
|
turns each save into a commit.
|
|
The dashboard is served by the portal, so a machine with no inbound route is reached
|
|
without opening a port: it dials out.
|
|
|
|
A machine that should only *run nodes* for an engine elsewhere installs less:
|
|
|
|
```sh
|
|
pip install fluksio-worker
|
|
fluksio-worker --url wss://api.example.com/api/v1/workers/attach --token "$TOKEN" --labels gpu
|
|
```
|
|
|
|
## Getting started
|
|
|
|
Normally driven from the workspace root (`make init` once, then `make dev`). Standalone:
|
|
|
|
```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 needs the stack up)
|
|
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. Style
|
|
follows the root `DESIGN-GUIDELINES.md`; the tokens are mirrored in
|
|
`docs/stylesheets/extra.css`.
|
|
|
|
Repo-only material:
|
|
|
|
- [`ROADMAP.md`](ROADMAP.md) — strategy and feature record
|
|
- [`NOTEPAD.md`](NOTEPAD.md) — deferred work and findings
|
|
- [`DESIGN.md`](DESIGN.md) — points at the workspace root's `DESIGN-GUIDELINES.md`
|
|
- `docs/architecture/` in the sibling `docs` repo — the requirement sources
|
|
|
|
## License
|
|
|
|
Copyright (C) 2026 Melvin Strobl — GNU Affero General Public License v3.0 or
|
|
later. See [LICENSE](LICENSE).
|