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.