Linear Flow
Errors and special cases leave early. The happy path runs top to bottom without detours.
Pureline is an opinionated coding style for linear control flow, explicit intent, compact formatting and small units. Pureline does not minimize characters, it minimizes unnecessary code.
public Result process(Request request) {
if (!request.valid()) {
return Result.invalid();
}
if (!access.allowed(request.user())) {
return Result.denied();
}
var session = sessions.open(request.user());
return executor.execute(session, request);
} The measure is not how clever code can be written, but how quickly another person understands flow, responsibilities and boundaries.
Errors and special cases leave early. The happy path runs top to bottom without detours.
Blocks, names and side effects show what happens. Nothing hides behind shorthand.
No ceremony, no boilerplate, no artificial vertical formatting. Every line contributes.
Functions and types are small enough to understand at a glance and to change safely.
Modules, resources and concurrency have a clear owner and a clear lifecycle.
Pureline standardizes principles, not syntax. The core applies everywhere, the profiles translate it into idiomatic rules: Go keeps its error guards, Crystal its postfix guards, Rust its Result and ownership model.
.java Modern Java without enterprise ceremony.
.js const-first, semicolons, braces, async/await.
.ts Strong boundaries, inferred internals.
.go Idiomatic Go that already thinks linearly.
.cr Own identity, explicit control flow.
.ev Current Emvus design: method, Result, scoped, data classes.
.rs Idiomatic Rust: ownership, Result, rustfmt.
22 Core rules for control flow, naming, structure, formatting and architecture.
Pureline on the left, Avoid on the right: the handle shows how much noise disappears when error cases leave early.
public Result handle(Request request) {
if (request != null) {
if (request.valid()) {
if (access.allowed(request.user())) {
return executor.execute(request);
} else {
return Result.denied();
}
} else {
return Result.invalid();
}
}
return Result.empty();
} public Result handle(Request request) {
if (request == null) {
return Result.empty();
}
if (!request.valid()) {
return Result.invalid();
}
if (!access.allowed(request.user())) {
return Result.denied();
}
return executor.execute(request);
} Drag the handle
The complete Pureline specification as Markdown: a fixed reference for people and context for AI assistants. Each language also has its own extract with the core and the matching profile.
Complete specification 49 KBAll chapters, core and every language profile. Tip: put the file into your AI assistant's project context (for example as CLAUDE.md or AGENTS.md).
pureline-1.5-core.md 14 KB Java pureline-1.5-java.md 17 KB JavaScript pureline-1.5-javascript.md 16 KB TypeScript pureline-1.5-typescript.md 17 KB Go pureline-1.5-go.md 16 KB Crystal pureline-1.5-crystal.md 17 KB pureline-1.5-emvus.md 25 KB Rust pureline-1.5-rust.md 24 KB Every line should either move the program forward or make that movement easier to understand.
No ceremony. No artificial complexity. No code that gets in its own way.
Pureline standardizes principles, not syntax. Every language stays idiomatic.