BUNinu Is Not Unix

A portable Unix-like userspace and shell ecosystem built on Bun — one command gives you a working shell, in a browser tab or straight in the terminal you're already in, across Android, Linux, Windows, and macOS, with nothing to compile and nothing installed system-wide.

Why Buninu

The usual way to get a Unix environment

  • A system package manager
  • A compiler
  • On Android or Windows, you install Linux first — WSL, or a proot distro

Buninu's way

  • Everything it needs is JavaScript on Bun
  • Nothing to build, nothing installed system-wide
  • Uses Bun's own terminal API instead of node-pty
  • The same tree runs unchanged on a phone, a laptop, and a server

And it's not a bare runtime either — it bundles an editor and Markdown execution runtime, a clipboard tool, text-to-speech, ZMODEM file transfer, and an xdg-open that knows each platform's real handler. An installation is one directory: yours to edit, yours to copy to another machine.

Buninu on Android

On Android, the piece that actually runs Buninu is minapk: it builds a real Android app with Buninu inside. bunproot then gives that app something apps normally never get — a complete Linux distribution.

  1. Builds the app

    A Gradle-free APK builder that runs on the phone itself. It packs Bun and the Buninu userspace into one standalone app — optionally with your own Bun program as its entry point.

  2. Runs inside it

    Install it like any other app. It unpacks Buninu into its private storage and opens straight into a Buninu terminal — no Termux, no root.

  3. Opens a full Linux distro

    The app has no package manager, so bunproot is its way out: a PRoot port that needs nothing but Bun, running a full ARM64 rootfs such as Alpine — Firefox, Chromium, and LibreOffice included.

Termux is still welcome — Buninu and bunproot both run there too — but with minapk, Buninu doesn't need it: everything it depends on ships inside one APK.

Ecosystem

Five projects, each standalone and each built to work together: the core userspace; minapk and bunproot, which take it to Android — one builds the app, the other gives that app a full Linux distro; bunmsh, its shell; and Buninu Linux, which boots Bun directly as PID 1.

Before you install: the commands below need Bun install it first.

minapk

Builds the Android app that runs Buninu

What actually runs Buninu on Android. minapk builds a standalone Android app with Bun and the Buninu userspace inside — install it like any other app, and it opens straight into a Buninu terminal. It can also wrap your own Bun single-file executable as the app's entry point.

  • No Gradle and no Android Studio — resources, Java, R8/DEX, zipalign, and signing all run from the command line, even on the phone itself in Termux
  • The finished app needs no Termux and no root: Bun and Buninu travel inside the APK and unpack into the app's private storage
  • The home for bunproot — inside a minapk app, bunx bunproot gives you a full Linux distribution

bunproot

A full Linux distro inside the minapk app

A port of PRoot to Bun/JavaScript: a userspace chroot, mount --bind, and shebang loader for Android, needing no root and no kernel support beyond ptrace. Its purpose is to give the app minapk builds — which has no package manager — the power of a complete Linux distribution.

  • Its only dependency is a Bun binary — exactly what a minapk app already carries, so bunx bunproot works there on the first run
  • Runs a full ARM64 Linux rootfs such as Alpine — Firefox, Chromium, LibreOffice, PostgreSQL, Git, and OpenSSH are confirmed running
  • Also runs in Termux, or any other Android environment with Bun on PATH

bunmsh

Bun Modern Shell

A dependency-free, mksh-inspired cross-platform command shell for Bun. It has a JavaScript mode, and builtins that answer the same way on Windows as on POSIX systems.

  • Dependency-free — nothing to install with npm install or bun install
  • mksh-inspired syntax, focused on a small, usable interpreter rather than full mksh compatibility
  • Works as Buninu's local shell, or runs standalone with npx

Buninu Linux

A Linux distro running Bun as PID 1

A Linux distribution running Bun as PID 1 with the Buninu userspace. It boots an unsigned UEFI UKI (a single .EFI file), with a prebuilt kernel from Alpine and an initramfs written entirely in JavaScript.

  • No BusyBox and no C bootstrap — mounting filesystems, loading modules, configuring the network, and reaping children all happen in JavaScript through bun:ffi
  • Booted successfully on real x86-64 UEFI hardware, with Bun reaching its interactive REPL and starting the Buninu shell
  • The bunterm graphical terminal draws directly on the framebuffer, with CJK, colour emoji, and kitty image protocol support

Contributors

The people behind Buninu.

Contact

Questions, ideas, or want to get involved? Drop us a line.