Skip to main content

Full-code apps

Full-code apps let you build custom frontends with React or Svelte that connect to Windmill backend runnables and data tables. Unlike the low-code app editor, you write your own components and have full control over the UI.

How it works

A full-code app is a directory with the .raw_app suffix (e.g. my_app.raw_app/) or the __raw_app suffix (e.g. my_app__raw_app/) depending on your sync settings. It contains:

  • Frontend code: React or Svelte components bundled and served by Windmill
  • Backend runnables: scripts in any supported language that run on Windmill workers
  • Configuration: a raw_app.yaml file defining metadata, policy and data access

When deployed, Windmill bundles your frontend code and serves it as a single-page application. Your frontend calls backend runnables through an auto-generated wmill.ts module, which communicates with Windmill's execution engine via WebSocket.

Full-code vs low-code apps

Full-code appsLow-code apps
UICustom React/Svelte componentsDrag-and-drop component library
Frontend logicFull framework features (hooks, stores, routing)Connecting components + inline scripts
BackendScripts in backend/ folder, any languageRunnables panel, inline or workspace scripts
StylingYour own CSS, Tailwind, etc.Component-level + global CSS editor
Local devwmill app dev with hot reloadWeb-based editor only
Best forCustom UIs, complex interactions, existing codebasesQuick dashboards, forms, CRUD interfaces

Getting started

The fastest way to create a full-code app is with the CLI:

wmill app new

This scaffolds a project with your chosen framework (React or Svelte), a sample backend runnable, and the necessary configuration. Then start the development server:

cd f/folder/my_app.raw_app   # or my_app__raw_app
wmill app dev .

See the CLI workflow page for the full setup guide.

Folder suffix

By default the CLI uses dotted suffixes (.raw_app). If your filesystem or tooling hides dotfiles, set nonDottedPaths: true in your wmill.yaml to use dunder suffixes (__raw_app) instead. All examples in this documentation use the default .raw_app suffix — substitute __raw_app if you enabled non-dotted paths.

Supported languages

Backend runnables support all Windmill script languages:

LanguageExtensionLanguageExtension
TypeScript (Bun).bun.ts or .tsPython.py
TypeScript (Deno).deno.tsGo.go
PostgreSQL.pg.sqlMySQL.my.sql
BigQuery.bq.sqlSnowflake.sf.sql
MS SQL.ms.sqlOracleDB.odb.sql
DuckDB.duckdb.sqlGraphQL.gql
Bash.shPowerShell.ps1
PHP.phpRust.rs
C#.csJava.java
Ruby.rbNu.nu
Ansible.playbook.yml

Pages