Products · Product
Zig
Raised as a usability problem by 92 people on Hacker News over 11 years (2016–2026), in 63 threads.
No issue was raised by at least 3 people in 3 threads this year.
Every issue, all time, most people first
Unused variables fail compilation, forcing tedious fixesUnreviewed
20162026- Unused variable errors block prototyping; workaround suppresses all future unused-variable feedback2025-05-11
- Compile errors for unused variables break flow when commenting code out to experiment2023-03-10
- Compiler fails on unused variables with no less-strict dev mode to warn instead2021-12-20
Unreviewed issues were grouped by machine: Claude Haiku labelled each comment as a usability complaint, named what it's about and summed up the problem in a line, and a small model grouped similar problems. Nobody has checked them by hand. Expect mistakes.
The newest 50 complaints
- Could never find a public unzip inflate call despite an impressive-looking API2026-10-29
- New I/O API is too clunky and unwieldy to use2026-08-15
- Keeping all code and tests in one file makes files grow very large and feels unintuitive2026-06-22
- Runtime vector indexing is forbidden, which feels unintuitive and hurts developer ergonomics2026-04-15
- Hard to pick a diagnostic error pattern; no official best practice, so people postpone the decision2026-02-16
- Article is hard to read, with ads and links cluttering every sentence2025-12-03
- Channel-style select pattern is verbose and less ergonomic than Go's2025-12-02
- Couldn't figure out how the HTTP server is meant to be used; had to search GitHub repos2025-11-16
- Hard to tell whether code runs at compile time or runtime2025-11-11
- Errors carry no data, so developers can't tell which failure occurred while debugging2025-11-08
- Found the language very annoying to write, so switched to Odin2025-11-08
- Syntax is too complicated and hard for programmers to learn2025-11-08
- Wrong whitespace now fails compilation, breaking code that previously worked2025-11-08
- Io parameter behaves unpredictably, so code's behavior can't be reasoned about locally2025-10-30
- Standard library design is inconsistent and feels like disconnected small packages2025-10-30
- IO interface is verbose and complex, as complex as the languages it replaces2025-08-23
- Package manager docs are missing; linked Package Management section doesn't exist2025-08-23
- Commenter finds the new IO interface confusing and hard to follow, struggling to work out buffer usage2025-08-22
- Multiline string prefix is intrusive and the trailing quotes get included unnoticed2025-08-11
- Builtin @ symbols and .{} literals make code hard to read2025-08-10
- Must manually add spaces before orelse or the parser rejects code2025-08-10
- Cannot attach data to errors, forcing awkward workarounds like passing error object pointers2025-08-07
- Code using asyncConcurrent is unclear without memorizing a specific blog post2025-07-19
- AsyncConcurrent is confusing; meaning unclear without reading a blog post2025-07-18
- Found it very hard to get anything configured as a newcomer2025-07-04
- Editor loses auto-completion, go-to-definition and syntax highlighting because it can't find project files2025-07-04
- Must manually search for Windows SDK path in build.zig to add include path2025-05-21
- Unused variable errors block prototyping; workaround suppresses all future unused-variable feedback2025-05-11
- Error messages are not helpful, and the language is confusing for newcomers2025-05-11
- Pointer dereference syntax p.* is unintuitive and hard to read compared to *p2025-03-09
- Multi-line string literals look like comments, making code hard to read2025-03-04
- Having to do allocator setup and handle failures makes the language baffling to use2025-03-01
- Strings require verbose '[]const u8' syntax every time they are used2025-02-05
- Hard to tell which variant of a variable is current, risking wrong usage when editing2025-02-05
- Callbacks must use C calling conventions, losing try/errdefer and doubling cluttered code2025-02-05
- Must move mouse off text to click next button or expand TOC items2025-02-05
- Generic writer types with anytype are a messy, painful experience for developers2025-02-01
- Callers must guess which functions an anytype interface requires, with no explicit documentation2025-02-01
- Comptime parameters lack interfaces, forcing deep manual type-checking with no IDE help2025-01-07
- Variable autocomplete doesn't work and it's unclear why, so tooling status is hard to tell2024-07-30
- Can't figure out how to update previously working code using the HTTP client2024-06-07
- Progress output is too fast to read and adds noisy, cluttering movement to the terminal2024-06-03
- Constantly changing, many-line progress output makes important steps hard to spot and read2024-06-01
- Build system is so hard to learn that the commenter avoids it2024-04-21
- Reference docs lack examples, so users can't tell how to call std.fmt.parseInt2024-01-08
- Deprecated build functions fail with an unhelpful undefined function error, no deprecation message2023-09-09
- Switching Zig versions requires finding download links, unpacking, and manually setting paths2023-09-09
- Hard to scope defer/errdefer correctly; code must be twisted around block scope2023-07-19
- Editor plugins are unreliable and miss features like debugging and autocomplete2023-06-01
- Syntax is non-ergonomic: optional capture, no for loop, awkward while continuation, casting, pointer types2023-06-01