Latest commit

History

1,171 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Flow

A language for systems that evolve through time

Docs · Getting started · Galleries · Vision · Discord · Contributing

CIDocsReleaseLicense: MITDiscord

Source linesStandard libraryExamplesTests

Flow is a statically typed, compiled systems language. Flow 1.0 freezes a deliberately small production core around the self-hosted flowc compiler and portable C backend; algebraic effects, dynamics/control DSLs, verification, advanced stdlib domains and alternate backends continue to ship as explicitly Experimental surfaces until they are promoted.

Version1.0.2
Installbrew tap flooooooooooow/flow && brew install flow
LicenseMIT
CiteCITATION.cff

Flow 1.0's compatibility promise is defined in STABILITY.md. Linux x86-64 and macOS arm64 are the initial Tier-1 platforms; every published v1.* release is qualified from the exact tag before GitHub Release publication.

Quickstart

The default production path is the self-hosted flowc compiler targeting portable C.

function main() -> i32 {
println("Hello, Flow!")
return 0
}
flow run hello.flow

Full quickstart covers variables, functions, structs, loops, and a complete flow evolution model.


Why Flow

Most languages are built around computation: sequences of instructions that transform inputs to outputs.

Flow is built around evolution. You describe how a system changes through time. That description is what runs.

An engineer working on a physical system today crosses Python for analysis, MATLAB for controller design, Simulink for block diagrams, C/C++ for deployment, Verilog for hardware, and vendor tools for the rest. Every handoff loses information. The mathematical model drifts from the deployed code.

Flow collapses those boundaries. The model is the program. The compiler understands units, sample rates, timing contracts, memory topology, and numeric precision as part of the type system, and emits portable C by default.

flow Pendulum {
state angle: f64 = 0.5
state velocity: f64 = 0.0
param damping: f64 = 0.3
angle evolves as velocity
velocity evolves as -9.81 * sin(angle) - damping * velocity
}

That is a complete program. The compiler hands the right-hand side to an RK4 solver and runs it at native speed. No notebook, no glue code, no translation step between model and deployment.

Full thesis: VISION.md. Vision mapped onto grammar: docs/vision/north-star.md. Phase sequencing: ROADMAP.md.


What you get

  • A Stable systems-language core with a self-hosted flowc compiler and portable C backend.
  • Dynamical systems, controllers, algebraic effects, autodiff, graphics and domain libraries available as shipped Experimental surfaces with explicit promotion boundaries.
  • C backend by default with no LLVM requirement; MLIR/JIT, CUDA and other specialised targets remain Experimental in 1.0.
  • Games, morphogenesis, neurodynamics, and real-time DSP as ordinary examples under examples/.

Installation

Homebrew

brew tap flooooooooooow/flow
brew install flow
flow version
flow run examples/basics/hello_world.flow

Track main with brew install --HEAD flow. Formula: packaging/homebrew.

From source

git clone https://github.com/flooooooooooow/flow.git
cd flow
./flow run examples/basics/hello_world.flow

The production compiler path requires a conforming C11 toolchain. Python 3.9+ is retained for the reference/bootstrap compiler and development tooling, not as the canonical 1.0 execution host.

Optional: ./flow install puts flow on your PATH (~/.local/bin).

Longer walkthrough: Getting started.

New to programming: Start here goes from an empty terminal to a running simulation, and sets up an AI assistant to write Flow with you.

Working with an AI assistant

Flow is not in any model's training data, so an assistant does much better with the current facts in front of it. Two things help:

  • Working with AI on Flow, the operating handbook.
  • flow-skills, a pack of skills, references, and command-line tools. ./install.sh and your assistant knows the syntax, the compiler hosts, and how to verify its own work.

Examples

Each GIF is a recording of the compiled program. Frames come from the real gfx backend.

Games
SnakeAsteroidsBreakout
SnakeAsteroidsBreakout
FlappyInvadersPong
FlappyInvadersPong
Morphogenesis
Gray-ScottTuring spotsDiffusion-limited aggregation
Gray-ScottTuring spotsDiffusion-limited aggregation
L-system treeSlime moldSandpile
L-system treeSlime moldSandpile
Neurons and networks
Hodgkin-HuxleyIzhikevich zooBalanced network
Hodgkin-HuxleyIzhikevich zooBalanced network
Evolutionary biology
Lotka-VolterraWright-FisherRed Queen
Lotka-VolterraWright-FisherRed Queen
Spatial SIRHawk-DoveRock-paper-scissors
Spatial SIRHawk-DoveRock-paper-scissors
Planet
BiomesTectonicsErosion
BiomesTectonicsErosion
Procedural generation
Wavefunction dungeonVoronoi sitesHeightmap fBm
Wavefunction dungeonVoronoi sitesHeightmap fBm
3D
Voxel worldFPS cameraPhysics 3D
Voxel worldFPS cameraPhysics 3D
Numerical and social
Adaptive FMMVoter modelMajority rule
Adaptive FMMVoter modelMajority rule
./flow gfx examples/games/tetris_gfx.flow
./flow gfx examples/evolution/lorenz_gfx.flow
./flow run examples/ml/models/mlp_xor.flow
./flow gfx examples/morphogenesis/gray_scott.flow
./flow gfx examples/neuro/hodgkin_huxley.flow
./flow gfx examples/evoleco/lotka_volterra_gfx.flow
./flow gfx examples/planet/planet_biomes.flow
./flow gfx examples/procgen/wfc_dungeon.flow
./flow gfx examples/threed/voxel_world.flow
DomainGalleryIndex
Games (24)demosexamples/games
Morphogenesisdemosexamples/morphogenesis
Neurons and networksdemosexamples/neuro
Evolutionary biologydemosexamples/evoleco
AI / ML trainingtutorialsexamples/ai, examples/ml

Entrypoints by domain: examples/README.md.


Language at a glance

Core syntax

let x: i32 = 42 # Immutable
let mut counter: i32 = 0 # Mutable
function add(a: i32, b: i32) -> i32 {
return a + b
}
struct Point { x: f32, y: f32 }
if x > 0 { ... } elif x < 0 { ... } else { ... }
while condition { ... }
for i in 0 to 10 { ... }

Types

Primitives: i32, i64, f32, f64, bool, string, void
Pointers: ptr<T>, ptr<void>
Arrays: array<T, N>
Generics: function identity<T>(x: T) -> T

Algebraic effects

effect Logger {
log(msg: string) -> void
}
capability ConsoleLogger {
effect Logger
function log(msg: string) -> void {
println(msg)
}
}

Walkthrough: docs/effects-showcase.md · examples/effects/showcase.flow.

Automatic differentiation

Forward-mode dual numbers and reverse helpers live in the stdlib (lib/stdlib/autodiff.flow). The XOR tourist demo trains via checked-in grad codegen in examples/ml/models/mlp_xor.flow. Compiler-integrated loss.grad is still on the roadmap.

FFI

extern {
function malloc(size: i64) -> ptr<void>
function free(p: ptr<void>) -> void
}

Documentation

ResourceDescription
Getting startedInstall, first program, basics
Language overviewFeatures and design
Language designIdioms and why Flow favors fluid abstraction
Language specFull reference
Effects showcaseAlgebraic effects end to end
Examples indexDemos by domain
Examples statusCompile status of every example
VisionWhy Flow exists
RoadmapNear-term work
ChangelogVersion history
Self-hostingStage-A flowc in compiler/
Security · Conduct · GovernanceProject policy

Site: flooooooooooow.github.io/flow


Project layout

PathContents
flowCLI entry point
src/flow/Python-host compiler (parser, type checker, C/MLIR/Metal backends)
compiler/Self-hosted Stage-A flowc
lib/stdlib/Standard library
runtime/Native runtime (graphics, audio, recording)
examples/Domain demos and verify corpus
tests/Language and stdlib tests
apps/Applications (flowdb, flow-http, …)
benchmarks/Microbenchmarks and harness
docs/Spec, tutorials, demos, project docs
third_party/integrations/vscode/VS Code / Cursor extension
site/Wiki shell and site assets

Self-hosting status

The self-hosted compiler (compiler/src/, written in Flow) is the default host for ./flow run and ./flow compile. It compiles itself end to end: three consecutive generation fixed-points are byte-identical, and a clean checkout needs no Python to build a working compiler.

The bootstrap language suite (tests/lang/, 90 .flow files) is the regression target for self-hosted parity. Current result, run with FLOWC_IN/FLOWC_OUT environment variables:

pass=79 fail=11

The 11 failures fall into five categories:

CategoryTestsRoot cause
DSL parse failurestest_effects, test_hybrid_events, test_time_blockseffect, capability, flow, state, solver, evolves, every keywords are not parsed
Generic monomorphizationtest_generics, test_generic_channelsParser accepts generic syntax but the monomorphizer is missing; struct Box<T> emits T value instead of a concrete type
Overload resolutiontest_unsigned_intsType checker rejects duplicate function names; overload selection is not implemented
Closure snapshot semanticstest_closuresCaptured variables are hoisted to globals without snapshotting the value at closure creation time
Stdlib codegentest_gif_encoder, test_fir_optsLZW encoder emits a variable used as a function call; FIR inline-pure bonus constant gets a float-to-int truncation
External C headerstest_c_import_julia, test_c_import_pythonSystem headers for Julia and Python embedding are not available in the test environment

The Python-host compiler (src/flow/, 46,695 lines) remains the full language surface: generics, effects, MLIR, GPU, DSLs, and all advanced type checking. The self-hosted compiler (compiler/src/, 10,863 lines) covers the subset needed to compile itself plus a growing set of language features. See docs/project/self-hosting.md for the full plan and compiler/README.md for the supported syntax list.


Build and develop

./flow run <file># Compile and run (default host: flowc)
./flow compile <file># Compile only → build/
FLOW_HOST=python ./flow run <file># Full Python-host language surface
./flow test# Test suite (strict by default)
./flow test --strict --tier2 # + transpile / clang compile checks
./flow fmt <file># Format
./flow repl # Interactive mode
./flow lsp # Language server
./flow gfx <file># Compile and run with graphics
./flow mlir <file># Emit MLIR (requires LLVM/MLIR tools)

Host switch: FLOW_HOST=flowc|python|auto (default flowc for run / compile).

# Fuzz the compiler
python3 tests/fuzz/run_fuzz.py --seconds 30
# Regenerate examples compile-status table
python3 scripts/verify_examples.py

Editor support

./scripts/publish_vscode_extension.sh --install
# Or: cursor --install-extension quilio.flow-language

Extension source: third_party/integrations/vscode/flow-language/.

Python wheels from Flow

./flow python mylib.flow --name mylib
pip install dist/mylib-*.whl

Details: docs/python-target.md.

Compiler pipeline

Flow source → Parser → AST → C / MLIR / Metal → Clang / LLVM / shaders

Project statistics

Counted from tracked files by CI so the numbers match the tree.

MetricFiles / modulesPhysical lines
Tracked source3,117442,972
Flow language2,089226,359
Python compiler (src/flow)7351,614
Self-hosted compiler (compiler/src)4022,752
Standard library modules11133,350
Native runtime448,035
Examples (excluding verify corpus)426112,671
Verify corpus1,07818,715
Tests (.py + .flow)45548,539
Application programs81,537
Registry packages19
Documentation pages17339,462
Tracked source by language
LanguageFilesPhysical lines
Flow2,089226,359
Python376114,884
HTML21438,604
C9723,485
C/C++ headers4911,017
C++239,414
JavaScript1917,573
Shell505,329
CSS123,611
Objective-C41,436
Objective-C++2654
Rust10606

Generated by CI from tracked files at 8cd159414c4a. Proof documents: 1,080. Raw JSON · Flow counter · Python fallback.


Contributing

Flow is built with humans directing design and agents writing a lot of the code. See CONTRIBUTING.md for decision authority and how to land changes.

Priorities: ROADMAP.md · docs/NEXT.md.


License

MIT. See LICENSE.


Flowy the Hedgehog, the Flow mascot
Made with care by humans and AI · mascot: Flowy the Hedgehog

About

Flow — a statically typed language for systems that evolve through time (effects, autodiff, C/MLIR)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

