👂 listhen
Elegant HTTP listener!
👉 Online Playground
Features
✅ Dev server with HMR, static, and typescript support with unjs/jiti
✅ Works with Node.js, express, and unjs/h3 out of the box
✅ Show the QR code of the public URL with unjs/uqr
✅ Tunnel your local server to the world with unjs/untun
✅ Assign a port or fallback to a nicer alternative with unjs/get-port-please
✅ Gracefully shutdown Server with http-shutdown
✅ Copy the URL to the clipboard
✅ HTTPS support with self-signed certificates
✅ Open URL in browser
✅ Detect test and production environments to auto-adjust behavior
✅ Close on the exit signal
Quick Usage (CLI)
You can run your applications in localhost with typescript support and watch mode using listhen
CLI:
Create index.ts
:
export default (req, res) => {
res.end("Hello World!");
};
or using unjs/h3:
import { createApp, eventHandler } from "h3";
export const app = createApp();
app.use("/", () => "Hello world!");
or use npx to invoke listhen
command:
npx listhen -w ./index.ts
Usage (API)
Install package:
pnpm i listhen
npm i listhen
yarn add listhen
Import into your Node.js project:
const { listen, listenAndWatch } = require("listhen");
import { listen, listenAndWatch } from "listhen";
const handler = (req, res) => {
res.end("Hi!")
}
const listener = await listen(handle, options?)
Options
port
- Default:
process.env.PORT
or 3000 or memorized random (see get-port-please)
Port to listen.
hostname
- Default:
process.env.HOST || '0.0.0.0'
Default hostname to listen.
https
- Type: Boolean | Object
- Default:
false
Listen on HTTPS with SSL enabled.
Self-Signed Certificate
By setting https: true
, listhen will use an auto-generated self-signed certificate.
You can set https to an object for custom options. Possible options:
domains
: (Array) Default is ['localhost', '127.0.0.1', '::1']
.validityDays
: (Number) Default is 1
.
User-Provided Certificate
Set https: { cert, key }
where the cert and key are paths to the SSL certificates.
With an encrypted private key, you also need to set passphrase
on the https
object.
To provide a certificate stored in a keystore set https: { pfx }
with a path to the keystore.
When the keystore is password protected also set passphrase
.
You can also provide an inline cert and key instead of reading from the filesystem. In this case, they should start with --
.
showURL
- Default:
true
(force disabled on a test environment)
Show a CLI message for the listening URL.
baseURL
open
- Default:
false
(force disabled on test and production environments)
Open the URL in the browser. Silently ignores errors.
clipboard
- Default:
false
(force disabled on test and production environments)
Copy the URL to the clipboard. Silently ignores errors.
isTest
- Default:
process.env.NODE_ENV === 'test'
Detect if running in a test environment to disable some features.
autoClose
Automatically close when an exit signal is received in the process.
publicURL
- Default: (the first public URL listening)
The public URL to show in the CLI output
qr
Print QR Code for public address.
public
- Default:
false
for development or when hostname
is localhost
and true
for production
When enabled, listhen tries to listen to all network interfaces. You can also enable this option using --host
CLI flag.
License
MIT. Made with 💖