Goodbye, Node.js Buffer

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  • proposal-zero-copy-arraybuffer-list

    A proposal for zero-copy ArrayBuffer lists

  • Yeah, in your case I think most of the complexity is actually on the ReadableStream side, not the base64 side.

    The thing that I'd actually want for your case is either a TransformStream for byte stream <-> base64 stream (which I expect will come eventually, once the simple case gets done), or something which would let you read the entire stream into Uint8Array or ArrayBuffer, which is a long-standing suggestion [1].

    ---

    > Why does de-chunking a byte array need to be complicated

    Keep in mind the concat proposal is _very_ early. If you think it would be useful to be able to concat Uint8Arrays and have that implicitly concatenate the underlying buffers, [2] is the place to open an issue.

    ---

    > You have made me realize I don't even know what the right venue is to vote on stuff. How should I signal to TC39 that e.g. Array.fromAsync is a good idea?

    Unfortunately, it's different places for different things. Streams are not TC39 at all; the right place for suggestions there is in the WHATWG streams repo [3]. Usually there's already an existing issue and you can add your use case as a comment in the relevant issue. TC39 proposals all have their own Github repositories, and you can open a new issue with your use case.

    Concrete use cases are much more helpful than just "this is a good idea". Though `fromAsync` in particular everyone agrees is good, and it mostly just needs implementations, which are ongoing; see e.g. [4]. If you _really_ want to advance a stage 3 proposal, you can contribute a PR to Chrome or Firefox with an implementation - but for nontrivial proposals that's usually hard. For TC39 in particular, use cases are only really valuable pre-stage-3 proposals.

    [1] https://github.com/whatwg/streams/issues/1019

    [2] https://github.com/jasnell/proposal-zero-copy-arraybuffer-li...

    [3] https://github.com/whatwg/streams

    [4] https://bugs.chromium.org/p/v8/issues/detail?id=13321

  • Yeah, in your case I think most of the complexity is actually on the ReadableStream side, not the base64 side.

    The thing that I'd actually want for your case is either a TransformStream for byte stream <-> base64 stream (which I expect will come eventually, once the simple case gets done), or something which would let you read the entire stream into Uint8Array or ArrayBuffer, which is a long-standing suggestion [1].

    ---

    > Why does de-chunking a byte array need to be complicated

    Keep in mind the concat proposal is _very_ early. If you think it would be useful to be able to concat Uint8Arrays and have that implicitly concatenate the underlying buffers, [2] is the place to open an issue.

    ---

    > You have made me realize I don't even know what the right venue is to vote on stuff. How should I signal to TC39 that e.g. Array.fromAsync is a good idea?

    Unfortunately, it's different places for different things. Streams are not TC39 at all; the right place for suggestions there is in the WHATWG streams repo [3]. Usually there's already an existing issue and you can add your use case as a comment in the relevant issue. TC39 proposals all have their own Github repositories, and you can open a new issue with your use case.

    Concrete use cases are much more helpful than just "this is a good idea". Though `fromAsync` in particular everyone agrees is good, and it mostly just needs implementations, which are ongoing; see e.g. [4]. If you _really_ want to advance a stage 3 proposal, you can contribute a PR to Chrome or Firefox with an implementation - but for nontrivial proposals that's usually hard. For TC39 in particular, use cases are only really valuable pre-stage-3 proposals.

    [1] https://github.com/whatwg/streams/issues/1019

    [2] https://github.com/jasnell/proposal-zero-copy-arraybuffer-li...

    [3] https://github.com/whatwg/streams

    [4] https://bugs.chromium.org/p/v8/issues/detail?id=13321

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • WebGL-Fluid-Simulation

    Play with fluids in your browser (works even on mobile)

  • Typed arrays are essential for web apps that use WebGL and WebGPU. Being able to send this typed data to run computations on the GPU in parallel can give you 1000x speed up.

    You can see it in action on this WebGL fluid simulator[0] by PavelDoGreat.

    [0] https://github.com/PavelDoGreat/WebGL-Fluid-Simulation

  • uint8array-extras

    Useful utilities for working with Uint8Array (and Buffer)

  • I wonder why you would introduce an extra dependency for the base64 example. It seems more trivial than left pad.

    https://github.com/sindresorhus/uint8array-extras/blob/cbf24...

  • falcon

    Brushing and linking for big data (by vega)

  • nodejs-polars

    nodejs front-end of polars

  • arquero

    Query processing and transformation of array-backed data tables.

  • https://github.com/uwdata/arquero

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
  • parquet-wasm

    Rust-based WebAssembly bindings to read and write Apache Parquet data

  • nodejs-polars is node-specific and uses native FFI. polars can be compiled to Wasm but doesn't yet have a js API out of the box.

    As for the fastest way to serialize data to Pandas data to the browser, you should use Parquet; it's the fastest to write on the Python side and read on the JS side, while also being compressed. See https://github.com/kylebarron/parquet-wasm (full disclosure, I wrote this)

  • proposal-arraybuffer-base64

    TC39 proposal for Uint8Array<->base64/hex

  • The proposal for native base64 support for Uint8Arrays is mine. I'm glad to see people are interested in using it. (So am I!)

    For a status update, for the last year or two the main blocker has been a conflict between a desire to have streaming support and a desire to keep the API small and simple. That's now resolved [1] by dropping streaming support, assuming I can demonstrate a reasonably efficient streaming implementation on top of the one-shot implementation, which won't be hard unless "reasonably efficient" means "with zero copies", in which case we'll need to keep arguing about it.

    I've also been working on documenting [2] the differences between various base64 implementations in other languages and in JS libraries to ensure we have a decent picture of the landscape when designing this.

    With luck, I hope to advance the proposal to stage 3 ("ready for implementations") within the next two meetings of TC39 - so either next month or January. Realistically it will probably take a little longer than that, and of course implementations take a while. But it's moving along.

    [1] https://github.com/tc39/proposal-arraybuffer-base64/issues/1...

    [2] https://gist.github.com/bakkot/16cae276209da91b652c2cb3f612a...

  • proposal-resizablearraybuffer

    Discontinued Proposal for resizable array buffers

  • Nit: "fixed-length" is no longer true as of very recently [1].

    [1] https://github.com/tc39/proposal-resizablearraybuffer

  • proposal-array-from-async

    Draft specification for a proposed Array.fromAsync method in JavaScript.

  • proposal-async-iterator-helpers

    Methods for working with async iterators in ECMAScript

  • streams

    Streams Standard

  • Yeah, in your case I think most of the complexity is actually on the ReadableStream side, not the base64 side.

    The thing that I'd actually want for your case is either a TransformStream for byte stream <-> base64 stream (which I expect will come eventually, once the simple case gets done), or something which would let you read the entire stream into Uint8Array or ArrayBuffer, which is a long-standing suggestion [1].

    ---

    > Why does de-chunking a byte array need to be complicated

    Keep in mind the concat proposal is _very_ early. If you think it would be useful to be able to concat Uint8Arrays and have that implicitly concatenate the underlying buffers, [2] is the place to open an issue.

    ---

    > You have made me realize I don't even know what the right venue is to vote on stuff. How should I signal to TC39 that e.g. Array.fromAsync is a good idea?

    Unfortunately, it's different places for different things. Streams are not TC39 at all; the right place for suggestions there is in the WHATWG streams repo [3]. Usually there's already an existing issue and you can add your use case as a comment in the relevant issue. TC39 proposals all have their own Github repositories, and you can open a new issue with your use case.

    Concrete use cases are much more helpful than just "this is a good idea". Though `fromAsync` in particular everyone agrees is good, and it mostly just needs implementations, which are ongoing; see e.g. [4]. If you _really_ want to advance a stage 3 proposal, you can contribute a PR to Chrome or Firefox with an implementation - but for nontrivial proposals that's usually hard. For TC39 in particular, use cases are only really valuable pre-stage-3 proposals.

    [1] https://github.com/whatwg/streams/issues/1019

    [2] https://github.com/jasnell/proposal-zero-copy-arraybuffer-li...

    [3] https://github.com/whatwg/streams

    [4] https://bugs.chromium.org/p/v8/issues/detail?id=13321

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts

  • Parquet-WASM: Rust-based WebAssembly bindings to read and write Parquet data

    5 projects | news.ycombinator.com | 22 Apr 2024
  • Ask HN: Wa-SQLite vs. Dexie, 2024

    2 projects | news.ycombinator.com | 30 Mar 2024
  • Backpressure explained – the resisted flow of data through software

    1 project | news.ycombinator.com | 27 Mar 2024
  • Streams Standard

    1 project | news.ycombinator.com | 27 Mar 2024
  • Show HN: Open-source, browser-local data exploration using DuckDB-WASM and PRQL

    11 projects | news.ycombinator.com | 15 Mar 2024