No description
Find a file
2025-03-30 17:38:54 -06:00
bench remove!: Canvas.set has been removed in favor of Canvas.fillRect 2025-03-19 11:13:40 -06:00
dep update to zig 0.14.0 2025-01-28 20:00:15 -07:00
examples replace Canvas.set with Canvas.fillRect in some examples 2025-03-22 21:12:34 -06:00
src fix memory leak in evdev devices 2025-03-30 17:38:54 -06:00
.gitignore feat: update to zig 0.13.0 2024-08-04 00:21:40 -06:00
build.zig move install_asm inside checks for emit_asm 2025-03-15 00:31:51 -06:00
build.zig.zon update shimizu to fix circular dependency issue 2025-03-22 21:27:42 -06:00
CHANGELOG.md feat(seizer.Image): add function that detects image format at comptime 2024-11-29 14:46:31 -07:00
default.nix fix sprite_batch example 2024-09-19 14:17:00 -06:00
LICENSE add LICENSE to repository 2024-09-23 19:28:14 -06:00
README.md Link to examples in README 2024-11-09 17:58:48 -07:00
RELEASE-CHECKLIST.md docs: Add release checklist 2024-11-16 17:13:33 -07:00

seizer

seizer is a Zig library for making software rendered Wayland applications. It is currently in an alpha state, and the APIs constantly break.

Features

Roadmap

In the future, seizer wants to have the following features:

FAQ

Why is it called "seizer"?

It is a reference to the "Seizer Beam" from the game Zero Wing. Move Zig!

Wasn't seizer going to have a cross platform windowing API?

I decided to reduce scope. Targeting Wayland specifically means I have to invent fewer abstractions, and can just focus on supporting what works well on Wayland. And the Windows WSLg project made me realize that the Wayland protocol is just that; a protocol. There's a few Linux-isms, sure, but nothing fundamentally stops other OSes from adopting Wayland.

If you want true cross platform windowing support, there are plenty of other projects doing just that; SDL, GLFW, mach, and sokol just to name a few.

I also realized that I'm not really interested in platforms other than Linux. Linux is my daily driver OS. I don't use MacOS or Windows (or BSD) and there are plenty of other developers targeting those platforms.

Wasn't seizer targeting OpenGL/Vulkan at some point?

Yes, it was. For a variety of reasons, I've decided that supporting GPUs is out of scope:

  • Vulkan is a huge API surface. While it might be possible to write a backend that supports it, exposing it's full power takes serious effort. Exposing something like seizer.Canvas would be much more reasonable than trying to make an API that allows using GPUs through either OpenGL or Vulkan (Which is what I was trying to do. That part was my fault for tackling too large a scope).
  • libvulkan and libEGL require using dlopen; this is a problem on Linux:
    • Linux has no system libc; ergo no system dlopen
    • Dynamically linking to glibc or musl multiplies the number of ways your program can break.
  • One the programs that inspired the creation of seizer needs to export measurement images with additional markup on it, and a software rendering library makes this easier.
  • Running statically linked binaries on Linux gives me dopamine.