Hi all -
Below are the topic headings that I’ve got as part of the improved docs layout “proof of concept / prototype” that I’ve been working on.
An admission - these are AI-generated but I think that AI can actually be useful in this instance to generate the headings that you then put the “beef” of the detailed documentation under.
Anyway - here is the “tree” for the main docs -
Introduction
What is Zig?
Key Design Philosophies
Minimalism
Predictability
Explicitness
Performance
Language Versions & Roadmap
Getting Started
Installation
Downloading Prebuilt Binaries
Building Zig from Source
Verifying Your Installation
Hello World
zig run vs. zig build-exe
Basic Project Structure
Compiler Overview
LLVM-based Compiler
Stage2 (Self-Hosted) Compiler
Supported Targets & Cross-Compilation
Build Process
Overview of zig build
Why Use the Zig Build System?
Project Layout & build.zig Files
The build.zig File in Detail
Declaring Executables
Declaring Libraries (Static, Shared)
Adding Dependencies
Setting the Target Triple (Architecture, OS, ABI)
Build Modes (Debug, ReleaseSafe, ReleaseFast, ReleaseSmall)
Command-Line Usage
zig build Subcommands (test, run, exe, lib, docs)
Verbosity, Logging, & Other Flags
Controlling Compiler Warnings/Errors
Advanced Build Topics
Custom Build Steps (e.g., code generation, resource compilation)
Cross-Compilation Workflows
Linking, Library Paths, and System Dependencies
Using External C/C++ Code (.h & .c files, linking libs)
Caching and Incremental Builds
Build Artifacts (Output Paths, Intermediate Files)
Scripting & Tooling
Writing Custom Commands in build.zig
Environment Variables & Configuration
Packaging & Distribution (Prebuilt Binaries, .tar.gz, Docker)
Language Basics
Variables and Constants
var vs. const
Block Scopes
Shadowing
Naming Conventions
Identifiers & Style
Module / File Names
Comments and Documentation
Single-line & Multi-line Comments
Doc Comments (///)
Code Organization
Files & Modules
Package Imports (@import, relative/absolute paths)
Data Types
Primitive Types
Integers (Signed/Unsigned, Fixed-Width, comptime_int)
Floating-Point (f16, f32, f64, comptime_float)
Booleans
Characters (u8 code points)
Compound Types
Arrays & Slices
Fixed-Size Arrays
Slices ([]T, [*]T)
Strings
[]const u8 vs. [*]const u8
Null-Terminated Strings ([:0]const u8)
Tuples
Structures (struct)
Fields & Field Access
Anonymous Structs
Enumerations (enum)
Simple Enums
C-like Enums
Tagged Unions
Unions
Union Declarations
Discriminants
Pointers
Unsafe vs. Safe Pointers
Sentinel-Terminated Pointers
Alignment & Address Spaces
Optionals (?T)
Usage & Unwrapping
Comparisons with Null
Error Unions (!T)
Defining and Propagating Errors
Error Sets
try and catch
Control Flow
If Statements & Expressions
if / else syntax
Optional chaining (if (optional) |value| {...})
Inline if-expressions
While Loops
Basic while Conditions
while (condition) |item| {...} pattern
Breaking early with break
For Loops
Iterating over Arrays, Slices, Ranges
Index & Value Variables
Ranges
Numeric Ranges
Using with for
Break & Continue
Breaking out of Loops
Skipping Iterations
Switch Statements
Pattern Matching with Enums, Tagged Unions, etc.
Exhaustive vs. Non-Exhaustive Switch
Memory Management
Allocators
Standard Allocators (std.heap.page_allocator, std.heap.ArenaAllocator, etc.)
Creating Custom Allocators
Lifetime Considerations
Manual Memory Control
Allocating Arrays, Slices, Structs
Freeing & Resizing
Pointers & Slices Revisited
Pointer Arithmetic
Slicing Arrays
Working with Zero-Cost Abstractions
Minimizing Runtime Cost
Ensuring Safety
Error Handling
Declaring Errors
error{SomeError, AnotherError}
error.UnexpectedEOF
Error Propagation
Using try/catch
Error Unions (!T)
return error.SomethingBad
Handling Errors
Pattern Matching with switch
Using catch |err| {...}
Defer & Cleanup
defer statements for resource cleanup
Error-Safe Resource Management
Compile-Time Features
comptime Keyword
Compile-Time Conditionals
Compile-Time Loops
Compile-Time Functions
fn foo(comptime x: T) ...
Evaluating Functions at Compile Time
Reflection & Metaprogramming
@typeInfo, @typeName, @field
Generics / Parameterized Code
Inline Assembly
Syntax, supported instructions
Safety & Constraints
Concurrency & Asynchronous I/O
Async Functions
async fn basics
await usage
Suspend & Resume
Cooperative Concurrency
Event Loop Integration
Channel & Queue Abstractions
Passing Data Between Tasks
std.Channel (if available in your Zig version)
Example: Asynchronous Network Operations
Standard Library Essentials
Overview of std
Modules & How to Import
Common Modules
std.math (math functions)
std.fs (file system handling)
std.mem (memory utilities)
std.testing (testing utilities)
std.time (time utilities)
Data Structures in std
ArrayList, ArrayHashMap, LinkedList, etc.
Usage Examples & Memory Allocation
Utilities & Helpers
std.debug (logging, printing)
std.os (operating system calls)
std.process (launching processes)
Interfacing with C/C++
C Headers & FFI
@cImport and @cInclude
Linking against system libraries
Calling Zig from C
Generating .h files with zig translate-c
Mixed Projects
Organizing Zig + C/C++ code
Build System Integration
Testing & Debugging
Test Declarations
test "description" {...}
Running Tests with zig test
Test Organization
Multiple Test Files, Modules
Using std.testing Assertions
Debugging
Compiler Flags (-femit-llvm-ir, -fno-strip)
Using LLDB or GDB
Print Debugging with std.debug.print
Deployment & Distribution
Cross-Compilation in Depth
Specifying --target (CPU, OS, ABI)
Building Static vs. Shared Libraries
Packaging for Multiple Platforms
Optimization Modes
Debug
ReleaseSafe
ReleaseFast
ReleaseSmall
Stripping Symbols & Minimizing Binary Size
Reproducible Builds
Advanced Topics
Using Zig as a Linker
zig cc, zig c++ commands
Wrapping External Toolchains
Generic Programming
Type Parameters
comptime techniques
Bit Manipulation
Packed Structs, Bitfields
Endianness
Inline Functions & Builtins
@import, @sizeOf, @alignOf, @offsetof, etc.
Performance Tuning
Measuring Performance
Profiling (perf, instruments)
Allocation Patterns
Tooling Overview
zig fmt (Formatter)
zig translate-c (C to Zig)
zig ast-check (Syntax & Semantic Checks)
zig targets (List Supported Targets)
zig env (Environment Info)
Documentation Generation
Using zig build docs
Generating HTML
Configuring Output Location
Embedding Comments & Examples
Best Practices for Doc Comments
Linking to Standard Library Docs
Best Practices & Conventions
Coding Style
Naming, Formatting, Module Layout
Memory Safety & Lifetime Management
Error Handling Conventions
Testing & Continuous Integration
Contributing to Zig
Reporting Issues
Opening Pull Requests
Community Resources (Discord, GitHub Discussions)
Further Reading & Resources
Official Zig Language Reference
Zig Community Projects & Packages
External Tutorials & Guides
Language Internals (Compiler Architecture, IR)
… and here is the tree for part of the standard library - the Build doc headings -
build
Builder
Builder.init
Builder.setTarget
Builder.setBuildMode
Builder.getInstallPrefix
Builder.addExecutable
Executable
Executable.init
Executable.addObjectFile
Executable.linkSystemLibrary
Executable.linkFramework
Builder.addLibrary
Library
Library.initStatic
Library.initShared
Builder.addSharedLibrary
Builder.addStaticLibrary
Builder.addTest
TestStep
TestStep.init
TestStep.addDependency
Builder.addObjectFile
LibExeObjStep
LibExeObjStep.addObjectFile
LibExeObjStep.addLibraryPath
LibExeObjStep.linkSystemLibrary
LibExeObjStep.linkFramework
Builder.linkSystemLibrary
Builder.linkFramework
Builder.installArtifact
InstallStep
InstallStep.init
InstallStep.setPath
InstallStep.setTargetDir
Builder.addInstallStep
Builder.addRunStep
RunStep
RunStep.init
RunStep.addArg
RunStep.addEnv
Builder.addCommand
Command
Command.init
Builder.overrideStdSpecialStrings
Step
Step.init
Step.addDependency
Step.getDependencies
Step.make
Step.run
CompileStep
CompileStep.init
CompileStep.setOutputPath
CompileStep.addObjectFile
CompileStep.addLibraryPath
CompileStep.linkSystemLibrary
CompileStep.linkFramework
RunStep
RunStep.init
RunStep.addArg
RunStep.addEnv
InstallStep
InstallStep.init
InstallStep.setPath
InstallStep.setTargetDir
TestStep
TestStep.init
Command
Command.init
Mode
Mode.Debug
Mode.ReleaseSafe
Mode.ReleaseFast
Mode.ReleaseSmall
Library
Library.initStatic
Library.initShared
Library.step
Executable
Executable.init
Executable.step
LibExeObjStep
LibExeObjStep.addObjectFile
LibExeObjStep.addLibraryPath
LibExeObjStep.linkSystemLibrary
LibExeObjStep.linkFramework
LibExeObjStep.finalize
Dep
Dep.init
Dep.setName
Dep.setVersionRange
Dep.usePkgConfig
PkgConfig
PkgConfig.init
PkgConfig.addLibPath
PkgConfig.linkSystemLibrary
Options
Options.parse
Options.addOption
Options.addEnumOption
Options.addCommand
Options.getOptionValue
Options.getEnumOptionValue
Target
Target.init
Target.native
Target.parse
Target.cpu_arch
Target.os_tag
Target.abi
Toolchain
Toolchain.init
Toolchain.linkSystemLibrary
Toolchain.getCCompiler
Config
My aim is that if/when the detailed documentation is done under those headings, the layout would look similar to this Python documentation page -
You can imagine that once there is detailed documentation and example code under these headings, this kind of layout would give an easy-to-understand and easy-to-use set of documentation.
By the way - for the HTML code and actual Zig code examples, I want to have both of those be 100 percent human-generated, not A.I.
Anyway, comments welcome - I hope you’ll be gentle with me…
Cheers -
mooseman