Bun v1.3.11 Bun v1.3.11 reduces its Linux x64 binary size by 4 MB by removing CMake, and introduces a new `Bun.cron` API for cross-platform OS-level cron job management. The update also adds `Bun.sliceAnsi`, a high-performance built-in for ANSI-aware string slicing that replaces the `slice-ansi` and `cli-truncate` npm packages. Additionally, `Bun.markdown.render()` now provides richer metadata to list-related callbacks, enabling custom list numbering without workarounds. To install Bun curl -fsSL https://bun.sh/install | bash npm install -g bun powershell -c "irm bun.sh/install.ps1|iex" scoop install bun brew tap oven-sh/bun brew install bun docker pull oven/bun docker run --rm --init --ulimit memlock=-1:-1 oven/bun To upgrade Bun bun upgrade 4 MB smaller on Linux x64 4-mb-smaller-on-linux-x64 In the next version of Bun — Bun @bunjavascript Bun gets 4 MB smaller on Linux x64 because we deleted CMake pic.twitter.com/HQPacwNO3O March 14, 2026 Bun.cron — OS-level Cron Jobs and Expression Parsing Bun.cron — OS-level Cron Jobs and Expression ParsingBun now includes a built-in Bun.cron API for registering OS-level cron jobs, parsing cron expressions, and removing scheduled jobs — all cross-platform. Register a cron job register-a-cron-job // Register a cron job crontab on Linux, launchd on macOS, Task Scheduler on Windows await Bun.cron "./worker.ts", "30 2 MON", "weekly-report" ; When the OS scheduler fires, Bun imports the script and calls default.scheduled , following the Cloudflare Workers Cron Triggers API https://developers.cloudflare.com/workers/runtime-apis/handlers/scheduled/ : // worker.ts export default { async scheduled controller { // controller.cron === "30 2 1" // controller.scheduledTime === 1737340200000 await doWork ; }, }; Parse cron expressions parse-cron-expressions js const next = Bun.cron.parse " /15 " ; // next quarter-hour const weekday = Bun.cron.parse "0 9 MON-FRI" ; // next weekday at 9 AM UTC const yearly = Bun.cron.parse "@yearly" ; // next January 1st // Chain calls to get a sequence const first = Bun.cron.parse "0 ", from ; const second = Bun.cron.parse "0 ", first ; Returns a Date or null if no match exists within ~4 years e.g. February 30th . Remove a job remove-a-job await Bun.cron.remove "weekly-report" ; Cron expression features cron-expression-features Standard 5-field format with , , , - , / operators Named days and months : MON – SUN , JAN – DEC case-insensitive, full names supported Nicknames : @yearly , @monthly , @weekly , @daily , @hourly POSIX OR logic : when both day-of-month and day-of-week are restricted, either matching fires the job Sunday as 7 : weekday field accepts both 0 and 7 Platform backends platform-backends | Platform | Backend | Logs | |---|---|---| | Linux | crontab | journalctl -u cron | | macOS | launchd plist | /tmp/bun.cron.