If you're going to build a Bitcoin node client in Node.js, I'd strongly recommend looking at existing implementations before starting from scratch:
bcoin by Christopher Jeffrey - this is essentially already what you're describing. A full Bitcoin node implementation in JavaScript with SPV and full node modes. It's been around since 2014 and is battle-tested.
libnode concepts - the P2P networking layer is often the trickiest part. Consider using libp2p which has excellent Node.js bindings.
For the UTXO set, consider using a compact UTXO commitment (like what Utreexo proposes) rather than maintaining the full set in memory.
The main challenge with any Node.js Bitcoin implementation is garbage collection pauses during IBD. V8's GC can cause noticeable latency spikes. Rust-based implementations like Bitcoin Core's C++ don't have this issue. That said, for a learning project or specific use cases (like a lightweight SPV client), Node.js is perfectly fine.
What's your specific use case? That would help determine whether a new implementation makes sense vs. contributing to bcoin.
If you're going to build a Bitcoin node client in Node.js, I'd strongly recommend looking at existing implementations before starting from scratch:
The main challenge with any Node.js Bitcoin implementation is garbage collection pauses during IBD. V8's GC can cause noticeable latency spikes. Rust-based implementations like Bitcoin Core's C++ don't have this issue. That said, for a learning project or specific use cases (like a lightweight SPV client), Node.js is perfectly fine.
What's your specific use case? That would help determine whether a new implementation makes sense vs. contributing to bcoin.