Plans

Window.js is an open-source project and doesn’t have an official roadmap.

This page lists potential future subprojects. Consider contributing to the project and helping with these! Get in contact to get started.

Build

One-liner build

The current build involves multiple parts: fetching dependencies, building v8, building skia, and then building Window.js.

Ideally, Window.js would build with a single cmake command, including fetching any missing dependencies or updating as needed.

Compiler support

Window.js should support the major compilers: MSVC on Windows, and GCC on Linux. Currently, Window.js has only been tested with LLVM.

Support for Mac arm64

New Macs have arm64 CPUs. They should be supported natively.

Continuous builds and tests

Ideally, every commit would trigger automated builds on each supported platform and run the full test suite.

Reproducible builds

Ideally, building with the same compiler at the same checked out commit would produce exacly the same Window.js binary, byte for byte.

Integrate with package managers

Make Window.js easy to install on Window, Mac and Linux via the more popular package managers like chocolatey, homebrew, apt, rpm, etc.

Performance

Compiled binary size

Understanding the major contributions to the binary size and trimming it is always a welcome contribution. The v8 library is particularly large.

GC pauses

Configuring and/or using v8 internally in a way that reduces or eliminates all GC pauses.

Performance

Tune the v8 settings for maximal performance. For example, Window.js is not suited to run third-party, untrusted code and can turn off mitigations for VM exploits like Meltdown and Spectre.

AOT compilation

Instead of using JIT, force modules loaded by Window.js to be compiled during startup or even ahead of time, to avoid JIT stalls later.

App startup performance

Window.js should paint the first frame as soon as possible.

Creating a window and the GL context on Windows is particularly expensive today.

See the –profile-startup command line flag to profile this.

Testing

Test coverage

Window.js doesn’t have as much test coverage as it should. Ideally, all APIs would have coverage.

Testing should also cover performance: the startup time should not regress, the time to produce reasonable frames should be consistent, etc.

Examples and demos

Sample code that demonstrates how to build useful applications with Window.js is welcome. Especially code that is easy to read and understand, and that would be helpful for new programmers.

Benchmarks

Similar to test coverage, ideally Window.js would also have benchmarks to track performance over time.

Improve platform integration

There are always small details on each platform.

For example, the WGL context on Windows doesn’t always show the first frame when the native window is first shown to the user, causing a flicker. This is most likely due to Aero.

Window.js should give consistent behavior on all platforms, and issues like this one should be understood and fixed.

APIs

WebGL

Window.js should support the WebGL APIs.

Sound

Window.js should have a sound API.

Networking

Window.js should have a networking API. The minimal API would mimic the fetch API in HTML5; further extensions should support TCP, UDP and WebSockets, both for client and for server usage.

Crash reporting

Window.js should support collecting crash information and letting the application code eventually report it, via a networking API.

Unicode support

Window.js should support text in any language.

Spawn native processes

To support writing a terminal emulator in Window.js?

Video playback

Support loading, displaying and controlling video.

Vulkan, WebGPU

Give access to low-level GPU programming APIs.

Features

Support multiple monitors

This is untested.

Headless mode and restricted APIs

The Process API should support running subprocesses without a window (headless), and should supporting restricting the APIs that a subprocess can access (file, networking, etc.)

v8 snapshot support

v8 supports creating heap snapshots for faster startups. Window.js should make it easy to create a snapshot and to load it. This feature is only worth maintaining if it yields a reasonable speedup on startup.

FFI support

Window.js should have a foreign-function interface to make it possible to call C functions loaded dynamically from DLLs. This makes it possible to call native libraries from Window.js.

WASM support

v8 supports WASM, and Window.js should support it too.

Asset bundling

For ease of distribution, Window.js should support bundling Javascript sources and any other asset files into a single .zip file, and start execution from that .zip file later. This should work transparently for the application: APIs like asset file loading and importing scripts should just work.

A step further would be to support merging the main scripts into the binary itself, so that windowjs.exe could become a ready-to-distribute executable for the main app. See QuickJS for an example.

Tools for Window.js users

Better tooling

Frame time graphs, CPU and heap profiles.

Better console

Better console.dir support, better input editing support, better object inspection; help() as in Python to view API documentation in the console would be great.

Support top-level await in the console.

Typescript integration

Make it easy to write Window.js application in Typescript.

Reloading with F5 should show any compilation errors in the main Window.js window.

Tools for Window.js developers

Static analyzers

clang-format, lint, ASan, MSan, TSan.

Community

Improve the documentation

Correct grammar; clearer and more succint documentation.

Documentation should be comprehensive: document every API available and all of its variations.

Improve the website

Make the website clearer, easier to navigate.

Improve the design and color scheme.

Have a logo for Window.js?

Help others

Answer any questions on StackOverflow, the mailing list and the discussion forums.

Tutorials

There are excellent guides at webglfundamentals.org and learnopengl.com for getting started with GL programming. Convert their code to run in Window.js and provide that code as an example.