Pi-Bolt 1.0.3 is a performance release: Pi starts sooner, answers a one-shot prompt with less work, draws a streamed answer
and a long session with less CPU, wakes less while idle and keeps less memory, on new runtimes. It also fixes pi-bolt update
when GitHub's API limit is reached and extensions that await at their top level. Everything else is 1.0.2.
Changed
- Long sessions: a regular-mode frame no longer copies the whole transcript. An answer into a 4,000-entry session costs
0.41 s CPU instead of 0.88 s on Linux x86-64 (#134). - Streaming: a streamed chunk costs less to draw, and the spinner's steps ride on the frames the answer draws anyway, so a
long answer draws about 19% fewer frames. A 60,000-character answer runs about 25% fewer instructions than in 1.0.2
(#140, #147). - Startup: less work before the first frame and the first request;
pi --versionandpi -pcreate only the functions
they load (#136, #143).
On macOS, Pi-Bolt binds libSystem's imports through a copy of the library beside the executable
(#139). - The first emoji or symbol on screen no longer builds Unicode's full emoji matcher
(#144). - Compiled code:
includes,indexOf,slice,atandconcaton a value that may be a string or an array take the
string or array path directly (#154). - Memory and idle:
- On Linux, Pi's first collection comes after 16 MB, not 24.6 MB (#138).
pi -pand other batch runs start with a 48 MB collection allowance, so a one-shot prompt usually needs no collection
(#146).- The allocator's scavenger sleeps while there is nothing to give back
(#137), and builds without the JIT drop the idle collection two
minutes after the last activity (#148).
findandgreptake back the 3% that 1.0.2's linear globs cost (#132).
Fixed
pi-bolt updatewhen GitHub's API limit is reached: the latest version is read from thereleases/latestredirect, as
the installers do, and a failed lookup says why. The startup update notice no longer uses the API either
(#149, #150).
1.0.2 still asks the API: ifpi-bolt updateon 1.0.2 says it could not determine the latest version, wait for the hourly
limit to reset or run the installer again (below).- Extensions that
awaitat their top level compile again, and each extension is compiled on its own again, so several
small extensions no longer add up to the compiler's limit
(#142, #129,
#152). - The garbage collector records a completely full block it gives up as allocated
(#145). - The compiler and the JIT: fixes from upstream WebKit for B3/Air (two miscompiles, and the upper 32 bits of a value on
x86-64), the JIT's tier-up while a compile is in flight, catch OSR entry and FTL tail calls. Compiled code reaches B3/Air
in every build; in the-jitbuilds, a plugin whose code tiers up runs a session with about 8% fewer instructions
(#153).
With the default settings Pi draws the same screens and sends the same requests as 1.0.2.
Numbers
1.0.2 / 1.0.3 / PiG 0.5.3. Linux on GitHub's ubuntu-24.04 and ubuntu-24.04-arm runners pinned to one CPU; the M5 in
instructions (CPU time there was noisy).
| Linux x86-64 | Linux ARM64 | Apple M5 (instructions) | Windows x64 | |
|---|---|---|---|---|
| Ready to type | 34 / 30 / 12 ms | 37 / 33 / 15 ms | 193 / 158 / 186 M | 93 / 92 / 106 ms |
pi -p, CPU
| 46 / 43 / 19 ms | 51 / 47 / 25 ms | 266 / 211 / 222 M | 104 / 99 / 101 ms |
pi --version, CPU
| 11 / 7 / 5 ms | 8 / 6 / 4 ms | 86 / 55 / 96 M | 20 / 20 / 50 ms |
| Interactive session (5 prompts), CPU | 126 / 123 / 107 ms | 154 / 146 / 140 ms | 663 / 602 / 1,079 M | 265 / 250 / 368 ms |
| 60,000-character answer, CPU | 1.48 / 1.41 / 1.16 s | 2.00 / 1.85 / 1.27 s | 4.90 / 3.69 / 6.34 G | 3.05 / 2.74 / 2.68 s |
| Answer into a 2,292-entry session, regular | 0.61 / 0.34 / 0.18 s | 0.61 / 0.40 / 0.21 s | 4.24 / 1.97 / 2.50 M per frame | |
| Same, 4,000 entries | 0.88 / 0.41 / 0.18 s | 0.91 / 0.29 / 0.67 s | 5.62 / 3.80 / 3.18 M per frame | |
| Peak memory, interactive | 33 / 28 / 18 MB own | 38 / 34 / 15 MB own | 31 / 30 / 23 MB footprint | 90 / 90 / 64 MB private |
| Memory after 40 prompts | 40.3 / 37.6 / 38.8 MB own | 43.6 / 42.8 / 35.6 MB own | 38.6 / 38.7 / 45.0 MB footprint | 100.3 / 98.4 / 84.5 MB private |
| Idle CPU, 150 s after an answer | 0.048 / 0.032 / 0.002 ms/s | 0.054 / 0.036 / 0.002 ms/s | 600 / 373 / 4 K instr/s | 0.161 / 0.087 / 1.508 ms/s |
The -jit builds move the same way. With a plugin whose code tiers up (macOS, -jit), a session runs 1,742 / 1,512 M
instructions and pi -p 108 / 96 ms; that pi -p keeps about 6 MB more at its peak, as the 48 MB allowance (#146) leaves
the plugin's start-up garbage uncollected before the run ends.
Pi is 1.4.0, as in 1.0.2. The runtimes are new (engine changes in #137, #138, #139, #145, #146, #148, #153, #154).
Install
curl -fsSL https://pi-bolt.opensec.in/install.sh | shirm https://pi-bolt.opensec.in/install.ps1 | iexpowershell -c "irm https://pi-bolt.opensec.in/install.ps1 | iex"or pi-bolt update, or npm install -g --allow-scripts=pi-bolt pi-bolt, or bun add -g --trust pi-bolt, or:
- Homebrew (macOS on Apple silicon, Linux):
brew install opensec-git/tap/pi-bolt - Scoop (Windows):
scoop bucket add opensec-git https://github.com/opensec-git/scoop-bucket, thenscoop install opensec-git/pi-bolt - mise:
github:opensec-git/Pi-Boltwith the options in the installation guide
The installer checks the release signature with OpenSSL 3, an installed Pi-Bolt, or ssh-keygen (OpenSSH 8.1 or later).
Every archive also has a GitHub build attestation: gh attestation verify <file> -R opensec-git/Pi-Bolt.
| Asset | For |
|---|---|
pi-bolt-linux-x64.tar.xz / .tar.gz
| Recommended on Linux x86-64. CPUs with AVX2 (Intel Haswell 2013+, AMD Zen+). |
pi-bolt-linux-x64-baseline.tar.xz / .tar.gz
| Any x86-64 CPU with SSE4.2. |
pi-bolt-linux-x64-jit.tar.xz / .tar.gz
| JIT also on, for plugins loaded at run time. |
pi-bolt-linux-arm64.tar.xz / .tar.gz
| Linux on ARM64, any 64-bit ARM CPU; Android in Termux, with the installer. |
pi-bolt-linux-arm64-jit.tar.xz / .tar.gz
| Linux on ARM64, JIT also on. |
pi-bolt-darwin-arm64.tar.xz / .tar.gz
| macOS. Macs with Apple silicon, macOS 13 or later. |
pi-bolt-darwin-arm64-jit.tar.xz / .tar.gz
| macOS, JIT also on. |
pi-bolt-win32-x64.zip
| Windows. Windows 10 (1809) or 11 on x64; compiled code on AVX2 CPUs, bytecode on others. |
pi-bolt-win32-x64-jit.zip
| Windows, JIT also on. |
pi-bolt-runtime-linux-x64.tar.gz, pi-bolt-runtime-linux-arm64.tar.gz, pi-bolt-runtime-darwin-arm64.tar.gz, pi-bolt-runtime-win32-x64.zip
| The Pi-Bolt Bun runtime, for compiling plugins in. |
pi-bolt-kit-linux-x64.tar.gz, pi-bolt-kit-linux-arm64.tar.gz, pi-bolt-kit-darwin-arm64.tar.gz
| What pi-bolt compile builds with, besides the runtime.
|
install.sh, install.ps1
| The installers, listed in the signed SHA256SUMS: pi-bolt update runs them only after checking them.
|
Linux x86-64 or ARM64 with glibc 2.17 or later; Android 7 or later on 64-bit ARM, in Termux; macOS 13 or later on Apple silicon;
Windows 10 1809 or later, or Windows 11, on x64.