frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Steam Deck lead reveals Valve is funding ARM compatibility of Windows games

https://frvr.com/blog/news/steam-deck-lead-reveals-valve-is-funding-arm-compatibility-of-windows-...
211•OsrsNeedsf2P•1h ago•102 comments

Reverse engineering a $1B Legal AI tool exposed 100k+ confidential files

https://alexschapiro.com/security/vulnerability/2025/12/02/filevine-api-100k
124•bearsyankees•1h ago•27 comments

1D Conway's Life glider found, 3.7B cells long

https://conwaylife.com/forums/viewtopic.php?&p=222136#p222136
114•nooks•1h ago•25 comments

MinIO is now in maintenance-mode

https://github.com/minio/minio/commit/27742d469462e1561c776f88ca7a1f26816d69e2
221•hajtom•2h ago•132 comments

Launch HN: Phind 3 (YC S22) – Every answer is a mini-app

27•rushingcreek•1h ago•15 comments

Stop Talking

https://gurkan.in/2025/12/stop-talking/
26•npstr•39m ago•16 comments

RCE Vulnerability in React and Next.js

https://github.com/vercel/next.js/security/advisories/GHSA-9qr9-h5gf-34mp
139•rayhaanj•2h ago•34 comments

How to Synthesize a House Loop

https://loopmaster.xyz/tutorials/how-to-synthesize-a-house-loop
88•stagas•5d ago•25 comments

You Can't Fool the Optimizer

https://xania.org/202512/03-more-adding-integers
183•HeliumHydride•6h ago•107 comments

Rocketable (YC W25) is hiring a founding engineer to automate software companies

https://www.ycombinator.com/companies/rocketable/jobs/CArgzmX-founding-engineer-automation-platform
1•alanwells•1h ago

Congressional lawmakers 47% pts better at picking stocks

https://www.nber.org/papers/w34524
673•mhb•4h ago•404 comments

Prompt Injection via Poetry

https://www.wired.com/story/poems-can-trick-ai-into-helping-you-make-a-nuclear-weapon/
13•bumbailiff•48m ago•3 comments

GSWT: Gaussian Splatting Wang Tiles

https://yunfan.zone/gswt_webpage/
53•klaussilveira•4h ago•13 comments

Show HN: Fresh – A new terminal editor built in Rust

https://sinelaw.github.io/fresh/
17•_sinelaw_•4h ago•11 comments

A Look at Rust from 2012

https://purplesyringa.moe/blog/a-look-at-rust-from-2012/
121•todsacerdoti•1w ago•35 comments

Shrinking While Linking

https://www.tweag.io/blog/2025-11-27-shrinking-static-libs/
11•ingve•3d ago•2 comments

Are we repeating the telecoms crash with AI datacenters?

https://martinalderson.com/posts/are-we-really-repeating-the-telecoms-crash-with-ai-datacenters/
95•davedx•7h ago•47 comments

Zig quits GitHub, says Microsoft's AI obsession has ruined the service

https://www.theregister.com/2025/12/02/zig_quits_github_microsoft_ai_obsession/
809•Brajeshwar•10h ago•451 comments

Interview with RollerCoaster Tycoon's Creator, Chris Sawyer (2024)

https://medium.com/atari-club/interview-with-rollercoaster-tycoons-creator-chris-sawyer-684a0efb0f13
241•areoform•14h ago•42 comments

Boston's subway system replacing 1890s-era wooden catenary system

https://www.mbta.com/news/2025-11-18/mbta-announces-december-service-changes
3•ilamont•2d ago•0 comments

Helldivers 2 devs slash install size from 154GB to 23GB

https://www.tomshardware.com/video-games/pc-gaming/helldivers-2-install-size-slashed-from-154gb-t...
286•doener•5h ago•205 comments

Super fast aggregations in PostgreSQL 19

https://www.cybertec-postgresql.com/en/super-fast-aggregations-in-postgresql-19/
196•jnord•1w ago•20 comments

Why are my headphones buzzing whenever I run my game?

https://alexene.dev/2025/12/03/Why-do-my-headphones-buzz-when-i-run-my-game.html
74•pacificat0r•3h ago•71 comments

Anthropic reportedly preparing for $300B IPO

https://vechron.com/2025/12/anthropic-hires-wilson-sonsini-ipo-2026-openai-race/
169•GeorgeWoff25•8h ago•128 comments

Anthropic acquires Bun

https://bun.com/blog/bun-joins-anthropic
2085•ryanvogel•1d ago•998 comments

The Writing Is on the Wall for Handwriting Recognition

https://newsletter.dancohen.org/archive/the-writing-is-on-the-wall-for-handwriting-recognition/
156•speckx•1w ago•88 comments