1,171 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Flow

A language for systems that evolve through time

Docs · Getting started · Galleries · Vision · Discord · Contributing

CIDocsReleaseLicense: MITDiscord

Source linesStandard libraryExamplesTests

Flow is a statically typed, compiled systems language. Flow 1.0 freezes a deliberately small production core around the self-hosted flowc compiler and portable C backend; algebraic effects, dynamics/control DSLs, verification, advanced stdlib domains and alternate backends continue to ship as explicitly Experimental surfaces until they are promoted.

Version1.0.2
Installbrew tap flooooooooooow/flow && brew install flow
LicenseMIT
CiteCITATION.cff

Flow 1.0's compatibility promise is defined in STABILITY.md. Linux x86-64 and macOS arm64 are the initial Tier-1 platforms; every published v1.* release is qualified from the exact tag before GitHub Release publication.

Quickstart

The default production path is the self-hosted flowc compiler targeting portable C.

function main() -> i32 {
println("Hello, Flow!")
return 0
}
flow run hello.flow

Full quickstart covers variables, functions, structs, loops, and a complete flow evolution model.


Why Flow

Most languages are built around computation: sequences of instructions that transform inputs to outputs.

Flow is built around evolution. You describe how a system changes through time. That description is what runs.

An engineer working on a physical system today crosses Python for analysis, MATLAB for controller design, Simulink for block diagrams, C/C++ for deployment, Verilog for hardware, and vendor tools for the rest. Every handoff loses information. The mathematical model drifts from the deployed code.

Flow collapses those boundaries. The model is the program. The compiler understands units, sample rates, timing contracts, memory topology, and numeric precision as part of the type system, and emits portable C by default.

flow Pendulum {
state angle: f64 = 0.5
state velocity: f64 = 0.0
param damping: f64 = 0.3
angle evolves as velocity
velocity evolves as -9.81 * sin(angle) - damping * velocity
}

That is a complete program. The compiler hands the right-hand side to an RK4 solver and runs it at native speed. No notebook, no glue code, no translation step between model and deployment.

Full thesis: VISION.md. Vision mapped onto grammar: docs/vision/north-star.md. Phase sequencing: ROADMAP.md.


What you get

  • A Stable systems-language core with a self-hosted flowc compiler and portable C backend.
  • Dynamical systems, controllers, algebraic effects, autodiff, graphics and domain libraries available as shipped Experimental surfaces with explicit promotion boundaries.
  • C backend by default with no LLVM requirement; MLIR/JIT, CUDA and other specialised targets remain Experimental in 1.0.
  • Games, morphogenesis, neurodynamics, and real-time DSP as ordinary examples under examples/.

Installation

Homebrew

brew tap flooooooooooow/flow
brew install flow
flow version
flow run examples/basics/hello_world.flow

Track main with brew install --HEAD flow. Formula: packaging/homebrew.

From source

git clone https://github.com/flooooooooooow/flow.git
cd flow
./flow run examples/basics/hello_world.flow

The production compiler path requires a conforming C11 toolchain. Python 3.9+ is retained for the reference/bootstrap compiler and development tooling, not as the canonical 1.0 execution host.

Optional: ./flow install puts flow on your PATH (~/.local/bin).

Longer walkthrough: Getting started.

New to programming: Start here goes from an empty terminal to a running simulation, and sets up an AI assistant to write Flow with you.

Working with an AI assistant

Flow is not in any model's training data, so an assistant does much better with the current facts in front of it. Two things help:

  • Working with AI on Flow, the operating handbook.
  • flow-skills, a pack of skills, references, and command-line tools. ./install.sh and your assistant knows the syntax, the compiler hosts, and how to verify its own work.

Examples

Each GIF is a recording of the compiled program. Frames come from the real gfx backend.

Games
SnakeAsteroidsBreakout
SnakeAsteroidsBreakout
FlappyInvadersPong
FlappyInvadersPong
Morphogenesis
Gray-ScottTuring spotsDiffusion-limited aggregation
Gray-ScottTuring spotsDiffusion-limited aggregation
L-system treeSlime moldSandpile
L-system treeSlime moldSandpile
Neurons and networks
Hodgkin-HuxleyIzhikevich zooBalanced network
Hodgkin-HuxleyIzhikevich zooBalanced network
Evolutionary biology
Lotka-VolterraWright-FisherRed Queen
Lotka-VolterraWright-FisherRed Queen
Spatial SIRHawk-DoveRock-paper-scissors
Spatial SIRHawk-DoveRock-paper-scissors
Planet
BiomesTectonicsErosion
BiomesTectonicsErosion
Procedural generation
Wavefunction dungeonVoronoi sitesHeightmap fBm
Wavefunction dungeonVoronoi sitesHeightmap fBm
3D
Voxel worldFPS cameraPhysics 3D
Voxel worldFPS cameraPhysics 3D
Numerical and social
Adaptive FMMVoter modelMajority rule
Adaptive FMMVoter modelMajority rule
./flow gfx examples/games/tetris_gfx.flow
./flow gfx examples/evolution/lorenz_gfx.flow
./flow run examples/ml/models/mlp_xor.flow
./flow gfx examples/morphogenesis/gray_scott.flow
./flow gfx examples/neuro/hodgkin_huxley.flow
./flow gfx examples/evoleco/lotka_volterra_gfx.flow
./flow gfx examples/planet/planet_biomes.flow
./flow gfx examples/procgen/wfc_dungeon.flow
./flow gfx examples/threed/voxel_world.flow
DomainGalleryIndex
Games (24)demosexamples/games
Morphogenesisdemosexamples/morphogenesis
Neurons and networksdemosexamples/neuro
Evolutionary biologydemosexamples/evoleco
AI / ML trainingtutorialsexamples/ai, examples/ml

Entrypoints by domain: examples/README.md.


Language at a glance

Core syntax

let x: i32 = 42 # Immutable
let mut counter: i32 = 0 # Mutable
function add(a: i32, b: i32) -> i32 {
return a + b
}
struct Point { x: f32, y: f32 }
if x > 0 { ... } elif x < 0 { ... } else { ... }
while condition { ... }
for i in 0 to 10 { ... }

Types

Primitives: i32, i64, f32, f64, bool, string, void
Pointers: ptr<T>, ptr<void>
Arrays: array<T, N>
Generics: function identity<T>(x: T) -> T

Algebraic effects

effect Logger {
log(msg: string) -> void
}
capability ConsoleLogger {
effect Logger
function log(msg: string) -> void {
println(msg)
}
}

Walkthrough: docs/effects-showcase.md · examples/effects/showcase.flow.

Automatic differentiation

Forward-mode dual numbers and reverse helpers live in the stdlib (lib/stdlib/autodiff.flow). The XOR tourist demo trains via checked-in grad codegen in examples/ml/models/mlp_xor.flow. Compiler-integrated loss.grad is still on the roadmap.

FFI

extern {
function malloc(size: i64) -> ptr<void>
function free(p: ptr<void>) -> void
}

Documentation

ResourceDescription
Getting startedInstall, first program, basics
Language overviewFeatures and design
Language designIdioms and why Flow favors fluid abstraction
Language specFull reference
Effects showcaseAlgebraic effects end to end
Examples indexDemos by domain
Examples statusCompile status of every example
VisionWhy Flow exists
RoadmapNear-term work
ChangelogVersion history
Self-hostingStage-A flowc in compiler/
Security · Conduct · GovernanceProject policy

Site: flooooooooooow.github.io/flow


Project layout

PathContents
flowCLI entry point
src/flow/Python-host compiler (parser, type checker, C/MLIR/Metal backends)
compiler/Self-hosted Stage-A flowc
lib/stdlib/Standard library
runtime/Native runtime (graphics, audio, recording)
examples/Domain demos and verify corpus
tests/Language and stdlib tests
apps/Applications (flowdb, flow-http, …)
benchmarks/Microbenchmarks and harness
docs/Spec, tutorials, demos, project docs
third_party/integrations/vscode/VS Code / Cursor extension
site/Wiki shell and site assets

Self-hosting status

The self-hosted compiler (compiler/src/, written in Flow) is the default host for ./flow run and ./flow compile. It compiles itself end to end: three consecutive generation fixed-points are byte-identical, and a clean checkout needs no Python to build a working compiler.

The bootstrap language suite (tests/lang/, 90 .flow files) is the regression target for self-hosted parity. Current result, run with FLOWC_IN/FLOWC_OUT environment variables:

pass=79 fail=11

The 11 failures fall into five categories:

CategoryTestsRoot cause
DSL parse failurestest_effects, test_hybrid_events, test_time_blockseffect, capability, flow, state, solver, evolves, every keywords are not parsed
Generic monomorphizationtest_generics, test_generic_channelsParser accepts generic syntax but the monomorphizer is missing; struct Box<T> emits T value instead of a concrete type
Overload resolutiontest_unsigned_intsType checker rejects duplicate function names; overload selection is not implemented
Closure snapshot semanticstest_closuresCaptured variables are hoisted to globals without snapshotting the value at closure creation time
Stdlib codegentest_gif_encoder, test_fir_optsLZW encoder emits a variable used as a function call; FIR inline-pure bonus constant gets a float-to-int truncation
External C headerstest_c_import_julia, test_c_import_pythonSystem headers for Julia and Python embedding are not available in the test environment

The Python-host compiler (src/flow/, 46,695 lines) remains the full language surface: generics, effects, MLIR, GPU, DSLs, and all advanced type checking. The self-hosted compiler (compiler/src/, 10,863 lines) covers the subset needed to compile itself plus a growing set of language features. See docs/project/self-hosting.md for the full plan and compiler/README.md for the supported syntax list.


Build and develop

./flow run <file># Compile and run (default host: flowc)
./flow compile <file># Compile only → build/
FLOW_HOST=python ./flow run <file># Full Python-host language surface
./flow test# Test suite (strict by default)
./flow test --strict --tier2 # + transpile / clang compile checks
./flow fmt <file># Format
./flow repl # Interactive mode
./flow lsp # Language server
./flow gfx <file># Compile and run with graphics
./flow mlir <file># Emit MLIR (requires LLVM/MLIR tools)

Host switch: FLOW_HOST=flowc|python|auto (default flowc for run / compile).

# Fuzz the compiler
python3 tests/fuzz/run_fuzz.py --seconds 30
# Regenerate examples compile-status table
python3 scripts/verify_examples.py

Editor support

./scripts/publish_vscode_extension.sh --install
# Or: cursor --install-extension quilio.flow-language

Extension source: third_party/integrations/vscode/flow-language/.

Python wheels from Flow

./flow python mylib.flow --name mylib
pip install dist/mylib-*.whl

Details: docs/python-target.md.

Compiler pipeline

Flow source → Parser → AST → C / MLIR / Metal → Clang / LLVM / shaders

Project statistics

Counted from tracked files by CI so the numbers match the tree.

MetricFiles / modulesPhysical lines
Tracked source3,117442,972
Flow language2,089226,359
Python compiler (src/flow)7351,614
Self-hosted compiler (compiler/src)4022,752
Standard library modules11133,350
Native runtime448,035
Examples (excluding verify corpus)426112,671
Verify corpus1,07818,715
Tests (.py + .flow)45548,539
Application programs81,537
Registry packages19
Documentation pages17339,462
Tracked source by language
LanguageFilesPhysical lines
Flow2,089226,359
Python376114,884
HTML21438,604
C9723,485
C/C++ headers4911,017
C++239,414
JavaScript1917,573
Shell505,329
CSS123,611
Objective-C41,436
Objective-C++2654
Rust10606

Generated by CI from tracked files at 8cd159414c4a. Proof documents: 1,080. Raw JSON · Flow counter · Python fallback.


Contributing

Flow is built with humans directing design and agents writing a lot of the code. See CONTRIBUTING.md for decision authority and how to land changes.

Priorities: ROADMAP.md · docs/NEXT.md.


License

MIT. See LICENSE.


Flowy the Hedgehog, the Flow mascot
Made with care by humans and AI · mascot: Flowy the Hedgehog

About

Flow — a statically typed language for systems that evolve through time (effects, autodiff, C/MLIR)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

1,171 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Flow

A language for systems that evolve through time

Docs · Getting started · Galleries · Vision · Discord · Contributing

CIDocsReleaseLicense: MITDiscord

Source linesStandard libraryExamplesTests

Flow is a statically typed, compiled systems language. Flow 1.0 freezes a deliberately small production core around the self-hosted flowc compiler and portable C backend; algebraic effects, dynamics/control DSLs, verification, advanced stdlib domains and alternate backends continue to ship as explicitly Experimental surfaces until they are promoted.

Version1.0.2
Installbrew tap flooooooooooow/flow && brew install flow
LicenseMIT
CiteCITATION.cff

Flow 1.0's compatibility promise is defined in STABILITY.md. Linux x86-64 and macOS arm64 are the initial Tier-1 platforms; every published v1.* release is qualified from the exact tag before GitHub Release publication.

Quickstart

The default production path is the self-hosted flowc compiler targeting portable C.

function main() -> i32 {
println("Hello, Flow!")
return 0
}
flow run hello.flow

Full quickstart covers variables, functions, structs, loops, and a complete flow evolution model.


Why Flow

Most languages are built around computation: sequences of instructions that transform inputs to outputs.

Flow is built around evolution. You describe how a system changes through time. That description is what runs.

An engineer working on a physical system today crosses Python for analysis, MATLAB for controller design, Simulink for block diagrams, C/C++ for deployment, Verilog for hardware, and vendor tools for the rest. Every handoff loses information. The mathematical model drifts from the deployed code.

Flow collapses those boundaries. The model is the program. The compiler understands units, sample rates, timing contracts, memory topology, and numeric precision as part of the type system, and emits portable C by default.

flow Pendulum {
state angle: f64 = 0.5
state velocity: f64 = 0.0
param damping: f64 = 0.3
angle evolves as velocity
velocity evolves as -9.81 * sin(angle) - damping * velocity
}

That is a complete program. The compiler hands the right-hand side to an RK4 solver and runs it at native speed. No notebook, no glue code, no translation step between model and deployment.

Full thesis: VISION.md. Vision mapped onto grammar: docs/vision/north-star.md. Phase sequencing: ROADMAP.md.


What you get

  • A Stable systems-language core with a self-hosted flowc compiler and portable C backend.
  • Dynamical systems, controllers, algebraic effects, autodiff, graphics and domain libraries available as shipped Experimental surfaces with explicit promotion boundaries.
  • C backend by default with no LLVM requirement; MLIR/JIT, CUDA and other specialised targets remain Experimental in 1.0.
  • Games, morphogenesis, neurodynamics, and real-time DSP as ordinary examples under examples/.

Installation

Homebrew

brew tap flooooooooooow/flow
brew install flow
flow version
flow run examples/basics/hello_world.flow

Track main with brew install --HEAD flow. Formula: packaging/homebrew.

From source

git clone https://github.com/flooooooooooow/flow.git
cd flow
./flow run examples/basics/hello_world.flow

The production compiler path requires a conforming C11 toolchain. Python 3.9+ is retained for the reference/bootstrap compiler and development tooling, not as the canonical 1.0 execution host.

Optional: ./flow install puts flow on your PATH (~/.local/bin).

Longer walkthrough: Getting started.

New to programming: Start here goes from an empty terminal to a running simulation, and sets up an AI assistant to write Flow with you.

Working with an AI assistant

Flow is not in any model's training data, so an assistant does much better with the current facts in front of it. Two things help:

  • Working with AI on Flow, the operating handbook.
  • flow-skills, a pack of skills, references, and command-line tools. ./install.sh and your assistant knows the syntax, the compiler hosts, and how to verify its own work.

Examples

Each GIF is a recording of the compiled program. Frames come from the real gfx backend.

Games
SnakeAsteroidsBreakout
SnakeAsteroidsBreakout
FlappyInvadersPong
FlappyInvadersPong
Morphogenesis
Gray-ScottTuring spotsDiffusion-limited aggregation
Gray-ScottTuring spotsDiffusion-limited aggregation
L-system treeSlime moldSandpile
L-system treeSlime moldSandpile
Neurons and networks
Hodgkin-HuxleyIzhikevich zooBalanced network
Hodgkin-HuxleyIzhikevich zooBalanced network
Evolutionary biology
Lotka-VolterraWright-FisherRed Queen
Lotka-VolterraWright-FisherRed Queen
Spatial SIRHawk-DoveRock-paper-scissors
Spatial SIRHawk-DoveRock-paper-scissors
Planet
BiomesTectonicsErosion
BiomesTectonicsErosion
Procedural generation
Wavefunction dungeonVoronoi sitesHeightmap fBm
Wavefunction dungeonVoronoi sitesHeightmap fBm
3D
Voxel worldFPS cameraPhysics 3D
Voxel worldFPS cameraPhysics 3D
Numerical and social
Adaptive FMMVoter modelMajority rule
Adaptive FMMVoter modelMajority rule
./flow gfx examples/games/tetris_gfx.flow
./flow gfx examples/evolution/lorenz_gfx.flow
./flow run examples/ml/models/mlp_xor.flow
./flow gfx examples/morphogenesis/gray_scott.flow
./flow gfx examples/neuro/hodgkin_huxley.flow
./flow gfx examples/evoleco/lotka_volterra_gfx.flow
./flow gfx examples/planet/planet_biomes.flow
./flow gfx examples/procgen/wfc_dungeon.flow
./flow gfx examples/threed/voxel_world.flow
DomainGalleryIndex
Games (24)demosexamples/games
Morphogenesisdemosexamples/morphogenesis
Neurons and networksdemosexamples/neuro
Evolutionary biologydemosexamples/evoleco
AI / ML trainingtutorialsexamples/ai, examples/ml

Entrypoints by domain: examples/README.md.


Language at a glance

Core syntax

let x: i32 = 42 # Immutable
let mut counter: i32 = 0 # Mutable
function add(a: i32, b: i32) -> i32 {
return a + b
}
struct Point { x: f32, y: f32 }
if x > 0 { ... } elif x < 0 { ... } else { ... }
while condition { ... }
for i in 0 to 10 { ... }

Types

Primitives: i32, i64, f32, f64, bool, string, void
Pointers: ptr<T>, ptr<void>
Arrays: array<T, N>
Generics: function identity<T>(x: T) -> T

Algebraic effects

effect Logger {
log(msg: string) -> void
}
capability ConsoleLogger {
effect Logger
function log(msg: string) -> void {
println(msg)
}
}

Walkthrough: docs/effects-showcase.md · examples/effects/showcase.flow.

Automatic differentiation

Forward-mode dual numbers and reverse helpers live in the stdlib (lib/stdlib/autodiff.flow). The XOR tourist demo trains via checked-in grad codegen in examples/ml/models/mlp_xor.flow. Compiler-integrated loss.grad is still on the roadmap.

FFI

extern {
function malloc(size: i64) -> ptr<void>
function free(p: ptr<void>) -> void
}

Documentation

ResourceDescription
Getting startedInstall, first program, basics
Language overviewFeatures and design
Language designIdioms and why Flow favors fluid abstraction
Language specFull reference
Effects showcaseAlgebraic effects end to end
Examples indexDemos by domain
Examples statusCompile status of every example
VisionWhy Flow exists
RoadmapNear-term work
ChangelogVersion history
Self-hostingStage-A flowc in compiler/
Security · Conduct · GovernanceProject policy

Site: flooooooooooow.github.io/flow


Project layout

PathContents
flowCLI entry point
src/flow/Python-host compiler (parser, type checker, C/MLIR/Metal backends)
compiler/Self-hosted Stage-A flowc
lib/stdlib/Standard library
runtime/Native runtime (graphics, audio, recording)
examples/Domain demos and verify corpus
tests/Language and stdlib tests
apps/Applications (flowdb, flow-http, …)
benchmarks/Microbenchmarks and harness
docs/Spec, tutorials, demos, project docs
third_party/integrations/vscode/VS Code / Cursor extension
site/Wiki shell and site assets

Self-hosting status

The self-hosted compiler (compiler/src/, written in Flow) is the default host for ./flow run and ./flow compile. It compiles itself end to end: three consecutive generation fixed-points are byte-identical, and a clean checkout needs no Python to build a working compiler.

The bootstrap language suite (tests/lang/, 90 .flow files) is the regression target for self-hosted parity. Current result, run with FLOWC_IN/FLOWC_OUT environment variables:

pass=79 fail=11

The 11 failures fall into five categories:

CategoryTestsRoot cause
DSL parse failurestest_effects, test_hybrid_events, test_time_blockseffect, capability, flow, state, solver, evolves, every keywords are not parsed
Generic monomorphizationtest_generics, test_generic_channelsParser accepts generic syntax but the monomorphizer is missing; struct Box<T> emits T value instead of a concrete type
Overload resolutiontest_unsigned_intsType checker rejects duplicate function names; overload selection is not implemented
Closure snapshot semanticstest_closuresCaptured variables are hoisted to globals without snapshotting the value at closure creation time
Stdlib codegentest_gif_encoder, test_fir_optsLZW encoder emits a variable used as a function call; FIR inline-pure bonus constant gets a float-to-int truncation
External C headerstest_c_import_julia, test_c_import_pythonSystem headers for Julia and Python embedding are not available in the test environment

The Python-host compiler (src/flow/, 46,695 lines) remains the full language surface: generics, effects, MLIR, GPU, DSLs, and all advanced type checking. The self-hosted compiler (compiler/src/, 10,863 lines) covers the subset needed to compile itself plus a growing set of language features. See docs/project/self-hosting.md for the full plan and compiler/README.md for the supported syntax list.


Build and develop

./flow run <file># Compile and run (default host: flowc)
./flow compile <file># Compile only → build/
FLOW_HOST=python ./flow run <file># Full Python-host language surface
./flow test# Test suite (strict by default)
./flow test --strict --tier2 # + transpile / clang compile checks
./flow fmt <file># Format
./flow repl # Interactive mode
./flow lsp # Language server
./flow gfx <file># Compile and run with graphics
./flow mlir <file># Emit MLIR (requires LLVM/MLIR tools)

Host switch: FLOW_HOST=flowc|python|auto (default flowc for run / compile).

# Fuzz the compiler
python3 tests/fuzz/run_fuzz.py --seconds 30
# Regenerate examples compile-status table
python3 scripts/verify_examples.py

Editor support

./scripts/publish_vscode_extension.sh --install
# Or: cursor --install-extension quilio.flow-language

Extension source: third_party/integrations/vscode/flow-language/.

Python wheels from Flow

./flow python mylib.flow --name mylib
pip install dist/mylib-*.whl

Details: docs/python-target.md.

Compiler pipeline

Flow source → Parser → AST → C / MLIR / Metal → Clang / LLVM / shaders

Project statistics

Counted from tracked files by CI so the numbers match the tree.

MetricFiles / modulesPhysical lines
Tracked source3,117442,972
Flow language2,089226,359
Python compiler (src/flow)7351,614
Self-hosted compiler (compiler/src)4022,752
Standard library modules11133,350
Native runtime448,035
Examples (excluding verify corpus)426112,671
Verify corpus1,07818,715
Tests (.py + .flow)45548,539
Application programs81,537
Registry packages19
Documentation pages17339,462
Tracked source by language
LanguageFilesPhysical lines
Flow2,089226,359
Python376114,884
HTML21438,604
C9723,485
C/C++ headers4911,017
C++239,414
JavaScript1917,573
Shell505,329
CSS123,611
Objective-C41,436
Objective-C++2654
Rust10606

Generated by CI from tracked files at 8cd159414c4a. Proof documents: 1,080. Raw JSON · Flow counter · Python fallback.


Contributing

Flow is built with humans directing design and agents writing a lot of the code. See CONTRIBUTING.md for decision authority and how to land changes.

Priorities: ROADMAP.md · docs/NEXT.md.


License

MIT. See LICENSE.


Flowy the Hedgehog, the Flow mascot
Made with care by humans and AI · mascot: Flowy the Hedgehog

About

Flow — a statically typed language for systems that evolve through time (effects, autodiff, C/MLIR)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

