{"id":16422,"library":"level-read-stream","title":"Level Read Stream","description":"level-read-stream provides Node.js-style readable streams for abstract-level compatible databases. It allows developers to consume data from a LevelDB-like database as a stream of entries, keys, or values. The current stable version is 2.0.0, which notably supports `abstract-level` v2 and Node.js >=18. The project maintains an active development pace with incremental releases addressing compatibility and adding features like TypeScript types. Key differentiators include its tight integration with the `abstract-level` API, offering `EntryStream`, `KeyStream`, and `ValueStream` for optimized data retrieval. For Web Streams, users are directed to `level-web-stream`.","status":"active","version":"2.0.0","language":"javascript","source_language":"en","source_url":"https://github.com/Level/read-stream","tags":["javascript","level","stream","abstract-level","typescript"],"install":[{"cmd":"npm install level-read-stream","lang":"bash","label":"npm"},{"cmd":"yarn add level-read-stream","lang":"bash","label":"yarn"},{"cmd":"pnpm add level-read-stream","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Required as the underlying database interface.","package":"abstract-level","optional":false},{"reason":"TypeScript type declarations for Node.js readable streams, required when using this library with TypeScript.","package":"@types/readable-stream","optional":true}],"imports":[{"note":"For ESM projects, use named import. CommonJS `require` still works but destructuring is crucial.","wrong":"const EntryStream = require('level-read-stream').EntryStream","symbol":"EntryStream","correct":"import { EntryStream } from 'level-read-stream'"},{"note":"All stream classes are named exports. Default import will not work.","wrong":"import KeyStream from 'level-read-stream'","symbol":"KeyStream","correct":"import { KeyStream } from 'level-read-stream'"},{"note":"When using CommonJS, ensure you destructure the specific stream class from the `require` call.","wrong":"const { ValueStream } = require('level-read-stream')","symbol":"ValueStream","correct":"import { ValueStream } from 'level-read-stream'"}],"quickstart":{"code":"import { EntryStream } from 'level-read-stream';\nimport { Writable, pipeline } from 'readable-stream';\nimport { Level } from 'level'; // Assuming 'level' or similar abstract-level implementation\n\nasync function runExample() {\n  const db = new Level('./mydb');\n\n  await db.put('a', '1');\n  await db.put('b', '2');\n  await db.put('c', '3');\n\n  const src = new EntryStream(db, { gte: 'b' });\n\n  const dst = new Writable({\n    objectMode: true,\n    write(entry, _, next) {\n      console.log('Entry: %s: %s', entry.key, entry.value);\n      next();\n    }\n  });\n\n  // Using pipeline with a callback for error handling and stream completion\n  pipeline(src, dst, (err) => {\n    if (err) {\n      console.error('Pipeline failed.', err);\n    } else {\n      console.log('Pipeline succeeded.');\n    }\n    db.close(); // Close the database after stream operations\n  });\n}\n\nrunExample().catch(console.error);\n","lang":"typescript","description":"This example demonstrates how to create an `EntryStream` to read key-value pairs from an `abstract-level` database, filter by a starting key (`gte: 'b'`), and pipe the results to a writable stream for processing, logging each entry."},"warnings":[{"fix":"Ensure your database package (e.g., `level`, `memdown`) is updated to a version compatible with `abstract-level@2`.","message":"Version 2.0.0 drops support for `abstract-level` v1. Users must upgrade their underlying `abstract-level` implementation to `>=2.0.0`.","severity":"breaking","affected_versions":">=2.0.0"},{"fix":"Review your stream pipeline for compatibility with `readable-stream` v4 behavior, especially if you have custom `_read` or `_write` implementations.","message":"Version 2.0.0 updated its internal `readable-stream` dependency from v3 to v4. While largely compatible, this might introduce subtle behavioral changes or require adjustments if your project relies on specific `readable-stream` v3 internals.","severity":"breaking","affected_versions":">=2.0.0"},{"fix":"Run `npm install --save-dev @types/readable-stream`.","message":"For TypeScript users, in addition to installing `level-read-stream`, you must also install `@types/readable-stream` to get proper type definitions for Node.js's stream API.","severity":"gotcha","affected_versions":">=1.1.0"},{"fix":"Refer to `https://github.com/Level/read-stream/blob/main/UPGRADING.md` for detailed instructions.","message":"If migrating from older `levelup` or `level <= 7` versions, consult the `UPGRADING.md` file in the package's GitHub repository for specific migration steps and considerations.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Consider `for await (const entry of db.iterator(options))` instead of piping `EntryStream` for simple async iteration.","message":"While `EntryStream` provides a stream interface, for consuming database entries using `for await...of` syntax, it is generally recommended to directly use `db.iterator()` as it offers a more idiomatic async iteration pattern.","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"last_verified":"2026-04-22T00:00:00.000Z","next_check":"2026-07-21T00:00:00.000Z","problems":[{"fix":"Upgrade your database package (e.g., `level`, `memdown`) to a version that implements `abstract-level` v2 or higher.","cause":"Attempting to use `level-read-stream` v2.x with an `abstract-level` v1.x compatible database instance.","error":"TypeError: db.iterator is not a function"},{"fix":"Change your import statement to `import { EntryStream } from 'level-read-stream';` and ensure your project is configured for ESM (e.g., `\"type\": \"module\"` in `package.json`).","cause":"Attempting to use `require()` to import `level-read-stream` in an environment configured for pure ESM, or when `level-read-stream` itself becomes pure ESM in a future major version (not currently true for v2).","error":"Error [ERR_REQUIRE_ESM]: require() of ES Module .../node_modules/level-read-stream/index.js from ... not supported."},{"fix":"Use `const { EntryStream } = require('level-read-stream');` to correctly destructure the named export.","cause":"Incorrect import statement when using CommonJS, attempting `const EntryStream = require('level-read-stream')` instead of destructuring.","error":"TypeError: EntryStream is not a constructor"},{"fix":"Install the types package: `npm install --save-dev @types/readable-stream`.","cause":"Missing TypeScript type definitions for the `readable-stream` package when using `level-read-stream` in a TypeScript project.","error":"TS2307: Cannot find module '@types/readable-stream' or its corresponding type declarations."}],"ecosystem":"npm"}