Unfish
⚡ v2.0 Released • Pure ANSI C99 • Zero Dependencies

A programming language that grows with you.

From interactive visual blocks to clean indentation-based text, through algorithms and data structures, down to bytecode virtual machines, memory layouts, and native C99/WebAssembly compilation.

🐡 Open Unfish Play (Code & Runner) 📥 Downloads & Toolchain 📚 Read Documentation
🐡 Try Unfish Live
Click 'Run' to execute in the browser engine.

Designed for Intellectual Ascent

🧩

Visual Blocks ↔ Source Code

Bi-directional synchronization between interactive visual blocks and clean text. Learn the mental model through visual logic, then seamlessly transition to human-readable source code.

⚡

5-Way Differential Parity

Guaranteed 100% byte-identical execution across five execution engines: AST Tree-Walking Interpreter, Stack Bytecode VM, Register VM, Native C99 compiler, and WebAssembly.

🔬

Learn the Computer

Never hide how software actually works. Inspect the token stream, Pratt AST, symbol scopes, virtual machine bytecode, and heap object memory layout for any program.

🏛️

Modern Systems Semantics

First-class structs with methods, algebraic enums with pattern matching, cooperative fibers with CSP channels, and contiguous byte buffers with little-endian access.

🛡️

Memory Safe & Leak Free

Object-tracked Mark-and-Sweep garbage collection with temporary root protection stacks. Verified 100% clean under AddressSanitizer and UndefinedBehaviorSanitizer.

💻

Zero External Dependencies

Written in clean, warning-free ANSI C99 with zero third-party dependencies. Runs on Linux, macOS, Windows, modern browsers via WASM, and bare-metal embedded ARM Cortex-M.

Build & Run in Seconds

# 1. Clone repository
git clone https://github.com/ashokwebs/unfish.git
cd unfish

# 2. Build the unified binary (compiles with gcc or clang in < 2 seconds)
make -j4

# 3. Run a program (AST, Stack VM, Register VM, or Native C99)
./bin/unfish run examples/hello.unfish
./bin/unfish run --vm examples/hello.unfish
./bin/unfish build -o bin/hello examples/hello.unfish && ./bin/hello

# 4. Launch the local browser IDE & documentation server
./bin/unfish studio