1,171 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Flow

A language for systems that evolve through time

Docs · Getting started · Galleries · Vision · Discord · Contributing

CIDocsReleaseLicense: MITDiscord

Source linesStandard libraryExamplesTests

Flow is a statically typed, compiled systems language. Flow 1.0 freezes a deliberately small production core around the self-hosted flowc compiler and portable C backend; algebraic effects, dynamics/control DSLs, verification, advanced stdlib domains and alternate backends continue to ship as explicitly Experimental surfaces until they are promoted.

Version1.0.2
Installbrew tap flooooooooooow/flow && brew install flow
LicenseMIT
CiteCITATION.cff

Flow 1.0's compatibility promise is defined in STABILITY.md. Linux x86-64 and macOS arm64 are the initial Tier-1 platforms; every published v1.* release is qualified from the exact tag before GitHub Release publication.

Quickstart

The default production path is the self-hosted flowc compiler targeting portable C.

function main() -> i32 {
println("Hello, Flow!")
return 0
}
flow run hello.flow

Full quickstart covers variables, functions, structs, loops, and a complete flow evolution model.


Why Flow

Most languages are built around computation: sequences of instructions that transform inputs to outputs.

Flow is built around evolution. You describe how a system changes through time. That description is what runs.

An engineer working on a physical system today crosses Python for analysis, MATLAB for controller design, Simulink for block diagrams, C/C++ for deployment, Verilog for hardware, and vendor tools for the rest. Every handoff loses information. The mathematical model drifts from the deployed code.

Flow collapses those boundaries. The model is the program. The compiler understands units, sample rates, timing contracts, memory topology, and numeric precision as part of the type system, and emits portable C by default.

flow Pendulum {
state angle: f64 = 0.5
state velocity: f64 = 0.0
param damping: f64 = 0.3
angle evolves as velocity
velocity evolves as -9.81 * sin(angle) - damping * velocity
}

That is a complete program. The compiler hands the right-hand side to an RK4 solver and runs it at native speed. No notebook, no glue code, no translation step between model and deployment.

Full thesis: VISION.md. Vision mapped onto grammar: docs/vision/north-star.md. Phase sequencing: ROADMAP.md.


What you get

  • A Stable systems-language core with a self-hosted flowc compiler and portable C backend.
  • Dynamical systems, controllers, algebraic effects, autodiff, graphics and domain libraries available as shipped Experimental surfaces with explicit promotion boundaries.
  • C backend by default with no LLVM requirement; MLIR/JIT, CUDA and other specialised targets remain Experimental in 1.0.
  • Games, morphogenesis, neurodynamics, and real-time DSP as ordinary examples under examples/.

Installation

Homebrew

brew tap flooooooooooow/flow
brew install flow
flow version
flow run examples/basics/hello_world.flow

Track main with brew install --HEAD flow. Formula: packaging/homebrew.

From source

git clone https://github.com/flooooooooooow/flow.git
cd flow
./flow run examples/basics/hello_world.flow

The production compiler path requires a conforming C11 toolchain. Python 3.9+ is retained for the reference/bootstrap compiler and development tooling, not as the canonical 1.0 execution host.

Optional: ./flow install puts flow on your PATH (~/.local/bin).

Longer walkthrough: Getting started.

New to programming: Start here goes from an empty terminal to a running simulation, and sets up an AI assistant to write Flow with you.

Working with an AI assistant

Flow is not in any model's training data, so an assistant does much better with the current facts in front of it. Two things help:

  • Working with AI on Flow, the operating handbook.
  • flow-skills, a pack of skills, references, and command-line tools. ./install.sh and your assistant knows the syntax, the compiler hosts, and how to verify its own work.

Examples

Each GIF is a recording of the compiled program. Frames come from the real gfx backend.

Games
SnakeAsteroidsBreakout
SnakeAsteroidsBreakout
FlappyInvadersPong
FlappyInvadersPong
Morphogenesis
Gray-ScottTuring spotsDiffusion-limited aggregation
Gray-ScottTuring spotsDiffusion-limited aggregation
L-system treeSlime moldSandpile
L-system treeSlime moldSandpile
Neurons and networks
Hodgkin-HuxleyIzhikevich zooBalanced network
Hodgkin-HuxleyIzhikevich zooBalanced network
Evolutionary biology
Lotka-VolterraWright-FisherRed Queen
Lotka-VolterraWright-FisherRed Queen
Spatial SIRHawk-DoveRock-paper-scissors
Spatial SIRHawk-DoveRock-paper-scissors
Planet
BiomesTectonicsErosion
BiomesTectonicsErosion
Procedural generation
Wavefunction dungeonVoronoi sitesHeightmap fBm
Wavefunction dungeonVoronoi sitesHeightmap fBm
3D
Voxel worldFPS cameraPhysics 3D
Voxel worldFPS cameraPhysics 3D
Numerical and social
Adaptive FMMVoter modelMajority rule
Adaptive FMMVoter modelMajority rule
./flow gfx examples/games/tetris_gfx.flow
./flow gfx examples/evolution/lorenz_gfx.flow
./flow run examples/ml/models/mlp_xor.flow
./flow gfx examples/morphogenesis/gray_scott.flow
./flow gfx examples/neuro/hodgkin_huxley.flow
./flow gfx examples/evoleco/lotka_volterra_gfx.flow
./flow gfx examples/planet/planet_biomes.flow
./flow gfx examples/procgen/wfc_dungeon.flow
./flow gfx examples/threed/voxel_world.flow
DomainGalleryIndex
Games (24)demosexamples/games
Morphogenesisdemosexamples/morphogenesis
Neurons and networksdemosexamples/neuro
Evolutionary biologydemosexamples/evoleco
AI / ML trainingtutorialsexamples/ai, examples/ml

Entrypoints by domain: examples/README.md.


Language at a glance

Core syntax

let x: i32 = 42 # Immutable
let mut counter: i32 = 0 # Mutable
function add(a: i32, b: i32) -> i32 {
return a + b
}
struct Point { x: f32, y: f32 }
if x > 0 { ... } elif x < 0 { ... } else { ... }
while condition { ... }
for i in 0 to 10 { ... }

Types

Primitives: i32, i64, f32, f64, bool, string, void
Pointers: ptr<T>, ptr<void>
Arrays: array<T, N>
Generics: function identity<T>(x: T) -> T

Algebraic effects

effect Logger {
log(msg: string) -> void
}
capability ConsoleLogger {
effect Logger
function log(msg: string) -> void {
println(msg)
}
}

Walkthrough: docs/effects-showcase.md · examples/effects/showcase.flow.

Automatic differentiation

Forward-mode dual numbers and reverse helpers live in the stdlib (lib/stdlib/autodiff.flow). The XOR tourist demo trains via checked-in grad codegen in examples/ml/models/mlp_xor.flow. Compiler-integrated loss.grad is still on the roadmap.

FFI

extern {
function malloc(size: i64) -> ptr<void>
function free(p: ptr<void>) -> void
}

Documentation

ResourceDescription
Getting startedInstall, first program, basics
Language overviewFeatures and design
Language designIdioms and why Flow favors fluid abstraction
Language specFull reference
Effects showcaseAlgebraic effects end to end
Examples indexDemos by domain
Examples statusCompile status of every example
VisionWhy Flow exists
RoadmapNear-term work
ChangelogVersion history
Self-hostingStage-A flowc in compiler/
Security · Conduct · GovernanceProject policy

Site: flooooooooooow.github.io/flow


Project layout

PathContents
flowCLI entry point
src/flow/Python-host compiler (parser, type checker, C/MLIR/Metal backends)
compiler/Self-hosted Stage-A flowc
lib/stdlib/Standard library
runtime/Native runtime (graphics, audio, recording)
examples/Domain demos and verify corpus
tests/Language and stdlib tests
apps/Applications (flowdb, flow-http, …)
benchmarks/Microbenchmarks and harness
docs/Spec, tutorials, demos, project docs
third_party/integrations/vscode/VS Code / Cursor extension
site/Wiki shell and site assets

Self-hosting status

The self-hosted compiler (compiler/src/, written in Flow) is the default host for ./flow run and ./flow compile. It compiles itself end to end: three consecutive generation fixed-points are byte-identical, and a clean checkout needs no Python to build a working compiler.

The bootstrap language suite (tests/lang/, 90 .flow files) is the regression target for self-hosted parity. Current result, run with FLOWC_IN/FLOWC_OUT environment variables:

pass=79 fail=11

The 11 failures fall into five categories:

CategoryTestsRoot cause
DSL parse failurestest_effects, test_hybrid_events, test_time_blockseffect, capability, flow, state, solver, evolves, every keywords are not parsed
Generic monomorphizationtest_generics, test_generic_channelsParser accepts generic syntax but the monomorphizer is missing; struct Box<T> emits T value instead of a concrete type
Overload resolutiontest_unsigned_intsType checker rejects duplicate function names; overload selection is not implemented
Closure snapshot semanticstest_closuresCaptured variables are hoisted to globals without snapshotting the value at closure creation time
Stdlib codegentest_gif_encoder, test_fir_optsLZW encoder emits a variable used as a function call; FIR inline-pure bonus constant gets a float-to-int truncation
External C headerstest_c_import_julia, test_c_import_pythonSystem headers for Julia and Python embedding are not available in the test environment

The Python-host compiler (src/flow/, 46,695 lines) remains the full language surface: generics, effects, MLIR, GPU, DSLs, and all advanced type checking. The self-hosted compiler (compiler/src/, 10,863 lines) covers the subset needed to compile itself plus a growing set of language features. See docs/project/self-hosting.md for the full plan and compiler/README.md for the supported syntax list.


Build and develop

./flow run <file># Compile and run (default host: flowc)
./flow compile <file># Compile only → build/
FLOW_HOST=python ./flow run <file># Full Python-host language surface
./flow test# Test suite (strict by default)
./flow test --strict --tier2 # + transpile / clang compile checks
./flow fmt <file># Format
./flow repl # Interactive mode
./flow lsp # Language server
./flow gfx <file># Compile and run with graphics
./flow mlir <file># Emit MLIR (requires LLVM/MLIR tools)

Host switch: FLOW_HOST=flowc|python|auto (default flowc for run / compile).

# Fuzz the compiler
python3 tests/fuzz/run_fuzz.py --seconds 30
# Regenerate examples compile-status table
python3 scripts/verify_examples.py

Editor support

./scripts/publish_vscode_extension.sh --install
# Or: cursor --install-extension quilio.flow-language

Extension source: third_party/integrations/vscode/flow-language/.

Python wheels from Flow

./flow python mylib.flow --name mylib
pip install dist/mylib-*.whl

Details: docs/python-target.md.

Compiler pipeline

Flow source → Parser → AST → C / MLIR / Metal → Clang / LLVM / shaders

Project statistics

Counted from tracked files by CI so the numbers match the tree.

MetricFiles / modulesPhysical lines
Tracked source3,117442,972
Flow language2,089226,359
Python compiler (src/flow)7351,614
Self-hosted compiler (compiler/src)4022,752
Standard library modules11133,350
Native runtime448,035
Examples (excluding verify corpus)426112,671
Verify corpus1,07818,715
Tests (.py + .flow)45548,539
Application programs81,537
Registry packages19
Documentation pages17339,462
Tracked source by language
LanguageFilesPhysical lines
Flow2,089226,359
Python376114,884
HTML21438,604
C9723,485
C/C++ headers4911,017
C++239,414
JavaScript1917,573
Shell505,329
CSS123,611
Objective-C41,436
Objective-C++2654
Rust10606

Generated by CI from tracked files at 8cd159414c4a. Proof documents: 1,080. Raw JSON · Flow counter · Python fallback.


Contributing

Flow is built with humans directing design and agents writing a lot of the code. See CONTRIBUTING.md for decision authority and how to land changes.

Priorities: ROADMAP.md · docs/NEXT.md.


License

MIT. See LICENSE.


Flowy the Hedgehog, the Flow mascot
Made with care by humans and AI · mascot: Flowy the Hedgehog

About

Flow — a statically typed language for systems that evolve through time (effects, autodiff, C/MLIR)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

