Skip to main content
Let’s get you from zero to a running app in about five minutes, and to a working CRUD resource in ten.
1

Install Fymo

2

Create a project

This scaffolds a new project, installs its frontend dependencies, and sets up working password auth along with it: a real signin page, a real session cookie, and the signup/login/logout code behind them. There’s no email verification or password reset yet, that part is yours to add when you need it.
3

Run it

Open http://127.0.0.1:8000 in your browser.

What you’re looking at

The home page says It’s alive. and it’s not decoration, it’s a proof board. Three cards, each demonstrating one piece of the machinery live, each footed with a mono chip naming the file that produced it:
  • Server: a render timestamp that traveled from getContext() in app/controllers/home.py into the HTML before any JavaScript ran.
  • Client: a click counter. If it counts, Svelte hydrated the server-rendered page and owns it now.
  • Identity: the live value of the $auth identity store, anonymous until you sign in, resolved by your own code in app/auth/.
Edit any of the named files while fymo dev runs and the page rebuilds itself. The styling comes from app/assets/app.css, a small design-token stylesheet the app owns outright, and the favicon at app/static/favicon.svg is wired through svelte:head in the root layout.

Sign in works already

Open http://127.0.0.1:8000/signin. Sign up with any email and password, nothing to configure first. Back on the home page, the Identity card now shows your uid instead of anonymous.
This is the default password flow, wired up and ready. For the full picture, identity resolvers, route guards, and how to extend or replace it, see Authentication.

Generate a resource

Now the money path. One command gives you a full CRUD slice:
Visit /posts. A seeded row renders through the typed $remote client, and once you’re signed in there’s a create form. Titles click through to /posts/1, where edit and delete appear only for rows you own. The generated test file proves the authorization rules with nine passing tests, run them with the command the generator printed. Everything it wrote is plain app code, yours to edit, and Fymo will never touch it again. The Generators page covers the whole family: pages, remote modules, components, layouts, broadcasts, and the fymo destroy inverse.

Project structure

Here’s what fymo new set up for you:
app/jobs/ and app/broadcasts/ aren’t part of the scaffold, you add them the first time you write a background task or generate a broadcast channel. See Jobs and broadcasts. See the app/ directory to learn what belongs in each folder.

A minimal page

Every page in Fymo pairs a Python controller with a Svelte template. Here’s the smallest one you can write.
The controller returns data, and the template renders it. That’s the whole loop, and everything else in Fymo builds on it. You don’t even have to write these two files by hand: fymo generate page hello writes both and wires the route.