Yurt

Upcoming

Updated 2026-10-28 · not released yet; plans may change

Work that is in progress or in review for a later train. None of it is on the live playground yet.

Dynamic loading (dlopen)

JavaScript JIT (experimental)

Node on Yurt runs SpiderMonkey's interpreter. The JIT work adds a tier that compiles hot JavaScript to WebAssembly inside the guest (NightMonkey) and mounts it through the kernel's JIT interface. It is not in the image and stays off by default.

Go

Later trains

Planned

Packages

Updated 2026-10-28 · released independently of trains

Packages come from the signed YurtOS/yurt-packages repository and are published on their own schedule, not with a train. In a sandbox with a network, sudo pkg update then sudo pkg install NAME installs the newest version, and sudo pkg upgrade moves to newer ones. In the browser the Packages panel does the same. pkg verifies every signature before it installs anything.

PackageVersionDownloadNotes
python3.14.715.5 MBstdlib with ssl, sqlite3, threads
numpy2.5.04.5 MBneeds python
pyzmq26.4.00.09 MBneeds python
jupyter-kernel0.0.19.5 MBipykernel for the Notebook and JupyterLab
python-seal3.14.711.5 MBthe Python that notebook Suspend/Resume runs
python-dev3.14.739.5 MBCPython headers and static libpython3.14.a, for building extensions; needs python
node22.23.3 (yurt.4)13.5 MBbuilt with Guest SDK 0.0.31
gemini-cli0.64.017.0 MBneeds node
perl5.44.022.3 MBwith Encode
gettext1.0.07.3 MBmsgfmt and friends
rtk0.50.03.7 MB
pkgconf3.0.70.12 MB
make4.4.10.2 MBalso in the base image
zstd1.5.70.55 MBalso in the base image
ncurses6.5.00.28 MBlibrary and headers
zsh5.9.00.80 MBalso in the base image; needs ncurses
go1.28.0-devel59.4 MBgo build runs inside the sandbox; one thread
gh2.102.015.8 MBneeds git and ca-certificates (in the base image)
zlib1.3.10.07 MBlibrary and headers

python, numpy, pyzmq, jupyter-kernel, python-seal and python-dev are one set, built together: numpy and pyzmq are compiled into the interpreter. Install them together, at the same build.

playground-2026.10.29-3d32068

2026-10-29 · replaces playground-2026.10.27-3d32068.2

A new image only: pkg now keeps a plain list of what is installed. The kernel, the desktop app and the yurt CLI are unchanged.

