Skip to content
cccskills
FreePublished on GitHub

zig-best-practices

Use when reading or writing Zig files (.zig, build.zig, build.zig.zon).

The English summary is being prepared. Showing the original description.

See how to install

Files included (4)

  • SKILL.md3.3 KB
  • C-INTEROP.md2.0 KB
  • DEBUGGING.md1.6 KB
  • GENERICS.md1.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Zig Best Practices

Follows type-first, functional, and error handling patterns from AGENTS.md. This skill covers Zig-specific idioms only.

Type System Patterns

Tagged unions for mutually exclusive states — prevents invalid combinations that a struct with multiple nullable fields would allow:

const RequestState = union(enum) {
    idle,
    loading,
    success: []const u8,
    failure: anyerror,
};

Explicit error sets — documents exactly what can fail; anyerror hides failure modes:

const ParseError = error{ InvalidSyntax, UnexpectedToken, EndOfInput };
fn parse(input: []const u8) ParseError!Ast { ... }

Distinct types for domain IDs — compiler prevents mixing up different ID types:

const UserId = enum(u64) { _ };
const OrderId = enum(u64) { _ };

Comptime validation — catch invalid configurations at compile time, not runtime:

fn Buffer(comptime size: usize) type {
    if (size == 0) @compileError("buffer size must be greater than 0");
    return struct { data: [size]u8 = undefined, len: usize = 0 };
}

Memory Management

  • Pass allocators explicitly to every function that allocates; no global allocator state.
  • Place defer resource.deinit() immediately after acquisition — keeps cleanup co-located with creation.
  • Use errdefer for cleanup on error paths; defer for unconditional cleanup.
  • Use arena allocators for batch/temporary work; they free everything at once.
  • Use std.testing.allocator in tests — reports leaks with stack traces.
fn createResource(allocator: std.mem.Allocator) !*Resource {
    const resource = try allocator.create(Resource);
    errdefer allocator.destroy(resource);  // runs only on error
    resource.* = try initializeResource();
    return resource;
}

Key Conventions

  • Prefer const over var; prefer slices over raw pointers.
  • Prefer comptime T: type over anytype; explicit types produce clearer errors. Use anytype only for genuinely polymorphic cases (callbacks, std.debug.print-style).
  • Exhaustive switch: include an else returning an error or unreachable for truly impossible cases.
  • Use std.log.scoped(.module_name) for namespaced logging; define a module-level const log constant.
  • Larger cohesive files are idiomatic — tests alongside implementation, comptime generics at file scope.

Advanced Topics

  • Generic containers (queues, stacks, trees): See GENERICS.md
  • C library interop (raylib, SDL, curl): See C-INTEROP.md
  • Debugging memory leaks (GPA, stack traces): See DEBUGGING.md

Tooling

zigdoc — browse std library and dependency docs:

zigdoc std.mem.Allocator   # std lib symbol
zigdoc vaxis.Window        # project dependency
zigdoc @init               # create AGENTS.md with API patterns

ziglint — static analysis with .ziglint.zon config:

ziglint                    # lint current directory
ziglint --ignore Z001      # suppress specific rule

References

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Automate terminal UI (TUI) apps with agent-tui for testing, inspection, demos, and scripted interactions. Use when automating CLI/TUI flows, regression testing terminal apps, verifying interactive behavior, or extracting structured text from terminal UIs. Also use when asked what agent-tui is, how it works, or to demo it. Do not use for web browsers, GUI apps, or non-terminal interfaces.

The English summary is being prepared. Showing the original description.

napisani/proctmux11Updated Oct 8, 2026

Use when adding, running, or debugging proctmux end-to-end integration tests, especially PTY/TUI behavior, terminal snapshots, unified/client modes, timing flakes, VT100 emulator limits, or files under tests/e2e and internal/testharness/e2e.

The English summary is being prepared. Showing the original description.

napisani/proctmux11Updated Oct 8, 2026

Use this skill whenever the user wants to create, edit, explain, validate, or troubleshoot a proctmux.yaml/procmux.yaml file, add or change proctmux processes, configure lifecycle behavior such as stop signals/on_kill/autostart, customize unified-mode layout/keybindings/style, or enable Makefile/package.json process discovery. Use it even when the user says this casually, such as "add my dev server to proctmux", "fix this proctmux config", "write a config for these services", or "what YAML option controls focus".

The English summary is being prepared. Showing the original description.

napisani/proctmux11Updated Oct 8, 2026

This skill should be used when designing terminal user interfaces, creating TUI layouts, choosing TUI color schemes, implementing keyboard navigation, building terminal dashboards, or working with any TUI framework. Activates on mentions of TUI design, terminal UI, Ratatui layout, Ink components, Textual widgets, Bubbletea views, terminal color palette, keybinding design, panel layout, split panes, terminal dashboard, box-drawing characters, sparklines, progress bars, modal dialogs, focus management, or terminal accessibility.

The English summary is being prepared. Showing the original description.

napisani/proctmux11Updated Oct 8, 2026

Harness-first workflow for evaluating and improving terminal UIs through real interaction. Use this whenever the user wants to review a TUI experience, compare before/after behavior, identify UX friction, validate navigation or filtering flows, inspect visual stability, or turn observed interaction problems into concrete follow-up tests and improvement recommendations. Prefer this skill any time a TUI should be exercised through a reproducible PTY/session harness instead of only reading code.

The English summary is being prepared. Showing the original description.

napisani/proctmux11Updated Oct 8, 2026

See all skills by napisani

Report a problem with this skill