robobun
3898ed5e3f
perf: pack boolean flags and reorder fields to reduce struct padding ( #25627 )
2025-12-21 17:12:42 -08:00
pfg
05d0475c6c
Update to zig 0.15.2 ( #24204 )
...
Fixes ENG-21287
Build times, from `bun run build && echo '//' >> src/main.zig && time
bun run build`
|Platform|0.14.1|0.15.2|Speedup|
|-|-|-|-|
|macos debug asan|126.90s|106.27s|1.19x|
|macos debug noasan|60.62s|50.85s|1.19x|
|linux debug asan|292.77s|241.45s|1.21x|
|linux debug noasan|146.58s|130.94s|1.12x|
|linux debug use_llvm=false|n/a|78.27s|1.87x|
|windows debug asan|177.13s|142.55s|1.24x|
Runtime performance:
- next build memory usage may have gone up by 5%. Otherwise seems the
same. Some code with writers may have gotten slower, especially one
instance of a counting writer and a few instances of unbuffered writers
that now have vtable overhead.
- File size reduced by 800kb (from 100.2mb to 99.4mb)
Improvements:
- `@export` hack is no longer needed for watch
- native x86_64 backend for linux builds faster. to use it, set use_llvm
false and no_link_obj false. also set `ASAN_OPTIONS=detect_leaks=0`
otherwise it will spam the output with tens of thousands of lines of
debug info errors. may need to use the zig lldb fork for debugging.
- zig test-obj, which we will be able to use for zig unit tests
Still an issue:
- false 'dependency loop' errors remain in watch mode
- watch mode crashes observed
Follow-up:
- [ ] search `comptime Writer: type` and `comptime W: type` and remove
- [ ] remove format_mode in our zig fork
- [ ] remove deprecated.zig autoFormatLabelFallback
- [ ] remove deprecated.zig autoFormatLabel
- [ ] remove deprecated.BufferedWriter and BufferedReader
- [ ] remove override_no_export_cpp_apis as it is no longer needed
- [ ] css Parser(W) -> Parser, and remove all the comptime writer: type
params
- [ ] remove deprecated writer fully
Files that add lines:
```
649 src/deprecated.zig
167 scripts/pack-codegen-for-zig-team.ts
54 scripts/cleartrace-impl.js
46 scripts/cleartrace.ts
43 src/windows.zig
18 src/fs.zig
17 src/bun.js/ConsoleObject.zig
16 src/output.zig
12 src/bun.js/test/debug.zig
12 src/bun.js/node/node_fs.zig
8 src/env_loader.zig
7 src/css/printer.zig
7 src/cli/init_command.zig
7 src/bun.js/node.zig
6 src/string/escapeRegExp.zig
6 src/install/PnpmMatcher.zig
5 src/bun.js/webcore/Blob.zig
4 src/crash_handler.zig
4 src/bun.zig
3 src/install/lockfile/bun.lock.zig
3 src/cli/update_interactive_command.zig
3 src/cli/pack_command.zig
3 build.zig
2 src/Progress.zig
2 src/install/lockfile/lockfile_json_stringify_for_debugging.zig
2 src/css/small_list.zig
2 src/bun.js/webcore/prompt.zig
1 test/internal/ban-words.test.ts
1 test/internal/ban-limits.json
1 src/watcher/WatcherTrace.zig
1 src/transpiler.zig
1 src/shell/builtin/cp.zig
1 src/js_printer.zig
1 src/io/PipeReader.zig
1 src/install/bin.zig
1 src/css/selectors/selector.zig
1 src/cli/run_command.zig
1 src/bun.js/RuntimeTranspilerStore.zig
1 src/bun.js/bindings/JSRef.zig
1 src/bake/DevServer.zig
```
Files that remove lines:
```
-1 src/test/recover.zig
-1 src/sql/postgres/SocketMonitor.zig
-1 src/sql/mysql/MySQLRequestQueue.zig
-1 src/sourcemap/CodeCoverage.zig
-1 src/css/values/color_js.zig
-1 src/compile_target.zig
-1 src/bundler/linker_context/convertStmtsForChunk.zig
-1 src/bundler/bundle_v2.zig
-1 src/bun.js/webcore/blob/read_file.zig
-1 src/ast/base.zig
-2 src/sql/postgres/protocol/ArrayList.zig
-2 src/shell/builtin/mkdir.zig
-2 src/install/PackageManager/patchPackage.zig
-2 src/install/PackageManager/PackageManagerDirectories.zig
-2 src/fmt.zig
-2 src/css/declaration.zig
-2 src/css/css_parser.zig
-2 src/collections/baby_list.zig
-2 src/bun.js/bindings/ZigStackFrame.zig
-2 src/ast/E.zig
-3 src/StandaloneModuleGraph.zig
-3 src/deps/picohttp.zig
-3 src/deps/libuv.zig
-3 src/btjs.zig
-4 src/threading/Futex.zig
-4 src/shell/builtin/touch.zig
-4 src/meta.zig
-4 src/install/lockfile.zig
-4 src/css/selectors/parser.zig
-5 src/shell/interpreter.zig
-5 src/css/error.zig
-5 src/bun.js/web_worker.zig
-5 src/bun.js.zig
-6 src/cli/test_command.zig
-6 src/bun.js/VirtualMachine.zig
-6 src/bun.js/uuid.zig
-6 src/bun.js/bindings/JSValue.zig
-9 src/bun.js/test/pretty_format.zig
-9 src/bun.js/api/BunObject.zig
-14 src/install/install_binding.zig
-14 src/fd.zig
-14 src/bun.js/node/path.zig
-14 scripts/pack-codegen-for-zig-team.sh
-17 src/bun.js/test/diff_format.zig
```
`git diff --numstat origin/main...HEAD | awk '{ print ($1-$2)"\t"$3 }' |
sort -rn`
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com >
Co-authored-by: Meghan Denny <meghan@bun.com >
Co-authored-by: tayor.fish <contact@taylor.fish >
2025-11-10 14:38:26 -08:00
robobun
c5def80191
Fix Output.enable_ansi_colors usage to check stdout vs stderr ( #24212 )
...
## Summary
Updated all 49 usages of `Output.enable_ansi_colors` to properly check
either `Output.enable_ansi_colors_stdout` or
`Output.enable_ansi_colors_stderr` based on their output destination.
This prevents bugs where ANSI colors are checked against the wrong
stream (e.g., checking stdout colors when writing to stderr).
## Changes
### Added
- `Output.enable_ansi_colors` now a `@compileError` to prevent future
misuse with helpful error message directing to correct variants
### Deleted
- `Output.isEmojiEnabled()` - replaced all usages with
`enable_ansi_colors_stderr` (all were error/progress output)
- `Output.prettyWithPrinterFn()` - removed unused dead code
### Updated by Output Destination
**Stderr (error/diagnostic output):**
- logger.zig: Log messages and errors
- crash_handler.zig: Crash reports and stack traces (10 instances)
- PackageInstaller.zig: Error messages from lifecycle scripts (3
instances)
- JSValue.zig: Test expectation error messages
- JSGlobalObject.zig: Exception throwing
- pack_command.zig: Progress indicators
- VirtualMachine.zig: Exception printing (2 instances)
- Test expect files: Test failure messages and diffs (10 instances)
- diff_format.zig: Test diff output
- ProgressStrings.zig: Package manager progress emojis (6 functions)
- security_scanner.zig: Security scan progress emoji
- output.zig: panic(), resetTerminal()
**Stdout (primary output/interactive UI):**
- hot_reloader.zig: Terminal clearing on reload
- Version.zig: Version diff formatting
- install_with_manager.zig: Package installation tree
- update_interactive_command.zig: Interactive update UI (2 instances)
- init_command.zig: Interactive radio buttons
- create_command.zig: Template creation output (2 instances)
- outdated_command.zig: Outdated packages table
- publish_command.zig: Box drawing characters (6 instances)
**Backward Compatible:**
- BunObject.zig: `Bun.enableANSIColors` property returns `(stdout ||
stderr)` to maintain compatibility
- fmt.zig: Removed unused `.default` field from Options struct
## Test Plan
- ✅ All changes compile successfully with `bun run zig:check`
- ✅ Verified all 49 usages have been updated to appropriate variant
- ✅ Verified no remaining references to deprecated functions/variables
- ✅ Compile error triggers if someone tries to use
`Output.enable_ansi_colors`
## Stats
- 24 files changed
- 58 insertions, 77 deletions (net -19 lines)
- 49 usages correctly updated
- 3 items deleted/deprecated
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-authored-by: Claude Bot <claude-bot@bun.sh >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-31 19:08:41 -07:00
Meghan Denny
2afafbfa23
zig: remove Location.suggestion ( #23478 )
2025-10-27 12:26:21 -07:00
SUZUKI Sosuke
578a47ce4a
Fix segmentation fault during building stack traces string ( #22902 )
...
### What does this PR do?
Bun sometimes crashes with a segmentation fault while generating stack
traces.
the following might be happening in `remapZigException`:
1. The first populateStackTrace (OnlyPosition) sets `frames_len` (e.g.,
frames_len = 5)
613aea1787/src/bun.js/bindings/bindings.cpp (L4793)
```
[frame1, frame2, frame3, frame4, frame5]
```
2. Frame filtering in remapZigException reduces `frames_len` (e.g.,
frames_len = 3)
613aea1787/src/bun.js/VirtualMachine.zig (L2686-L2704)
```
[frame1, frame4, frame5, (frame4, frame5)]
// frame2 and frame3 are removed by filtering; frames_len is set to 3 here, but frame4 and frame5 remain in their original positions
```
3. The second populateStackTrace (OnlySourceLine) increases `frames_len`
(e.g., frames_len = 5)
613aea1787/src/bun.js/bindings/bindings.cpp (L4793)
```
[frame1, frame4, frame5, frame4, frame5]
```
When deinit is executed on these frames, the ref count is excessively
decremented (for frame4 and frame5), resulting in a UAF.
### How did you verify your code works?
WIP. I'm working on creating minimal reproduction code.
However, I've confirmed that `twenty-server` tests passes with this PR.
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2025-10-04 01:56:42 -07:00
Michael H
270f843f65
fix logger.zig from negative value error ( #21876 )
...
### What does this PR do?
you cant `-1` on `0` and expect it to work well in this case with
`@intCast`
### How did you verify your code works?
haven't actually, but will try the ci build
2025-08-14 21:12:22 -07:00
taylor.fish
07cd45deae
Refactor Zig imports and file structure (part 1) ( #21270 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-07-22 17:51:38 -07:00
pfg
83760fc446
Sort imports in all files ( #21119 )
...
Co-authored-by: taylor.fish <contact@taylor.fish >
2025-07-21 13:26:47 -07:00
Meghan Denny
875604a42b
safety: a lot more exception checker progress ( #20956 )
2025-07-16 00:11:19 -07:00
Jarred Sumner
454316ffc3
Implement "node:module"'s findSourceMap and SourceMap class ( #20863 )
...
Co-authored-by: Claude <claude@anthropic.ai >
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Jarred-Sumner <709451+Jarred-Sumner@users.noreply.github.com >
2025-07-07 23:08:12 -07:00
Meghan Denny
068997b529
make node:dns,net,cluster,tls exception checker clear ( #20658 )
...
Co-authored-by: nektro <5464072+nektro@users.noreply.github.com >
2025-07-03 18:28:38 -07:00
Meghan Denny
6b4662ff55
zig: .jsUndefined -> .js_undefined ( #20377 )
...
Co-authored-by: nektro <5464072+nektro@users.noreply.github.com >
2025-06-13 16:14:57 -07:00
Meghan Denny
dedd433cbf
zig: prefer .jsUndefined() over .undefined for JSValue ( #20332 )
2025-06-12 13:18:46 -07:00
Meghan Denny
284de53f26
safety: audit and add missing exception checks to JSC::constructArray+constructEmptyArray ( #20119 )
2025-05-31 20:05:02 -07:00
Jarred Sumner
3ea6133c46
CI: Remove unused top-level decls in formatter in zig ( #19879 )
...
Co-authored-by: Jarred-Sumner <709451+Jarred-Sumner@users.noreply.github.com >
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
2025-05-23 22:49:48 -07:00
Dylan Conway
a0819e9d02
fix more node:timers tests ( #19432 )
...
Co-authored-by: 190n <ben@bun.sh >
2025-05-02 20:50:02 -07:00
chloe caruso
3349c995b5
no usingnamespace, organize jsc namespace, enable -fincremental ( #19122 )
...
Co-authored-by: Dylan Conway <35280289+dylan-conway@users.noreply.github.com >
2025-04-22 16:34:15 -07:00
chloe caruso
4ec410e0d7
internal: make @import("bun") work in zig ( #19096 )
2025-04-17 12:32:47 -07:00
Jarred Sumner
879fdd7ef6
Bump Zig again ( #18948 )
2025-04-11 19:13:20 -07:00
Zack Radisic
e6cb0de539
CSS modules ( #17958 )
2025-03-06 23:35:06 -08:00
chloe caruso
25c95f3bdc
hmr stability fixes ( #17794 )
2025-03-01 00:07:20 -08:00
Meghan Denny
1574df835e
zig: make JSValue.toBunString use JSError ( #17648 )
2025-02-25 13:04:44 -08:00
chloe caruso
3b956757d9
disable async in script tags in dev server ( #17517 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2025-02-21 11:28:27 -08:00
chloe caruso
dc5fae461d
Implement simple barrel file optimization ( #17514 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2025-02-20 22:50:51 -08:00
Don Isaac
cdf62b35ff
refactor: move string-like structs into string module ( #17369 )
2025-02-15 21:52:43 -08:00
Meghan Denny
26d3688e53
zig: update to 0.14.0-dev ( #16862 )
...
Co-authored-by: nektro <5464072+nektro@users.noreply.github.com >
2025-02-01 01:11:02 -08:00
Jarred Sumner
522f2b91a0
Introduce experimental support for on-demand bundling via HTML imports and Bun.serve() ( #16395 )
2025-01-15 01:00:23 -08:00
chloe caruso
834ad11d48
get node:fs tests passing part 1 ( #16270 )
2025-01-14 20:53:02 -08:00
dave caruso
41924211f2
add throw: true in Bun.build, to be made default in 1.2 ( #15861 )
2024-12-18 19:27:59 -08:00
pfg
bcf023c829
Implement expect().toMatchInlineSnapshot() ( #15570 )
2024-12-05 13:07:10 -08:00
dave caruso
8aa451c2dc
bake(dev): plugins in dev server, with other fixes ( #15467 )
...
Co-authored-by: paperdave <paperdave@users.noreply.github.com >
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2024-11-29 19:07:56 -08:00
dave caruso
dc01a5d6a8
feat(DevServer): batch bundles & run them asynchronously ( #15181 )
...
Co-authored-by: Ashcon Partovi <ashcon@partovi.net >
2024-11-25 18:55:47 -08:00
Meghan Denny
c3f63bcdc4
zig: make throwInvalidArguments use JSError ( #15305 )
2024-11-21 16:19:13 -08:00
Meghan Denny
befb269b2d
zig: align fromJS methods to using JSError ( #15165 )
2024-11-15 22:14:18 -08:00
Dylan Conway
62881ee36b
Redact secrets in bunfig.toml and npmrc logs ( #14919 )
2024-10-31 18:44:24 -07:00
dave caruso
e93c5ad993
feat(bake): css, production build, dev separateSSRGraph=false ( #14622 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
Co-authored-by: paperdave <paperdave@users.noreply.github.com >
Co-authored-by: Jarred-Sumner <Jarred-Sumner@users.noreply.github.com >
2024-10-27 01:57:36 -07:00
dave caruso
d2fe1ce1c8
feat(bake): handle bundle errors, re-assemble full client payloads, initial error modal ( #14504 )
2024-10-14 16:49:38 -07:00
dave caruso
514d37b3d2
kit: implement server components dev server ( #14025 )
2024-09-27 20:53:39 -07:00
Zack Radisic
274e5a2022
CSS Parser ( #14122 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2024-09-26 13:39:26 -07:00
dave caruso
c2c2048072
framework api: init / work in progress ( #13215 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2024-09-12 16:44:03 -07:00
dave caruso
70ca2b76c3
fix: check if we are crashing before exiting gracefully ( #12865 )
2024-07-26 20:00:02 -07:00
Meghan Denny
f7cb2da542
use .undefined literal instead of jsUndefined() call ( #12834 )
2024-07-26 04:03:55 -07:00
Zack Radisic
c85dd4e3bf
feat: bun patch ( #11470 )
...
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com >
Co-authored-by: zackradisic <zackradisic@users.noreply.github.com >
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2024-06-06 17:48:05 -07:00
Georgijs
545cb546cc
feat(cli): --filter flag ( #8185 )
...
* Skeleton code for `bun run --workspace`
* Update run_command.zig
* implement directory traversal to find workspace root
* finish --workspace implementation
* clean up changes in run_command.zig
* add workspace tests, update harness to handle nested dirs
* [autofix.ci] apply automated fixes
* basic filtering
* [autofix.ci] apply automated fixes
* working filter without patterns
* update tests, filter mostly working
* simplify package name parsing, commit tests
* support filter even without workspace setup
* move filter arg handling to separate source file
* use bun.sys.chdir, match root package for scripts
* fix exit code handling
* ignore node_modules and directories starting with . in --filter
* progress converting --filter to use iterators
* convert filtering to use iterators
* cleanup
* implement DirEntry access method for glob (currently crashing)
* cleanup and fixes
* run js files in subprocess when filter flag passed
* clean up dead code
* fix fd leak in run_command.zig
* [autofix.ci] apply automated fixes
* fix issues after merge
* use posix-spawn in runBinary, fix resource PATH variable resource leak
* move filter argument to runtime category
* fix test harness
* add js and binary tests to filter-workspace
* [autofix.ci] apply automated fixes
* fix compile after merge
* [autofix.ci] apply automated fixes
* clean up filter-workspace test
* [autofix.ci] apply automated fixes
* fixes to running binaries
* fix actually setting cwd_override
* windows fixes
* address some review comments
* handle malformed JSON
* add various tests
* [autofix.ci] apply automated fixes
* update docs for filter
* [autofix.ci] apply automated fixes
* reset tinycc commit
* filtered run prototype
* make pretty
* implement abort handler (not working)
* make prettier
* prep for windows
* windows path and printing fixes
* implement log-style output (not tui)
* fix issues when logging to file
* revert a bunch of unecessary changes
* cleanup
* implement dependency order execution
* detect circular dependencies, fix cancel hang
* Fix `$PATH`
* ignore dep order on loop, stream on linux, sort pkgs
* support pre and post scripts
* add more filter tests, print elapsed time
* enable 'bun --filter' without run
* fix harness after merge
* [autofix.ci] apply automated fixes
* print number of scripts we're waiting for
* update docs, fix windows build
* fix tests on windows
* [autofix.ci] apply automated fixes
* fix uninitialized memory
* use terminal synchronized update sequences
* Add skip list
* Preallocate
* Use current bun in tests
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com >
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2024-04-11 19:06:50 -07:00
Jarred Sumner
688844b472
refactor: ban std.debug.assert ( #10168 )
...
* Ban `std.debug.assert`
* Create .clangd
* Update lint.yml
* Update linter.ts
* update
* lint
* Update linter.ts
* Update linter.ts
* update
* Update linter.ts
* update
* Update linter.ts
* more
* Update install.zig
* words
* Remove UB
2024-04-11 17:52:29 -07:00
Meghan Denny
e209ae81dd
meta: ensure there's a single 'bun' import per file in zig ( #10137 )
...
* meta: ensure there's a single 'bun' import per file in zig
* undo this change in codegen
2024-04-09 22:41:07 -07:00
Meghan Denny
be0896e204
remove while loops where a for would be more efficient ( #8131 )
...
* remove while loops where a for would be more efficient
* this needs to be a stack copy
* this can use the better loop
* this was translated wrong
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com >
2024-01-13 19:13:54 -08:00
Meghan Denny
45bd2264e3
more small undefined fixes ( #8133 )
2024-01-12 18:17:53 -08:00
Meghan Denny
8733748eb6
remove bun.assertDefined, comparing against undefined is UB ( #8137 )
2024-01-12 18:16:04 -08:00
Dylan Conway
98d253d9bb
fix(install): incremental support for windows ( #7991 )
...
* update for windows
* use correct sizes
* mode
* fchmod and correct error checking
* some progress
* walker_skippable.zig for windows
* no segfault
* comptime only
* normalize
* create files in .bin
* bun.sys.write
* string formatters in bun.fmt, diriterator enum
* isAllASCII comptime
* update more
* some cleanup
* fix 1
* fix 2
* simlink
* cast
* remove normalize
* to zig err
* update fchmod
* fixup
* fix running bin files
* --bun for running binaries
* --bun for scripts
* remove binary linking
* update
* remove todo
* todos
* fix
* simlink
* cast
* more cast
2024-01-11 22:00:47 -08:00