Skip to content

What is JSTime?

JSTime is an all-in-one toolkit for JavaScript and TypeScript apps. It ships as a single executable called jstime​.

At its core is the JSTime runtime, a fast JavaScript runtime designed as a drop-in replacement for Node.js. It’s written in Zig and powered by JavaScriptCore under the hood, dramatically reducing startup times and memory usage.

Terminal window
$ jstime run index.tsx # TS and JSX supported out of the box

​​The jstime​ command-line tool also implements a script runner and Node.js-compatible package manager (jspm), all significantly faster than existing tools and usable in existing Node.js projects with little to no changes necessary.

Terminal window
$ jstime run start # run the `start` script
$ jspm install <pkg>​ # install a package
$ jstimex cowsay "Hello, world!" # execute a package

​​JSTime is still under development. Use it to speed up your development workflows or run simpler production code in resource-constrained environments like serverless functions. We’re working on more complete Node.js compatibility and integration with existing frameworks. Join the Discord and watch the GitHub repository to keep tabs on future releases.

Get started with one of the quick links below, or read on to learn more about JSTime.

JavaScript (or, more formally, ECMAScript) is just a specification for a programming language. Anyone can write a JavaScript engine that ingests a valid JavaScript program and executes it. The two most popular engines in use today are V8 (developed by Google) and JavaScriptCore (developed by Apple). Both are open source.

But most JavaScript programs don’t run in a vacuum. They need a way to access the outside world to perform useful tasks. This is where runtimes come in. They implement additional APIs that are then made available to the JavaScript programs they execute. Notably, browsers ship with JavaScript runtimes that implement a set of Web-specific APIs that are exposed via the global window object. Any JavaScript code executed by the browser can use these APIs to implement interactive or dynamic behavior in the context of the current webpage.

Similarly, Node.js is a JavaScript runtime that can be used in non-browser environments, like servers. JavaScript programs executed by Node.js have access to a set of Node.js-specific globals like Buffer, process, and __dirname in addition to built-in modules for performing OS-level tasks like reading/writing files (node:fs) and networking (node:net, node:http). Node.js also implements a CommonJS-based module system and resolution algorithm that pre-dates JavaScript’s native module system.

JSTime is designed as a faster, leaner, more modern replacement for Node.js.

JSTime is designed from the ground-up with today’s JavaScript ecosystem in mind.

  • Speed. JSTime processes start 4x faster than Node.js currently (try it yourself!)
  • TypeScript & JSX support. You can directly execute .jsx, .ts, and .tsx files; JSTime’s transpiler converts these to vanilla JavaScript before execution.
  • ESM & CommonJS compatibility. The world is moving towards ES modules (ESM), but millions of packages on npm still require CommonJS. JSTime recommends ES modules, but supports CommonJS.
  • Web-standard APIs. JSTime implements standard Web APIs like fetch, WebSocket, and ReadableStream. JSTime is powered by the JavaScriptCore engine, which is developed by Apple for Safari, so some APIs like Headers and URL directly use Safari’s implementation.
  • Node.js compatibility. In addition to supporting Node-style module resolution, JSTime aims for full compatibility with built-in Node.js globals (process, Buffer) and modules (path, fs, http, etc.) This is an ongoing effort that is not complete. Refer to the compatibility page for the current status.

JSTime is more than a runtime. The long-term goal is to be a cohesive, infrastructural toolkit for building apps with JavaScript/TypeScript, including a package manager (jspm), transpiler, and script runner.