Pi-Bolt 0.6.0 runs on Macs with Apple silicon, starts in half the time it did, and fixes extensions that use node:tls, node:http2 or node:querystring. It runs Pi 1.0.0.
macOS on Apple silicon
-
New:
pi-bolt-darwin-arm64, for every Mac with Apple silicon (M1 and later) on macOS 13 or later. The same ahead-of-time compiled Pi as on Linux, built natively for ARM64. The installer and npm pick it on a Mac by themselves. A-jitbuild is there too, for plugins loaded at run time. -
On an M5 MacBook Air, against Pi 1.0.0 as released on Bun 1.4.2:
- Ready to type in 30 ms instead of 63.
pi --versionin 12 ms instead of 32.pi -pwith a quarter of the CPU: 33 ms instead of 136.- A session of five prompts with 128 ms of CPU instead of 367.
- Half the memory at the end of a long session: 48 MB against 95. Node takes 2.3 GB.
- Streaming in tmux: 543 ms of CPU instead of 752.
The rest is in BENCHMARKS.md.
-
Install it with the installer or npm. Either way, nothing it downloads is quarantined. A build downloaded with a browser is quarantined, and macOS refuses to run it (Troubleshooting).
Faster (Linux and macOS)
pi --versionno longer loads Pi: about half the time it took.- Bedrock and the OAuth sign-in flows load when they are first used, as they do in Pi on Node, instead of at every start. Before, the AWS SDK, the proxy agents and Node's
http,https,netandtlsmodules were loaded each time Pi started. - Less start-up work:
- The providers are composed once. Their models are merged again only when they change, where it was about 500 times a start.
models.jsonis checked against a schema that is not built each time.auth.jsonis looked at once per check, not once per provider.settings.jsonis read once while it does not change.- The 600 KB changelog is not read when nothing in it can be new.
rgandfdare looked up inPATHrather than started.
- Code-highlighting grammars load when a language first needs them, not right after every start.
- In fullscreen mode, rows that did not change since the last frame are not prepared again. On macOS that is a quarter fewer instructions while an answer streams.
- Builtin modules that only code loaded later imports are loaded with that code, in the executables compiled ahead of time.
Fixed
- An extension, or code Pi loads later, that loads
node:querystring,node:tlsornode:http2after start failed to load. It failed withReferenceError: mod is not definedorexecArgv is not defined: the compiler optimized away a scope that this code needed. On Linux 0.5.1 and 0.5.2 this hitnode:querystring;tlsandhttp2were loaded at start there. - A race between the compiler's threads could rarely crash a build compiled ahead of time, and made two builds of the same program differ.
- An extension's widget, footer, header or view kept the colors of the old theme after a theme switch.
- The installer:
- It refuses a release without a
SHA256SUMSline for its download (macOS'ssha256sumpassed empty input). - It checks the signature only with OpenSSL 3 or later.
- It refuses a release without a
Signed
- Releases are signed from 0.6.0.
SHA256SUMScomes withSHA256SUMS.sig, an Ed25519 signature by Pi-Bolt's release key (keys/release.pub). The installer checks it before it installs anything, and refuses a download whose signature does not verify. It needs OpenSSL 3 or later for that: on a Mac whoseopensslis the system's LibreSSL, and wherever there is noopenssl, it checks the checksums alone and says so.
Changed
- A
.envfile in the working directory is no longer loaded into Pi's environment. Pi on Node never loaded one. Set what Pi should see in the shell that starts it.
Tested
On both platforms, on all builds:
- the engine tests;
- 5,000+ random programs on each platform, compiled ahead of time and compared with stock Bun;
- Pi's own test suites;
- the end-to-end checks of every tool against stock Bun;
- what is drawn, against Pi 1.0.0 on stock Bun;
- the fullscreen screen in tmux and zmx;
- the load test (32 processes at once, 600 prompts in one process).
New tests:
- builtin modules first loaded after start;
- Bedrock reaching a closed local port, directly and through a proxy;
- what each
Intlconstructor says it supports.
No real provider is called by the tests.
Install
curl -fsSL https://pi-bolt.opensec.in/install.sh | shor pi-bolt update, or npm install -g pi-bolt. The installer detects Linux or macOS by itself.
| Asset | For |
|---|---|
pi-bolt-linux-x64.tar.xz / .tar.gz
| Recommended on Linux. 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-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-runtime-linux-x64.tar.gz, pi-bolt-runtime-darwin-arm64.tar.gz
| The Pi-Bolt Bun runtime, for compiling plugins in. |
Linux x86-64 with glibc 2.17 or later; macOS 13 or later on Apple silicon.