/zig-compiler
Zig compiler skill for systems programming. Use when compiling Zig programs, selecting optimization modes, using zig cc as a C compiler, reading Zig error messages, or understanding Zig's compilation model. Activates on queries about zig build-exe, zig build-lib, optimize modes,
$ npx -y skills add mohitmishra786/low-level-dev-skills --skill zig-compiler --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/zig-compiler
Context preview
The summary Claude sees to decide when to auto-load this skill.
Zig compiler skill for systems programming. Use when compiling Zig programs, selecting optimization modes, using zig cc as a C compiler, reading Zig error messages, or understanding Zig's compilation model. Activates on queries about zig build-exe, zig build-lib, optimize modes,
SKILL.md
zig-compiler.SKILL.mdname: zig-compiler
description: Zig compiler skill for systems programming. Use when compiling Zig programs, selecting optimization modes, using zig cc as a C compiler, reading Zig error messages, or understanding Zig's compilation model. Activates on queries about zig build-exe, zig build-lib, optimize modes, ReleaseSafe, ReleaseFast, ReleaseSmall, zig cc, zig ast-check, or Zig compilation errors.
Zig Compiler
Purpose
Guide agents through Zig compiler invocation: optimization modes, output types, `zig cc` as a C compiler drop-in, error message interpretation, and the Zig compilation pipeline.
Triggers
- "How do I compile a Zig program?"
- "What are Zig's optimization modes and when do I use each?"
- "How do I use zig cc to compile C code?"
- "How do I read Zig error messages?"
- "How do I compile a Zig library?"
- "What is zig ast-check?"
Workflow
1. Basic compilation
# Compile and run a single file
zig run src/main.zig
# Compile to executable
zig build-exe src/main.zig
# Compile to static library
zig build-lib src/mylib.zig
# Compile to shared library
zig build-lib src/mylib.zig -dynamic
# Compile to object file
zig build-obj src/main.zig
# Output name
zig build-exe src/main.zig -femit-bin=myapp
2. Optimization modes
| Mode | Flag | `-O` equiv | Purpose | |------|------|-----------|---------| | `Debug` (default) | `-O Debug` | `-O0 -g` | Fast compile, all safety checks, debug info | | `ReleaseSafe` | `-O ReleaseSafe` | `-O2 + checks` | Optimized with safety checks retained | | `ReleaseFast` | `-O ReleaseFast` | `-O3` | Maximum speed, safety checks removed | | `ReleaseSmall` | `-O ReleaseSmall` | `-Os` | Minimize binary size |
zig build-exe src/main.zig -O Debug # dev builds
zig build-exe src/main.zig -O ReleaseSafe # production with safety
zig build-exe src/main.zig -O ReleaseFast # max performance
zig build-exe src/main.zig -O ReleaseSmall # embedded/WASM
Safety checks in `Debug` and `ReleaseSafe`:
- Integer overflow → detected and panics with source location
- Array bounds checking → panics on OOB
- Null pointer dereference → panic (not crash)
- `unreachable` → panic
- Enum tag validation → panic on bad cast
`ReleaseFast`: turns safety checks into `undefined behaviour` (same semantics as C `-O3`). Use only when you've validated with `ReleaseSafe` first.
3. Target specification
# List all supported targets
zig targets
# Cross-compile for specific target
zig build-exe src/main.zig \
-target aarch64-linux-gnu \
-O ReleaseFast
# Embedded (no OS)
zig build-exe src/main.zig \
-target thumb-freestanding-eabi \
-O ReleaseSmall
# WebAssembly
zig build-exe src/main.zig \
-target wasm32-freestanding \
-O ReleaseSmall \
--export=main
# Common target triples: cpu-os-abi
# x86_64-linux-gnu, x86_64-windows-gnu, aarch64-macos-none
# thumbv7m-freestanding-eabi, wasm32-wasi, wasm32-freestanding4. zig cc — C compiler drop-in
Zig ships a C/C++ compiler (`zig cc` / `zig c++`) backed by Clang and musl. It is hermetic — no system libc required.
# Compile C code
zig cc -O2 -Wall main.c -o myapp
# Compile C++ code
zig c++ -std=c++17 -O2 main.cpp -o myapp
# Cross-compile C for ARM (no cross toolchain needed!)
zig cc -target aarch64-linux-gnu -O2 main.c -o myapp-arm
# Statically link with musl
zig cc -target x86_64-linux-musl main.c -o myapp-static
# Use in CMake (override compiler)
CC="zig cc" CXX="zig c++" cmake -S . -B build
cmake --build build
# Use in Makefile
CC="zig cc" make
`zig cc` advantages over gcc/clang:
- No system toolchain required (fully hermetic)
- Built-in cross-compilation for any supported target
- Always ships with a recent clang version
- musl libc bundled for static Linux builds
5. Emit formats
# Emit LLVM IR
zig build-exe src/main.zig --emit-llvm-ir
# Emit assembly
zig build-exe src/main.zig --emit-asm
cat main.s
# Emit binary and assembly
zig build-exe src/main.zig -femit-bin=myapp -femit-asm=myapp.s
6. AST check and syntax validation
# Check syntax without compiling
zig ast-check src/main.zig
# Format code
zig fmt src/main.zig
zig fmt src/ # format entire directory
# Check formatting without modifying
zig fmt --check src/
# Tokenize (debugging zig fmt)
zig tokenize src/main.zig
7. Reading Zig error messages
Zig error messages include:
- Source file and line
- Column indicator with arrow
- Note messages for context
src/main.zig:10:5: error: expected type 'u32', found 'i32'
x: i32 = 5,
^
src/main.zig:7:5: note: struct field 'x' declared here
x: u32,
^Key error patterns: | Error | Meaning | |-------|---------| | `error: expected type 'X', found 'Y'` | Type mismatch | | `error: use of undeclared identifier 'X'` | Missing import or typo | | `error: integer overflow` | Comptime overflow (caught at compile) | | `error: cannot assign to constant` | Mutating a `const` variable | | `error: unused variable 'x'` | All variables must be used | | `error: unused function parameter 'x'` | Use `_ = x;` to suppress |
Suppress "unused" errors:
_ = unused_variable; // explicitly discard
8. Version and environment
# Check Zig version
zig version
# Show build configuration
zig env
# Show standard library location
zig env | grep lib_dir
For optimization mode details and target triple reference, see [references/zig-optimize-modes.md](references/zig-optimize-modes.md).
Related skills
- Use `skills/zig/zig-build-system` for multi-file projects with build.zig
- Use `skills/zig/zig-cinterop` for calling C from Zig and vice versa
- Use `skills/zig/zig-cross` for cross-compilation targets and sysroots
- Use `skills/zig/zig-debugging` for GDB/LLDB with Zig binaries
Read more
name: zig-compiler description: Zig compiler skill for systems programming. Use when compiling Zig programs, selecting optimization modes, using zig cc as a C compiler, reading Zig error messages, or understanding Zig's compilation model. Activates on queries about zig build-exe, zig build-lib, optimize modes, ReleaseSafe, ReleaseFast, ReleaseSmall, zig cc, zig ast-check, or Zig compilation errors.
Zig Compiler
Purpose
Guide agents through Zig compiler invocation: optimization modes, output types, `zig cc` as a C compiler drop-in, error message interpretation, and the Zig compilation pipeline.
Triggers
- "How do I compile a Zig program?"
- "What are Zig's optimization modes and when do I use each?"
- "How do I use zig cc to compile C code?"
- "How do I read Zig error messages?"
- "How do I compile a Zig library?"
- "What is zig ast-check?"
Workflow
1. Basic compilation
# Compile and run a single file zig run src/main.zig # Compile to executable zig build-exe src/main.zig # Compile to static library zig build-lib src/mylib.zig # Compile to shared library zig build-lib src/mylib.zig -dynamic # Compile to object file zig build-obj src/main.zig # Output name zig build-exe src/main.zig -femit-bin=myapp
2. Optimization modes
| Mode | Flag | `-O` equiv | Purpose | |------|------|-----------|---------| | `Debug` (default) | `-O Debug` | `-O0 -g` | Fast compile, all safety checks, debug info | | `ReleaseSafe` | `-O ReleaseSafe` | `-O2 + checks` | Optimized with safety checks retained | | `ReleaseFast` | `-O ReleaseFast` | `-O3` | Maximum speed, safety checks removed | | `ReleaseSmall` | `-O ReleaseSmall` | `-Os` | Minimize binary size |
zig build-exe src/main.zig -O Debug # dev builds zig build-exe src/main.zig -O ReleaseSafe # production with safety zig build-exe src/main.zig -O ReleaseFast # max performance zig build-exe src/main.zig -O ReleaseSmall # embedded/WASM
Safety checks in `Debug` and `ReleaseSafe`:
- Integer overflow → detected and panics with source location
- Array bounds checking → panics on OOB
- Null pointer dereference → panic (not crash)
- `unreachable` → panic
- Enum tag validation → panic on bad cast
`ReleaseFast`: turns safety checks into `undefined behaviour` (same semantics as C `-O3`). Use only when you've validated with `ReleaseSafe` first.
3. Target specification
# List all supported targets
zig targets
# Cross-compile for specific target
zig build-exe src/main.zig \
-target aarch64-linux-gnu \
-O ReleaseFast
# Embedded (no OS)
zig build-exe src/main.zig \
-target thumb-freestanding-eabi \
-O ReleaseSmall
# WebAssembly
zig build-exe src/main.zig \
-target wasm32-freestanding \
-O ReleaseSmall \
--export=main
# Common target triples: cpu-os-abi
# x86_64-linux-gnu, x86_64-windows-gnu, aarch64-macos-none
# thumbv7m-freestanding-eabi, wasm32-wasi, wasm32-freestanding4. zig cc — C compiler drop-in
Zig ships a C/C++ compiler (`zig cc` / `zig c++`) backed by Clang and musl. It is hermetic — no system libc required.
# Compile C code zig cc -O2 -Wall main.c -o myapp # Compile C++ code zig c++ -std=c++17 -O2 main.cpp -o myapp # Cross-compile C for ARM (no cross toolchain needed!) zig cc -target aarch64-linux-gnu -O2 main.c -o myapp-arm # Statically link with musl zig cc -target x86_64-linux-musl main.c -o myapp-static # Use in CMake (override compiler) CC="zig cc" CXX="zig c++" cmake -S . -B build cmake --build build # Use in Makefile CC="zig cc" make
`zig cc` advantages over gcc/clang:
- No system toolchain required (fully hermetic)
- Built-in cross-compilation for any supported target
- Always ships with a recent clang version
- musl libc bundled for static Linux builds
5. Emit formats
# Emit LLVM IR zig build-exe src/main.zig --emit-llvm-ir # Emit assembly zig build-exe src/main.zig --emit-asm cat main.s # Emit binary and assembly zig build-exe src/main.zig -femit-bin=myapp -femit-asm=myapp.s
6. AST check and syntax validation
# Check syntax without compiling zig ast-check src/main.zig # Format code zig fmt src/main.zig zig fmt src/ # format entire directory # Check formatting without modifying zig fmt --check src/ # Tokenize (debugging zig fmt) zig tokenize src/main.zig
7. Reading Zig error messages
Zig error messages include:
- Source file and line
- Column indicator with arrow
- Note messages for context
src/main.zig:10:5: error: expected type 'u32', found 'i32'
x: i32 = 5,
^
src/main.zig:7:5: note: struct field 'x' declared here
x: u32,
^Key error patterns: | Error | Meaning | |-------|---------| | `error: expected type 'X', found 'Y'` | Type mismatch | | `error: use of undeclared identifier 'X'` | Missing import or typo | | `error: integer overflow` | Comptime overflow (caught at compile) | | `error: cannot assign to constant` | Mutating a `const` variable | | `error: unused variable 'x'` | All variables must be used | | `error: unused function parameter 'x'` | Use `_ = x;` to suppress |
Suppress "unused" errors:
_ = unused_variable; // explicitly discard
8. Version and environment
# Check Zig version zig version # Show build configuration zig env # Show standard library location zig env | grep lib_dir
For optimization mode details and target triple reference, see [references/zig-optimize-modes.md](references/zig-optimize-modes.md).
Related skills
- Use `skills/zig/zig-build-system` for multi-file projects with build.zig
- Use `skills/zig/zig-cinterop` for calling C from Zig and vice versa
- Use `skills/zig/zig-cross` for cross-compilation targets and sysroots
- Use `skills/zig/zig-debugging` for GDB/LLDB with Zig binaries
A curated suite of AI agent skills for systems and low-level programming — C/C++, Rust, Zig, GPU, bare-metal firmware, Linux kernel/driver development, computer architecture, compiler internals, HPC, and more.
Repo: mohitmishra786/low-level-dev-skills
Other skills on low-level-dev-skills.
- /custom-allocators
Custom allocator skill for memory allocation strategies. Use when implementing pool/slab/arena allocators, tuning jemalloc/mimalloc, writing Rust GlobalAlloc, or benchmarking allocator performance. Activates on queries about jemalloc, mimalloc, tcmalloc, arena allocator,
Open skill - /numa-programming
NUMA programming skill for multi-socket memory locality. Use when detecting NUMA topology, binding processes with numactl, using libnuma API, building NUMA-aware data structures, or measuring remote access penalties. Activates on queries about numactl, libnuma, NUMA topology,
Open skill - /af-xdp
AF_XDP skill for high-performance XDP sockets. Use when creating AF_XDP sockets, configuring UMEM and XSK rings, XDP_REDIRECT programs, copy vs zero-copy mode, or comparing with DPDK. Activates on queries about AF_XDP, xsk_umem, XDP_REDIRECT, libbpf xsk, or zero-copy XDP.
Open skill - /dpdk
DPDK skill for userspace packet I/O. Use when initializing EAL, configuring PMD drivers, using mbuf pools and rte_ring, setting up huge pages, RSS, or testpmd validation. Activates on queries about DPDK, EAL, rte_eth_rx_burst, hugepages, PMD, or testpmd.
Open skill - /io-uring
io_uring skill for Linux async I/O. Use when building high-performance servers with liburing, multi-shot operations, provided buffers, fixed files, zero-copy send, or tokio-uring. Activates on queries about io_uring, SQE/CQE, liburing, IORING_OP_PROVIDE_BUFFERS, or io_uring vs
Open skill - /adc-dac-baremetal
Bare-metal ADC and DAC skill. Use when configuring analog sampling, DMA-driven ADC, calibration, or DAC output on MCUs. Activates on queries about ADC bare-metal, sampling time, DMA ADC, or DAC channel setup.
Open skill

