JavaScript

The ECMA - 262 Standard, ratified after Netscape and (mostly) agreed to make JavaScript and JScript interoperable.

Setting Up Node

In order to run NodeJS sanely on macOS and WSL, I’ve taken to setting up an unprivileged package install folder like so:

mkdir "${HOME}/.npm-packages"

# Add a new dotfile, without expanding $HOME
cat << 'EOF' >> ~/.npmrc
prefix=${HOME}/.npm-packages
EOF

# Add the following five lines to .bashrc, without expanding variables:
cat << 'EOF' >> ~/.bashrc 
NPM_PACKAGES="${HOME}/.npm-packages"
PATH="$NPM_PACKAGES/bin:$PATH"
# Unset manpath so we can inherit from /etc/manpath via the `manpath` command
unset MANPATH # delete if you already modified MANPATH elsewhere in your config
export MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
EOF

Ways To Avoid Writing JavaScript

I’ve taken to looking for alternative ways to develop in JavaScript that don’t require me to put up with its syntax and overall insanity. Here’s a few I like (mostly compilers, since that’s what makes the most sense for me):

Category Date Link Notes
Compilers 2021 Imba

another Elm-like language that compiles ro Javascript

2019 Reason

an OCaml-like language and compiler

2018 Elm

A functional language that compiles to JavaScript

wisp

A homoiconic LISP dialect with Clojure syntax and macros

pythonium

A Python3 to JavaScript translator

2017 Opal

A Ruby transpiler

Resources

Most of these are library-independent. Check my jQuery page for more, since there’s an entire sub-culture that believes it to be JavaScript programming in and by its own…

Category Date Link Notes
AI 2019 nlp.js

a natural language processing library for bots

Animation 2018 Pts

A Processing-like library

2023 anime

an impressive lightweight JavaScript animation library

Audio 2020 Wave.js

a themable audio visualizer

Automation 2018 n8n

a Zapier alternative that is Open Core, but requires licensing for most uses

2023 activepieces

another self-hostable Zapier alternative (MIT Licensed)

Charting 2010 Highcharts

A very comprehensive charting library

2013 GoJS

A commercial charting and diagramming library

2018 F2

an elegant charting library for mobile

2023 Graphic Walker

An embeddable Tableau-like dashboard UI, also available for Jupyter

tremor

a React library for creating semi-interactive dashboards.

Observable Plot

A nice D3 wrapper that makes a lot of it much more intuitive

Data Structures 2017 seamless-immutable

Immutable data structures a la Mori

2018 knockout.sync.js

A nice nockout extension that allows you to sync data among clients and backends

2022 automerge

a library of data structures for building collaborative applications in JavaScript, using CRDTs

Games 2010 Akibahara

A wonderful set of small libraries to clone 8-bit era arcade games

Graphics 2008 JS Infoviz Toolkit

A pretty comprehensive set of resources

2009 Parcycle

A particle system for Canvas

2010 Raphael

A vector graphics library

2011 paper.js

open source vector graphics scripting framework that runs on top of Canvas

2012 Ejecta

A fast GL-backed canvas library for iOS

2013 Two.js

An intriguing API that supports a number of back-ends (svg, canvas and WebGL)

svgjs

A lightweight library for SVG handling

2014 glsl-transition

A library that uses GL shaders for transitions

2015 smartcrop.js

Content-aware image cropping

2019 Fabric.js

supports various kinds of canvas manipulation, including image filters

Planetary.js

Another globe visualization library

uPlot

extremely fast timeseries plotting

Gio.JS

Globe visualization library

chart.xkcd

various XKCD-styled chart types

globe.gl

Very nice globe visualization component, with animated overlays, arcs, etc.

2020 Textures

a lovely way to do SVG-based hatch fills for charts

2021 midori

a library for animating image backgrounds with cinematic effects

Interpreters 2019 QuickJS

supports compilation to standalone binaries

Libraries cote

a zero-configuration microservices framework

moveable

GUI library for drawing editors

htm

a JSX-like library

flexsearch

a full-text indexer for browser and server-side

osmosis

an HTML parsing library with Xpath support

azure-sync

syncs from local filesystem to blob storage

2021 microdiff

a fast object diff library

piscina

a cleverly named task pool

htmx

a nice, compact, Ajax library

2024 main-thread-scheduling

a library for scheduling tasks on the main thread

Markup 2007 Diff Algorithm

Text diffing

2013 Rainbow

A nice syntax highlighter

Codeblock.js

A nice way to provide code samples.

Mobile 2019 Expo

Good React Native wrapper/accelerator

NativeScript

Native mobile development with nice Vue support. Probably my favorite so far

Ionic

Good Angular, Vue and React Native wrapper/accelerator

Runtimes 2022 rampart

An integrated, minimal footprint runtime/stack with full text search, sql, lmdb, redis, https, websockets, curl, crypt and more

Bun

an all-in-one runtime and NPM client written in Zig

2023 kaluma

tiny and efficient JavaScript runtime for RP2040 (Raspberry Pi Pico)

otto

a JavaScript interpreter written in Go

Tools 2011 PhantomJS

A complete WebKit renderer, since obsoleted.

2012 javascript.tmbundle

An indispensable “TextMate”:apps/TextMate add-on (the autocompletion features alone are priceless)

2016 nodeenv

A sane way to install multiple versions of Node in segregated environments. Downloads prebuilt binaries on macOS, Linux and Windows.

create-react-app

A bootstrap tool for React apps.

2017 pkg

Package Node projects into an executable

2022 pkg

Package Node apps into standalone binaries

2023 xstate

JavaScript and TypeScript finite state machines and statecharts.

2024 Hexo

a static site generator

UI 2007 Timeline

a draggable timeline widget

2011 Color Wheel

A color picker component

Timeframe

Amazing calendar widget with support for date range selection.

2012 Mousetrap

a very nice way to handle keyboard shortcuts

jsPlumb

A Yahoo pipes-like library

2013 rainbow.js

A slim progress bar

Odometer

A library for counters with smooth transitions

nprogress

Another slim progress bar

Kalendae

a very impressive, framework-agnostic date picker

date

A date parser that can take pseudo-natural language strings

2014 Framerjs

For designing interactive prototypes

2015 lazysizes

For lazy image loading

dragula

a cute drag and drop library

2018 zircleUI

a Vue-based framework for developing zoomable UIs (especially nice for touchscreen displays)

2019 Flowy

a library for implementing flowchart editors with drag and drop

tiptap

a nicely featured editor component for Vue.js

2020 arwes

a React-based framework with a futuristic look and feel

neutralino

a lightweight alternative to Electron

plyr

a customizable HTML5 video player component

2023 Yue

a cross-platform C++ library for writing desktop apps

2024 shadcn-ui

a nice-looking React component library

Web Frameworks Hono

another lightweight web framework, focusing on edge platforms

This page is referenced in: