$npx -y skills add rudedogg/zig-skills --skill zigUp-to-date Zig programming language patterns for version 0.15.x. Use when writing, reviewing, or debugging Zig code, working with build.zig and build.zig.zon files, or using comptime metaprogramming. Critical for avoiding outdated patterns from training data - especially build sy
| 1 | # Zig Language Reference (v0.15.2) |
| 2 | |
| 3 | Zig evolves rapidly. Training data contains outdated patterns that cause compilation errors. This skill documents breaking changes and correct modern patterns. |
| 4 | |
| 5 | ## Critical: Removed Features (0.15.x) |
| 6 | |
| 7 | ### `usingnamespace` - REMOVED |
| 8 | ```zig |
| 9 | // WRONG - compile error |
| 10 | pub usingnamespace @import("other.zig"); |
| 11 | |
| 12 | // CORRECT - explicit re-export |
| 13 | const other = @import("other.zig"); |
| 14 | pub const foo = other.foo; |
| 15 | ``` |
| 16 | |
| 17 | ### `async`/`await` - REMOVED |
| 18 | Keywords removed from language. Async I/O support is planned for future releases. |
| 19 | |
| 20 | ## Critical: I/O API Rewrite ("Writergate") |
| 21 | |
| 22 | The entire `std.io` API changed. New `std.Io.Writer` and `std.Io.Reader` are **non-generic** with buffer in the interface. |
| 23 | |
| 24 | ### Writing |
| 25 | ```zig |
| 26 | // WRONG - old API |
| 27 | const stdout = std.io.getStdOut().writer(); |
| 28 | try stdout.print("Hello\n", .{}); |
| 29 | |
| 30 | // CORRECT - new API: provide buffer, access .interface, flush |
| 31 | var buf: [4096]u8 = undefined; |
| 32 | var stdout_writer = std.fs.File.stdout().writer(&buf); |
| 33 | const stdout = &stdout_writer.interface; |
| 34 | try stdout.print("Hello\n", .{}); |
| 35 | try stdout.flush(); // REQUIRED! |
| 36 | ``` |
| 37 | |
| 38 | ### Reading |
| 39 | ```zig |
| 40 | // Reading from file |
| 41 | var buf: [4096]u8 = undefined; |
| 42 | var file_reader = file.reader(&buf); |
| 43 | const r = &file_reader.interface; |
| 44 | |
| 45 | // Read line by line (takeDelimiter returns null at EOF) |
| 46 | while (try r.takeDelimiter('\n')) |line| { |
| 47 | // process line (doesn't include '\n') |
| 48 | } |
| 49 | |
| 50 | // Read binary data |
| 51 | const header = try r.takeStruct(Header, .little); |
| 52 | const value = try r.takeInt(u32, .big); |
| 53 | ``` |
| 54 | |
| 55 | ### Fixed Buffer Writer (no file) |
| 56 | ```zig |
| 57 | var buf: [256]u8 = undefined; |
| 58 | var w: std.Io.Writer = .fixed(&buf); |
| 59 | try w.print("Hello {s}", .{"world"}); |
| 60 | const result = w.buffered(); // "Hello world" |
| 61 | ``` |
| 62 | |
| 63 | ### Fixed Reader (from slice) |
| 64 | ```zig |
| 65 | var r: std.Io.Reader = .fixed("hello\nworld"); |
| 66 | const line = (try r.takeDelimiter('\n')).?; // "hello" (returns null at EOF) |
| 67 | ``` |
| 68 | |
| 69 | **Deprecated:** `BufferedWriter`, `CountingWriter`, `std.io.bufferedWriter()` |
| 70 | |
| 71 | **Deprecated:** `GenericWriter`, `GenericReader`, `AnyWriter`, `AnyReader`, `FixedBufferStream` |
| 72 | |
| 73 | **New:** `std.Io.Writer`, `std.Io.Reader` - non-generic, buffer in interface |
| 74 | |
| 75 | **Replacements:** |
| 76 | - `CountingWriter` → `std.Io.Writer.Discarding` (has `.fullCount()`) |
| 77 | - `BufferedWriter` → buffer provided to `.writer(&buf)` call |
| 78 | - Allocating output → `std.Io.Writer.Allocating` |
| 79 | |
| 80 | ## Critical: Build System (0.15.x) |
| 81 | |
| 82 | `root_source_file` is REMOVED from `addExecutable`/`addLibrary`/`addTest`. Use `root_module`: |
| 83 | |
| 84 | ```zig |
| 85 | // WRONG - removed field |
| 86 | b.addExecutable(.{ |
| 87 | .name = "app", |
| 88 | .root_source_file = b.path("src/main.zig"), // ERROR |
| 89 | .target = target, |
| 90 | }); |
| 91 | |
| 92 | // CORRECT |
| 93 | b.addExecutable(.{ |
| 94 | .name = "app", |
| 95 | .root_module = b.createModule(.{ |
| 96 | .root_source_file = b.path("src/main.zig"), |
| 97 | .target = target, |
| 98 | .optimize = optimize, |
| 99 | }), |
| 100 | }); |
| 101 | ``` |
| 102 | |
| 103 | **Module imports changed:** |
| 104 | ```zig |
| 105 | // WRONG (old API) |
| 106 | exe.addModule("helper", helper_mod); |
| 107 | |
| 108 | // CORRECT |
| 109 | exe.root_module.addImport("helper", helper_mod); |
| 110 | ``` |
| 111 | |
| 112 | **Adding dependency modules:** |
| 113 | ```zig |
| 114 | const dep = b.dependency("lib", .{ .target = target, .optimize = optimize }); |
| 115 | exe.root_module.addImport("lib", dep.module("lib")); |
| 116 | ``` |
| 117 | |
| 118 | **Compile-level methods deprecated:** `exe.linkSystemLibrary()`, `exe.addCSourceFiles()`, |
| 119 | `exe.addIncludePath()`, `exe.linkLibC()` are deprecated — use `exe.root_module.*` equivalents instead. |
| 120 | |
| 121 | See **[std.Build reference](references/std-build.md)** for complete build system documentation. |
| 122 | |
| 123 | ## Critical: Container Initialization |
| 124 | |
| 125 | **Never use `.{}` for containers.** Use `.empty` or `.init`: |
| 126 | |
| 127 | ```zig |
| 128 | // WRONG - deprecated |
| 129 | var list: std.ArrayList(u32) = .{}; |
| 130 | var gpa: std.heap.DebugAllocator(.{}) = .{}; |
| 131 | |
| 132 | // CORRECT - use .empty for empty collections |
| 133 | var list: std.ArrayList(u32) = .empty; |
| 134 | var map: std.AutoHashMapUnmanaged(u32, u32) = .empty; |
| 135 | |
| 136 | // CORRECT - use .init for stateful types with internal config |
| 137 | var gpa: std.heap.DebugAllocator(.{}) = .init; |
| 138 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 139 | ``` |
| 140 | |
| 141 | ### Naming Changes |
| 142 | - **`std.ArrayListUnmanaged` → `std.ArrayList`** (Unmanaged is now default, old name deprecated) |
| 143 | - **`std.heap.GeneralPurposeAllocator` → `std.heap.DebugAllocator`** (GPA alias still works) |
| 144 | |
| 145 | **`std.BoundedArray` - REMOVED.** Use: |
| 146 | ```zig |
| 147 | var buffer: [8]i32 = undefined; |
| 148 | var stack = std.ArrayList(i32).initBuffer(&buffer); |
| 149 | ``` |
| 150 | |
| 151 | ## Critical: Format Strings (0.15.x) |
| 152 | |
| 153 | `{f}` required to call format methods: |
| 154 | ```zig |
| 155 | // WRONG - ambiguous error |
| 156 | std.debug.print("{}", .{s |