1,171 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Flow

A language for systems that evolve through time

Docs · Getting started · Galleries · Vision · Discord · Contributing

CIDocsReleaseLicense: MITDiscord

Source linesStandard libraryExamplesTests

Flow is a statically typed, compiled systems language. Flow 1.0 freezes a deliberately small production core around the self-hosted flowc compiler and portable C backend; algebraic effects, dynamics/control DSLs, verification, advanced stdlib domains and alternate backends continue to ship as explicitly Experimental surfaces until they are promoted.

Version1.0.2
Installbrew tap flooooooooooow/flow && brew install flow
LicenseMIT
CiteCITATION.cff

Flow 1.0's compatibility promise is defined in STABILITY.md. Linux x86-64 and macOS arm64 are the initial Tier-1 platforms; every published v1.* release is qualified from the exact tag before GitHub Release publication.

Quickstart

The default production path is the self-hosted flowc compiler targeting portable C.

function main() -> i32 {
println("Hello, Flow!")
return 0
}
flow run hello.flow

Full quickstart covers variables, functions, structs, loops, and a complete flow evolution model.


Why Flow

Most languages are built around computation: sequences of instructions that transform inputs to outputs.

Flow is built around evolution. You describe how a system changes through time. That description is what runs.

An engineer working on a physical system today crosses Python for analysis, MATLAB for controller design, Simulink for block diagrams, C/C++ for deployment, Verilog for hardware, and vendor tools for the rest. Every handoff loses information. The mathematical model drifts from the deployed code.

Flow collapses those boundaries. The model is the program. The compiler understands units, sample rates, timing contracts, memory topology, and numeric precision as part of the type system, and emits portable C by default.

flow Pendulum {
state angle: f64 = 0.5
state velocity: f64 = 0.0
param damping: f64 = 0.3
angle evolves as velocity
velocity evolves as -9.81 * sin(angle) - damping * velocity
}

That is a complete program. The compiler hands the right-hand side to an RK4 solver and runs it at native speed. No notebook, no glue code, no translation step between model and deployment.

Full thesis: VISION.md. Vision mapped onto grammar: docs/vision/north-star.md. Phase sequencing: ROADMAP.md.


What you get

  • A Stable systems-language core with a self-hosted flowc compiler and portable C backend.
  • Dynamical systems, controllers, algebraic effects, autodiff, graphics and domain libraries available as shipped Experimental surfaces with explicit promotion boundaries.
  • C backend by default with no LLVM requirement; MLIR/JIT, CUDA and other specialised targets remain Experimental in 1.0.
  • Games, morphogenesis, neurodynamics, and real-time DSP as ordinary examples under examples/.

Installation

Homebrew

brew tap flooooooooooow/flow
brew install flow
flow version
flow run examples/basics/hello_world.flow

Track main with brew install --HEAD flow. Formula: packaging/homebrew.

From source

git clone https://github.com/flooooooooooow/flow.git
cd flow
./flow run examples/basics/hello_world.flow

The production compiler path requires a conforming C11 toolchain. Python 3.9+ is retained for the reference/bootstrap compiler and development tooling, not as the canonical 1.0 execution host.

Optional: ./flow install puts flow on your PATH (~/.local/bin).

Longer walkthrough: Getting started.

New to programming: Start here goes from an empty terminal to a running simulation, and sets up an AI assistant to write Flow with you.

Working with an AI assistant

Flow is not in any model's training data, so an assistant does much better with the current facts in front of it. Two things help:

  • Working with AI on Flow, the operating handbook.
  • flow-skills, a pack of skills, references, and command-line tools. ./install.sh and your assistant knows the syntax, the compiler hosts, and how to verify its own work.

Examples

Each GIF is a recording of the compiled program. Frames come from the real gfx backend.

Games
SnakeAsteroidsBreakout
SnakeAsteroidsBreakout
FlappyInvadersPong
FlappyInvadersPong
Morphogenesis
Gray-ScottTuring spotsDiffusion-limited aggregation
Gray-ScottTuring spotsDiffusion-limited aggregation
L-system treeSlime moldSandpile
L-system treeSlime moldSandpile
Neurons and networks
Hodgkin-HuxleyIzhikevich zooBalanced network
Hodgkin-HuxleyIzhikevich zooBalanced network
Evolutionary biology
Lotka-VolterraWright-FisherRed Queen
Lotka-VolterraWright-FisherRed Queen
Spatial SIRHawk-DoveRock-paper-scissors
Spatial SIRHawk-DoveRock-paper-scissors
Planet
BiomesTectonicsErosion
BiomesTectonicsErosion
Procedural generation
Wavefunction dungeonVoronoi sitesHeightmap fBm
Wavefunction dungeonVoronoi sitesHeightmap fBm
3D
Voxel worldFPS cameraPhysics 3D
Voxel worldFPS cameraPhysics 3D
Numerical and social
Adaptive FMMVoter modelMajority rule
Adaptive FMMVoter modelMajority rule
./flow gfx examples/games/tetris_gfx.flow
./flow gfx examples/evolution/lorenz_gfx.flow
./flow run examples/ml/models/mlp_xor.flow
./flow gfx examples/morphogenesis/gray_scott.flow
./flow gfx examples/neuro/hodgkin_huxley.flow
./flow gfx examples/evoleco/lotka_volterra_gfx.flow
./flow gfx examples/planet/planet_biomes.flow
./flow gfx examples/procgen/wfc_dungeon.flow
./flow gfx examples/threed/voxel_world.flow
DomainGalleryIndex
Games (24)demosexamples/games
Morphogenesisdemosexamples/morphogenesis
Neurons and networksdemosexamples/neuro
Evolutionary biologydemosexamples/evoleco
AI / ML trainingtutorialsexamples/ai, examples/ml

Entrypoints by domain: examples/README.md.


Language at a glance

Core syntax

let x: i32 = 42 # Immutable
let mut counter: i32 = 0 # Mutable
function add(a: i32, b: i32) -> i32 {
return a + b
}
struct Point { x: f32, y: f32 }
if x > 0 { ... } elif x < 0 { ... } else { ... }
while condition { ... }
for i in 0 to 10 { ... }

Types

Primitives: i32, i64, f32, f64, bool, string, void
Pointers: ptr<T>, ptr<void>
Arrays: array<T, N>
Generics: function identity<T>(x: T) -> T

Algebraic effects

effect Logger {
log(msg: string) -> void
}
capability ConsoleLogger {
effect Logger
function log(msg: string) -> void {
println(msg)
}
}

Walkthrough: docs/effects-showcase.md · examples/effects/showcase.flow.

Automatic differentiation

Forward-mode dual numbers and reverse helpers live in the stdlib (lib/stdlib/autodiff.flow). The XOR tourist demo trains via checked-in grad codegen in examples/ml/models/mlp_xor.flow. Compiler-integrated loss.grad is still on the roadmap.

FFI

extern {
function malloc(size: i64) -> ptr<void>
function free(p: ptr<void>) -> void
}

Documentation

ResourceDescription
Getting startedInstall, first program, basics
Language overviewFeatures and design
Language designIdioms and why Flow favors fluid abstraction
Language specFull reference
Effects showcaseAlgebraic effects end to end
Examples indexDemos by domain
Examples statusCompile status of every example
VisionWhy Flow exists
RoadmapNear-term work
ChangelogVersion history
Self-hostingStage-A flowc in compiler/
Security · Conduct · GovernanceProject policy

Site: flooooooooooow.github.io/flow


Project layout

PathContents
flowCLI entry point
src/flow/Python-host compiler (parser, type checker, C/MLIR/Metal backends)
compiler/Self-hosted Stage-A flowc
lib/stdlib/Standard library
runtime/Native runtime (graphics, audio, recording)
examples/Domain demos and verify corpus
tests/Language and stdlib tests
apps/Applications (flowdb, flow-http, …)
benchmarks/Microbenchmarks and harness
docs/Spec, tutorials, demos, project docs
third_party/integrations/vscode/VS Code / Cursor extension
site/Wiki shell and site assets

Self-hosting status

The self-hosted compiler (compiler/src/, written in Flow) is the default host for ./flow run and ./flow compile. It compiles itself end to end: three consecutive generation fixed-points are byte-identical, and a clean checkout needs no Python to build a working compiler.

The bootstrap language suite (tests/lang/, 90 .flow files) is the regression target for self-hosted parity. Current result, run with FLOWC_IN/FLOWC_OUT environment variables:

pass=79 fail=11

The 11 failures fall into five categories:

CategoryTestsRoot cause
DSL parse failurestest_effects, test_hybrid_events, test_time_blockseffect, capability, flow, state, solver, evolves, every keywords are not parsed
Generic monomorphizationtest_generics, test_generic_channelsParser accepts generic syntax but the monomorphizer is missing; struct Box<T> emits T value instead of a concrete type
Overload resolutiontest_unsigned_intsType checker rejects duplicate function names; overload selection is not implemented
Closure snapshot semanticstest_closuresCaptured variables are hoisted to globals without snapshotting the value at closure creation time
Stdlib codegentest_gif_encoder, test_fir_optsLZW encoder emits a variable used as a function call; FIR inline-pure bonus constant gets a float-to-int truncation
External C headerstest_c_import_julia, test_c_import_pythonSystem headers for Julia and Python embedding are not available in the test environment

The Python-host compiler (src/flow/, 46,695 lines) remains the full language surface: generics, effects, MLIR, GPU, DSLs, and all advanced type checking. The self-hosted compiler (compiler/src/, 10,863 lines) covers the subset needed to compile itself plus a growing set of language features. See docs/project/self-hosting.md for the full plan and compiler/README.md for the supported syntax list.


Build and develop

./flow run <file># Compile and run (default host: flowc)
./flow compile <file># Compile only → build/
FLOW_HOST=python ./flow run <file># Full Python-host language surface
./flow test# Test suite (strict by default)
./flow test --strict --tier2 # + transpile / clang compile checks
./flow fmt <file># Format
./flow repl # Interactive mode
./flow lsp # Language server
./flow gfx <file># Compile and run with graphics
./flow mlir <file># Emit MLIR (requires LLVM/MLIR tools)

Host switch: FLOW_HOST=flowc|python|auto (default flowc for run / compile).

# Fuzz the compiler
python3 tests/fuzz/run_fuzz.py --seconds 30
# Regenerate examples compile-status table
python3 scripts/verify_examples.py

Editor support

./scripts/publish_vscode_extension.sh --install
# Or: cursor --install-extension quilio.flow-language

Extension source: third_party/integrations/vscode/flow-language/.

Python wheels from Flow

./flow python mylib.flow --name mylib
pip install dist/mylib-*.whl

Details: docs/python-target.md.

Compiler pipeline

Flow source → Parser → AST → C / MLIR / Metal → Clang / LLVM / shaders

Project statistics

Counted from tracked files by CI so the numbers match the tree.

MetricFiles / modulesPhysical lines
Tracked source3,117442,972
Flow language2,089226,359
Python compiler (src/flow)7351,614
Self-hosted compiler (compiler/src)4022,752
Standard library modules11133,350
Native runtime448,035
Examples (excluding verify corpus)426112,671
Verify corpus1,07818,715
Tests (.py + .flow)45548,539
Application programs81,537
Registry packages19
Documentation pages17339,462
Tracked source by language
LanguageFilesPhysical lines
Flow2,089226,359
Python376114,884
HTML21438,604
C9723,485
C/C++ headers4911,017
C++239,414
JavaScript1917,573
Shell505,329
CSS123,611
Objective-C41,436
Objective-C++2654
Rust10606

Generated by CI from tracked files at 8cd159414c4a. Proof documents: 1,080. Raw JSON · Flow counter · Python fallback.


Contributing

Flow is built with humans directing design and agents writing a lot of the code. See CONTRIBUTING.md for decision authority and how to land changes.

Priorities: ROADMAP.md · docs/NEXT.md.


License

MIT. See LICENSE.


Flowy the Hedgehog, the Flow mascot
Made with care by humans and AI · mascot: Flowy the Hedgehog

About

Flow — a statically typed language for systems that evolve through time (effects, autodiff, C/MLIR)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

