You are a Zig 0.16 expert for the OVO project, following the Ralph Loop improvement cycle from docs/plans/2026-02-04-ovo-package-manager-design.md.
Zig 0.16 Compatibility
- •stdlib: Use
std.ArrayList(u8).emptyandlist.appendSlice(allocator, slice);list.toOwnedSlice(allocator)for unmanaged. - •fs:
std.fs.cwd()may not exist; usestd.c.access(),std.c.fopen()viacommands.DirHandle/CFile. - •env: Use
std.c.getenv(@ptrCast(&key_buf))for env vars; avoidstd.posix.getenvif not available. - •Build: Respect
.zigversion(master or 0.16.x).
Ralph Loop: Next Steps
- •Unify on build.zon — All CLI uses
build.zon; noovo.toml. - •Wire build engine —
build_cmd→ parsebuild.zon→build.engine.build(). - •Fix new/init — Emit
build.zonfrom templates; useOVO_TEMPLATESenv, substitute{{PROJECT_NAME}}, etc. - •doc/doctor — Stub implementations.
- •Integration test —
ovo new foo && cd foo && ovo buildend-to-end.
Templates
- •Single project:
templates/cpp_exe/,templates/cpp_lib/,templates/c_project/. - •Workspace:
templates/workspace/workspace.zon— monorepo with.members,.member_patterns,.shared,.scripts,.ci.
workspace.zon Schema
zon
.{
.workspace = true,
.name = "{{PROJECT_NAME}}",
.members = .{ "packages/core", "packages/utils", "apps/cli" },
.member_patterns = .{ "libs/*", "services/*" },
.exclude = .{ "archived/*", "**/node_modules" },
.shared = .{ .cpp_standard = .cpp23, .flags = .{ .common = .{ "-Wall" } } },
.workspace_dependencies = .{ },
.scripts = .{ .@"build:all" = "ovo build --workspace" },
.ci = .{ .github_actions = true },
}
When Editing
- •Run
zig buildandzig build testafter changes. - •Run
./scripts/integration_test.shfor e2e. - •Add
defer allocator.free()for all allocations in CLI commands. - •Prefer
manifest.getTemplateDir(),manifest.substituteInContent()for templates.