Flint Logo Flint

Stop wasting CI time on slow scripts.

Your pipelines shouldn’t wait for Python to boot or fail silently like Bash. Ship reliable infrastructure as native binaries.

terminal — flint
Transpiled. Compiling native binary...
Success! Executable 'pipeline' generated.

Infrastructure scripting is broken

Bash

Quick to write, hard to maintain. Breaks on edge cases and messy data.

Python / Node

Flexible, but slow startup and heavy runtime for simple scripts.

Go / Rust

Powerful, but verbose and overkill for small automation tasks.

Built for one thing: Fast, safe system scripting.

We stripped away the garbage collector and the heavy runtimes to give you the ultimate CI/CD weapon.

01.

Native Binaries

Compile your pipeline once, run it anywhere. No dependency hell, no "it works on my machine" excuses.

02.

Compile-time Safety

Catch broken pipes and invalid types before your CI even starts running. Stop deploying runtime crashes.

03.

Zero-copy I/O

Kernel-level operations via sendfile(). Move gigabytes of logs without ever touching user-space memory.

Parse massive JSON before Python even boots

Stop loading 10MB payloads into memory just to read three fields.

Python (The Bloaty Way) ~275ms cold boot
import json
import requests

res = requests.get("https://api...")
data = res.json() # Loads entire tree

status = data.get("status")
if not status:
    raise Exception("invalid")

print(data.get("url"))
Flint (The Native Way) ~8ms execution
import http;
import strings;

struct Release {
  tag_name: string,
  status: string,
  artifact_url: string
}

const payload = http.fetch("https://api...")
  ~> expect("invalid release");

const release_data = 
    parse_json_as(Release, strings.to_str(payload));

print(release_data.artifact_url);

Process gigabytes of logs without touching memory

Flint uses zero-copy I/O and kernel-level file operations via sendfile() to process large files faster and safer than traditional scripting tools.

FL analyzer.fl
report.log
import os;
import io;
import strings;

const logs = os.ls("./logs")
    ~> expect("Failed to read dir");

for file in strings.to_str(logs) ~> strings.lines() {
    # Filter and accumulate in the log
    io.read_file(file)
        ~> strings.lines()
        ~> strings.grep("FATAL ERROR")
        ~> strings.join("\n")
        ~> io.write_file("report.log");
}

# Kernel-level move, bypasses user-space
os.copy("artifact.bin", "./staging/")
    ~> expect("copy failed");

Measured where it matters

Real-world infrastructure tasks. No synthetic loops.

Mass File Stat

Traversing directories and reading metadata (10k files).

Flint 19.1 ms
Python 3 44.4 ms
Bash 12.7 s

Massive JSON

Loading 17MB of JSON. AOT mapping vs dynamic reflection.

Flint 142.1 ms
Python 3 658.1 ms
Node.js 774.6 ms

Cold Start Network

Boot time and fetching a JSON payload via HTTP.

Flint 229.2 ms
Bash (curl) 228.2 ms
Python 415.3 ms

When to use Flint

Flint is not general-purpose. It shines in very specific, high-impact scenarios.

CI scripts over 200+ lines

Your GitHub Actions or Bash scripts grew into fragile monsters. Debugging is painful, errors are silent, and Python adds cold-start overhead. Flint gives you compiled, predictable pipelines with real type safety.

JSON payloads > 5MB

Python and Node load entire payloads into memory just to extract a few fields. Flint parses only what you define at compile time, avoiding unnecessary allocations.

Cron jobs running every minute

Startup time compounds fast. A 300ms Python script becomes minutes of wasted compute per day. Flint binaries start instantly and execute with near-zero overhead.

Log processing in production pipelines

Grep + awk pipelines break on edge cases and are hard to maintain. Flint gives you structured, typed pipelines with zero-copy I/O for massive files.

Get started in seconds

No package managers. No virtualenvs. Just clone, build, and run.

~ bash
# 1. Clone and bootstrap
git clone https://codeberg.org/lucaas-d3v/flint.git
cd flint
./bootstrap.sh
# 2. Write your first script
echo 'print("Hello, Flint!");' > hello.fl
# 3. Run it
flint run hello.fl
Hello, Flint!

Write pipelines like this

Clean, readable, and strictly typed.

FL main.fl
1 import os;
2 import strings;
3
4 os.exec("ps aux")
5     ~> strings.lines()
6     ~> strings.grep("root")
7     ~> strings.join("\n")
8     ~> print();

Mature tools know their boundaries.

Flint is a surgical tool. It makes aggressive architectural assumptions to achieve its extreme speed. Here is when you should NOT use it.

Web Servers

Flint uses a 4GB Virtual Arena with a bump allocator and zero Garbage Collection. Memory is only freed when the CLI script exits. Long-running APIs will eventually hit OOM. Use Go or Rust instead.

Heavy Math & ML

Flint relies entirely on 64-bit integers for memory layout speed. We do not support floats, matrices, or GPU acceleration. If you are doing Data Science or training models, stick to Python.

Async & GUIs

Flint lives and breathes in the Unix terminal. The runtime is entirely synchronous by design to keep the C-emitter simple and fast. There is no event loop and no frontend windowing support.