The Problem: 47 Technologies to Build One App
To build a modern web application today, you need: a frontend framework (React, Vue, Svelte), a state manager (Redux, Zustand, Pinia), a CSS solution (Tailwind, styled-components), a build tool (Webpack, Vite, esbuild), a backend framework (Express, FastAPI, Actix), an ORM (Prisma, SQLAlchemy), a database (PostgreSQL, MongoDB), a migration tool, a test runner, a linter, a formatter, a package manager, and dozens more.
47 technologies. 47 configuration files. 47 version conflicts waiting to happen.
FLIN replaces all of them with one language.
What FLIN Actually Is
FLIN is a compiled, full-stack programming language built from scratch in Rust. It is designed for web development and data-driven applications with a single principle: what used to require 47 separate tools should require one syntax, one compiler, one command.
// This is a complete web application
entity Todo {
text: text
done: bool = false
}page "/" { var newTodo = ""
for todo in all Todo {
No imports. No package.json. No node_modules. No build step. This runs.
The Compiler Pipeline
FLIN's compiler is a 5-stage pipeline, all written in Rust:
1. Lexer -- 107 tests, full Unicode support, soft keywords 2. Parser -- Pratt parser with operator precedence, 149 tests 3. Type Checker -- Hindley-Milner type inference with let-polymorphism 4. Code Generator -- Bytecode emission for the FLIN Virtual Machine 5. Virtual Machine -- Stack-based VM, 75+ opcodes, 65K stack depth
The entire pipeline from source to running application takes milliseconds.
Built-In Features That Others Add Via npm
What FLIN includes out of the box, with zero dependencies:
- Reactivity -- Variables are reactive by default. Change a value, the UI updates. No
useState, noref(), no$state. - Routing -- File-based routing. Create
pages/about.flinand you get/about. No router library. - Database -- Entity persistence with Write-Ahead Logging. Define an entity, save it, query it. No ORM.
- Temporal data -- Built-in version history. Query past states:
todo @ -1gives you the previous version. - i18n -- Create
i18n/fr.flinand your app speaks French. No react-intl. - Hot reload -- Save a file, see the change. Built into the runtime.
- 180 UI components -- Buttons, inputs, modals, charts, data tables -- compiled into the binary.
- Security -- Argon2id password hashing, JWT tokens, CSRF protection, rate limiting.
The Numbers
| Metric | Value |
|---|---|
| Tests passing | 3,200+ |
| Development sessions | 280+ |
| Embedded UI components | 180 |
| Lines of Rust | 186,000+ |
| npm dependencies | 0 |
| Build tools required | 0 |
| Time from scratch to production | 45 days |
The Pipeline Operator
FLIN borrows the best ideas and makes them native:
// Nested calls (hard to read)
square(double(add_one(5)))// FLIN pipeline (reads like English) 5 |> add_one |> double |> square ```
Data flows left to right. Your brain doesn't need to parse inside-out.
Temporal Data: The Language That Remembers
Every entity in FLIN has built-in version history:
entity User { name: text, email: text }save User { name: "Juste", email: "[email protected]" }
// Later, update the name user.name = "Thales" save user
// Query the previous version user @ -1 // Returns: { name: "Juste", ... } user @ "2026-01-15" // Returns: state at that date user.history // Returns: all versions ```
No event sourcing library. No audit trail plugin. It is built into the language.
From West Africa, for the World
FLIN was built by one founder and one AI CTO from Abidjan, Cote d'Ivoire. 280 sessions. 45 days. Zero funding. Zero human engineers.
The language that remembers. The language that simplifies. The language that proves what one person and one AI can build.