node package manager
Love JavaScript? Your insights can make it even better. Take the 2017 JavaScript Ecosystem Survey »



Simplify your live development workflow ❤️

Build Status NPM version

Powered by your github ⭐s

I consult as a pure frontend developer and normally have all JS / HTML generated into a public folder that we then upload to our CDN (normally S3). We have a few projects with "start": "npm run emails:live & npm run pdfs:live & npm run app:live". It was time for something simpler. Perhaps you are are same 🌹

Think of it as concurrently, nodemon and light-server merged to play well with each other 🌹

Quick starts


npm install starts --save-dev --save-exact

Create a starts.ts file

import {starts} from "starts";
  serve: {
    dir "./public"
   * If you edit any of the files on the right, the command on the left executes.
   * and if we were serving something, the connected web pages reload as well.
  run: [
    { cmd: "npm run emails", watch: ["src/emails"] },
    { cmd: "npm run pdfs", watch: ["src/pdfs"] },
    { cmd: "npm run app", watch: ["src/app"] },

Run it npm install ts-node --save --save-exact with package.json:

  "scripts": {
    "start": "ts-node ./src/starts.ts"  

Ofcourse you can use js / raw node if you want to. But why would you.


All the config options:

export type ServeConfig = {
  dir?: string
  port?: number
  host?: string
export type RunConfig = {
  cmd: string
  watch?: string[]
  reload?: /** Default */ 'all' | 'css' | 'none'
  keepAlive?: boolean
 * The complete config
export type StartsConfig = {
  verbose?: boolean
  serve?: ServeConfig
  run?: RunConfig[]
  /** autorun initially */
  initialRun?: boolean