The ECMA - 262 Standard, ratified after Netscape and Microsoft (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 |
|
Libraries | 2019 | 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 | QuickJS | supports compilation to standalone binaries |
|
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 |
||
2024 | quickjs-ng | a fork of QuickJS |
|
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 | mizu | a lightweight HTML templating library for any-side rendering with support for custom elements |
|
shadcn-ui | a nice-looking React component library |
||
Web Frameworks | Hono | another lightweight web framework, focusing on edge platforms |