JavaScript Gom Jabbar

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

Our great sponsors
  • SurveyJS - Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • vite

    Next generation frontend tooling. It's fast!

  • There are projects attempting to do more things. I've really enjoyed Parcel (https://parceljs.org). But it won't handle things like linting or unit testing, which you may or may not want. Vite is also pretty popular (https://vitejs.dev/), and it has a test runner.

    Thing is, most of the problems described in the post aren't related to low-JS front-end libraries like HTMX or alpine. You can write React without a linter, bundler, build tool, unit testing, or linting. But with any of these projects at scale, you start wanting more:

    - If you want to write unit tests in JS, you need to choose a test runner (probably Jest or Vitest -- until the built-in node testing module becomes more common).

    - If you want linting, you need a linter (probably Eslint). If you want type safety, you need a type checker (probably Typescript).

    - If you want to create smaller JS files to ship to production and to automatically handle assets, you need a bundler.

    - If you want to use new language features while supporting old browsers, you need polyfills.

    - If you want to use all these things together, you need something to bring it together (like Webpack).

    So it really depends what you need! You may not need any. But as you can imagine, in many professional projects with multiple developers it's very nice to have unit tests, linting, and type checking :) (And you start caring about end-user performance a lot more, in which case optimizing the shipped bundle is important.)

    Take all that, and then compare to a language like Rust, which has most of the "ecosystem stuff" built-in. In Rust, you get the test runner, the linter, dependency manager, type checker, and documentation tool all included. Easy! Thankfully, Rust doesn't have to care about whether users support modern language features (because it compiles down to lower code ahead of time), or whether the binary shipped to the client is optimally organized for downloading immediately over the internet.

    It's a problem in JS because A) you have to care about more problems than many other languages since JS needs to load instantly over the wire in a web browser, and B) there is a huge amount of choice and not a lot of standardization in web tools. (And what standardization there is (Node, npm), there are still competitors trying to even further reduce the pain points.)

    I think that in ten more years, we'll be in a better place, because there is push back (like this post!) against these problems, which will encourage more tools trying to solve the explosion of tools. Which seems counterintuitive, but these tools were created to solve very real problems. So I see it as a pendulum which has swung too far, but will likely swing back to a more balanced place. And you see that with tools like Vite gaining popularity.

  • parcel

    The zero configuration build tool for the web. 📦🚀

  • There are projects attempting to do more things. I've really enjoyed Parcel (https://parceljs.org). But it won't handle things like linting or unit testing, which you may or may not want. Vite is also pretty popular (https://vitejs.dev/), and it has a test runner.

    Thing is, most of the problems described in the post aren't related to low-JS front-end libraries like HTMX or alpine. You can write React without a linter, bundler, build tool, unit testing, or linting. But with any of these projects at scale, you start wanting more:

    - If you want to write unit tests in JS, you need to choose a test runner (probably Jest or Vitest -- until the built-in node testing module becomes more common).

    - If you want linting, you need a linter (probably Eslint). If you want type safety, you need a type checker (probably Typescript).

    - If you want to create smaller JS files to ship to production and to automatically handle assets, you need a bundler.

    - If you want to use new language features while supporting old browsers, you need polyfills.

    - If you want to use all these things together, you need something to bring it together (like Webpack).

    So it really depends what you need! You may not need any. But as you can imagine, in many professional projects with multiple developers it's very nice to have unit tests, linting, and type checking :) (And you start caring about end-user performance a lot more, in which case optimizing the shipped bundle is important.)

    Take all that, and then compare to a language like Rust, which has most of the "ecosystem stuff" built-in. In Rust, you get the test runner, the linter, dependency manager, type checker, and documentation tool all included. Easy! Thankfully, Rust doesn't have to care about whether users support modern language features (because it compiles down to lower code ahead of time), or whether the binary shipped to the client is optimally organized for downloading immediately over the internet.

    It's a problem in JS because A) you have to care about more problems than many other languages since JS needs to load instantly over the wire in a web browser, and B) there is a huge amount of choice and not a lot of standardization in web tools. (And what standardization there is (Node, npm), there are still competitors trying to even further reduce the pain points.)

    I think that in ten more years, we'll be in a better place, because there is push back (like this post!) against these problems, which will encourage more tools trying to solve the explosion of tools. Which seems counterintuitive, but these tools were created to solve very real problems. So I see it as a pendulum which has swung too far, but will likely swing back to a more balanced place. And you see that with tools like Vite gaining popularity.

  • SurveyJS

    Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.

    SurveyJS logo
  • awesome-vite

    ⚡️ A curated list of awesome things related to Vite.js

  • https://github.com/vitejs/awesome-vite#react

  • swagger-typescript-api

    TypeScript API generator via Swagger scheme

  • json5-spec

    The JSON5 Data Interchange Format

  • tsoa

    Build OpenAPI-compliant REST APIs using TypeScript and Node

  • ci-workflows

  • https://github.com/cmctec/ci-workflows/blob/main/.github/wor...

    This is my shared workflow which I apply to few dozens of projects in my company. Works like a charm! Extremely simple and understandable script.

    I tried to understand this whole github actions stuff but decided that I don't need all that complexity.

  • 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
  • PIE

    Discontinued A behavior for Internet Explorer allowing it to recognize and render various CSS3 box decoration properties

  • One thing (only thing) I honestly miss about IE5.5-8 is how amenable the engine was to polyfilling. It wasn't fast, but you could do almost anything with the right polyfill technique. No sessionStorage? Use window.name. No (then-) modern CSS? Use CSS3PIE [0] IE doesn't support the transform CSS property? Use an *.htc behavior to convert the transform to a matrix filter.

    It was madness, and it was beautiful in a Cthulhu kind of way.

    [0] http://css3pie.com/

  • tools

    Discontinued Unified developer tools for JavaScript, TypeScript, and the web

  • I have no idea how true this is, but the source of the claim seems to come from here:

    https://github.com/rome/tools/discussions/4302

    "But in short, the company Rome Tools ran out of funding, so the core team of last year are no longer working on the project."

  • proposal-pipeline-operator

    A proposal for adding a useful pipe operator to JavaScript.

  • It can be further simplified. For example, you don't need two separate functions to extract the first chat completion message etc.

    This version:

    - uses existing language constructs

    - can be immediately understood even by the most junior devs

    - is likely to be 1000 times faster

    - does not rely on an external dependency that currently has 143 issues and every two weeks releases a new version adding dozens of new methods to things

    Note: one thing I do wish Javascript adopted is pipes: https://github.com/tc39/proposal-pipeline-operator

  • sharp

    High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, AVIF and TIFF images. Uses the libvips library.

  • ESLint does an amazing job in detecting floating promises. I've not had it miss one, ever. When adding this to a project, I've discovered multiple accidental bugs due to a missing "await" keyword--bugs that were extremely subtle and intermittent in many cases.

    The only thing it can't do is determine that you actually did handle the promise later. Which is fine. It's a LINTING RULE, and false positives are the name of the game.

    What's BAD is when you accidentally miss handling a promise at all. It's an invisible error without the linting rule.

    Your other comments...don't even make sense. You're going to build a Lanczos filter by hand? Or you're only going to ... compile ImageMagick to WebAssembly?!, ... an implementation which is tremendously slower (nearly unusably so for large images) than that of Sharp:

    https://www.npmjs.com/package/sharp

    ... which is simply an import away?

    No, what you're doing is called "motivated reasoning." You've concluded that Deno is the best, and you're reinterpreting all of my complaints in convoluted ways to support your predetermined conclusion.

    Standard fanboy behavior. Or troll behavior. I cite Poe's Law as why it's impossible to tell the difference.

  • confgen

    Generate repetitive configs for vite, typescript, eslint, etc

  • FWIW, I have a side project, confgen https://github.com/erikpukinskis/confgen, which tries to help with this.

    Assuming it’s an app (and not a library) get what you are describing you would run:

        npx confgen@latest @app vite typescript eslint prettier react

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