Component Version
Kernel yurtos-kernel 3d32068 (kernel-v0.0.12, unchanged)
Images yurt-ports c7b5d36: slim (the browser's) 23.5 MB; full (desktop app and CLI) 92.0 MB
Desktop host and yurt CLI yurt-sandbox edeb8b0 (unchanged)
Guest SDK 0.0.31 (unchanged)

Highlights

playground-2026.10.27-3d32068.2

2026-10-28 · replaces playground-2026.10.27-3d32068

A reload now has Python ready in about 11 seconds instead of about 85, an install that stalls says so and offers a fresh start, and the desktop app's image is a third smaller. The kernel is unchanged.

Component Version
Kernel yurtos-kernel 3d32068 (kernel-v0.0.12, unchanged)
Images yurt-ports f4ff9bc: slim (the browser's) 23.5 MB; full (desktop app and CLI) 91.9 MB, was 144.0 MB
Desktop host and yurt CLI yurt-sandbox edeb8b0
Guest SDK 0.0.31 (unchanged)

Highlights

Measured

On the live site (Apple M-series laptop, Chromium):

Step Time
First visit: page load to Python ready 85 s
Reload: page load to Python ready (0 archives downloaded) 11 s
Gemini CLI with Node, from the Packages panel 13 s

4 of 4 cold starts on the live site succeeded with no stall and no console errors.

Known issues

playground-2026.10.27-3d32068

2026-10-27 · replaces playground-2026.10.26-3d32068

The browser now boots a slim image: 23.5 MB instead of 144 MB. Python is no longer baked into it. Every page that runs Python installs the newest Python set from the package repository, with the sandbox's own pkg, the first time it needs it. The kernel, the desktop host and the yurt CLI are the previous train's.

Component Version
Kernel yurtos-kernel 3d32068 (kernel-v0.0.12, unchanged)
Images yurt-ports 2d2a5c5: slim (the browser's) 23.5 MB; full (desktop app and CLI) 144.0 MB
Desktop host and yurt CLI yurt-sandbox 68e0034 (unchanged)
Guest SDK 0.0.31 (unchanged)

Highlights

Measured

On the live site with a cold cache (Apple M-series laptop; Chromium, and Chrome 156):

Step Time
Page load to Python ready (install and Jupyter start) 69–88 s
of which the install itself about 53 s
Gemini CLI with Node, from the Packages panel 11–19 s
Suspend/Resume kernel running 21 s

26 of 26 cold starts on the live site and locally succeeded with no stall (23 in Chromium, 3 in Chrome 156). Most of the install time is the sandbox writing the files (kernel #4169); a faster path is planned.

Known issues

playground-2026.10.26-3d32068

2026-10-26 · replaces playground-2026.10.25-f884f16

This train moves the Guest SDK from 0.0.29 to 0.0.31, and the image gains everyday command line tools and a working pkg install. The kernel adds bind and move mounts, thread-local storage in dlopen'd libraries on the desktop host, and live shared mappings of memfd and /dev/shm.

Component Version
Kernel yurtos-kernel 3d32068 (kernel-v0.0.12)
Image yurt-ports 0cf24f6
Desktop host and yurt CLI yurt-sandbox 68e0034
Guest SDK 0.0.31 (was 0.0.29)

Highlights

Kernel

Area Change Issue
Dynamic loading dlsym(RTLD_DEFAULT) searches the default scope on the browser host too #4004, #4094
Dynamic loading Browser host: an RTLD_GLOBAL library with a dependency loads in a thread, and a thread binds a library's imports breadth first, as on Linux #4107, #3991, #4112
Dynamic loading Browser host: a dlclose that has to wait for another thread is retried instead of being dropped #4006, #4115
Dynamic loading A library whose constructors are still running in one thread is not handed to another thread half initialised #4063, #4070
Memory Shared mappings: lifetime, permission and write-back fixes #3101, #3258

Playground

playground-2026.10.25-f884f16

2026-10-25 · replaces playground-2026.10.20-22366ef

A kernel train on the same Guest SDK (0.0.29), so programs built for the previous train keep running. It fixes epoll on standard input and output, makes runtime-loaded libraries behave more like Linux, writes shared file mappings back reliably, and rebuilds the image's python3 as a plain Linux/musl CPython.

Component Version
Kernel yurtos-kernel f884f16 (kernel-v0.0.11)
Image yurt-ports 33ec0f1
Desktop host and yurt CLI yurt-sandbox 071210a
Guest SDK 0.0.29 (unchanged)

Highlights

Kernel

Area Change Issue
Dynamic loading dlsym(handle) also searches the library's dependencies, breadth first, as on Linux #3885, #3986
Dynamic loading dlsym(RTLD_DEFAULT) searches the default scope (desktop host) #301, #3994
Dynamic loading A library's global data imports bind to the program's symbols #3903, #3985
Dynamic loading A library loaded in one thread is usable from every thread, including one that loads it again #3665, #4033, #4044, #4045, #4057
Dynamic loading dlopen refuses a library that defines its own memory, so the process can still fork; a failed load leaves nothing behind #3806, #3983, #4000
Dynamic loading A program's data relocations are applied once, before its constructors run; on the browser host, runtime-loaded libraries run their constructors #3852, #3940, #3930
Memory MAP_SHARED file mappings are written back at exit, signal death and exec; /dev/shm content survives growth #3426, #3963, #4046, #4061
Sockets MSG_CMSG_CLOEXEC marks received descriptors close-on-exec, including through recvmmsg #3937, #3955
Sockets cmsg_len is bounds-checked; SO_BINDTODEVICE reports Linux's result size #3936, #3927
Processes waitid fills in siginfo in the caller's layout and checks its output pointers #3908
Processes Faster fork of a large program (desktop host) #3809, #3988
Checkpoints Checkpoint chains are compacted durably through the inactive manifest slot #2106, #3277
Runtime Wasmtime 48.0.7 (security patch releases) #4028

Image

Playground

playground-2026.10.20-22366ef

2026-10-21 · replaces playground-2026.10.15-230cfe2.2

This train moves everything to Guest SDK 0.0.29, brings a new Node.js build with many fixes, brings back checkpoint sealing, and ships the kernel side of dlopen with a large set of kernel and CLI fixes.

Component Version
Kernel yurtos-kernel 22366ef (kernel-v0.0.10)
Image yurt-ports d16fa4f
Desktop host and yurt CLI yurt-sandbox a97c787
Guest SDK 0.0.29 (was 0.0.26)

Highlights

Kernel

Area Change Issue
Processes SIGCONT resumes a stopped process instead of ending its sleep, so ^Z and fg work #3637, #3640
Processes A vfork child calling abort() no longer breaks signals in its parent (browser host) #3140, #3144
Threads A thread whose stack can't be set up is refused with EAGAIN instead of sharing the main stack #3850, #3906
Threads An unknown scheduling policy returns EINVAL #3833
Files pread reads more than 1 MiB at once, and reports EBADF, ESPIPE and EFAULT like Linux #3842
Files Bound AF_UNIX sockets show up in ls and readdir #3598, #3830
Files fcntl record locks are released only by a real close, not by spawning a child #3705, #3769
Files Opening a FIFO counts the opener before it waits, so its peer sees a live end #3317
Files A pipe that fails with EMFILE no longer leaks a descriptor #3694, #3796
Files A file write racing a clock change no longer deadlocks the sandbox #3707
Files A hard link in the image keeps its target's mode, owner and mtime #3733
Files The FS_IOC_GETFLAGS ioctl works on tmpfs files #3539, #3451
Sockets A non-blocking TCP connect returns EINPROGRESS at once; a blocking one no longer freezes the sandbox for up to 30 s and honours SO_SNDTIMEO and signals #3601, #3607, #3651
Sockets A blocking write on a full AF_UNIX stream socket waits and writes everything instead of returning EAGAIN #3606, #3643
Sockets Loopback TCP reports the same poll flags as Linux after the peer closes or resets #3722
Sockets An accepted AF_UNIX socket starts with its own default options #3603, #3756, #3772
epoll EPOLLET reports a new edge on every write, so Tokio programs no longer stall waiting for a wake-up #3564, #3577
epoll epoll_ctl on a closed fd returns EBADF for every operation #3575, #3730
procfs /proc/sys/kernel/hostname and domainname read correctly through aio_read #3604, #3781
Time 64-bit time values in rusage, itimerval, ppoll, timex and socket timeouts, matching Guest SDK 0.0.29 #3638
Dynamic loading A shared library's constructors run inside the guest, so they can make system calls and call dlopen themselves #3639, #3642
Dynamic loading Loading a library that depends on another one no longer deadlocks on the desktop host #3641, #3649
Dynamic loading A fork child keeps the libraries its parent loaded, at the same addresses (desktop host) #3662, #3672, #3677
Dynamic loading A library constructor can fork (desktop host) #3876
Dynamic loading A process that dlcloses a library gets a fresh copy on its next dlopen, even if another process still holds it #3681, #3703
Dynamic loading Two exported names for one function give the same dlsym address #3851
JIT interface JIT modules can be up to 64 MiB, and JIT code survives fork on the desktop host #3324, #3677
Checkpoints Checkpoint sealing returns: the browser host seals only programs built for checkpoints, and the desktop host refuses seals #3497, #3498, #3499
Build The browser host type-checks under the page's DOM types, and the Guest Compat tests pass with Guest SDK 0.0.29 #3902, #3923
Performance Pipe and socket reads copy in slices instead of a byte at a time #3317
Performance EPOLLET wake-ups visit only ready members #3635, #3670
Performance A library loaded in a browser Worker is compiled once, not four times #3860, #3866
Performance Less work per suspend and resume when libraries are loaded (desktop host) #3883, #3901
Hardening New files and device nodes drop S_ISGID unless the creator is in the group, and take the identity that passed the permission check #3715, #3719
Hardening An open that waits on the host keeps its own credentials and stops if its process exits #3717, #3746, #3776
Hardening File creation respects a policy that denies the clock #3716
Hardening Empty UDP datagrams count against the receive buffer, so a guest can't grow a kernel queue without bound #3351, #3887
Hardening ioctl output pointers and netlink route messages are checked #3451, #3436
Hardening On macOS, a guest swapping a FIFO in for a file can no longer block the desktop host #3888

Image

Node.js

yurt-node release node-v22.23.3-yurt.3, built with Guest SDK 0.0.29.

yurt CLI and desktop host

Playground page

Not in this release

Known issues

playground-2026.10.15-230cfe2.2

2026-10-15 · replaces playground-2026.10.13-68259fc

This train brings Node.js and Gemini CLI 0.64.0 to the playground image, along with a set of kernel and CLI fixes.

Component Version
Kernel yurtos-kernel 230cfe2 (kernel-v0.0.7)
Image yurt-ports 78081fd
Desktop host and yurt CLI yurt-sandbox 4e792ec
Guest SDK 0.0.26 (unchanged)

Highlights

Kernel

Area Change Issue
Processes A posix_spawn child now runs on its own host thread under Wasmtime #3599
Files Image files keep their recorded mode, owner and mtime when staged; scripts that aren't wasm, like the gemini launcher, are no longer installed as 0644 #3611
Files write and truncate update the file's mtime #3565
Files statx reports nlink, atime, ctime and blocks the way fstat does #3549
Files open accepts O_SYNC, O_DSYNC, O_NOATIME and O_ASYNC #3573
procfs /proc/sys/kernel ostype, osrelease, version, hostname and domainname now exist #3574
epoll A nested epoll wakes up when a host socket becomes ready #3605
epoll epoll_ctl refuses regular files with EPERM and returns EBADF for a missing file #3550, #3602
Sockets SO_RCVTIMEO and SO_SNDTIMEO keep a zero timeout and a 64-bit tv_sec like Linux; the _NEW variants are accepted; an unknown option returns ENOPROTOOPT #3558, #3590
Sockets Follow-ups to AF_UNIX bind/listen naming #3582
Performance ramfs indexes paths by inode, so reverse lookups no longer scan #3619
Performance mmap placement is one ordered pass over occupied ranges #3615
Hardening The guest can no longer reach the env.mailbox_relay import on the JS host #3295

yurt CLI and desktop host

Not in this release

Known issues

playground-2026.10.13-68259fc

2026-10-13 · replaces playground-2026.10.12-5ddc591.2

Socket and thread fixes in the kernel, and a tablet now gets the Linux shell only.

Component Version
Kernel yurtos-kernel 68259fc
Image yurt-ports af46718
Desktop host and yurt CLI yurt-sandbox a3da76a

Highlights

Kernel

Image

yurt CLI and desktop host

Playground page

playground-2026.10.12-5ddc591.2

2026-10-12 · replaces playground-2026.10.12-5ddc591

A respin of the same kernel and image with a re-pinned desktop host and CLI, and clearer messages on phones.

Component Version
Kernel yurtos-kernel 5ddc591
Image yurt-ports 50aba58
Desktop host and yurt CLI yurt-sandbox 0c3700f

Highlights

yurt CLI and desktop host

Playground page

playground-2026.10.12-5ddc591

2026-10-12 · replaces playground-2026.09.27-a3198c7

Two weeks of kernel work (filesystem sync, HostFS xattrs, capabilities, signals, CPU accounting and browser-host memory) on guest SDK 0.0.26, and new image packages including git, Perl, Go, jq and gh.

Component Version
Kernel yurtos-kernel 5ddc591
Image yurt-ports 50aba58
Desktop host and yurt CLI yurt-sandbox 435f6a1

Highlights

Kernel

Image

yurt CLI and desktop host

Playground page

playground-2026.09.27-a3198c7

2026-09-27 · replaces playground-2026.09.22-1617082

A local WebGPU agent pane and the ability to stop a running cell, curl in the image, and guest SDK 0.0.25.

Component Version
Kernel yurtos-kernel a3198c7
Image yurt-ports fccbd6b
Desktop host and yurt CLI yurt-sandbox 0298333

Highlights

Kernel

Image

yurt CLI and desktop host

Playground page

playground-2026.09.22-1617082

2026-09-22 · replaces playground-2026.09.21-7eb03a7

Kernel fixes for shared mappings, suspend and pipes on guest SDK 0.0.23, and Intel macOS is dropped.

Component Version
Kernel yurtos-kernel 1617082
Image yurt-ports 13e258c
Desktop host and yurt CLI yurt-sandbox a7f2081

Highlights

Kernel

Image

yurt CLI and desktop host

Playground page

playground-2026.09.21-7eb03a7

2026-09-21 · first train

The first release train: kernel, image, desktop host and yurt CLI built and released together from these revisions.

Component Version
Kernel yurtos-kernel 7eb03a7
Image yurt-ports 883849d
Desktop host and yurt CLI yurt-sandbox 328c873