1,171 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Flow

A language for systems that evolve through time

Docs · Getting started · Galleries · Vision · Discord · Contributing

CIDocsReleaseLicense: MITDiscord

Source linesStandard libraryExamplesTests

Flow is a statically typed, compiled systems language. Flow 1.0 freezes a deliberately small production core around the self-hosted flowc compiler and portable C backend; algebraic effects, dynamics/control DSLs, verification, advanced stdlib domains and alternate backends continue to ship as explicitly Experimental surfaces until they are promoted.

Version1.0.2
Installbrew tap flooooooooooow/flow && brew install flow
LicenseMIT
CiteCITATION.cff

Flow 1.0's compatibility promise is defined in STABILITY.md. Linux x86-64 and macOS arm64 are the initial Tier-1 platforms; every published v1.* release is qualified from the exact tag before GitHub Release publication.

Quickstart

The default production path is the self-hosted flowc compiler targeting portable C.

function main() -> i32 {
println("Hello, Flow!")
return 0
}
flow run hello.flow

Full quickstart covers variables, functions, structs, loops, and a complete flow evolution model.


Why Flow

Most languages are built around computation: sequences of instructions that transform inputs to outputs.

Flow is built around evolution. You describe how a system changes through time. That description is what runs.

An engineer working on a physical system today crosses Python for analysis, MATLAB for controller design, Simulink for block diagrams, C/C++ for deployment, Verilog for hardware, and vendor tools for the rest. Every handoff loses information. The mathematical model drifts from the deployed code.

Flow collapses those boundaries. The model is the program. The compiler understands units, sample rates, timing contracts, memory topology, and numeric precision as part of the type system, and emits portable C by default.

flow Pendulum {
state angle: f64 = 0.5
state velocity: f64 = 0.0
param damping: f64 = 0.3
angle evolves as velocity
velocity evolves as -9.81 * sin(angle) - damping * velocity
}

That is a complete program. The compiler hands the right-hand side to an RK4 solver and runs it at native speed. No notebook, no glue code, no translation step between model and deployment.

Full thesis: VISION.md. Vision mapped onto grammar: docs/vision/north-star.md. Phase sequencing: ROADMAP.md.


What you get

  • A Stable systems-language core with a self-hosted flowc compiler and portable C backend.
  • Dynamical systems, controllers, algebraic effects, autodiff, graphics and domain libraries available as shipped Experimental surfaces with explicit promotion boundaries.
  • C backend by default with no LLVM requirement; MLIR/JIT, CUDA and other specialised targets remain Experimental in 1.0.
  • Games, morphogenesis, neurodynamics, and real-time DSP as ordinary examples under examples/.

Installation

Homebrew

brew tap flooooooooooow/flow
brew install flow
flow version
flow run examples/basics/hello_world.flow

Track main with brew install --HEAD flow. Formula: packaging/homebrew.

From source

git clone https://github.com/flooooooooooow/flow.git
cd flow
./flow run examples/basics/hello_world.flow

The production compiler path requires a conforming C11 toolchain. Python 3.9+ is retained for the reference/bootstrap compiler and development tooling, not as the canonical 1.0 execution host.

Optional: ./flow install puts flow on your PATH (~/.local/bin).

Longer walkthrough: Getting started.

New to programming: Start here goes from an empty terminal to a running simulation, and sets up an AI assistant to write Flow with you.

Working with an AI assistant

Flow is not in any model's training data, so an assistant does much better with the current facts in front of it. Two things help:

  • Working with AI on Flow, the operating handbook.
  • flow-skills, a pack of skills, references, and command-line tools. ./install.sh and your assistant knows the syntax, the compiler hosts, and how to verify its own work.

Examples

Each GIF is a recording of the compiled program. Frames come from the real gfx backend.

Games
SnakeAsteroidsBreakout
SnakeAsteroidsBreakout
FlappyInvadersPong
FlappyInvadersPong
Morphogenesis
Gray-ScottTuring spotsDiffusion-limited aggregation
Gray-ScottTuring spotsDiffusion-limited aggregation
L-system treeSlime moldSandpile
L-system treeSlime moldSandpile
Neurons and networks
Hodgkin-HuxleyIzhikevich zooBalanced network
Hodgkin-HuxleyIzhikevich zooBalanced network
Evolutionary biology
Lotka-VolterraWright-FisherRed Queen
Lotka-VolterraWright-FisherRed Queen
Spatial SIRHawk-DoveRock-paper-scissors
Spatial SIRHawk-DoveRock-paper-scissors
Planet
BiomesTectonicsErosion
BiomesTectonicsErosion
Procedural generation
Wavefunction dungeonVoronoi sitesHeightmap fBm
Wavefunction dungeonVoronoi sitesHeightmap fBm
3D
Voxel worldFPS cameraPhysics 3D
Voxel worldFPS cameraPhysics 3D
Numerical and social
Adaptive FMMVoter modelMajority rule
Adaptive FMMVoter modelMajority rule
./flow gfx examples/games/tetris_gfx.flow
./flow gfx examples/evolution/lorenz_gfx.flow
./flow run examples/ml/models/mlp_xor.flow
./flow gfx examples/morphogenesis/gray_scott.flow
./flow gfx examples/neuro/hodgkin_huxley.flow
./flow gfx examples/evoleco/lotka_volterra_gfx.flow
./flow gfx examples/planet/planet_biomes.flow
./flow gfx examples/procgen/wfc_dungeon.flow
./flow gfx examples/threed/voxel_world.flow
DomainGalleryIndex
Games (24)demosexamples/games
Morphogenesisdemosexamples/morphogenesis
Neurons and networksdemosexamples/neuro
Evolutionary biologydemosexamples/evoleco
AI / ML trainingtutorialsexamples/ai, examples/ml

Entrypoints by domain: examples/README.md.


Language at a glance

Core syntax

let x: i32 = 42 # Immutable
let mut counter: i32 = 0 # Mutable
function add(a: i32, b: i32) -> i32 {
return a + b
}
struct Point { x: f32, y: f32 }
if x > 0 { ... } elif x < 0 { ... } else { ... }
while condition { ... }
for i in 0 to 10 { ... }

Types

Primitives: i32, i64, f32, f64, bool, string, void
Pointers: ptr<T>, ptr<void>
Arrays: array<T, N>
Generics: function identity<T>(x: T) -> T

Algebraic effects

effect Logger {
log(msg: string) -> void
}
capability ConsoleLogger {
effect Logger
function log(msg: string) -> void {
println(msg)
}
}

Walkthrough: docs/effects-showcase.md · examples/effects/showcase.flow.

Automatic differentiation

Forward-mode dual numbers and reverse helpers live in the stdlib (lib/stdlib/autodiff.flow). The XOR tourist demo trains via checked-in grad codegen in examples/ml/models/mlp_xor.flow. Compiler-integrated loss.grad is still on the roadmap.

FFI

extern {
function malloc(size: i64) -> ptr<void>
function free(p: ptr<void>) -> void
}

Documentation

ResourceDescription
Getting startedInstall, first program, basics
Language overviewFeatures and design
Language designIdioms and why Flow favors fluid abstraction
Language specFull reference
Effects showcaseAlgebraic effects end to end
Examples indexDemos by domain
Examples statusCompile status of every example
VisionWhy Flow exists
RoadmapNear-term work
ChangelogVersion history
Self-hostingStage-A flowc in compiler/
Security · Conduct · GovernanceProject policy

Site: flooooooooooow.github.io/flow


Project layout

PathContents
flowCLI entry point
src/flow/Python-host compiler (parser, type checker, C/MLIR/Metal backends)
compiler/Self-hosted Stage-A flowc
lib/stdlib/Standard library
runtime/Native runtime (graphics, audio, recording)
examples/Domain demos and verify corpus
tests/Language and stdlib tests
apps/Applications (flowdb, flow-http, …)
benchmarks/Microbenchmarks and harness
docs/Spec, tutorials, demos, project docs
third_party/integrations/vscode/VS Code / Cursor extension
site/Wiki shell and site assets

Self-hosting status

The self-hosted compiler (compiler/src/, written in Flow) is the default host for ./flow run and ./flow compile. It compiles itself end to end: three consecutive generation fixed-points are byte-identical, and a clean checkout needs no Python to build a working compiler.

The bootstrap language suite (tests/lang/, 90 .flow files) is the regression target for self-hosted parity. Current result, run with FLOWC_IN/FLOWC_OUT environment variables:

pass=79 fail=11

The 11 failures fall into five categories:

CategoryTestsRoot cause
DSL parse failurestest_effects, test_hybrid_events, test_time_blockseffect, capability, flow, state, solver, evolves, every keywords are not parsed
Generic monomorphizationtest_generics, test_generic_channelsParser accepts generic syntax but the monomorphizer is missing; struct Box<T> emits T value instead of a concrete type
Overload resolutiontest_unsigned_intsType checker rejects duplicate function names; overload selection is not implemented
Closure snapshot semanticstest_closuresCaptured variables are hoisted to globals without snapshotting the value at closure creation time
Stdlib codegentest_gif_encoder, test_fir_optsLZW encoder emits a variable used as a function call; FIR inline-pure bonus constant gets a float-to-int truncation
External C headerstest_c_import_julia, test_c_import_pythonSystem headers for Julia and Python embedding are not available in the test environment

The Python-host compiler (src/flow/, 46,695 lines) remains the full language surface: generics, effects, MLIR, GPU, DSLs, and all advanced type checking. The self-hosted compiler (compiler/src/, 10,863 lines) covers the subset needed to compile itself plus a growing set of language features. See docs/project/self-hosting.md for the full plan and compiler/README.md for the supported syntax list.


Build and develop

./flow run <file># Compile and run (default host: flowc)
./flow compile <file># Compile only → build/
FLOW_HOST=python ./flow run <file># Full Python-host language surface
./flow test# Test suite (strict by default)
./flow test --strict --tier2 # + transpile / clang compile checks
./flow fmt <file># Format
./flow repl # Interactive mode
./flow lsp # Language server
./flow gfx <file># Compile and run with graphics
./flow mlir <file># Emit MLIR (requires LLVM/MLIR tools)

Host switch: FLOW_HOST=flowc|python|auto (default flowc for run / compile).

# Fuzz the compiler
python3 tests/fuzz/run_fuzz.py --seconds 30
# Regenerate examples compile-status table
python3 scripts/verify_examples.py

Editor support

./scripts/publish_vscode_extension.sh --install
# Or: cursor --install-extension quilio.flow-language

Extension source: third_party/integrations/vscode/flow-language/.

Python wheels from Flow

./flow python mylib.flow --name mylib
pip install dist/mylib-*.whl

Details: docs/python-target.md.

Compiler pipeline

Flow source → Parser → AST → C / MLIR / Metal → Clang / LLVM / shaders

Project statistics

Counted from tracked files by CI so the numbers match the tree.

MetricFiles / modulesPhysical lines
Tracked source3,117442,972
Flow language2,089226,359
Python compiler (src/flow)7351,614
Self-hosted compiler (compiler/src)4022,752
Standard library modules11133,350
Native runtime448,035
Examples (excluding verify corpus)426112,671
Verify corpus1,07818,715
Tests (.py + .flow)45548,539
Application programs81,537
Registry packages19
Documentation pages17339,462
Tracked source by language
LanguageFilesPhysical lines
Flow2,089226,359
Python376114,884
HTML21438,604
C9723,485
C/C++ headers4911,017
C++239,414
JavaScript1917,573
Shell505,329
CSS123,611
Objective-C41,436
Objective-C++2654
Rust10606

Generated by CI from tracked files at 8cd159414c4a. Proof documents: 1,080. Raw JSON · Flow counter · Python fallback.


Contributing

Flow is built with humans directing design and agents writing a lot of the code. See CONTRIBUTING.md for decision authority and how to land changes.

Priorities: ROADMAP.md · docs/NEXT.md.


License

MIT. See LICENSE.


Flowy the Hedgehog, the Flow mascot
Made with care by humans and AI · mascot: Flowy the Hedgehog

About

Flow — a statically typed language for systems that evolve through time (effects, autodiff, C/MLIR)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

