Upgrade from Zig 0.15 to 0.16.0
Summary
The project is currently using Zig 0.15.1 (minimum version in build.zig.zon). Zig 0.16.0 has been released with several breaking changes that require migration.
Breaking Changes Requiring Migration
1. Environment Variables in Main Function Only (CRITICAL)
Status: ⚠️ Requires code restructuring
What changed:
- Environment variables are now only available in the application's
main function
std.process.getEnvVarOwned() is now only usable within main()
- Error
EnvironmentVariableNotFound renamed to EnvironmentVariableMissing
Current usage:
src/help.zig:7,8,11 - Uses std.process.getEnvVarOwned() for TEMP/TMP/TMPDIR
src/main.zig:114 - Uses std.process.getEnvVarOwned() for GRAB_PATH
Action required:
- Move
getTempDir() function into main() or wrap it to accept environment as parameter
- Pass environment variables to functions that need them, instead of accessing globally
- Update error handling from
error.EnvironmentVariableNotFound to error.EnvironmentVariableMissing
2. @type Builtin Removal (LOW PRIORITY)
Status: Requires code change
What changed:
@Type builtin removed, replaced with individual type-creating functions
@Type(.enum_literal) → @EnumLiteral()
Action required:
- Replace
@Type(.enum_literal) with @EnumLiteral() in src/main.zig:17
3. @cImport Deprecation (MEDIUM PRIORITY)
Status: Needs investigation
What changed:
@cImport is now deprecated and will be removed
- C translation must now be handled via the Build System using
addTranslateC()
Action required:
- Review current C usage (using
std.posix.* currently)
- If
@cImport is used elsewhere, migrate to build system translate-c
4. OS Version Requirements (INFORMATIONAL)
Status: ℹ️ Check compatibility
Zig 0.16.0 has minimum OS version requirements:
- Linux: 5.10+
- macOS: 13.0+
- Windows: 10+
- FreeBSD: 14.0+
- NetBSD: 10.1+
- OpenBSD: 7.8+
Action required:
- Update documentation if needed
- Consider minimum system requirements for users
5. Standard Library Changes (INFORMATIONAL)
Status: ℹ️ Review if using affected features
Removals:
heap.ThreadSafeAllocator removed
posix and os.windows removals in stdlib
fs.getAppDataDir() removed
GenericReader, AnyReader, FixedBufferStream removed
Thread.Pool removed
builtin.subsystem removed
Additions:
- I/O as an Interface (
Future, Group, Cancelation, Batch)
- Deflate compression support
- PriorityDequeue, PriorityQueue
- New crypto algorithms (AES-SIV, AES-GCM-SIV, Ascon-AEAD)
6. Build System Enhancements (OPTIONAL)
Status: ℹ️ Consider using new features
New features available:
- Ability to override packages locally
- Fetch packages into project-local directory
- Unit test timeouts (
unit test_timeout)
--error-style and --multiline-errors flags
- Temporary Files API
7. Compiler Changes (INFORMATIONAL)
Status: ℹ️ No code changes expected
- LLVM backend upgraded to LLVM 21
- Incremental compilation support
- Improved C translation
- Reworked byval syntax lowering
Migration Checklist
Files to Modify
src/main.zig:17 - Replace @Type(.enum_literal) with @EnumLiteral()
src/main.zig:114 - Restructure to use environment variables only in main()
src/help.zig:7,8,11 - Move getTempDir() into main() or accept environ parameter
build.zig.zon - Update minimum_zig_version from "0.15.1" to "0.16.0"
Resources
Upgrade from Zig 0.15 to 0.16.0
Summary
The project is currently using Zig 0.15.1 (minimum version in
build.zig.zon). Zig 0.16.0 has been released with several breaking changes that require migration.Breaking Changes Requiring Migration
1. Environment Variables in Main Function Only (CRITICAL)
Status:⚠️ Requires code restructuring
What changed:
mainfunctionstd.process.getEnvVarOwned()is now only usable withinmain()EnvironmentVariableNotFoundrenamed toEnvironmentVariableMissingCurrent usage:
src/help.zig:7,8,11- Usesstd.process.getEnvVarOwned()for TEMP/TMP/TMPDIRsrc/main.zig:114- Usesstd.process.getEnvVarOwned()for GRAB_PATHAction required:
getTempDir()function intomain()or wrap it to accept environment as parametererror.EnvironmentVariableNotFoundtoerror.EnvironmentVariableMissing2. @type Builtin Removal (LOW PRIORITY)
Status: Requires code change
What changed:
@Typebuiltin removed, replaced with individual type-creating functions@Type(.enum_literal)→@EnumLiteral()Action required:
@Type(.enum_literal)with@EnumLiteral()insrc/main.zig:173. @cImport Deprecation (MEDIUM PRIORITY)
Status: Needs investigation
What changed:
@cImportis now deprecated and will be removedaddTranslateC()Action required:
std.posix.*currently)@cImportis used elsewhere, migrate to build system translate-c4. OS Version Requirements (INFORMATIONAL)
Status: ℹ️ Check compatibility
Zig 0.16.0 has minimum OS version requirements:
Action required:
5. Standard Library Changes (INFORMATIONAL)
Status: ℹ️ Review if using affected features
Removals:
heap.ThreadSafeAllocatorremovedposixandos.windowsremovals in stdlibfs.getAppDataDir()removedGenericReader,AnyReader,FixedBufferStreamremovedThread.Poolremovedbuiltin.subsystemremovedAdditions:
Future,Group,Cancelation,Batch)6. Build System Enhancements (OPTIONAL)
Status: ℹ️ Consider using new features
New features available:
unit test_timeout)--error-styleand--multiline-errorsflags7. Compiler Changes (INFORMATIONAL)
Status: ℹ️ No code changes expected
Migration Checklist
main()getTempDir()fromhelp.zigintomain()or accept environ parameterGRAB_PATHenvironment tomain()instead of usinggetEnvVarOwned()error.EnvironmentVariableNotFoundtoerror.EnvironmentVariableMissing@Type(.enum_literal)with@EnumLiteral()insrc/main.zig:17@cImportusage and migrate if neededbuild.zig.zonminimum_zig_version to "0.16.0"Files to Modify
src/main.zig:17- Replace@Type(.enum_literal)with@EnumLiteral()src/main.zig:114- Restructure to use environment variables only in main()src/help.zig:7,8,11- MovegetTempDir()intomain()or accept environ parameterbuild.zig.zon- Updateminimum_zig_versionfrom "0.15.1" to "0.16.0"Resources