Open Source

Quill Code that reads like English

A beginner-friendly language that compiles to JavaScript. No semicolons, no curly braces, no confusion.

Quill
-- A friendly greeting
to greet name:
  say "Hello, {name}!"

names are ["Alice", "Bob"]
for each name in names:
  greet(name)
Python
# A friendly greeting
def greet(name):
    print(f"Hello, {name}!")

names = ["Alice", "Bob"]
for name in names:
    greet(name)

Features

Why Quill?

Designed from the ground up to be readable, teachable, and enjoyable.

📖

Reads like English

Variables use is, conditions use if/otherwise, loops use for each. Your code tells a story.

👋

Friendly errors

Error messages that explain what went wrong and suggest how to fix it. No more cryptic stack traces.

Built-in testing

Write tests with test and expect keywords. Testing is a first-class citizen, not an afterthought.

📦

Standard library

File I/O, string operations, math, dates -- everything you need is built in and ready to use.

Compiles to JavaScript

Runs anywhere JS runs: browsers, servers, scripts. Leverage the entire JavaScript ecosystem.

💻

Single binary

Download one file, start coding. No runtime, no dependencies, no configuration needed.

🖊

VS Code extension

Syntax highlighting, snippets, and auto-complete. Search "Quill by TradeBuddy" in VS Code.

🔨

Built-in tools

quill fmt auto-formats your code. quill check catches bugs before you run. No plugins needed.

Quick Start

Get started in seconds

Terminal
# Install Quill (coming soon to Homebrew)
brew install quill

# Or download from GitHub
curl -fsSL https://quill.tradebuddy.dev/install.sh | sh

# Write your first program
echo 'say "Hello, World!"' > hello.quill

# Run it
quill run hello.quill

Comparison

See the difference

The same program in three languages. Which one would you rather read?

Quill
names are ["Alice", "Bob"]

for each name in names:
  if length(name) is greater than 3:
    say "{name} is long"
  otherwise:
    say "{name} is short"
Python
names = ["Alice", "Bob"]

for name in names:
    if len(name) > 3:
        print(f"{name} is long")
    else:
        print(f"{name} is short")
Bash
names=("Alice" "Bob")

for name in "${names[@]}"; do
  if [ ${#name} -gt 3 ]; then
    echo "$name is long"
  else
    echo "$name is short"
  fi
done