VA staff flag dangerous errors in Oracle-built electronic health record

https://www.washingtonpost.com/investigations/2025/12/03/veterans-administration-va-hospitals-hea...
65•ksenzee•3h ago•12 comments

universal-tbxi-patchset: Mac OS New World ROM patchset to boot System 7.5

https://github.com/Wack0/universal-tbxi-patchset
29•classichasclass•4d ago•2 comments

Paged Out

https://pagedout.institute
543•varjag•22h ago•57 comments

Researchers Find Microbe Capable of Producing Oxygen from Martian Soil

https://scienceclock.com/microbe-that-could-turn-martian-dust-into-oxygen/
87•ashishgupta2209•12h ago•33 comments
Open in hackernews

Show HN: Zli – A Batteries-Included CLI Framework for Zig

https://github.com/xcaeser/zli
95•caeser•6mo ago
I built zli, a batteries-included CLI framework for Zig with a focus on DX and composability.

Key features:

- Typed flags with default values and help output - Rich formatting, and layout support - Command trees with isolated execution logic - It’s designed to feel good to use, not just to work. - Built for real-world CLI apps, not toy examples.

Would love feedback, feature ideas, or thoughts from other Zig devs.

repo here: https://github.com/xcaeser/zli

Comments

quotemstr•6mo ago
No terminfo support? I'm probably tilting at windmills here, but I wish people wouldn't hardcode terminal escape codes. Considering zig's good interop with C, wiring up a call to tigetstr().

It's also important not to emit escape codes at all when TERM=dumb. (You'll get this behavior automatically if you implement color support by asking terminfo to the escape codes.)

    const c = @cImport({
        @cInclude("ncurses.h");
        @cInclude("term.h");
    });

    pub fn main() !void {
        // Initialize terminfo
        _ = c.setupterm(null, 1, null);

        // Get capability strings
        const setaf = c.tigetstr("setaf");  // set foreground
        const setab = c.tigetstr("setab");  // set background
        const sgr0 = c.tigetstr("sgr0");    // reset

        // Parameterize for red foreground
        const red = c.tparm(setaf, c.COLOR_RED, 0, 0, 0, 0, 0, 0, 0, 0);

        // Use it
        _ = c.printf("%sThis is red%s\n", red, sgr0);
    }
caeser•6mo ago
open a pull request or at least an issue,

im always open to improvement, but i wanna keep it 100% zig.

quotemstr•6mo ago
You're using libc already. There is no such thing as a pure zig program. Please, be a good citizen of the ecosystem.

If I were trying a program and saw that it disrespected me by ignoring a clear preference in my environment not to use colors, I wouldn't use that program again.

AndyKelley•6mo ago
This is factually incorrect. While some operating systems use libc as the syscall ABI, this is not the case for Windows or Linux. On those systems, by default, Zig programs do not link libc; they make DLL calls or syscalls directly.

The project in question, however, does seem to link libc in the build script for no reason, as well as create a static library for no reason (it doesn't export any functions). As Loris pointed out to me today, this is likely caused by the `zig init` template highlighting static linking rather than modules, which is unfortunate since modules are the preferred way for Zig code to import other Zig code. We'll be adjusting that accordingly.

quotemstr•6mo ago
> On those systems, by default, Zig programs do not link libc; they make DLL calls or syscalls directly.

Well, that makes me think a lot less of Zig. Bypassing libc makes programs less cooperative members of the broader ecosystem. There's value in libc being able to act as a userspace intermediary between programs and the kernel. (That's why Windows doesn't provide a way to make direct system calls: you're going to go through kernel32/user32/etc. -> ntdll.dll and _then_ the kernel.)

Go bypassing libc causes all sorts of annoying havoc, e.g. fakeroot stuff not working. This is not behavior to be encouraged.

And for what benefit? Being able to say you're libc-free, as if that were a feature not a bug? You don't even have split stacks. Is it just that libc has "c" in the name and you want to make sure nobody thinks you're C? libc being called lib-c is an historical artifact. It's not even about C itself. It's more like Windows ntdll.

Bypassing libc is fundamentally selfish behavior. It breaks a longstanding ecosystem coordination mechanism for zero actual benefit.

But hey, I can still use "zig cc" as a convenient cross-compiler when I'm writing in a better-behaved language -- so thanks, I guess.