1,171 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Flow

A language for systems that evolve through time

Docs · Getting started · Galleries · Vision · Discord · Contributing

CIDocsReleaseLicense: MITDiscord

Source linesStandard libraryExamplesTests

Flow is a statically typed, compiled systems language. Flow 1.0 freezes a deliberately small production core around the self-hosted flowc compiler and portable C backend; algebraic effects, dynamics/control DSLs, verification, advanced stdlib domains and alternate backends continue to ship as explicitly Experimental surfaces until they are promoted.

Version1.0.2
Installbrew tap flooooooooooow/flow && brew install flow
LicenseMIT
CiteCITATION.cff

Flow 1.0's compatibility promise is defined in STABILITY.md. Linux x86-64 and macOS arm64 are the initial Tier-1 platforms; every published v1.* release is qualified from the exact tag before GitHub Release publication.

Quickstart

The default production path is the self-hosted flowc compiler targeting portable C.

function main() -> i32 {
println("Hello, Flow!")
return 0
}
flow run hello.flow

Full quickstart covers variables, functions, structs, loops, and a complete flow evolution model.


Why Flow

Most languages are built around computation: sequences of instructions that transform inputs to outputs.

Flow is built around evolution. You describe how a system changes through time. That description is what runs.

An engineer working on a physical system today crosses Python for analysis, MATLAB for controller design, Simulink for block diagrams, C/C++ for deployment, Verilog for hardware, and vendor tools for the rest. Every handoff loses information. The mathematical model drifts from the deployed code.

Flow collapses those boundaries. The model is the program. The compiler understands units, sample rates, timing contracts, memory topology, and numeric precision as part of the type system, and emits portable C by default.

flow Pendulum {
state angle: f64 = 0.5
state velocity: f64 = 0.0
param damping: f64 = 0.3
angle evolves as velocity
velocity evolves as -9.81 * sin(angle) - damping * velocity
}

That is a complete program. The compiler hands the right-hand side to an RK4 solver and runs it at native speed. No notebook, no glue code, no translation step between model and deployment.

Full thesis: VISION.md. Vision mapped onto grammar: docs/vision/north-star.md. Phase sequencing: ROADMAP.md.


What you get

  • A Stable systems-language core with a self-hosted flowc compiler and portable C backend.
  • Dynamical systems, controllers, algebraic effects, autodiff, graphics and domain libraries available as shipped Experimental surfaces with explicit promotion boundaries.
  • C backend by default with no LLVM requirement; MLIR/JIT, CUDA and other specialised targets remain Experimental in 1.0.
  • Games, morphogenesis, neurodynamics, and real-time DSP as ordinary examples under examples/.

Installation

Homebrew

brew tap flooooooooooow/flow
brew install flow
flow version
flow run examples/basics/hello_world.flow

Track main with brew install --HEAD flow. Formula: packaging/homebrew.

From source

git clone https://github.com/flooooooooooow/flow.git
cd flow
./flow run examples/basics/hello_world.flow

The production compiler path requires a conforming C11 toolchain. Python 3.9+ is retained for the reference/bootstrap compiler and development tooling, not as the canonical 1.0 execution host.

Optional: ./flow install puts flow on your PATH (~/.local/bin).

Longer walkthrough: Getting started.

New to programming: Start here goes from an empty terminal to a running simulation, and sets up an AI assistant to write Flow with you.

Working with an AI assistant

Flow is not in any model's training data, so an assistant does much better with the current facts in front of it. Two things help:

  • Working with AI on Flow, the operating handbook.
  • flow-skills, a pack of skills, references, and command-line tools. ./install.sh and your assistant knows the syntax, the compiler hosts, and how to verify its own work.

Examples

Each GIF is a recording of the compiled program. Frames come from the real gfx backend.

Games
SnakeAsteroidsBreakout
SnakeAsteroidsBreakout
FlappyInvadersPong
FlappyInvadersPong
Morphogenesis
Gray-ScottTuring spotsDiffusion-limited aggregation
Gray-ScottTuring spotsDiffusion-limited aggregation
L-system treeSlime moldSandpile
L-system treeSlime moldSandpile
Neurons and networks
Hodgkin-HuxleyIzhikevich zooBalanced network
Hodgkin-HuxleyIzhikevich zooBalanced network
Evolutionary biology
Lotka-VolterraWright-FisherRed Queen
Lotka-VolterraWright-FisherRed Queen
Spatial SIRHawk-DoveRock-paper-scissors
Spatial SIRHawk-DoveRock-paper-scissors
Planet
BiomesTectonicsErosion
BiomesTectonicsErosion
Procedural generation
Wavefunction dungeonVoronoi sitesHeightmap fBm
Wavefunction dungeonVoronoi sitesHeightmap fBm
3D
Voxel worldFPS cameraPhysics 3D
Voxel worldFPS cameraPhysics 3D
Numerical and social
Adaptive FMMVoter modelMajority rule
Adaptive FMMVoter modelMajority rule
./flow gfx examples/games/tetris_gfx.flow
./flow gfx examples/evolution/lorenz_gfx.flow
./flow run examples/ml/models/mlp_xor.flow
./flow gfx examples/morphogenesis/gray_scott.flow
./flow gfx examples/neuro/hodgkin_huxley.flow
./flow gfx examples/evoleco/lotka_volterra_gfx.flow
./flow gfx examples/planet/planet_biomes.flow
./flow gfx examples/procgen/wfc_dungeon.flow
./flow gfx examples/threed/voxel_world.flow
DomainGalleryIndex
Games (24)demosexamples/games
Morphogenesisdemosexamples/morphogenesis
Neurons and networksdemosexamples/neuro
Evolutionary biologydemosexamples/evoleco
AI / ML trainingtutorialsexamples/ai, examples/ml

Entrypoints by domain: examples/README.md.


Language at a glance

Core syntax

let x: i32 = 42 # Immutable
let mut counter: i32 = 0 # Mutable
function add(a: i32, b: i32) -> i32 {
return a + b
}
struct Point { x: f32, y: f32 }
if x > 0 { ... } elif x < 0 { ... } else { ... }
while condition { ... }
for i in 0 to 10 { ... }

Types

Primitives: i32, i64, f32, f64, bool, string, void
Pointers: ptr<T>, ptr<void>
Arrays: array<T, N>
Generics: function identity<T>(x: T) -> T

Algebraic effects

effect Logger {
log(msg: string) -> void
}
capability ConsoleLogger {
effect Logger
function log(msg: string) -> void {
println(msg)
}
}

Walkthrough: docs/effects-showcase.md · examples/effects/showcase.flow.

Automatic differentiation

Forward-mode dual numbers and reverse helpers live in the stdlib (lib/stdlib/autodiff.flow). The XOR tourist demo trains via checked-in grad codegen in examples/ml/models/mlp_xor.flow. Compiler-integrated loss.grad is still on the roadmap.

FFI

extern {
function malloc(size: i64) -> ptr<void>
function free(p: ptr<void>) -> void
}

Documentation

ResourceDescription
Getting startedInstall, first program, basics
Language overviewFeatures and design
Language designIdioms and why Flow favors fluid abstraction
Language specFull reference
Effects showcaseAlgebraic effects end to end
Examples indexDemos by domain
Examples statusCompile status of every example
VisionWhy Flow exists
RoadmapNear-term work
ChangelogVersion history
Self-hostingStage-A flowc in compiler/
Security · Conduct · GovernanceProject policy

Site: flooooooooooow.github.io/flow


Project layout

PathContents
flowCLI entry point
src/flow/Python-host compiler (parser, type checker, C/MLIR/Metal backends)
compiler/Self-hosted Stage-A flowc
lib/stdlib/Standard library
runtime/Native runtime (graphics, audio, recording)
examples/Domain demos and verify corpus
tests/Language and stdlib tests
apps/Applications (flowdb, flow-http, …)
benchmarks/Microbenchmarks and harness
docs/Spec, tutorials, demos, project docs
third_party/integrations/vscode/VS Code / Cursor extension
site/Wiki shell and site assets

Self-hosting status

The self-hosted compiler (compiler/src/, written in Flow) is the default host for ./flow run and ./flow compile. It compiles itself end to end: three consecutive generation fixed-points are byte-identical, and a clean checkout needs no Python to build a working compiler.

The bootstrap language suite (tests/lang/, 90 .flow files) is the regression target for self-hosted parity. Current result, run with FLOWC_IN/FLOWC_OUT environment variables:

pass=79 fail=11

The 11 failures fall into five categories:

CategoryTestsRoot cause
DSL parse failurestest_effects, test_hybrid_events, test_time_blockseffect, capability, flow, state, solver, evolves, every keywords are not parsed
Generic monomorphizationtest_generics, test_generic_channelsParser accepts generic syntax but the monomorphizer is missing; struct Box<T> emits T value instead of a concrete type
Overload resolutiontest_unsigned_intsType checker rejects duplicate function names; overload selection is not implemented
Closure snapshot semanticstest_closuresCaptured variables are hoisted to globals without snapshotting the value at closure creation time
Stdlib codegentest_gif_encoder, test_fir_optsLZW encoder emits a variable used as a function call; FIR inline-pure bonus constant gets a float-to-int truncation
External C headerstest_c_import_julia, test_c_import_pythonSystem headers for Julia and Python embedding are not available in the test environment

The Python-host compiler (src/flow/, 46,695 lines) remains the full language surface: generics, effects, MLIR, GPU, DSLs, and all advanced type checking. The self-hosted compiler (compiler/src/, 10,863 lines) covers the subset needed to compile itself plus a growing set of language features. See docs/project/self-hosting.md for the full plan and compiler/README.md for the supported syntax list.


Build and develop

./flow run <file># Compile and run (default host: flowc)
./flow compile <file># Compile only → build/
FLOW_HOST=python ./flow run <file># Full Python-host language surface
./flow test# Test suite (strict by default)
./flow test --strict --tier2 # + transpile / clang compile checks
./flow fmt <file># Format
./flow repl # Interactive mode
./flow lsp # Language server
./flow gfx <file># Compile and run with graphics
./flow mlir <file># Emit MLIR (requires LLVM/MLIR tools)

Host switch: FLOW_HOST=flowc|python|auto (default flowc for run / compile).

# Fuzz the compiler
python3 tests/fuzz/run_fuzz.py --seconds 30
# Regenerate examples compile-status table
python3 scripts/verify_examples.py

Editor support

./scripts/publish_vscode_extension.sh --install
# Or: cursor --install-extension quilio.flow-language

Extension source: third_party/integrations/vscode/flow-language/.

Python wheels from Flow

./flow python mylib.flow --name mylib
pip install dist/mylib-*.whl

Details: docs/python-target.md.

Compiler pipeline

Flow source → Parser → AST → C / MLIR / Metal → Clang / LLVM / shaders

Project statistics

Counted from tracked files by CI so the numbers match the tree.

MetricFiles / modulesPhysical lines
Tracked source3,117442,972
Flow language2,089226,359
Python compiler (src/flow)7351,614
Self-hosted compiler (compiler/src)4022,752
Standard library modules11133,350
Native runtime448,035
Examples (excluding verify corpus)426112,671
Verify corpus1,07818,715
Tests (.py + .flow)45548,539
Application programs81,537
Registry packages19
Documentation pages17339,462
Tracked source by language
LanguageFilesPhysical lines
Flow2,089226,359
Python376114,884
HTML21438,604
C9723,485
C/C++ headers4911,017
C++239,414
JavaScript1917,573
Shell505,329
CSS123,611
Objective-C41,436
Objective-C++2654
Rust10606

Generated by CI from tracked files at 8cd159414c4a. Proof documents: 1,080. Raw JSON · Flow counter · Python fallback.


Contributing

Flow is built with humans directing design and agents writing a lot of the code. See CONTRIBUTING.md for decision authority and how to land changes.

Priorities: ROADMAP.md · docs/NEXT.md.


License

MIT. See LICENSE.


Flowy the Hedgehog, the Flow mascot
Made with care by humans and AI · mascot: Flowy the Hedgehog

About

Flow — a statically typed language for systems that evolve through time (effects, autodiff, C/MLIR)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

