JSPM

  • Created
  • Published
  • Downloads 2
  • Score
    100M100P100Q90341F

A TUI for local development.

Package Exports

  • localdev-tui

Readme

localdev

An interactive TUI for local development.

A video of using localdev

Usage

Install the localdev-tui npm package using your favorite JavaScript package manager:

npm install --save-dev localdev-tui

Then, create a localdev.config.mjs file in the root of your project:

// @ts-check

/** @type {import('localdev-tui').LocaldevConfig} */
export default {
  servicesToLog: {
    'my-website': true
  },
  services: {
    'my-website': {
      healthCheck: {
        port: 3001
      },
      command: "npm run start"
    },
  },
  localDomains: ['my-website.test'],
  proxyRouter(req) {
    const hostname = req.hostname

    if (hostname === 'my-website.test') {
      return 'http://127.0.0.1:3001'
    }
  }
}

Then, add a dev script in your project's package.json file:

{
  "scripts": {
    "dev": "localdev",
    // ...
  }
}

Now, you can run npm run dev (or the equivalent for your package manager) to start localdev!

Motivation

Often times, developing a complex application involves running many separate services that interact with each other. During development, it's tedious to manually run every service in separate terminals every time. Instead, it's a lot easier to have one dev server that automatically manages multiple development processes.

However, building a dev server isn't as easy as simply running all programs concurrently and outputting all their logs. Many services output a significant amount of logging output (especially during debugging) that can quickly clutter a single terminal window.

Thus, an interactive solution is needed, and that's where building a TUI for local development comes into play.

Why not Kubernetes?

You might recognize that managing multiple services sounds similar to Kubernetes, and you wouldn't be mistaken. Kubernetes does solve a similar use case, which we heavily rely on for deployment.

However, during development, Kubernetes incurs significant performance and DX (developer experience) tradeoffs. Running development processes in a VM or Docker can be 10x slower than running the process on the host machine, not to mention the extra amount of disk space, CPU and memory a local Kubernetes cluster running minikube would take up.

Thus, we decided that we will instead focus on building a great developer experience by running development processes on the host machine.