Show HN: FAIth – a syntax-free JVM language, compiled by an LLM front-end

krossovochkin1 pts0 comments

GitHub - krossovochkin/faith: The JVM language with no syntax rules. Write it your way. · GitHub

/" data-turbo-transient="true" />

Skip to content

Type / to search

Sign in<br>Sign upAppearance settings

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

krossovochkin

faith

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>2 Commits<br>2 Commits

.github/workflows

.github/workflows

example

example

gradle

gradle

plugin

plugin

.gitignore

.gitignore

LICENSE

LICENSE

README.md

README.md

build.gradle

build.gradle

gradlew

gradlew

gradlew.bat

gradlew.bat

logo.png

logo.png

settings.gradle

settings.gradle

View all files

Repository files navigation

fAIth 🙏

The JVM language with no syntax rules. Write it your way.

Every language makes you learn its rules before it lets you write a single<br>line. Faith doesn't. Write Python. Write Kotlin. Write Java. Mix all three in<br>the same file. Faith reads intent, not syntax — and compiles it to a real,<br>runnable jar.

target = arg 0<br>list = 1,2,3,4,5,6,7,8,9,10<br>print binary search target in list

No import. No boilerplate. No hand-written algorithm. You said what you<br>wanted, and Faith compiler compiles it — correctly.

Why Faith is different

🧩 Any syntax. Same compiler. Python-style, Kotlin-style, Java-style,<br>Clojure-style — write in whatever dialect you think in. Faith doesn't force<br>you to pick one.

🚫 No imports, ever. Faith knows the entire JVM standard library and<br>pulls in exactly what your code needs, automatically.

🎯 Describe the algorithm, get the algorithm. Ask for a binary search,<br>get a correct binary search — not a stub you still have to write.

🛡️ It won't guess when it matters. If a line is genuinely ambiguous,<br>Faith stops the build and tells you exactly what's unclear and where — no<br>silent bugs shipped because the compiler assumed something you didn't say.

⚠️ Human readable errors. No more long stacktraces, questions at StackOverflow or asking an AI. Compiler output already provides all the meaningful information.

See it catch a real mistake

for i in 1 to 1000<br>get the height of the tree<br>set value to 1

Task :compileFaith FAILED

faith: main.ai:10 is ambiguous — fix this line and rebuild.<br>line 10: get the height of the tree<br>question: What tree does 'the tree' refer to, as no tree structure<br>or variable has been defined?">> Task :compileFaith FAILED

faith: main.ai:10 is ambiguous — fix this line and rebuild.<br>line 10: get the height of the tree<br>question: What tree does 'the tree' refer to, as no tree structure<br>or variable has been defined?

Most languages let this kind of gap slide until it blows up at runtime. Faith<br>catches it at compile time, in plain English, before it ever becomes a bug.

Powered by an LLM compiler

Faith's front-end isn't a parser in the traditional sense — it's a Gemini-backed<br>agent (via Google's ADK) that reads your main.ai file the<br>way a person would: inferring what you meant, not just what you typed. The<br>agent resolves your free-form source into strict, valid Java, which then<br>compiles the normal way — deterministic bytecode out, LLM only at the front<br>door. If the model isn't confident about what a line means, it doesn't<br>guess — it fails the build and asks.

Configuration

faith {<br>apiKey = providers.gradleProperty('geminiApiKey') // required<br>model = 'gemini-flash-latest' // optional, default shown<br>effort = 'medium' // optional — low | medium | high<br>sourceFile = 'main.ai' // optional, default shown<br>maxRetries = 3 // optional, default shown

Option<br>Default<br>What it does

apiKey<br>Your Gemini API key. Get one at aistudio.google.com/apikey. Never hardcode this — read it from a Gradle property or env var.

model<br>gemini-flash-latest<br>Which Gemini model resolves your source.

effort<br>medium<br>How much reasoning the model spends per compile. low is faster and cheaper; high is slower but resolves trickier ambiguity before giving up and asking you.

sourceFile<br>main.ai<br>The Faith source file to compile.

maxRetries<br>How many times the agent gets to fix its own Java after a javac error before the build gives up.

Getting started

plugins {<br>id 'com.krossovochkin.faith' version '0.1.0'

Write main.ai in whatever syntax feels natural. Run ./gradlew compileFaith.<br>Get a jar.

Run a jar with

java -jar path/to/your.jar [args]

Faith: the language that meets you where you already think.

About<br>The JVM language with no syntax rules. Write it your way.<br>Resources<br>Readme<br>Apache-2.0 license<br>Activity<br>Stars<br>1 star<br>Watchers<br>0 watching<br>Forks<br>0 forks<br>Report repository

Releases

Packages

Contributors

Languages

You can’t perform that action at this time.

faith write tree syntax main gradle

Related Articles