Skip to content

many-level is not compatible with abstract-level v3 #14

Open

Description

@mightyaleksey

Hey, just wanted to share my findings and to save time for others.

Not sure if it is a known issue or not, but looks like many-level is not compatible with abstract-level v3 databases and only supports v1. I was able to find it out by downgrading memory-level version from 3.x.x to 1.x.x.

Here is code snippet I was using for testing (original file https://github.com/Level/many-level/blob/main/test/basic.js):

import { MemoryLevel } from 'memory-level'
import { ManyLevelHost, ManyLevelGuest } from './index.js'

const db = new MemoryLevel()
const host = new ManyLevelHost(db)
const stream = host.createRpcStream()
const guest = new ManyLevelGuest()

stream.pipe(guest.createRpcStream()).pipe(stream)

db.put('hello', 'world', function (err) {
  guest.get('hello', function (err, value) {
    console.log('value', value)
  })

  guest.get(Buffer.from('hello'), function (err, value) {
    console.log('value', value)
  })

  guest.get('hello', { valueEncoding: 'buffer' }, function (err, value) {
    console.log('value', value)
  })
})

Turned out db.put callback was never being called, probably due to migration to async / awaits in later versions AL versions: https://github.com/Level/abstract-level/blob/main/CHANGELOG.md#200---2024-02-03.

For the record, I was testing it with nodejs version v25.2.1.

Activity

  1. vweevers commented on Feb 9, 2026

    @vweevers
    Member

    True. You'll generally want to match modules by the major abstract-level version they depend on. This is normally not necessary to know because we tend to update all modules around the same time.

    many-level is still at v1:

    "abstract-level": "^1.0.3",

    I haven't gotten around to updating this to latest abstract-level. Someone did send a PR (#13 and Level/rave-level#13) but it's incomplete and smelled too much like AI. Which for me goes against the DIY spirit of Level (building by hand, learning to code, crafting something with love, as opposed to just vibe coding as a means to an end). Anyhoo, no hate to the author, and maybe I'm wrong but I don't want to spend my free time guessing. I can't promise if and when I'll get to it myself.

    PRs are welcome :) To do the update and/or add a quick warning to the readme in the mean time.

  2. Eranziel commented on Jun 17, 2026

    @Eranziel

    @vweevers I just saw your comment above now, and I feel I need to assure you that #13 and Level/rave-level#13 are not AI written. I think I still had copilot enabled around the time I was working on that, but frankly its suggestions were useless. I guarantee you it was hand-written, tested, and debugged by yours truly, with some assistance from a couple co-workers. Anyway, I completely understand not wanting to spend your free time guessing about it, and of course I can't dictate how you spend your free time in any case. ;) It's clear that LevelDB is a passion for you, and I appreciate all the effort you put into it!

    I also want to chime in to say that we need to update to abstract-level v3 for our application now, and have begun work on it. If #13 and its rave-level counterpart don't get merged before we finish, would you prefer that we update them to be v3 refactors, or create separate PRs for v2 and v3? If you have any feedback on the v2 PRs that we could incorporate in the meantime, we'd love to hear it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions