Skip to content
An x86 kernel written in Zig
Zig Assembly Python Makefile
Branch: develop
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows Add formatting check to CI Oct 6, 2019
grub Start using the zig build system May 3, 2019
src Add serial tests Oct 15, 2019
test Add serial tests Oct 15, 2019
.gitignore Add runtime testing harness Jul 9, 2019 Fix some readme issues Oct 11, 2019
build.zig Remove debug option Oct 3, 2019
hello.jpg Improve readme Sep 8, 2019
link.ld Add x86 paging Jun 29, 2019


Build Status

Pluto is a kernel written almost entirely in Zig and supports x86, with aarch64 and x64 backends being planned.

Hello image


  • Should be written in Zig as much as possible. Assembly should only be used where required for functionality or performance reasons.
  • Light and performant. The kernel should be usable both on embedded and desktop class CPUs, made possible by it being lightweight and modular.
  • Basic utilities will be written in Zig. This includes a basic text editor and shell, and will be part of the filesystem external to the kernel itself.
  • Easy to port. The kernel is oblivious to the underlying architecture, meaning that ports only need to implement the defined interface and they should work without a hitch.

All of these goals will benefit from the features of Zig.


Requires a master build of Zig (downloaded or built from source) xorriso and the grub tools (such as grub-mkrescue). A qemu-system binary compatible with your chosen target is required to run the kernel (e.g. qemu-system-i386).

zig build


zig build run

or if you want to wait for a gdb connection:

zig build debug-run


Launch a gdb instance and connect to qemu.

zig build debug


Run the unit tests or runtime tests.

zig build test


  • -Drt-test=: Boolean (default false).
    • build: Build with runtime testing enabled. Makes the kernel bigger and slower but tests important functionality.
    • test: Run the runtime testing script instead of the unittests. Checks for the expected log statements and fails if any are missing.
  • -D[build-mode]=: Boolean (default false).
    • build: Build a certain build mode (release-safe, release-fast, release-small). Don't set in order to use the debug build mode.
    • test: Test a certain build mode (release-safe, release-fast, release-small). Don't set in order to use the debug build mode.


We welcome all contributions, be it bug reports, feature suggestions or pull requests. We follow the style mandated by zig fmt so make sure you've run zig fmt on your code before submitting it.

We also like to order a file's members (public after non-public):

  1. imports
  2. type definitions
  3. constants
  4. variables
  5. inline functions
  6. functions
  7. entry point/init function

More styling information is available on the wiki

You can’t perform that action at this time.