Will Bun JavaScript Take Node's Crown

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

Our great sponsors
  • Appwrite - The Open Source Firebase alternative introduces iOS support
  • talent.io - Download talent.io’s Tech Salary Report
  • Scout APM - Truly a developer’s best friend
  • SonarQube - Static code analysis for 29 languages.
  • zig

    General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.

    It really isn't that much different though. After skimming through the source code of Zig, you can see that well over 90% of the code is OS independent.

    Not only that, it looks like they do have windows support and it's just failing atm. It also looks like they have cleanly separated all OS functionality from the logic. This is where it looks like the majority of the OS dependent code lives[0], and the implementation for this is 1000 lines of code. So clearly, it looks like it shouldn't take more than a few hours to get even a programming language up and running when porting it.

    Further, it looks like they're using the cpp stdlib to assist with some OS dependent functions[1]. They're clearly using at least:

    * std filesystem

    * std future

    * std iostream

    * std mutex

    * std thread

    * std atomic

    And more. So if you're being smart about things, which it looks like the developers most certainly are, then you don't need to reinvent 90% of the OS dependent code and can instead use the stdlib that already exists to automagically get that functionality.

    [0]: https://github.com/ziglang/zig/blob/master/src/stage1/os.hpp

    [1]: https://github.com/ziglang/zig/blob/a9c4dc84f487c4764c578743...

  • µWebSockets

    Simple, secure & standards compliant web server for the most demanding of applications

    Some of Bun's server speed can be attributed to uWebSockets which has node bindings btw. Source here [1]

    [1] https://github.com/uNetworking/uWebSockets/discussions/1466#...

  • Appwrite

    Appwrite - The Open Source Firebase alternative introduces iOS support . Appwrite is an open source backend server that helps you build native iOS applications much faster with realtime APIs for authentication, databases, files storage, cloud functions and much more!

  • JSC-Standalone

    Cross platform standalone binaries and build instructions of WebKit-JavaScriptCore

    You can use JavaScriptCore on Windows right now: https://github.com/Lichtso/JSC-Standalone

  • Zulip

    Zulip server and web app—powerful open source team chat

    Did you look at zulip? https://zulip.com/

    I'm not convinced it's better than irc+proper mailing lists - but given that real users are stuck in awful mail clients (like web/Gmail or outlook) - mailing lists isn't a great option any more.

    Main thing I miss from zulip is a proper weechat plug-in (like wee-slack) - although the official cli client isn't terrible - it's just not irc-like.

  • wsl-vpnkit

    Provide network connectivity to WSL 2 when blocked by VPN

  • FrameworkBenchmarks

    Source for the TechEmpower Framework Benchmarks project

    For the simplest benchmarks the performance disparity might come down to the difference between JavaScriptCore (which Bun uses) and V8 (which Node uses), but for anything non-trivial there's a significant amount of overhead introduced by the Node runtime.

    Someone wrote a barebones V8 wrapper called Just Js, which is based on V8 just like Node, but it crushed Node in the Techempower benchmarks [1].

    [1] https://www.techempower.com/benchmarks/#section=data-r21&tes...

  • fresh

    The next-gen web framework.

    > …I already have taken care of a lot of those Node issues in my own projects, there is not a ton that I see compelling in Deno.

    I felt this way too before using Deno for a while. So far I enjoy:

    - Breaking from npm/node modules support on purpose turns out to be a real plus for me. It's refreshing to have dependencies referenced by URL, and it's good to have them cached centrally by default (in $HOME/Library/Caches/deno on macOS and $XDG_CACHE_HOME/deno or $HOME/.cache/deno on Linux, for example).

    - Use of web platform APIs (https://deno.land/manual/runtime/web_platform_apis ) and the work to standardise those across platforms (https://wintercg.org/ ) is encouraging.

    - `deno lint` and `deno fmt` make adopting and using JS/TS feel more like Rust/Go/other languages with good built-in ceremony-free tooling.

    - Fresh is turning into a very nice Next.js/Astro alternative (https://fresh.deno.dev/ ) that I found very easy to learn and deploy, with great performance and developer experience out of the box.

    Bun is interesting, but I wish it didn't embrace node modules: perpetuating its use instead of attempting to move the community on by recognising it for the mistake it was feels sad to me. (See Ryan Dahl's “Design Mistakes in Node” PDF or talk for more: https://tinyclouds.org/jsconf2018.pdf and https://www.youtube.com/watch?v=M3BM9TB-8yA )

  • talent.io

    Download talent.io’s Tech Salary Report. Median salaries, most in-demand technologies, state of the remote work... all you need to know your worth on the market by tech recruitment platform talent.io

  • gitlab

  • StreamMinecraftClone

    A Minecraft Clone developed live on stream at twitch.tv/gameswthgabe

    This is all that it took me to port a fairly sizeable code base to Linux[0]. This commit allowed me to run the app with the only problem being some font issues that I needed to fix by modifying how I used a library.

    The total:

    > Showing 26 changed files with 255 additions and 90 deletions.

    If you architect your code well, porting between different systems shouldn't take anymore than a few hours ;)

    [0]: https://github.com/codingminecraft/StreamMinecraftClone/comm...

  • sqlite-utils

    Python CLI utility and library for manipulating SQLite databases

    The two largest projects that I write documentation for are https://docs.datasette.io/ and https://sqlite-utils.datasette.io/ - they're both big projects with multiple contributors, though most of the commits are still from me.

    I find the same approach I take to READMEs for smaller projects scales up pretty well: any time I make a change to one of my larger projects I ensure that the documentation is updated as part of that change.

    If I accept a PR from someone without documentation I'll follow up by adding the docs for it myself in the next commit. I think that's more reasonable than demanding people add documentation if it's not necessarily their core skill set.

    Honestly, I'd love to experience working with a professional technical writer on this kind of thing, but that's not something that's happened at any point in my career to date!

  • modules

    Modules for better workflows. (by joshxyzhimself)

    Great experience with it. The examples in the repo, the issues and discussions sections, and the documentations are all very helpful. Alex and the other users are also quite hands-on in replying on each and every issue and discussion there.

    We have some thin wrapper for uWebSockets.js that lets us do the following:

    - parse request json

    - parse request multipart data

    - serve response json

    - serve response buffers

    - serve response streams

    - serve response static files

    - support async handler

    - support multiple async handlers (middlewares)

    links are here

    - https://github.com/joshxyzhimself/modules/blob/main/uwu.mjs

    - https://github.com/joshxyzhimself/modules/blob/main/uwu.d.ts

    - https://github.com/joshxyzhimself/modules/blob/main/uwu.test...

    internally we just serve http, then it goes through caddy or haproxy depending on the project's needs such as tls, caching, etc.

    there are other similar projects too that tries to deliver express-like api:

    - https://github.com/kartikk221/hyper-express

    - https://github.com/nanoexpress/nanoexpress (defunct)

  • hyper-express

    High performance Node.js webserver with a simple-to-use API powered by uWebsockets.js under the hood.

    Great experience with it. The examples in the repo, the issues and discussions sections, and the documentations are all very helpful. Alex and the other users are also quite hands-on in replying on each and every issue and discussion there.

    We have some thin wrapper for uWebSockets.js that lets us do the following:

    - parse request json

    - parse request multipart data

    - serve response json

    - serve response buffers

    - serve response streams

    - serve response static files

    - support async handler

    - support multiple async handlers (middlewares)

    links are here

    - https://github.com/joshxyzhimself/modules/blob/main/uwu.mjs

    - https://github.com/joshxyzhimself/modules/blob/main/uwu.d.ts

    - https://github.com/joshxyzhimself/modules/blob/main/uwu.test...

    internally we just serve http, then it goes through caddy or haproxy depending on the project's needs such as tls, caching, etc.

    there are other similar projects too that tries to deliver express-like api:

    - https://github.com/kartikk221/hyper-express

    - https://github.com/nanoexpress/nanoexpress (defunct)

  • nanoexpress

    Professional backend framework for Node.js

    Great experience with it. The examples in the repo, the issues and discussions sections, and the documentations are all very helpful. Alex and the other users are also quite hands-on in replying on each and every issue and discussion there.

    We have some thin wrapper for uWebSockets.js that lets us do the following:

    - parse request json

    - parse request multipart data

    - serve response json

    - serve response buffers

    - serve response streams

    - serve response static files

    - support async handler

    - support multiple async handlers (middlewares)

    links are here

    - https://github.com/joshxyzhimself/modules/blob/main/uwu.mjs

    - https://github.com/joshxyzhimself/modules/blob/main/uwu.d.ts

    - https://github.com/joshxyzhimself/modules/blob/main/uwu.test...

    internally we just serve http, then it goes through caddy or haproxy depending on the project's needs such as tls, caching, etc.

    there are other similar projects too that tries to deliver express-like api:

    - https://github.com/kartikk221/hyper-express

    - https://github.com/nanoexpress/nanoexpress (defunct)

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