JSPM

  • Created
  • Published
  • Downloads 19
  • Score
    100M100P100Q70650F
  • License MIT

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: {
                string: '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.