zig-programming
npx skills add https://github.com/whit3rabbit/claude-zig-skill --skill zig-programming
Agent 安装分布
Skill 文档
Zig Programming Language Skill
This skill provides expertise in Zig, a general-purpose programming language focused on robustness, optimality, and maintainability. The skill includes version-specific documentation (0.2.0 through master), automatic version detection, code templates, and comprehensive reference materials organized for progressive disclosure.
Table of Contents
- Bundled Resources
- References – Progressive disclosure documentation
- Recipes – 223 tested recipes organized by topic
- Templates – Starting points for common tasks
- Examples – Practical code samples
- Scripts – Automation tools
- Workflows
- Version Awareness
- Best Practices
Bundled Resources
References – Progressive Loading Guide
Important: References are version-specific. Use scripts/get_references.py to get the correct reference path for the detected Zig version, or load from references/latest/ (symlink to current stable: 0.15.2).
Load documentation progressively based on task complexity. Use this decision tree:
New to Zig? Start with fundamentals in order:
references/latest/core-language.mdâ Basic syntax, types, operatorsreferences/latest/control-flow.mdâ If, while, for, switchreferences/latest/functions-errors.mdâ Functions and error handlingreferences/latest/quick-reference.mdâ Syntax quick lookup
Solving specific problems? Jump directly to:
- Error handling â
latest/functions-errors.md+latest/patterns-error-testing.md - Memory/allocators â
latest/memory-management.md+latest/patterns-memory-comptime.md - Data structures â
latest/arrays-slices.md,latest/structs-methods.md,latest/enums-unions.md,latest/pointers-references.md - Struct/array/enum patterns â
latest/patterns-data-structures.md - Stdlib lookup â grep
latest/stdlib-builtins.md(large file, 68KB) - C interop â
latest/c-interop.md+latest/patterns-integration.md - Build system â
latest/build-system.md+latest/patterns-integration.md
Advanced topics (after mastering fundamentals):
references/latest/comptime.md– Compile-time execution and genericsreferences/latest/patterns-memory-comptime.md– Advanced memory and comptime patternsreferences/latest/testing-quality.md– Testing framework and best practices
Version migration â references/version-differences.md (shared across versions, comprehensive migration guides)
Using version-specific references:
# Get reference path for detected version
python scripts/get_references.py
# Output: references/v0.15.2
# With specific version
python scripts/get_references.py --version 0.13.0
# Output: references/v0.15.2 (with fallback warning)
# JSON output for programmatic use
python scripts/get_references.py --json
Recipes – Cookbook
The skill includes 223 tested recipes from the Zig BBQ Cookbook, organized by topic. All recipes include complete, compilable code verified against Zig 0.15.2.
Finding recipes by topic:
recipes/fundamentals.md– Philosophy, basics (19 recipes)recipes/data-structures.md– Arrays, hashmaps, sets (20 recipes)recipes/strings-text.md– String processing (14 recipes)recipes/memory-allocators.md– Allocator patterns (6 recipes)recipes/comptime-metaprogramming.md– Compile-time (24 recipes)recipes/structs-objects.md– Structs, unions (22 recipes)recipes/functions.md– Function patterns (11 recipes)recipes/files-io.md– File operations (19 recipes)recipes/networking.md– HTTP, sockets (18 recipes)recipes/concurrency.md– Threading, atomics (8 recipes)recipes/build-system.md– Build.zig, modules (18 recipes)recipes/testing-debugging.md– Testing (14 recipes)recipes/c-interop.md– C FFI (7 recipes)recipes/data-encoding.md– JSON, CSV, XML (9 recipes)recipes/iterators.md– Iterator patterns (8 recipes)recipes/webassembly.md– WASM targets (6 recipes)
Querying recipes programmatically:
# List all topics with counts
python scripts/query_recipes.py --list-topics
# Find recipes by topic
python scripts/query_recipes.py --topic memory-allocators
# Find recipes by tag
python scripts/query_recipes.py --tag hashmap
# Search by keyword
python scripts/query_recipes.py --search "error handling"
# Get specific recipe details
python scripts/query_recipes.py --recipe 1.1
# Filter by difficulty
python scripts/query_recipes.py --difficulty beginner
# JSON output for programmatic use
python scripts/query_recipes.py --topic data-structures --json
Recipe format: Each recipe includes Problem, Solution, Discussion sections plus full tested code.
When to use recipes vs references:
- Recipes: “How do I…” questions, practical tasks, working code examples
- References: “What is…” questions, API lookup, comprehensive documentation
Templates
Copy and customize these starting points:
assets/templates/basic-program.zig– Basic program with allocatorassets/templates/build.zig– Build configurationassets/templates/test.zig– Test file structureassets/templates/cli-application.zig– CLI app with arg parsingassets/templates/library-module.zig– Library/module structureassets/templates/c-interop-module.zig– C interop module
Examples
Complete, runnable code demonstrating patterns:
examples/string_manipulation.zig– String processingexamples/memory_management.zig– Allocator patternsexamples/error_handling.zig– Error handlingexamples/c_interop.zig– C FFIexamples/comptime_example.zig– Compile-time programmingexamples/build_example/– Multi-file project
Scripts
Use these Python automation tools for version management, recipe queries, and code generation:
Version Detection & Reference Loading:
scripts/get_references.py– Detect user’s Zig version and return correct reference path (use this first)scripts/detect_version.py– Standalone version detection with confidence levels
Recipe Queries:
scripts/query_recipes.py– Search and filter recipes by topic, tag, difficulty, or keyword
Code Generation:
scripts/code_generator.py– Generate Zig code from JSON specifications
When to execute vs reference:
- Execute
get_references.pyat the start of any Zig task to determine the correct reference path - Execute
query_recipes.pywhen searching for practical code examples or solutions - Reference other scripts only when the user explicitly requests code generation or version management tasks
- Most scripts are for skill maintenance, not routine usage
See scripts/README.md for complete script documentation.
Workflows
Writing New Code
- Start from template – Copy appropriate template from
assets/templates/ - Check version – Default to Zig 0.15.2 unless specified
- Handle errors explicitly – Use
try,catch, orerrdefer - Pass allocators – Never use global state, pass allocators as parameters
- Add tests immediately – Write
testblocks alongside implementation - Document public APIs – Use
///doc comments for exported functions
Debugging Compilation Errors
Zig-specific gotchas:
- Comptime type resolution â Use
@TypeOf()inspection or add explicit casts - Allocator lifetime issues â Verify
defercleanup order anderrdeferon error paths - Optional unwrapping â Use
.?only when certain; preferorelseorifunwrap for safety
Debug tools: std.debug.print() for inspection, -Doptimize=Debug for stack traces, zig test to isolate issues
Explaining Concepts
To teach Zig concepts effectively:
- Load relevant reference – Start with the appropriate reference file for the topic
- Show runnable code – Use complete examples from
examples/directory - Highlight uniqueness – Emphasize Zig’s distinguishing features (explicit allocators, comptime, no hidden control flow)
- Reference stdlib – Point to specific standard library functions when applicable
Version Awareness
Default to Zig 0.15.2 unless user specifies otherwise or detection determines a different version.
Version Detection Workflow
At the start of any Zig task, determine the user’s version using this workflow:
1. Check for explicit specification:
- User stated version in current conversation (“I’m using Zig 0.13”)
- CLAUDE.md project file contains Zig version specification
build.zig.zonhasminimum_zig_versionfield
2. Automated detection (recommended):
# Run get_references.py to detect version and get correct reference path
python scripts/get_references.py --json
This script:
- Runs
scripts/detect_version.pyto analyze the project - Attempts
zig versioncommand (most reliable) - Scans
build.zigand.zigfiles for version markers - Returns reference path and version info with confidence level
- Handles fallbacks automatically (e.g., 0.14.1 â use 0.15.2 refs)
3. Manual detection (if automated fails):
- Scan
build.zigfor API patterns:b.path(...)â 0.11+std.Buildâ 0.11+b.addExecutable(.{...})â 0.11+b.addExecutable("name", "file")â pre-0.11
- Check
.zigfiles for syntax markers:for (items, 0..) |item, i|â 0.13+async/awaitkeywords â 0.9-0.10 (removed in 0.11)
- Load
references/version-differences.mdfor full detection markers
4. Ask user if ambiguous:
- “I detected you might be using Zig 0.13+ based on your build.zig. Can you confirm your version?”
- Offer common versions: 0.15.2 (stable), 0.14.1, 0.13.0, master (development)
5. Default to 0.15.2:
- Use current stable if no detection succeeds
- Inform user: “Assuming Zig 0.15.2. Let me know if you’re using a different version.”
Loading Version-Specific References
After detecting version:
- Use
scripts/get_references.pyto determine correct reference path - Load references from that version directory (e.g.,
references/v0.15.2/) - Always load
references/version-differences.md(shared file) for migration guidance
Example workflow:
# Detect version and get reference path
REF_PATH=$(python scripts/get_references.py)
# REF_PATH is now "references/v0.15.2" or "references/latest"
# Load version-specific documentation
cat $REF_PATH/core-language.md
cat $REF_PATH/build-system.md
# Version differences is shared across all versions
cat references/version-differences.md
Handling fallbacks:
- If exact version not available (e.g., 0.14.1), script returns closest match (0.15.2) with warning
- Warnings indicate major differences (e.g., “for loop syntax differs from 0.13+”)
- Always check fallback warnings to understand version compatibility
Critical Breaking Changes
Be aware of these major version differences when writing code:
- 0.11+: Async/await removed, new build.zig API (
std.Build,b.path()) - 0.13+: Modern for loop syntax (
for (items, 0..) |item, i|) - 0.12-: Different for loop syntax (manual index variables)
- Pre-0.11: Legacy build API (
std.build.Builder), different error sets
See references/version-differences.md for:
- Detailed migration guides (0.10â0.11, 0.12â0.13, 0.13â0.15)
- Error message translations
- Before/after code examples
- Breaking changes catalog
Handling Different Versions
When user specifies or detection determines a different version:
- Run
scripts/get_references.py --version <VERSION>to get correct reference path - Load
references/version-differences.mdfor migration details - Use version-specific references from the returned path
- Adapt code patterns to the user’s version
- Flag deprecated features if using older version
- Recommend modern alternatives when possible
Best practice for cross-version code:
- Prefer feature detection over version checks:
@hasDecl(std, "Build")instead ofif (version >= 0.11) - See
references/latest/patterns-integration.mdfor@hasDecl/@hasFieldexamples - Document target version in code comments:
// Target Zig Version: 0.15.2 - For cross-version templates, see
assets/templates/cross-version/
Best Practices
Core Zig idioms:
- Explicit error handling – Use
try,catch, or error unions; never ignore errors - Defer cleanup – Use
deferfor cleanup,errdeferfor error-path cleanup - Pass allocators – Never use global state; pass allocators explicitly as parameters
- Leverage comptime – Use compile-time execution for generic programming
- Write tests inline – Use
test "description" {}blocks alongside implementation - Document public APIs – Add
///doc comments for exported functions - Handle optionals explicitly – Use
orelse,.?, orifunwrapping - No hidden control flow – Zig has no hidden allocations, exceptions, or async