github opensec-git/Pi-Bolt bolt-v1.0.3
Pi-Bolt 1.0.3

3 hours ago

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 --version and pi -p create 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, at and concat on 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 -p and 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).
  • find and grep take back the 3% that 1.0.2's linear globs cost (#132).

Fixed

  • pi-bolt update when GitHub's API limit is reached: the latest version is read from the releases/latest redirect, 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: if pi-bolt update on 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 await at 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 -jit builds, 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 | sh
irm https://pi-bolt.opensec.in/install.ps1 | iex
powershell -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, then scoop install opensec-git/pi-bolt
  • mise: github:opensec-git/Pi-Bolt with 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.

Don't miss a new Pi-Bolt release

NewReleases is sending notifications on new releases.