#varlink — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #varlink, aggregated by home.social.
-
»For me, it's not the systemd dependency in their proposed #Flatpak 2.0 that I don't like, but their desire to move everything (including the XDG portals they spent so much time getting libraries and applications to adopt) over from D-Bus to #Varlink.
My honest reaction was "Are these people from the #GNOME project? …because this feels like a rehash of their approach to CSD support in applications not linked against libgtk".«
-
A new stack for GNOME system components | Sebastian Wick @ GUADEC 2026
https://tube.kockatoo.org/w/52EiAzdyZ1KTZ6bp3LtENjThis talk explores a possible future in which critical features that GLib, Gio and similar libraries provide to system components have been be moved into small, socket-activated #Varlink services written in Rust.
-
🚀 zlink 0.7 is out!
📖 A brand new book! zlink now ships with a comprehensive tutorial covering everything from your first connection to writing services & type-safe proxies: https://z-galaxy.github.io/zlink/
All book examples are compiled & run as doctests, so the docs can't silently rot. 😉✨ serde-style field attributes: The Type & CustomType derives now support #[zlink(skip)] and #[zlink(flatten)], so your Rust structs no longer have to mirror the wire format 1:1.
🏷️ Renaming all the things: rename & rename_all now work across the derives, on ReplyError variants, and there's a new rename_all_arguments for the proxy macro. Raw identifiers (r#type & friends) are handled correctly now too.
🦺 Compile-time name validation: The macros now check the names they emit against the Varlink grammar, so invalid interface/method/type names get caught at build time instead of at runtime by your peers.
🏗️ New crate: zlink-idl: The Varlink IDL types & parser now live in their own crate with a proper error type — usable independently of the rest of the stack.
➕ Additive runtime features: The tokio & smol integrations no longer conflict — enable whichever you need, or both.
📦 https://crates.io/crates/zlink
🔗 https://github.com/z-galaxy/zlink -
🔖 zlink 0.6.0 is out!
zlink is an async Varlink IPC library for Rust. Highlights this release:
🔐 Credential passing over unix sockets (SO_PASSCRED + PassedCredentials API).
🔌 Listeners can signal exhaustion; Server exits cleanly when they do.
🔎 Introspection now covers custom per-interface types + method/interface doc-comments.
🛠️ zlink-codegen: new --rustfmt flag & generate_files() API.
🧵 Build a unix Stream from a std UnixStream.
🔒️ Removed the pidfd_open fallback.Release notes at https://github.com/z-galaxy/zlink/releases
-
With our changes to Phosh's first-boot in 0.55 and the recent changes in mobile settings we can now finally go full circle on immutable images:
- Set up the initial user via systemd-homed
- Perform OS upgrades from the mobile settings app using systemd-sysupdate
This landed in Phosh's nightly images already but will hopefully also become useful for other immutable phone distros like @postmarketOS #Duranium .
As the systemd
org.freedesktop.sysupdate1interface is bound to change to #varlink in 262 this is currently rather minimal and will be tweaked in future releases but it makes things already usable without having to resort to the command line. -
While work on the varlink-http-bridge for systemd I had this idea that a lot of the tech could be used to build an #MCP for systemd via #varlink. So here it it is: https://github.com/mvo5/systemd-mcp - it auto-discovers systemd's varlink sockets, introspects the IDL, and exposes every method as a typed tool. On a typical system that's 50-80+ tools: units, journals, credentials, factory reset, you name it. What could possibly go wrong :) ? (requires systemd v260+)
-
I'm happy to annouce kirmes version 0.1.0 providing an async C API now!
Kirmes is a Rust and C implementation of the IPC protocol for the systemd userdb Varlink interface. kirmes provides a safe, async Rust API talking to systemd's userdb. In addition it provides blocking and async C APIs to communicate over Varlink or just parse JSON records for users and groups.
https://crates.io/crates/kirmes
Example: https://gitlab.com/kirmes/kirmes/-/blob/main/example/async_user_record.c
-
So attezt now contains 3 components.
- `atteztd` which is an Attestation CA with an inventory API
- `attezt-agent` that implement device enrollment and an p11-kit agent.
- `attezt` that is the client for both the agent and the attestation ca. Modelled after step/step-caEverything has an #varlink APIs as well.
https://github.com/Foxboron/attezt
Very much a work in progress and not everything is wired up correctly. Readme also needs a bit more work.
-
I've released version 0.0.5 of kirmes. A Rust and C client library to access systemd-userdb. This version switched from tokio to smol, as I plan to provide an async C API soon. @abbra contributed support for generic types based on UserRecord and GroupRecord. This way you can parse extension your userdb varlink services provides.
-
Obviously not going to push this to `main`, I love #varlink even more now after seeing it in the #systemd talk at FOSDEM. I was playing around with how I could allow other apps to do things like "start timer in Sessions" or "query timer state from Sessions", and it literally took 5 minutes to expose _every single UI element_ via a corresponding Varlink service that I could then immediately discovery and use via `varlinkctl`. Calling the Varlink methods even interacts with the UI properly 🤯
-
Here is a screenshot of ai-playground where an AI agent is running on the left in a #systemd container, but cargo is running outside of the container on the host through the gatekeeper. I use the #varlink streaming protocol to stream stdout/stderr of the process executed on the host. It was pretty easy turning on streaming using #zlink
Learn more at:
https://gitlab.com/cryptomilk/ai-playground -
I've created yet another AI agent sandbox and just released 0.1.0. I did it differently than the others. It is called AI Playground.
Features:
* Lightweight containers (systemd-nspawn)
* Git worktree support
* Easy to set up and keep up to date (it is a chroot)
* Host command gatekeeper - lets you approve or deny host commands from inside the container (varlink)
* Multiple AI tools supported
* Contributions welcome -
Watched @pid_eins #fosdem2026 presentation record about #Varlink. I think the idea is good, except it should use some binary protocol for communication between services. RFC 8949 #CBOR seems like excellent candidate. Text serialization is not necessary if human is never direct part of a pipeline. Data conversion is not slow, but not necessary between localhost- only services.
-
I've just released version 0.0.4 or kirmes, a Rust and C API to query and enumerate users of systemd's userdb.
This version supports the record filter options introduced to the USER_GROUP_API of systemd in version v258.
-
🚨 Breaking news for the two people who care about Varlink: someone made a C library! 🎉 Turns out, you can now send #JSON objects over Unix sockets—truly revolutionary stuff from the 90s! 🚀 Enjoy your riveting read on RPC protocols, because apparently, that's still a thing. 🙄
https://emersion.fr/blog/2025/announcing-vali/ #Varlink #CLibrary #UnixSockets #RPCProtocols #90sTech #HackerNews #ngated -
vali, a C library for Varlink
https://emersion.fr/blog/2025/announcing-vali/
#HackerNews #vali #C #library #Varlink #open #source #programming
-
Just rolled out the first release of zlink, a new async-first Varlink Rust crate:
https://crates.io/crates/zlink
https://docs.rs/zlink/latest/zlink/This release focuses on the client-side of things more but you can already use it to write services as well. A high-level service API is planned for the near future.
Also provided is a codegen utility, zlink-codegen (duh!) that generates client-side proxy trait and auxiliary types for you:
-
I've just released libkirmes 0.0.2. It is a C library and a Rust crate to access the #systemd userdb API via varlink
This is still work in progress but already usable.
-
I gave a lightning talk at @guadec on the #zlink work, I've been doing:
-
I lied when I said #PAM authentication will come next week. Here's #WebIDAMd demonstrating password authentication against #OAuth, with a PAM module speaking via #Varlink to the daemon:
https://asciinema.org/a/728726
-
Been working hard on the IDL & introspection APIs in zlink for almost 3 weeks now and I must say I'm very happy with the results. 🍒 on top, I made an example introspection cli that demonstrates the client side of this API:
https://github.com/zeenix/zlink/blob/main/zlink%2Fexamples%2FREADME.md
Thanks to @codethink for sponsoring the weekdays and Meta for sponsoring the weekends. 😊
-
The recording of my @fosdem talk "How I optimized zbus by 95%" is finally published:
https://video.fosdem.org/2025/ub2252a/fosdem-2025-4104-how-i-optimized-zbus-by-95-.av1.webm
Unfortunately, certain portions of the recording were lost so you'll notice a few skips.
I also discuss #varlink in the last 11 minutes (starting at time index 00:23:45).
-
@tychotithonus it isn't!
#systemd is highly modular and each component is loosely coupled to the others.
You can basically mix and match as you like to - disable components you don't need/like, replace them with others - and they might either fully integrate by utilizing the #DBus / #Varlink interfaces of systemd's components or not and act on their own. -
“Protocol: All messages are encoded as JSON objects and terminated with a single NUL byte”
“What could possibly go wrong?”