1,171 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Flow

A language for systems that evolve through time

Docs · Getting started · Galleries · Vision · Discord · Contributing

CIDocsReleaseLicense: MITDiscord

Source linesStandard libraryExamplesTests

Flow is a statically typed, compiled systems language. Flow 1.0 freezes a deliberately small production core around the self-hosted flowc compiler and portable C backend; algebraic effects, dynamics/control DSLs, verification, advanced stdlib domains and alternate backends continue to ship as explicitly Experimental surfaces until they are promoted.

Version1.0.2
Installbrew tap flooooooooooow/flow && brew install flow
LicenseMIT
CiteCITATION.cff

Flow 1.0's compatibility promise is defined in STABILITY.md. Linux x86-64 and macOS arm64 are the initial Tier-1 platforms; every published v1.* release is qualified from the exact tag before GitHub Release publication.

Quickstart

The default production path is the self-hosted flowc compiler targeting portable C.

function main() -> i32 {
println("Hello, Flow!")
return 0
}
flow run hello.flow

Full quickstart covers variables, functions, structs, loops, and a complete flow evolution model.


Why Flow

Most languages are built around computation: sequences of instructions that transform inputs to outputs.

Flow is built around evolution. You describe how a system changes through time. That description is what runs.

An engineer working on a physical system today crosses Python for analysis, MATLAB for controller design, Simulink for block diagrams, C/C++ for deployment, Verilog for hardware, and vendor tools for the rest. Every handoff loses information. The mathematical model drifts from the deployed code.

Flow collapses those boundaries. The model is the program. The compiler understands units, sample rates, timing contracts, memory topology, and numeric precision as part of the type system, and emits portable C by default.

flow Pendulum {
state angle: f64 = 0.5
state velocity: f64 = 0.0
param damping: f64 = 0.3
angle evolves as velocity
velocity evolves as -9.81 * sin(angle) - damping * velocity
}

That is a complete program. The compiler hands the right-hand side to an RK4 solver and runs it at native speed. No notebook, no glue code, no translation step between model and deployment.

Full thesis: VISION.md. Vision mapped onto grammar: docs/vision/north-star.md. Phase sequencing: ROADMAP.md.


What you get

  • A Stable systems-language core with a self-hosted flowc compiler and portable C backend.
  • Dynamical systems, controllers, algebraic effects, autodiff, graphics and domain libraries available as shipped Experimental surfaces with explicit promotion boundaries.
  • C backend by default with no LLVM requirement; MLIR/JIT, CUDA and other specialised targets remain Experimental in 1.0.
  • Games, morphogenesis, neurodynamics, and real-time DSP as ordinary examples under examples/.

Installation

Homebrew

brew tap flooooooooooow/flow
brew install flow
flow version
flow run examples/basics/hello_world.flow

Track main with brew install --HEAD flow. Formula: packaging/homebrew.

From source

git clone https://github.com/flooooooooooow/flow.git
cd flow
./flow run examples/basics/hello_world.flow

The production compiler path requires a conforming C11 toolchain. Python 3.9+ is retained for the reference/bootstrap compiler and development tooling, not as the canonical 1.0 execution host.

Optional: ./flow install puts flow on your PATH (~/.local/bin).

Longer walkthrough: Getting started.

New to programming: Start here goes from an empty terminal to a running simulation, and sets up an AI assistant to write Flow with you.

Working with an AI assistant

Flow is not in any model's training data, so an assistant does much better with the current facts in front of it. Two things help:

  • Working with AI on Flow, the operating handbook.
  • flow-skills, a pack of skills, references, and command-line tools. ./install.sh and your assistant knows the syntax, the compiler hosts, and how to verify its own work.

Examples

Each GIF is a recording of the compiled program. Frames come from the real gfx backend.

Games
SnakeAsteroidsBreakout
SnakeAsteroidsBreakout
FlappyInvadersPong
FlappyInvadersPong
Morphogenesis
Gray-ScottTuring spotsDiffusion-limited aggregation
Gray-ScottTuring spotsDiffusion-limited aggregation
L-system treeSlime moldSandpile
L-system treeSlime moldSandpile
Neurons and networks
Hodgkin-HuxleyIzhikevich zooBalanced network
Hodgkin-HuxleyIzhikevich zooBalanced network
Evolutionary biology
Lotka-VolterraWright-FisherRed Queen
Lotka-VolterraWright-FisherRed Queen
Spatial SIRHawk-DoveRock-paper-scissors
Spatial SIRHawk-DoveRock-paper-scissors
Planet
BiomesTectonicsErosion
BiomesTectonicsErosion
Procedural generation
Wavefunction dungeonVoronoi sitesHeightmap fBm
Wavefunction dungeonVoronoi sitesHeightmap fBm
3D
Voxel worldFPS cameraPhysics 3D
Voxel worldFPS cameraPhysics 3D
Numerical and social
Adaptive FMMVoter modelMajority rule
Adaptive FMMVoter modelMajority rule
./flow gfx examples/games/tetris_gfx.flow
./flow gfx examples/evolution/lorenz_gfx.flow
./flow run examples/ml/models/mlp_xor.flow
./flow gfx examples/morphogenesis/gray_scott.flow
./flow gfx examples/neuro/hodgkin_huxley.flow
./flow gfx examples/evoleco/lotka_volterra_gfx.flow
./flow gfx examples/planet/planet_biomes.flow
./flow gfx examples/procgen/wfc_dungeon.flow
./flow gfx examples/threed/voxel_world.flow
DomainGalleryIndex
Games (24)demosexamples/games
Morphogenesisdemosexamples/morphogenesis
Neurons and networksdemosexamples/neuro
Evolutionary biologydemosexamples/evoleco
AI / ML trainingtutorialsexamples/ai, examples/ml

Entrypoints by domain: examples/README.md.


Language at a glance

Core syntax

let x: i32 = 42 # Immutable
let mut counter: i32 = 0 # Mutable
function add(a: i32, b: i32) -> i32 {
return a + b
}
struct Point { x: f32, y: f32 }
if x > 0 { ... } elif x < 0 { ... } else { ... }
while condition { ... }
for i in 0 to 10 { ... }

Types

Primitives: i32, i64, f32, f64, bool, string, void
Pointers: ptr<T>, ptr<void>
Arrays: array<T, N>
Generics: function identity<T>(x: T) -> T

Algebraic effects

effect Logger {
log(msg: string) -> void
}
capability ConsoleLogger {
effect Logger
function log(msg: string) -> void {
println(msg)
}
}

Walkthrough: docs/effects-showcase.md · examples/effects/showcase.flow.

Automatic differentiation

Forward-mode dual numbers and reverse helpers live in the stdlib (lib/stdlib/autodiff.flow). The XOR tourist demo trains via checked-in grad codegen in examples/ml/models/mlp_xor.flow. Compiler-integrated loss.grad is still on the roadmap.

FFI

extern {
function malloc(size: i64) -> ptr<void>
function free(p: ptr<void>) -> void
}

Documentation

ResourceDescription
Getting startedInstall, first program, basics
Language overviewFeatures and design
Language designIdioms and why Flow favors fluid abstraction
Language specFull reference
Effects showcaseAlgebraic effects end to end
Examples indexDemos by domain
Examples statusCompile status of every example
VisionWhy Flow exists
RoadmapNear-term work
ChangelogVersion history
Self-hostingStage-A flowc in compiler/
Security · Conduct · GovernanceProject policy

Site: flooooooooooow.github.io/flow


Project layout

PathContents
flowCLI entry point
src/flow/Python-host compiler (parser, type checker, C/MLIR/Metal backends)
compiler/Self-hosted Stage-A flowc
lib/stdlib/Standard library
runtime/Native runtime (graphics, audio, recording)
examples/Domain demos and verify corpus
tests/Language and stdlib tests
apps/Applications (flowdb, flow-http, …)
benchmarks/Microbenchmarks and harness
docs/Spec, tutorials, demos, project docs
third_party/integrations/vscode/VS Code / Cursor extension
site/Wiki shell and site assets

Self-hosting status

The self-hosted compiler (compiler/src/, written in Flow) is the default host for ./flow run and ./flow compile. It compiles itself end to end: three consecutive generation fixed-points are byte-identical, and a clean checkout needs no Python to build a working compiler.

The bootstrap language suite (tests/lang/, 90 .flow files) is the regression target for self-hosted parity. Current result, run with FLOWC_IN/FLOWC_OUT environment variables:

pass=79 fail=11

The 11 failures fall into five categories:

CategoryTestsRoot cause
DSL parse failurestest_effects, test_hybrid_events, test_time_blockseffect, capability, flow, state, solver, evolves, every keywords are not parsed
Generic monomorphizationtest_generics, test_generic_channelsParser accepts generic syntax but the monomorphizer is missing; struct Box<T> emits T value instead of a concrete type
Overload resolutiontest_unsigned_intsType checker rejects duplicate function names; overload selection is not implemented
Closure snapshot semanticstest_closuresCaptured variables are hoisted to globals without snapshotting the value at closure creation time
Stdlib codegentest_gif_encoder, test_fir_optsLZW encoder emits a variable used as a function call; FIR inline-pure bonus constant gets a float-to-int truncation
External C headerstest_c_import_julia, test_c_import_pythonSystem headers for Julia and Python embedding are not available in the test environment

The Python-host compiler (src/flow/, 46,695 lines) remains the full language surface: generics, effects, MLIR, GPU, DSLs, and all advanced type checking. The self-hosted compiler (compiler/src/, 10,863 lines) covers the subset needed to compile itself plus a growing set of language features. See docs/project/self-hosting.md for the full plan and compiler/README.md for the supported syntax list.


Build and develop

./flow run <file># Compile and run (default host: flowc)
./flow compile <file># Compile only → build/
FLOW_HOST=python ./flow run <file># Full Python-host language surface
./flow test# Test suite (strict by default)
./flow test --strict --tier2 # + transpile / clang compile checks
./flow fmt <file># Format
./flow repl # Interactive mode
./flow lsp # Language server
./flow gfx <file># Compile and run with graphics
./flow mlir <file># Emit MLIR (requires LLVM/MLIR tools)

Host switch: FLOW_HOST=flowc|python|auto (default flowc for run / compile).

# Fuzz the compiler
python3 tests/fuzz/run_fuzz.py --seconds 30
# Regenerate examples compile-status table
python3 scripts/verify_examples.py

Editor support

./scripts/publish_vscode_extension.sh --install
# Or: cursor --install-extension quilio.flow-language

Extension source: third_party/integrations/vscode/flow-language/.

Python wheels from Flow

./flow python mylib.flow --name mylib
pip install dist/mylib-*.whl

Details: docs/python-target.md.

Compiler pipeline

Flow source → Parser → AST → C / MLIR / Metal → Clang / LLVM / shaders

Project statistics

Counted from tracked files by CI so the numbers match the tree.

MetricFiles / modulesPhysical lines
Tracked source3,117442,972
Flow language2,089226,359
Python compiler (src/flow)7351,614
Self-hosted compiler (compiler/src)4022,752
Standard library modules11133,350
Native runtime448,035
Examples (excluding verify corpus)426112,671
Verify corpus1,07818,715
Tests (.py + .flow)45548,539
Application programs81,537
Registry packages19
Documentation pages17339,462
Tracked source by language
LanguageFilesPhysical lines
Flow2,089226,359
Python376114,884
HTML21438,604
C9723,485
C/C++ headers4911,017
C++239,414
JavaScript1917,573
Shell505,329
CSS123,611
Objective-C41,436
Objective-C++2654
Rust10606

Generated by CI from tracked files at 8cd159414c4a. Proof documents: 1,080. Raw JSON · Flow counter · Python fallback.


Contributing

Flow is built with humans directing design and agents writing a lot of the code. See CONTRIBUTING.md for decision authority and how to land changes.

Priorities: ROADMAP.md · docs/NEXT.md.


License

MIT. See LICENSE.


Flowy the Hedgehog, the Flow mascot
Made with care by humans and AI · mascot: Flowy the Hedgehog

About

Flow — a statically typed language for systems that evolve through time (effects, autodiff, C/MLIR)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages