Tiny LiveReload Server

2.0.0 · active · verified Sun Apr 19

tiny-lr is a minimalist LiveReload server implementation designed for integration into build workflows. It provides an HTTP server and Express middleware with a simple REST API to broadcast file change notifications to connected LiveReload clients. Unlike comprehensive live-reloading solutions, tiny-lr does not include file watching capabilities itself; users must integrate it with an external file watcher (e.g., from a build tool like Gulp or Grunt). The current stable version is 2.0.0, which marked a return to active development after a period of dormancy, focusing on dependency updates and modern browser compatibility. Its primary differentiators are its focused scope (only serving reload notifications), ease of integration into existing build chains, and low overhead, making it suitable for projects that prefer to manage file watching separately.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates setting up a tiny-lr server on its standard port and integrating its middleware with an Express application. It also shows how to programmatically trigger a file change notification to connected LiveReload clients.

const tinylr = require('tiny-lr');
const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');

const port = process.env.LR_PORT || 35729; // Standard LiveReload port
const app = express();

// Start the LiveReload server independently
const lrServer = tinylr();
lrServer.listen(port, function() {
  console.log(`LiveReload server listening on port ${port} (for browser extensions).`);
});

// Or integrate as Express middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(tinylr.middleware({ app: app }));

app.use(express.static(path.resolve('./public'))); // Serve static files

app.get('/', (req, res) => {
  res.send('<h1>Hello from tiny-lr!</h1><p>Check the browser console or network tab for livereload.js.</p>');
});

// Example of triggering a reload via HTTP API
// This would typically be called by a build tool when files change.
// curl http://localhost:35729/changed?files=index.html,style.css
// curl -X POST http://localhost:35729/changed -d '{ "files": ["script.js"] }'

app.listen(8000, () => {
  console.log('Express server listening on port 8000.');
  console.log('Open http://localhost:8000 in your browser and ensure LiveReload extension is active or script tag is added.');
  console.log('To trigger a reload, send a POST request to http://localhost:35729/changed with a JSON body: { "files": ["index.html"] }');
});

// To manually trigger a reload (e.g., from your file watcher)
function notifyChange(files) {
  lrServer.changed({ body: { files: files } });
  console.log('Notified LiveReload clients about:', files);
}

// Simulate a file change after 5 seconds
setTimeout(() => {
  notifyChange(['index.html', 'style.css']);
}, 5000);

view raw JSON →