Tools

One CLI for the whole lifecycle: build, run, inspect, cross-compile — plus first-class editor support.

The CLI cheat sheet

GoalCommand
Portable image (runs anywhere with the runtime)plugfy build app.plug -o app.fy
…with a native accelerator for this hostplugfy build app.plug --native-slice
…with accelerators for several platformsplugfy build app.plug --native-slice --target win-x64,linux-x64
Run (auto-selects native / JIT / VM)plugfy run app.fy
Run a flowplugfy run app.flow
Standalone native binaryplugfy native app.plug --release
One binary per platformplugfy native app.plug --target win-x64,linux-x64,osx-arm64
Build a whole projectplugfy build App.project.plugfy
Build a whole project nativelyplugfy native App.project.plugfy
See what's inside a .fyplugfy inspect app.fy
Explain a flow's parallel wavesplugfy explain app.flow
Export a flow's graphplugfy flow-graph app.flow --dot
List / add cross targetsplugfy target list · plugfy target add linux-arm64

Anatomy of a .fy

A .fy is Plugfy's portable binary module — the "assembly" of the ecosystem: typed bytecode + a metadata manifest, optionally carrying per-OS native slices. It is compiled, not interpreted, on the hot path — the ReadyToRun model.

No single mainstream platform gives both layers in one artifact: a .jar can't go native, a Go/Rust binary can't run on a foreign OS, GraalVM native-image throws the portable fallback away. The .fy keeps both.

Three execution tiers, one artifact

The runtime picks the fastest tier available, transparently:

AOT — native slice

A per-platform machine-code accelerator embedded in the .fy. Loads only where its target triple is ABI-valid; sealed against the toolchain that built it.

JIT

Hot code compiled at run time where a native slice for the host doesn't exist.

VM

The portable floor: the typed-bytecode interpreter that runs everywhere, always available as fallback.

Cross-built slices are resilient: a target with no cross-toolchain available is skipped, and the image still runs there via JIT/VM. The runner never needs a Rust toolchain — rustc is only used (optionally) at build time.

Projects & build outputs

A project manifest (App.project.plugfy) declares the deliverable: name, type (app or lib), dependencies and default targets. Building produces a predictable bin/ layout — bin/App.fy plus bin/libraries/… — and plugfy native compiles the whole project graph through the same fan-out.

Editors & IDE

The VS Code extension gives the full experience: