Understand the whole, then the part
Begin with startup and folder data flow. Follow an operation into its decisions, dependencies, results and failures.
Code that reads like pseudocode. Compiled explanations and diagrams you can navigate. Native performance you can measure.
A greeting is small enough to read in full. The same compiler that checks this code also writes its explanation and diagrams.
This component belongs to the complete greeting project. Its logger comes from the application’s bindings.
import Console from august.io
import Logger from logging
Greeter(resolve Logger logger) implements IGreeter:
greet(resolve Console console, string name):
logger.log(message="Hello, " + name + "!")
interface IGreeter:
greet(resolve Console console, string name) uses Console.writeimport Console from august.io
import Logger from logging
Greeter(resolve Logger logger) implements IGreeter {
greet(resolve Console console, string name) {
logger.log(message="Hello, " + name + "!")
}
}
interface IGreeter {
greet(resolve Console console, string name) uses Console.write
}This text is generated from that component by aug spec. The compiler follows the calls and links the dependency contracts. Author comments supply the description of its purpose.
Greeter · class · source Welcomes a user through the configured logger. It implements IGreeter. The logger dependency is injected as Logger and stored read-only (the application logger, injected when resolved).
Greeter.greet · source Prints a personalized greeting. It takes name as a string. It gets console (Console) from dependency injection. It can call Console.write.
It passes the text Hello, {name}! to logger.log, using injected console. source
greet(resolve Console console, string name) returns void uses Console.writeIt takes name as a string (the user to welcome). It gets console (Console) from dependency injection. It can call Console.write.
The application resolves Greeter and calls greet(name="AugScript"). The configured logger prints:
Hello, AugScript!flowchart TD
n0["app"]
n1["logging"]
n2["Startup"]
n0 -->|"Logger.log(message)"| n1
n2 -->|"Greeter.greet(name)"| n0
This is the greeting project’s folder view. Startup calls the application; the application calls the logger. Each connection opens its exact inputs and call sites in the project overview.
sequenceDiagram
participant p0 as Greeter.greet
participant p1 as logger: Logger
p0->>p1: log(message=”Hello, ” + name + ”!”) · interface dispatch
This is the generated sequence for Greeter.greet. It passes the greeting to the Logger contract. The application chooses ConsoleLogger in its startup specification. Interface dispatch remains visible; the diagram does not guess which instance a caller will use.
Open this operation · Follow its logger · Learn to navigate the views
The world runs on language. August makes the program explain itself at the level you need: the project, a folder, an operation, or an individual decision.
Start with the generated overview to see startup and the data that crosses folder boundaries. Open a folder to find its public surface. Follow a sequence to see when an operation calls its dependencies, returns, fails, or cleans up. Read the neighboring specification for the full behavior in sentences. The exact call contract and source stay one link away.
This is the normal reading path for both developers and coding agents. It lets you review a change, locate a dependency, or understand a failure without opening every implementation. When you need to change an expression, the explanation links to that part of the source.
All these views come from the checked program. The explanation describes what the implementation does; your requirements and tests establish whether that behavior is right. Native implementations and runtime interface choices remain visible boundaries.
Try the greeting project's overview, then explore the larger login application. Understand a project shows how to move between the views.
A separate million-greeting program writes 1,000,000 greetings: 20 MB of UTF-8 text. The output below is abbreviated:
Hello, August! 👋
Hello, August! 👋
… 1,000,000 lines in totalThe equivalent C program performs the same work and flushes each line, as August does:
#include <stdint.h>
#include <stdio.h>
int main(void) {
for (int64_t greetings = 0; greetings < 1000000; ++greetings) {
fputs("Hello, August! 👋\n", stdout);
fflush(stdout);
}
return 0;
}Median ms · shorter is better. Each panel starts at zero and scales to the implementations shown.
| Program | Implementation | Median | Minimum | Maximum | Samples |
|---|---|---|---|---|---|
| Printing to a file | August | 1,023.47 | 1,012.97 | 1,051.05 | 30 |
| Printing to a file | C | 977.46 | 964 | 1,113.14 | 30 |
August 1.0.0 on Apple M5 takes 1023.47 ms and C takes 977.46 ms (median of 30 runs after 3 warmups). Both programs use release optimization, write to a file, and flush each line. Every run must produce the same 20 MB output. The times include process startup and file I/O.
The performance reports compare more programs: integer loops, collections, JSON, and HTTP. Results vary by workload; use the sources to build a comparison for your own application.
Read the source and spec · Inspect every sample and the environment
August 1.0 is available now. You need Node.js 24 and macOS 14+ on Apple Silicon or GNU/Linux x86-64/ARM64 with glibc 2.36+. August obtains its native compiler and libraries automatically; you do not install LLVM or Clang.
Start with your first project, then follow the August book. The project gallery shows formatted code beside its actual compiled spec. Use the task guides for packages, HTTP, tests, and deployment.
The August 1.x compatibility contract covers source behavior, CLI and package formats, and the public native ABI. Read supported platforms, production readiness, and the roadmap before choosing it for a deployment. Source and issues are on GitHub.