Graziano_M•6mo ago
On windows you make system calls through the DLLs because the system calls can change on you. On linux you're pretty much guaranteed that the API to the kernel will not change. It will get extended, but the semantics of old calls will not change).
quotemstr•6mo ago
So? That you can do something doesn't mean you should. Bypassing libc breaks workflows. Zig and Go aren't worse off on non-Linux platforms because those platforms enforce talking to the kernel through a library. Nobody, in either the Zig or the Go worlds, has justified bypassing libc in terms of concrete and specific user benefit.
Cloudef•6mo ago
libc's been poisoning software long enough. Glad it's optional in Zig on platforms that provide stable system ABI.
quotemstr•6mo ago
"[P]oisoning"? Do you have a technical objection, or do you just not like the letter "c"?
throwA29B•6mo ago
libc, starting with errno, continuing with fopen/printf/str* functions, locales, etc is a pile of quick hacks; set of useful abstractions at the time, no doubt! But that time is long gone, for decade(s) it is nothing but a drag.
Cloudef•6mo ago
libc carries lots of global state and implicit ABI that complicates software stacks. While I don't like dynamic libraries in general, dynamic libraries wouldn't be such a mess as they are if libc did not exist. I dream of day we can actually do GPU rendering on linux without libc, and have actual static binaries for graphical apps that work everywhere.
quotemstr•6mo ago
That global state is the coordination problem it's solving. Who owns the thread list? The current process wide setreuid identity? The loaded library list? Debug info registrations? Shared dynamic memory allocations? TLS slots? Someone has to, and that someone is libc. Avoiding it because it has state is to be confused about the whole concept of an OS.

Yeah, it's mixed up with the same library that provides sscanf and strcat. So what? You don't have to call them.

alexrp•6mo ago
If you need libc, just link libc? It's bizarre to me that you think less of Zig for giving you the choice.
caeser•6mo ago
i do link libc because i just copied build.zig from another project i made zig-dotenv and forgot to remove the line

seems like i created a bit of a fuss there, my bad

AndyKelley•6mo ago
You don't have anything to apologize for, you just are partway through your journey of learning about static libraries, dynamic libraries, and compilation units :-)
arp242•6mo ago
> I wish people wouldn't hardcode terminal escape codes.

A bunch of commonly used escape codes are pretty much universally identical. I wrote about this before: https://www.arp242.net/safeterm.html

By and large I think terminfo/$TERM is outdated, or at least partly. It's a 1970s/80s thing when terminals all did radically different things. But that hasn't been the case for decades now. You still need it for some things (kind of), but basic support like colours? Not so much.

quotemstr•6mo ago
Except all those times you don't want color at all.

> By and large I think terminfo/$TERM is outdated, or at least partly.

It's not outdated. It's a Chesterton's fence. Disregard for interoperability and feature discovery is why the terminal ecosystem has such immense difficulty getting traction on advanced features.

arp242•6mo ago
NO_COLOR exists, and is fairly widely supported. TERM=dumb to disable colour was always a hack at best because this also disables other things like "clear line" and generally leads to weird output.

> It's a Chesterton's fence.

It's not. The world has changed. Everyone uses \x1b[1m to make text bold today but in the past there were a few dozen ways from different vendors of (hardware) terminals to make text bold. But this situation no longer exists. Like I already said: you still need it for some things – there's a reason I compiled a "safe terminal escape code" list. But for many things you don't.

quotemstr•6mo ago
NO_COLOR is far from universally supported (even people who bother to check TERM don't know about it) and typically isn't configured to pass through sudo or ssh.
arp242•6mo ago
> NO_COLOR is far from universally supported

I never claimed that. The sudo or ssh configuration is up to you. Or else there's |cat, which often works when NO_COLOR doesn't.

Either way, terminfo was never intended to allow users to disable colours. Certainly not via TERM=dumb – that was always a hack. If you want to disable colours then there are better ways.

bsder•6mo ago
> I'm probably tilting at windmills here, but I wish people wouldn't hardcode terminal escape codes.

Please, no. There is no reason for this to be querying a hack from 1978 in 2025 when there are effectively two output terminal protocols--Windows and ANSI. And there is only a single terminal input protocol (kitty) that isn't brain damaged and allows you to do something super complex like "detect when Shift Key is pressed and released".

Ghostty actually does something like you ask, and I really wish it wouldn't. It's a pain in the ass with virtualization. I have Ghostty on my host, but I have to install Ghostty in all my guest instances to pick up some stupid termcap/terminfo entry, or I get garbage all over my terminal.

codethief•6mo ago
> I have to install Ghostty in all my guest instances to pick up some stupid termcap/terminfo entry, or I get garbage all over my terminal.

That's a bummer to hear, I've been wanting to use Ghostty for a while but that'd be a showstopper for me. Is there a GitHub issue tracking this?

bsder•6mo ago
> That's a bummer to hear, I've been wanting to use Ghostty for a while but that'd be a showstopper for me. Is there a GitHub issue tracking this?

You should try it out for yourself first. It could be something weird in my setup since I'm running an immutable distro.

And, no, it doesn't have a Github issue because I didn't feel like tracking down all the moving pieces to replicate it when I can just resolve it with a package install.

quotemstr•6mo ago
> Ghostty

I bet it has a setting to set TERM. I mean, TERM is hardly a panacea, but it's better than blindly spewing terminal control control codes without configuration or control or feature discovery.

> effectively two output terminal protocols--Windows and ANSI. And there is only a single terminal input protocol (kitty) that isn't brain damaged and allows you to do something super complex like "detect when Shift Key is pressed and released".

And what, every terminal application should have its own special knob for you to tell it what kind of terminal you have?

This whole discussion is a great example of why Chesterton's fence is a thing. The terminal world is already pretty fragmented. Suggestions to ignore the only even halfway decent widely-supported app-agnostic config knob without replacing it with something better are short-sighted. In any multi-party ecosystem, you need some way for different programs, written by different people at different times, to discover each other's capabilities.

bsder•6mo ago
> And what, every terminal application should have its own special knob for you to tell it what kind of terminal you have?

No, they should default to the only sane thing left, ignore TERM/termcap/terminfo, and leave the people who still want to run a VT-52 or Tek4014 in the dustbin.

There is a single combination for terminal usage which isn't broken in 2025--ANSI escape codes for output with the Kitty escape codes for input.

(And don't get me started about resolving the dependencies around ncurses, terminfo, etc. because some program is welded to a 15 year old version of curses ...)

quotemstr•6mo ago
Most terminals are not kitty. Should my program not work with them? What happens when kitty adds a feature? How do I know whether it's supported?

What we really need is robust feature detection, not TERM. The terminal universe doesn't seem particularly receptive to the idea: https://github.com/alacritty/vte/issues/98

In the meantime, we have TERM. I'll stop advocating people use TERM when the terminal ecosystem learns what the web had to learn ages ago and embraces feature detection. It's pointless to break even UA detection.

(Unfortunately, as the thread shows, XTGETCAP is broken in too many places to use.)

otabdeveloper4•6mo ago
> I wish people wouldn't hardcode terminal escape codes

Why not? The ad-hoc standard set of terminal emulator escape codes is much more widely supported than whatever is in terminfo.

You're not getting any compatibility bonuses via terminfo, only extra pain.

90s_dev•6mo ago
Looks like a good zig argparse lib.

How do you like Zig compared to TypeScript? What would you like to see improved?

caeser•6mo ago
zig is amazing. i am legit more productive in zig.

as Andrew (zig creator) said, zig makes you understand how computers work.

revskill•6mo ago
Will zig include a rustimport similar to cimport ?
Cloudef•6mo ago
Haven't tried it but there's build.crab https://github.com/akarpovskii/build.crab
throwawaymaths•6mo ago
probably never since even cimport is going to eventually move to an internal c compiler written in zig.
kingo55•6mo ago
Cool name - I bet it sounds great with an American/Canadian accent. Using the UK/Australia/NZ accent, it's pronounced "zed-ell-aye", so I didn't grok it instantly like most of the audience here would.
folkrav•6mo ago
“Zee” is getting more popular especially with gen Z (unintended) who were raised with more widespread access to American media, social or otherwise. Like many Commonwealth countries, most of Canada uses “zed”, however.
kingo55•6mo ago
I stand corrected — Very unusual given how "similar" your accents are and your proximity to the states.
folkrav•6mo ago
Canada is unusual in many ways, I’d say hehe. We never separated from the British like the colonies did, so the languages (quebecois French, too!) have kept a lot of British influences. About 2/3 of its relatively small population of 41 million lives in the first 100km north of the US border - an individual in British-Columbia is 8000km+ and 5-6 time zones away from someone in the Atlantic provinces. We’re similar to the US in how different every province can be from one another, I think.
hotpocket777•6mo ago
What is a “CLI framework”?
sothatsit•6mo ago
It takes care of the CLI argument parsing, command routing, and help formatting.

I recently wrote a CLI manually, thinking, CLIs are so simple why would you need a framework? At the end of writing it, I had just ended up writing my own CLI framework anyway. It gets tedious without one, even though none of the things the framework does are particularly complicated.

stratts•6mo ago
Looks nice! Some thoughts:

  const now = ctx.flag("now", bool); // type-safe flag access
This is type-safe, but only at run time. Since your flags are (or could be) known at compile time, it would be nice to have this throw a compile error if the type is invalid.

Or even better - fully lean into comptime and generate a struct so you can use field access without specifying a type:

  const now = ctx.flag.now;