An introduction to Bun.sh (Another JavaScript Runtime)

Bun.sh an another Javascript runtime. We already had and covered Deno and Node.JS multiple times. It seems like there is going to be no dearth for Javascript runtime in near future.

Bun.sh

In my honest opinion, these many runtimes only accelerated development of ECMAScript standards and thus making JavaScript as a programming languages better. And that’s the only good thing I see. (Anyone; remember Javascript before 2016 or ES6)

As a community we should have tried to make Node.JS better instead of coming up with runtime every-time we find faults in Node.JS. There is no doubt that Node.JS have flaws; so does every other programming language that existed on globe. That’s enough of my rants. Let’s Jump in


Introduction

As per Bun.sh

Bun is a fast all-in-one JavaScript runtime

The objective of Bun is to provide ability to bundle, transpile, install, and run JavaScript & TypeScript projects — all in Bun. Bun is a new JavaScript runtime with a native bundler, transpiler, task runner, and npm client built-in.

That indicates that Bun may prove to be a drop in replacement for Node.JS and other Javascript runtime code, that’s a good news as same can not be said for Deno

Bun was built from scratch keeping following points in mind

  • Start fast (it has the edge in mind).
  • Performance (extending JavaScriptCore, the engine).
  • Being a great and complete tool (bundler, transpiler, package manager).

It is claimed that Bun implements thousands of Node.JS API and at the same time modern WebAPI.

So in the same breath, it is claimed that they backported all Node.JS API and WebAPI, but with a different JavaScript engine (Bun uses JavaScriptCore engine) to improve performance. So far it looks like just a replacement of Javascript engine (for performance enhancement) and few other goodies (i.e bundle, transpile and run)

Installation

It’s been a lot of rant, let’s dive in. To install Bun run following curl command to download and install Bun

curl -fsSL https://bun.sh/install | bash

First Web server

As claimed; following code would look familiar to Node.JS developers.

// server.js
export default {
  port: 4000,
  fetch(request) {
    return new Response("Welcome to our World");
  },
};

and then run it with

bun run server.js

CLI Commands

Bun implements most of NPM commands we are used to; just replace npm with bun and there you go

Running a script

To run a JavaScript file, you just need to use bun run <filepath>.js or even TypeScript files.

Installing packages

To install JavaScript packages (including npm packages). Just replace npm install <package> with bun install <package>

Running Tests

Bun has inbuilt CLI for running tests. One can run tests using bun wiptest

Upgrading Bun

To upgrade Bun; bun provides bun upgrade command. One can also choose to run canary builds by using --canary flag to upgrade command

Other Important facts

Since Bun is drop-in replacement for existing JavaScript runtime; it uses package.json for package management. To add/remove packages from package.json; use

bun add <package>
bun remove <package>

Bun also loads .env files atomatically, no need to load it explicitly using require("dotenv").config()

Bun auto transpile .ts and .tsx file on import and also reads our tsconfig.json

Bun comes with type support using bun-types

Note: As of writing this article Bun is still in beta. So be aware before using this. One can use it for understand it better and play around with it


About The Author

I am Pankaj Baagwan, a System Design Architect. A Computer Scientist by heart, process enthusiast, and open source author/contributor/writer. Advocates Karma. Love working with cutting edge, fascinating, open source technologies.

  • To consult Pankaj Bagwan on System Design, Cyber Security and Application Development, SEO and SMO, please reach out at me[at]bagwanpankaj[dot]com

  • For promotion/advertisement of your services and products on this blog, please reach out at me[at]bagwanpankaj[dot]com

Stay tuned <3. Signing off for RAAM