{"id":12059,"library":"speedometer","title":"Simple JavaScript Speedometer","description":"Speedometer is a lightweight JavaScript utility designed for measuring throughput in bytes per second over a sliding time window. It is particularly useful in Node.js environments for tracking data transfer rates, such as file streaming or network activity. The current stable version is 1.1.0, and the package appears to be in a maintenance state, with infrequent updates primarily for tooling rather than new features or significant API changes. Its key differentiator lies in its extreme simplicity and low-level focus, providing a raw numerical measurement without UI components, contrasting with many other 'speedometer' packages that offer graphical gauges for web frameworks. Users can configure the buffer duration for averaging speed, which defaults to 5 seconds, allowing for flexible measurement intervals.","status":"maintenance","version":"1.1.0","language":"javascript","source_language":"en","source_url":"git://github.com/mafintosh/speedometer","tags":["javascript","speed","bytes","per","second","transfer"],"install":[{"cmd":"npm install speedometer","lang":"bash","label":"npm"},{"cmd":"yarn add speedometer","lang":"bash","label":"yarn"},{"cmd":"pnpm add speedometer","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"This package is CommonJS-only. Attempting to use ES module `import` syntax will result in a runtime error or incorrect module resolution.","wrong":"import speedometer from 'speedometer'","symbol":"speedometer","correct":"const speedometer = require('speedometer')"}],"quickstart":{"code":"const speedometer = require('speedometer');\nconst fs = require('fs');\n\n// Create a speedometer instance with a 10-second buffer\nconst speed = speedometer(10);\nconst stream = fs.createReadStream('/dev/urandom', { highWaterMark: 1024 * 1024 }); // Read in 1MB chunks\n\nlet totalBytes = 0;\nlet lastLogTime = Date.now();\n\nstream.on('data', function(data) {\n  // Pass the amount of bytes transferred to the speedometer\n  const bytesPerSecond = speed(data.length);\n  totalBytes += data.length;\n\n  // Log speed every second\n  if (Date.now() - lastLogTime >= 1000) {\n    console.log(`Current speed: ${bytesPerSecond.toFixed(2)} bytes/second`);\n    lastLogTime = Date.now();\n  }\n});\n\nstream.on('end', () => {\n  console.log(`\nFinished reading. Total bytes: ${totalBytes}`);\n  const finalSpeed = speed(); // Get current speed one last time\n  console.log(`Final calculated speed (over buffer): ${finalSpeed.toFixed(2)} bytes/second`);\n});\n\nstream.on('error', (err) => {\n  console.error('Stream error:', err);\n});","lang":"javascript","description":"This example demonstrates how to initialize the speedometer, feed it data chunk lengths, and continuously log the calculated bytes per second for a data stream."},"warnings":[{"fix":"Ensure you are using a CommonJS environment (Node.js without `\"type\": \"module\"` in `package.json` or a bundler configured for CJS) and use `require('speedometer')`.","message":"The `speedometer` package is designed for Node.js environments and uses Node.js-specific features like `require`. It does not provide an ES module (ESM) export and is not intended for direct browser usage.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Initialize with `speedometer(bufferTimeInSeconds)`, e.g., `const speed = speedometer(1);` for a 1-second average or `speedometer(60)` for a 1-minute average.","message":"The default buffer window for speed calculation is 5 seconds. If you need more immediate feedback or a longer-term average, remember to adjust this value during initialization.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Always ensure the argument passed to the `speed()` function is a positive number representing the data length, e.g., `speed(data.length)`.","message":"The `speedometer` function expects numerical values representing the number of bytes transferred. Passing non-numeric or invalid input can lead to incorrect speed calculations or runtime errors.","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"last_verified":"2026-04-19T00:00:00.000Z","next_check":"2026-07-18T00:00:00.000Z","problems":[{"fix":"Change your import statement to `const speedometer = require('speedometer')` and ensure your environment supports CommonJS modules.","cause":"Attempting to use `import speedometer from 'speedometer'` in an ESM context when the package only exports CommonJS.","error":"TypeError: speedometer is not a function"},{"fix":"This package is CommonJS-only and primarily for Node.js. If in a Node.js ESM project, you might need to wrap it in a CJS loader or reconsider using a different package. For browser use, a bundler might make it work, but direct use is not supported.","cause":"Trying to use `require('speedometer')` in an environment where CommonJS `require` is not available, such as a pure ES module Node.js project (`\"type\": \"module\"` in `package.json`) or a browser context without a CJS-compatible bundler.","error":"ReferenceError: require is not defined"}],"ecosystem":"npm"}