Skip to main content
This page is for anyone contributing to the fymo framework itself, meaning the fymo/ package, its CLI, and its build pipeline. If you’re building an application with fymo instead, head over to the quickstart.

Prerequisites

  • Python 3.11 or newer, since pyproject.toml sets requires-python = ">=3.11"
  • Node.js 20 or newer. The bundler shells out to esbuild, and the SSR sidecar runs on Node
  • uv, which the project’s own CI uses, though a plain pip and venv workflow works fine too
1

Clone the repo

2

Install Python dependencies

With uv:
This installs fymo itself in editable mode, plus the dev dependencies from pyproject.toml: pytest, pytest-asyncio, and pydantic.Prefer a plain virtualenv? This covers the same ground:
3

Install root npm dependencies

The root package.json declares svelte and devalue as runtime dependencies, and esbuild, esbuild-svelte, jsdom, svelte-preprocess, and typescript as dev dependencies. These are what the framework’s own build and test code, under fymo/build/js, shells out to.
4

Run the test suite

Or, without uv, with your virtualenv active:
Tests live under tests/. Each file follows the test_*.py naming pattern, set in pyproject.toml.

Running an example app

The repo ships two example apps under examples/. One is blog_app, which covers remote functions and auth; the other is todo_app, a plain CRUD-style UI. Each has its own package.json and requirements.txt, since it’s meant to work as a standalone fymo project you could copy out of the repo.
1

Install the example's npm dependencies

Pick blog_app or todo_app, whichever you’d like to explore, then install its dependencies:
2

Build and serve

Or, if you’d like the browser to reload automatically as you edit, run fymo dev instead for incremental rebuilds.Visit http://127.0.0.1:8000 to see it running.
Both example apps list fymo>=0.1.0 in their requirements.txt, which normally means pulling fymo from PyPI. Neither the example apps nor the CI workflows spell out a step for pointing that dependency at your local checkout instead.In practice this tends to work out on its own. If you run an example from the same environment where you ran uv sync at the repo root, that environment already holds your editable install of fymo. So running python or fymo there picks up your working copy, not the published release, simply because that’s how an editable install behaves.If you set up an example in its own fresh virtual environment instead, you’ll need to repeat that editable install yourself. Something like pip install -e /path/to/fymo will do it, so your local changes show up too.

Commit messages

CI checks that every non-merge commit message follows Conventional Commits: type(scope): description. The type must be one of feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert. A lint job in .github/workflows/ci.yml enforces this on every push to main.

The app/ directory

A map of where everything lives in a Fymo project.

Quickstart

The application-builder path: install fymo and scaffold a new project.