NightJar: Your dev servers, and the ports they refuse to let go of, in one window.

Group projects into workspaces, run terminals side by side, and see every process, log and port without leaving NightJar.

Lite is free forever for up to 3 apps. macOS, Linux and Windows.

outputportsenvironment
$ pnpm dev
> [email protected] dev ~/code/storefront
> next dev --turbopack
▲ Next.js 15.2.1
- Local: http://localhost:3000
- Environments: .env.local
✓ Ready in 842ms
○ Compiling /dashboard ...
✓ Compiled /dashboard in 311ms
runningpid 48217 · up 2h 14m:3000 ↗
  • Eight terminal tabs.

  • EADDRINUSE, and you do not know who.

  • pnpm dev forks a grandchild that outlives Ctrl-C.

Point the folder, get the commands.

NightJar reads the project and offers what can run. Monorepos too: apps/api dev lands in the right folder.

~/code/storefrontpnpm workspace (3 packages)
Detected commands

$ cd ~/code/storefront && pnpm dev

  • Next.js
  • Nuxt
  • Remix
  • Astro
  • SvelteKit
  • Vite
  • NestJS
  • Express
  • Fastify
  • Expo
  • React Native
  • Electron
  • Gatsby
  • Docusaurus
  • Eleventy
  • Laravel
  • Symfony
  • Statamic
  • Drupal
  • Craft CMS
  • Magento
  • TYPO3
  • Joomla
  • WordPress
  • Bedrock
  • Strapi
  • Payload
  • Directus
  • Sanity
  • Keystone
  • Django
  • Wagtail
  • FastAPI
  • Flask
  • MkDocs
  • Rails
  • Jekyll
  • Hugo
  • Go
  • Rust / Tauri
  • Flutter
  • Spring Boot
  • .NET
  • Deno
  • Docker Compose
  • Make

Plus npm, pnpm, yarn, bun, uv, poetry, DDEV, Lando and Sail.

Organize first. Run side by side.

Group apps into workspaces, add several folders in one pass, then keep the terminals that matter together in Split View.

Split ViewColumnGrid
storefront · web :3000
$ pnpm dev
▲ Next.js 15.2.1
✓ Ready in 842ms
GET /dashboard 200 in 34ms
○ Compiling /products ...
api · worker :4000
$ pnpm dev:worker
queue connected
✓ listening on :4000
job 84 completed in 118ms
waiting for next job
3 running2 terminals2 portslogs following
  • WorkspacesSeparate client, product, and personal apps. Start a whole workspace together.
  • Multi-folder importChoose several folders once; NightJar detects and queues each app intelligently.
  • Terminal panesKeep independent terminals side by side in remembered Column or Grid layouts.
  • Fast log renderingHeavy streams are batched and virtualized so long sessions keep scrolling smoothly.

Every server on one board.

URL, CPU, memory and uptime for every process, live. Run, stop or restart a whole app from its card.

Stop means stop.

Every command gets its own process group. Stop takes down all of it.

kill(-pgid, SIGTERM)

A clean exit for the whole tree.

wait 1000ms

Time for shutdown hooks, not stuck watchers.

kill(-pgid, SIGKILL)

Whatever ignored the first one.

On Windows: the whole tree by parent pid, at once.

tsx watch ignoring SIGTERM should not hold tomorrow’s port.

Quit stops everything.
A crash gets swept on next launch.

The ports panel.

Every listening port, grouped by process and tagged with your app. Kill the whole group in one click.

Listening TCP ports on this machine
PortCommandPIDAppAction
:3000next dev --turbopack48217storefront › web
:4000tsx watch src/server.ts48260storefront › api
:5432postgres -D /opt/homebrew/var/postgresql911
:8000python manage.py runserver48502
:7777/Applications/NightJar.app/Contents/MacOS/NightJar47102this app

EADDRINUSE, handled.

NightJar frees the port before a start. If a script hid it, the crash names it: freed, retried once. System daemons are never touched.

“Hey Siri, start aralsync.”

A Pro shortcut on macOS. NightJar starts the app, waits until the URL answers, then opens it.

{"app":"aralsync","url":"http://localhost:5173/","ready":true,"opened":true}
  • Loose matching“aral sync” or just “sync” works.
  • Cold startLaunches NightJar if it is closed.
  • Any platformPOST /api/start?name=aralsync

Four themes free. Sixteen more with Pro.

Click one to try it. Retro sets go full monospace, and every colour is editable.

Details that save a terminal tab.

  • Fast log tabs

    Filter, follow, copy. Heavy streams stay smooth.

  • Status bar

    State, pid, uptime, restarts, URL.

  • Split View

    Column or Grid terminals, remembered per workspace.

  • Multi-folder add

    Select once. Detect and configure each app in sequence.

  • Stdin

    Answer y without leaving the app.

  • Restart on crash

    Backs off from 1s up to 30s.

  • Per-process env

    Env file, overrides, working folder.

  • Your PATH

    nvm, pnpm and bun just resolve.

  • Workspaces

    Pro groups with their own icon, colour and apps.

  • Icon per app

    Guessed from its dependencies.

  • Keyboard

    ⌘W closes a tab. ⌘C stops it.

  • Lives in the tray

    Close the window. Servers keep running.

  • Spacing

    Scale the whole UI, 60–160%.

  • Smoother motion

    State changes stay clear without slowing the work.

  • One config file

    ~/.nightjar/config.json

macOS, Linux and Windows.

Same app everywhere. Siri stays on the Mac.

  • macOS

    Universal build. Menu bar, Siri, nightjar:// links.

    process groups, lsof, ps
  • Linux

    AppImage. Live CPU read from /proc.

    process groups, lsof, /proc
  • Windows

    x64 installer. cmd.exe or PowerShell.

    process trees, netstat, CIM

Deliberately not included.

Boundaries, not a roadmap.

  • No reattaching to orphaned processes.

  • No full terminal emulator.

  • Nothing listens beyond 127.0.0.1.

Start with Lite. Unlock everything with Pro.

Lite is free forever. Pro is a one-time purchase for every feature and no app limits.

NightJar Lite$0
  • Up to 3 apps
  • 4 themes
  • Every core feature
NightJar Pro$17.77 once
  • Unlimited apps + workspaces
  • All 20 themes
  • Siri shortcuts (macOS)
  • Lite stays free forever. No time limit.
  • Key by email, paste it in Settings.
  • Offline checks never lock you out.
  • Over the cap? Existing apps keep working.
  • Remove the key to move the seat.

Runs locally on 127.0.0.1. macOS, Linux and Windows.