v0.1.0

Meet Donna,
your language
done right.

A self-hosted, statically typed functional programming language focused on clean design, developer happiness, and native binaries.

$ curl -sSf https://donna-lang.org/install.sh | sh copy
Donna mascot

Built different, by design

Donna borrows the best ideas from functional languages and keeps the toolchain direct.

Native Binaries

Compiles to native machine code through QBE and a C compiler. No VM, no runtime ceremony.

Static Types

A clear static type system catches mistakes while keeping source code compact.

Clean Syntax

Indentation-based blocks, focused expressions, and module-level clarity.

Self-hosted

The Donna compiler is written in Donna, so the language is tested on real compiler code.

Practical FFI

Bind C libraries directly when a small native package is the right tool.

One Tool

Create projects, format, check, test, build, and run from the Donna CLI.

Small programs stay readable

routes.donna
import donna/string

fn slug(title: String) -> String:
  string.to_slug(title)

pub fn main() -> Nil:
  let route = slug("Language Tour")
  echo "/docs/" <> route
01

Explicit imports

Module calls are visible at the top of the file.

02

Readable imports

Modules are explicit and package code stays easy to follow.

03

Public by opt-in

Use pub to expose symbols. Private code stays private.

04

Native output

Donna builds real binaries while keeping source code compact.

compiler output
    Checking donna-real-error
   Compiling donna/shell
   Compiling donna/string
   Compiling donna/float
   Compiling donna/bool
   Compiling donna/option
   Compiling donna/files
   Compiling donna/result
   Compiling donna/dict
   Compiling donna/time
   Compiling donna/list
   Compiling donna/int
   Compiling donna-real-error
error: undefined module
  ┌─ src/donna-real-error.donna:2:22
  
2     let route = string.to_slug("Language Tour")
                         ^^^^^^^ `string` has not been imported

hint: add the missing import at the top of the file

The compiler points at the problem

This is real output from a Donna project that calls string.to_slug without importing donna/string.

Get Donna on your PATH

The installer link is temporary while the release pipeline is finalized. The install flow will download a prebuilt Donna binary and guide users through adding it to their shell path.

01
$ curl -sSf https://donna-lang.org/install.sh | sh

Downloads the latest release and installs the donna binary.

02
$ donna new my-project

Creates a project with a demo test and GitHub Actions workflow.

03
$ donna test && donna run

Runs the test suite, then builds and runs the project.

Long-form Donna guides

This section will hold books and longer learning material. We are keeping the shelf empty until the first book draft is ready.

Follow the work

Donna is early and moving fast. For now, GitHub is the center of the project.