# Zig

> Zig best practices for system programming with memory safety. Trigger: When writing Zig code with memory safety.

- Skill: `odjaramillo/zig` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add odjaramillo/zig`
- Raw SKILL.md: https://api.skillmd.com/api/skills/odjaramillo/zig/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: odjaramillo (https://skillmd.com/u/odjaramillo)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/odjaramillo/zig

---


## Critical Patterns

### Error Handling (REQUIRED)

```zig
// ✅ ALWAYS: Use error unions
fn readFile(path: []const u8) ![]u8 {
    const file = try std.fs.cwd().openFile(path, .{});
    defer file.close();
    return try file.readToEndAlloc(allocator, max_size);
}

// Usage with catch
const content = readFile("config.txt") catch |err| {
    std.log.err("Failed: {}", .{err});
    return err;
};
```

### Memory Management (REQUIRED)

```zig
// ✅ ALWAYS: Use allocators explicitly
const allocator = std.heap.page_allocator;

var list = std.ArrayList(u8).init(allocator);
defer list.deinit();

try list.append(42);
```

### Comptime (REQUIRED)

```zig
// ✅ Use comptime for compile-time computation
fn Vec(comptime T: type, comptime N: usize) type {
    return struct {
        data: [N]T,

        pub fn init() @This() {
            return .{ .data = undefined };
        }
    };
}

const Vec3f = Vec(f32, 3);
```

---

## Decision Tree

```
Need error handling?       → Use error unions with try/catch
Need cleanup?              → Use defer
Need compile-time?         → Use comptime
Need optional value?       → Use ?T (optional type)
Need C interop?            → Use @cImport
```

---

## Commands

```bash
zig build                  # Build project
zig run src/main.zig       # Build and run
zig test src/main.zig      # Run tests
zig fmt src/               # Format code
```

---

## Resources

- **Best Practices**: [best-practices.md](best-practices.md)
- **Comptime**: [comptime.md](comptime.md)
- **Memory**: [memory.md](memory.md)

