Skip to content

You might have to run this multiple times.

JSTime uses a fork of WebKit with a small number of changes.

It’s important to periodically update WebKit for many reasons:

  • Security
  • Performance
  • Compatibility
  • …and many more.

To upgrade, first find the commit in JSTime’s WebKit fork (not JSTime!) between when we last upgraded and now.

Terminal window
$ cd src/jstime.js/WebKit # In the WebKit directory! not jstime
$ git checkout $COMMIT

This is the main command to run:

Terminal window
$ git pull https://github.com/WebKit/WebKit.git main --no-rebase --allow-unrelated-histories -X theirs

Then, you will likely see some silly merge conflicts. Fix them and then run:

Terminal window
# You might have to run this multiple times.
$ rm -rf WebKitBuild
# Go to JSTime's directory! Not WebKit.
cd ../../../../
make jsc-build-mac-compile

Make sure that JSC’s CLI is able to load successfully. This verifies that the build is working.

You know this worked when it printed help options. If it complains about symbols, crashes, or anything else that looks wrong, something is wrong.

Terminal window
src/jstime.js/WebKit/WebKitBuild/Release/bin/jsc --help

Then, clear out our bindings and regenerate the C++<>Zig headers:

Terminal window
make clean-bindings headers builtins

Now update JSTime’s bindings wherever there are compiler errors:

Terminal window
# It will take awhile if you don't pass -j here
make bindings -j10

This is the hard part. It might involve digging through WebKit’s commit history to figure out what changed and why. Fortunately, WebKit contributors write great commit messages.