Open
Conversation
ea1e9ca to
3cb08c1
Compare
7355145 to
825a3a5
Compare
Sobeston
requested changes
Feb 11, 2026
dnut
commented
Feb 11, 2026
587f8eb to
46a19fa
Compare
b6b5603 to
d619fa3
Compare
- use std.SemanticVersion.parse(@import("build.zig.zon").version) instead of hardcoded version - update format specifiers from {} to {f} for SemanticVersion
zig 0.15 changed sanitize_c from bool to enum: false -> .off
- add explicit target/optimize to gh_table - add imports to vm_exe root_module - rewrite generateTable() to use addWriteFiles() + addCopyFile() - update send-file executable to use root_module wrapper
- bump minimum_zig_version to 0.15.2 - update dependency URLs and hashes for: httpz, zstd, rocksdb, lsquic, xev, prettytable, base58, poseidon, tracy, protobuf
- add use_llvm = true for solfuzz_sig_lib (self-hosted backend workaround) - update pb.RunProtocStep.create() signature (remove first arg)
Vendor implementations from Zig 0.14 standard library that were removed in 0.15: - BoundedArray (removed, use ArrayListUnmanaged with capacity) - LinearFifo (removed entirely) - countingWriter (removed) - limitedReader (removed) - deprecatedReader (for GenericReader compatibility) Wire std14 module into build.zig and migrate all usages across the codebase.
- @aligncast must now come before @ptrCast (order swap) - Pointer size enum: .One -> .one (lowercase) - alignment is now enum instead of comptime_int
Type alias update - functionality unchanged.
These APIs have been replaced, with the old structs being relegated to std.io.GenericReader/GenericWriter. - use new Reader/Writer where simple to integrate - use adapters like deprecatedReader where it is not straightforward to migrate - std.json.stringify -> std.json.fmt for format string usage - std streams now accessed through std.fs.File instead of std.io
The list no longer wraps data in nodes automatically. Instead, embed a DoublyLinkedList.Node field in your struct and use @fieldParentPtr to recover the containing struct. This affects LRU cache implementation.
- {} no longer auto-formats; must use {any}, {s}, {d}, {f}, etc.
- Durations: std.fmt.fmtDuration() removed, use {D} specifier
- Custom format functions: format(self, comptime fmt, options, writer)
signature changed to format(self, writer)
- SPIR-V backend enum rename, used for eql_bytes optimization
- Snapshot archive name formatting: use std.fmt.format() directly since
the old fmt spec approach is no longer compatible
Major breaking changes in 0.15: - Server: new request/response lifecycle with explicit send() calls - Client: Request struct changes, header iteration API different - Connection handling and keep-alive semantics changed - Response body reading uses different buffer patterns
The self-hosted x86_64 backend doesn't support .always_tail in Debug builds. Use conditional call modifier based on build mode.
ManagedString type replaced with []const u8 throughout generated code. Bindings regenerated with zig-protobuf for Zig 0.15.
- base58.decodeBounded/encodeArray -> decode/encode - leb128.writeULEB128 -> writeUleb128 (case change)
std.tar.iterator() now validates checksums and fails on our snapshots. Use manual header parsing via TarHeaderMinimal to skip checksum validation.
Clobber list in inline assembly now uses .{} tuple syntax instead of
string literal.
std.EnumMap doesn't work with comptime-only types due to non-zero runtime alignment requirements. Use inline switch over enum values at comptime for getBenchmarks dispatch instead.
- std.fmt.allocPrintZ signature changed - RocksDB liveFiles() returns different iterator type
Cleanup unused empty file.
i updated build.zig to fix a rocksdb issue but the cache still includes the old broken rocksdb. the cache needs to be cleared on build.zig changes so it can rebuild dependencies with the configured options
this test was deadlocking on the macos runner in CI: "loadPrograms: load v3 program" because it creates a program map, loads it (which acquires and releases the lock), then returns the map (which relocates the RwLock to a different memory locations), and uses the lock again. this has UB in pthread's rwlock because pthread expects the rwlock to be pinned to a specific memory location. to avoid UB we should use DefaultRwLock. pthread's RwLock relies on too many assumptions that sig does not guarantee to uphold.
d619fa3 to
6a79c2f
Compare
yewman
approved these changes
Feb 13, 2026
Sobeston
approved these changes
Feb 13, 2026
dnut
commented
Feb 14, 2026
Contributor
Author
dnut
left a comment
There was a problem hiding this comment.
don't merge this until you verify it works with manual testing. i did some preliminary testing and had an issue connecting to gossip
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This upgrades Sig from Zig 0.14 to 0.15. Each commit targets a specific API change and can be reviewed independently. See the commit messages for details.
Diff Size
It looks like I added a lot of code here. 2900 of the added lines are due to regenerating the protobuf definitions.
usingnamespaceno longer exists in 0.15, which means the protobuf types need to be represented a lot more verbosely. This is 100% codegen and doesn't need a review, unless you'd like to validate that the protobuf codegen produces the exact file I've included.Compatibility & Best Practices
This PR does not aim to upgrade every single piece of code to use the greatest features and the best practices of 0.15. There are some lingering items from 0.14 like bounded arrays, managed lists, and deprecated readers and writers. Migrating away from these things is not in scope for this PR. After this PR is merged, we can upgrade these things if desired. The idea here is to enable usage of 0.15 without making anything worse, to facilitate incremental improvement.