JavaScript Awesome
- novnc/noVNC
- felixrieseberg/macintosh.js
- RobinCsl/awesome-js-tooling-not-in-js
- sorrycc/awesome-javascript
Framework
Library
- Event
- DOM EventTarget - Bus
- DOM MessageChannel - 1-1、WebWorker
- DOM BroadcastChannel - origin 纬度 - 多窗口
- DOM Window.postMessage - 跨 origin、多窗口、iframe
- eventemitter2
- wildcard/namespace, ttl/once/many, async listener/setImmediate
- emitAsync
- 18.2kB, 5.6kB
- primus/eventemitter3
- developit/mitt
- ts, 200byte
- 建议直接拷到项目使用
- broadcast-channel
- 基于 BroadcastChannel+IndexedD+LocalStorage
- NodeJS 使用 Sockets
- 支持 Leader 选举
- 20kB/6kB
- tiny-emitter
- DOM
- google/incremental-dom
- in-place DOM diffing
- manipulation
- dom7 - morden jquery
- jquery
- parser
- zeed-dom - Parser
- cheerio - jQuery
- htmlparser2
- parse5
- jsdom
- santinizer
- env
- focus-trap/focus-trap
- google/incremental-dom
- Communication/Network
- websocket
- socketio
- sockjs
- IoC/Container/DI
- inversify/InversifyJS
- inversify
- 功能非常全的 IoC
- ⚠️ 不活跃
- typestack/typedi
- typedi
- 220kB
- 功能相对简单,做 DI 足够
- ⚠️ 非常不活跃
- Microsoft/tsyringe
- ⚠️ 非常不活跃
- jeffijoe/awilix
- Proxy+Reflect - Chrome >= 49, Safari >= 10
- 注入代理对象,通过访问的字段名字进行 resolve
- 因此不支持异步
- @abraham/reflection
- ~3k - 替代 reflect-metadata ~ 50k
- async-dependency-graph
- dependency graph that can traverse asyncronous nodes
- 5kB, 1.5kB
- fastify/avvio
- 20kB, 7kB
- Asynchronous bootstrapping of Node applications
- inversify/InversifyJS
- deep compare
- epoberezkin/fast-deep-equal
- FormidableLabs/react-fast-compare
- 基于 fast-deep-equal
- 支持 react 元素
- lukeed/dequal
- 304B to 489B
- lodash.isEqual
- Date & Time
- date-fns
- dayjs
- Fast 2kB alternative to Moment.js
- Immutable
- plugins
- duration
- moment
- d3-time-format
- chrono-node
- natural language date parser
- moment/luxon
- 72kB, 21kB
- format - number, time, money
- SheetJS/printj
- numbro
- 基于 numeral
- numeral
- 不再维护
- money
- dinero.js
- create, calculate, format money
- currency.js
- accounting.js
- dinero.js
- flip effect
- animation
- framer/motion
- react-spring
- react-motion
- react-move
- danro/easing-js
- mojs/mojs
- gijsroge/tilt.js
- transition
- functional
- reactive
- rxjs
- core
- lodash
- angus-c/just
- core-js
- underscore
- stdlib-js/stdlib
- clone
- structuredClone - Chrome 98
- lukeed/klona
- json
- fast-json-patch
- fastify/fast-json-stringify
- 基于 schema - 更快更安全
- blitz-js/superjson
- 支持 Date, undefined, bigint, RegExp, Set, Map, Error, URL
- 可以配合 NextJS 使用
- 可以配合 Decimal.js / Prisma.Decimal 使用
- devalue
- 支持循环依赖
- 支持 undefined, Infinity, NaN, -0, Date, Map, Set, BigInt, RegExp
- json5
- xml
- fast-xml-parser
- xml2js
- saxjs
- xmlbuilder
- diff
- async
- parallel-js/parallel.js
- multi-core processing utilities for Node
- greenlet
- Move an async function into its own thread
- parallel-js/parallel.js
- fs/filesystem
- https://github.com/isomorphic-git/isomorphic-git
- lighting-fs
- jvilk/BrowserFS
- MIT, JS
- emulates the Node JS file system API
- filer
- BSD-2, JS
- 258kB/68Kb
- drop-in replacement for node's fs module
- backend: indexeddb, memory, custom
- feross/buffer
- 26.8kB/8kB
- browserify/path-browserify
- files
- tar
- 77.4kB/23kB
- node:zlib
- tar
- diagram
- d3
- eclipse/sprotty
- elkjs
- 1.3MB/404kB
- Eclipse Layout Kernel
- 2d rendering/canvas
- fabricjs/fabric.js
- SVG <-> Canvas
- Build indoor maps with Fabric.js and React
- jonobr1/two.js
- signature_pad
- yisibl/resvg-js
- SVG renderer, powered by Rust based resvg and napi-rs
- konvajs/konva
- MIT, JS+TS
- react-konva
- 使用的项目
- rowsncolumns/grid
- MIT
- React Components for Tabular data.
- React-Proto/react-proto
- 原型设计
- rowsncolumns/grid
- catdad/canvas-confetti
- Microsoft/maker.js
- Apache-2.0, TS
- 2D vector line drawing and shape modeling for CNC and laser cutters
- fathyb/html2svg
- HTML,
<canvas>
to SVG - https://fathy.fr/html2svg
- HTML,
- fabricjs/fabric.js
- 3d rendering/canvas
- threejs
- pmndrs/react-three-fiber
- React renderer for Three.js
- ar/vr/xr
- WebXR Device API
- Chrome 79
- AR-js-org/AR.js
- MIT, JS
- webgl, webrtc
- fcor/arjs-gestures
- Rotate and zoom with touch gestures
- hiukim/mind-ar-js
- MIT, JS
- Image Tracking, Face Tracking. Tensorflow.js
- AR-js-org/studio
- Demo
- WebXR Device API
- color
- Qix-/color
- color-name
- color-parse
- tinycolor2 - 14kb
- chroma-js
- color
- colors.js
- color2k
- polished
- css
- css-tree - parser
- csstype - TypeScript for CSS
- css in js
- nano-css - 0.5 kb
- jss - 22kb
- processor
- stylis - 10kb - nesting, selector namespacing, vendor prefixing, minification
- store
- sessionStorage - 单 Tab, 关闭消息, 打开新 Tab 继承
- localStorage - origin 纬度, 可监听跨 tab 变化
- cookie - C/S 交互
- localforage
- async 的 localStorage
- 可以存储到 IndexedDB, WebSQL, localStorage
- 多实例
- rxdb
- 135kB, 36kB
- rxjs
- adapters: pouchdb, lokijs
- replication: couchdb, graphql
- lokijs
- dexie
- Apache-2.0, JS, TS
- 82kB, 26kB - 无依赖
- IndexedDB wrapper
- 支持 Sync, Subscribe
- share/sharedb
- 126kB, 35kB - ot-json0, array-diff
- JSON OT database backend
- Realtime database backend based on Operational Transformation (OT)
- YousefED/SyncedStore
- yjs
- 提供 react, vue, svelte 组件
- compiler
- wooorm/xdm
- MDX compiler - No runtime. With esbuild, Rollup, and webpack plugins
- wooorm/xdm
- reactive
- rxjs
- utils
- he HTML entities
- office
- dolanmiu/docx
- generate .docx files
- ZEISS/react-view-pdf
- react, pdf.js
- SheetJS/sheetjs
- Apache-2.0
- mengshukeji/Luckysheet
- handsontable/hyperformula
- dolanmiu/docx
- crdt
- yousefed/SyncedStore
- yjs/yjs
- 实现协作编辑
- dmonad/lib0
- vs automerge #145
- y-crdt/y-crdt
- Rust port
- automerge/automerge
- 通用状态,自定义 CRDT
- dmonad/crdt-benchmarks
- Where is the CRDT for syntax trees HN
- inkandswitch/peritext
- felipeleivav/yboard
- Vue
- multiplayer desktop-like workspace
- https://news.ycombinator.com/item?id=30983770
- p2p
- editor
- tiptap
- headless, framework-agnostic and extendable rich text editor, based on ProseMirror
- tiptap
- ui
- floating-ui/floating-ui
- low-level 接口
- 支持 web, React Native, Canvas
- popper -> floating-ui - 2021 - ~600b
- popper - ~3kb - 2006
- react https://floating-ui.com/docs/react-dom
- Popper is evolving into Floating UI!
- atomiks/tippyjs
- 基于 @popperjs/core
- floating-ui/floating-ui
- ml
- invariant
- tiny-invariant
- tiny-warning
- 不 throw
- ts-invariant
- condition build
- image
- compression
- fflate
- TextEncoderStream
- interactive
- core
- core-js
- dmonad/lib0
- fabiospampinato/cash
- jquery
- logger
- pino
- 6.5kB/2.5kB
- roarr
- 13kB/4kB
- winston
- bunyan
- log4js
- pino
- validate
- ajv
- 使用的最多
- yup
- joi
- vest
- superstruct
- colinhacks/zod
- 定义的校验会生成 ts 类型
- TypeScript-first schema validation
- quicktype/quicktype
- imbrn/v8n
- npmtrends ajv vs joi vs yup vs zod
- ar-nelson/spartan-schema
- 定义的校验可生成 ts 类型
- validatorjs/validator.js
- typestack/class-validator
- ajv
- typescript
- true-myth/true-myth
- io-ts
- fp-ts
- zod
- trpc
- typebox
- typia
- ts-rest
- math
- jsbi - pure-JavaScript BigInts
- 33kB/10kB
- Uniswap SDK
- Chrome 67+, Opera 54+, Firefox 68+, Edge 79+, Safari 14+, Node.js v10.4+
- babel 插件可 transpile
- https://tc39.es/proposal-bigint/
- https://github.com/GoogleChromeLabs/jsbi
- bn.js
- 44kB/11.5kB
- ether.js
- MikeMcl
- decimal.js
- 31kB/12kB
- scientific
- bignumber.js
- 18kB/8kB
- financial
- 支持 exp,ln,log
- big.js
- 7kB/3kB
- decimal.js-light
- 13kB/5.5kB
- 不支持 NaN, Infinity, -0
- 不支持其他 base
- big.js vs bignumber.js vs decimal.js
- decimal.js
- josdejong/mathjs
- Apache-2.0, JS
- plot https://plotly.com/javascript/
- stdlib-js/stdlib
- @stdlib/plot - 基于 d3
- https://mathnotepad.com/
- https://www.mathcha.io/
- Mathematics Editor
- thoughtspile/grafar
- https://mafs.dev/
- React components for interactive math
- stevenpetryk/mafs
- imaphatduc/cubecubed
- 3b1b/manim
- jsxgraph/jsxgraph
- MIT, LGPL, JS
- interactive geometry, function plotting, charting, and data visualization
- mathjax
- CindyJS/CindyJS
- Apache-2.0, JS
- interactive mathematical
- 2D Geometry, 3D Geometry, Algebra, Calculus, Differential Equations, Statistics, Probability, Linear Algebra, Complex Numbers, Trigonometry
- https://upmath.me/ Math Online Editor
- tex, tikz
- kisonecat/tikzjax
- TikZ running under WebAssembly in the browser
- katex
- Asymptote (vector graphics language)
- jsbi - pure-JavaScript BigInts
- Phy
- stat/bi
- jstat
- cubejs
- markdown
- markdown-it
- mdx-js/mdx
- wooorm/xdm
- MDX compiler
- micromark/micromark
- 替代 remark-parse
- markedjs/marked
- unifiedjs
- Auth/ACL/Security
- Syntax Highlighter
- jwt
- openid-client
- nodejs RP client for passport.
- openid-client
- dev
- nolanlawson/fuite
- finding memory leaks in web apps
- sverweij/dependency-cruiser
- nolanlawson/fuite
- transpile
- babel
- ts
- esbuild
- swc
- alangpierce/sucrase
- bundle
- webpack
- rollup
- developit/microbundle
- i18n
- lingui/js-lingui
- core - 30kB, 8kB
- react + 7kB, 2.5kB
- i18next
- 56kB, 15kB
- globalizejs/globalize
- airbnb/polyglot.js
- lukeed/rosetta
- 27 LOC
- lukeed/templite
- dlv
- lingui/js-lingui
- object path
- dlv
- get by path
- lukeed/dset
- set by path
- dlv
- benchmark
- data/io
- ArrayBuffer
- js 标准里的 nodejs Buffer 对等角色
- mdn-data - mdn/data
- feross/buffer
- NodeJS Buffer
- ArrayBuffer
- fetch/network
- axios
- elbywan/wretch
- tiny wrapper built around fetch
- superagent
- got
- 开发不活跃
request- node-fetch
- NodeJS v18 内置
- codec/parser
- punycode
- url-js
- url
- AST
- meriyah/meriyah
- 127kB, 40kB
- acornjs/acorn
- 107kB, 31.1kB
- acorn-jsx
- acorn-bigint
- estree/estree
- eslint, acorn, babel, Esprima
- jquery/esprima
- meriyah/meriyah
- router
- lukeed/taskr
- MIT, JS
- 58 LOC
- lukeed/regexparam
- 36 LOC
- lukeed/polka
- Web Server
- path-to-regexp
- lukeed/taskr
- audio
- bbc/peaks.js
- LGPLv3, JS
- audio waveforms
- bbc/peaks.js
- glob
- globby
- 基于 fast-glob 增加部分功能
- glob
- fast-glob
- micromatch/micromatch
- wildcard and glob matching library
- 在 picomatch 之上增加部分功能 -
{.ts,.js}
展开, extglobs
- micromatch/picomatch
- 20kB/7kB
- consola
- globby
- test - WebStorm 支持 jest, mocha
- node:test
- NodeJS v18 内置 Test Runner
- jest
- by Facebook
- mocha
- Selenium
- jasmine
- karma
- puppeteer
- storybook
- playwright
- lost-pixel
- ava
- WebStrom Plugin AVA Test Run Configuration Generator
- WEB-21788
- vitest
- testing library
- react, dom
- lukeed/uvu
- webdriver io
- E2E - Browser
- cypress
- Web Test Runner
- nightwatch
- MIT, JS
- W3C Webdriver API
- tap - 测试协议
- tapjs/node-tap
- http://tap4j.org/
- WebStorm 暂不支持 WEB-20916
- ava vs jasmine vs jest vs mocha vs qunit
- node:test
- random data generator/mock data
- json-schema-faker
- https://json-schema-faker.js.org/
- 不支持 draft 2019-09 #289
- @faker-js/faker
- 2.8MB, 907kB
- chance
- 206kB, 67kB
- danibram/mocker-data-generator
- json-schema-faker
- Presentation Slides
- slidevjs/slidev
- TS, Vue
- slidevjs/slidev
- Font
- MISC
- useragent/figureprint
- 51Degrees/Renderer
- return the GPU renderer string for iPhone and iPad
- pmndrs/detect-gpu
- https://shaka-player-demo.appspot.com/support.html
- 51Degrees/Renderer
Runtimes & Engines
Engine | [QuickJS] | [DukTape] | [V8] | MuJS | JerryScript | Hermes | XS |
---|---|---|---|---|---|---|---|
License | MIT | MIT | BSD-3 | ISC | Apache-2.0 | MIT | GPL |
Executable size | 620K | 331K | 28M | 244K | 211K | 27M | 1.2M |
- Runtime - stdlib/sandboxing
- NodeJS
- Deno
- Bun
- workerd
- edge-runtime
- losfair/blueboat
- Apache-2.0, Rust
- multi-tenant serverless JavaScript runtime
- V8 isolate
- vm2
- vs node:vm
- 更安全
- 暴露更少的内容
- 使用 proxy 避免逃逸
- 覆盖 require 避免访问内部
- 支持 transpiler
- vs node:vm
- vm - NodeJS
- ringo/ringojs
- JVM
- Engine - JIT
- V8
- Chrome
- JavaScriptCore
- SpiderMonkey
- Firefox
- GraalJS
- Oracle
- GraalVM
- JVM
- ChakraCore
- MIT, C++
- 早先的 Microsoft Edge
- just-js/just
- small v8 for linux only
- ~15 MB
- facebook/hermes
- MIT, C++
- React Native
- XS Moddable
- GPL
- V8
- Engine - embeddable/interpreter
- svaarala/duktape
- MIT, C
- bellard/quickjs
- MIT, C
- Typescript
- https://bellard.org/quickjs/bench.html
- saghul/txiki.js
- MIT, C
- QuickJS + libuv + wasm3 + curl + libffi
- cesanta/mjs
- GPLv2, C
- ccxvii/mujs
- ISC, C
- svaarala/duktape
- Sandbox
- v8 isolate
- WICG/portals
- JetBrains/websandbox
- Apache-2.0, TS
- iframe
- NeilFraser/JS-Interpreter
- sandboxed JavaScript interpreter in JavaScript
- LavaMoat/LavaMoat
- MIT
- based on endo
- endojs/endo
- distributed secure JavaScript sandbox, based on SES
- SES - Secure EcmaScript
- tc39/proposal-ses
- endojs/Jessie
- simple universal safe mobile code
- tc39/proposal-shadowrealm
- IoT
- espruino
- MPLv2, C
- 128kB Flash, 8kB RAM
- jerryscript-project/jerryscript
- Apache-2.0, C99
- ECMAScript 5.1
- 160K
- espruino
- GoogleChromeLabs/jsvu
- JavaScript engine Version Updater
- 支持 charkra, gralljs, hermes, JavaScriptCore, quickjs, SpiderMonkey, v8, v8 debug, xs
- Typescript
- sablejs/sablejs
- JS
- 国产
- ECMA5.1
- License 不明确 - https://github.com/sablejs/sablejs/issues/19
- plasma-umass/doppio
- JVM in TypeScript v0.5.0
- List of ECMAScript engines
- privatenumber/ts-runtime-comparison
WebServer
- fastify
- koa
- express
- [polka]
- trpc
- nextjs
- jeremydaly/lambda-api
- 路由
- typestack/routing-controllers
- 通过 修饰器 为 express.js, koa.js 定义路由
- typestack/socket-controllers
- typestack/routing-controllers
Typescript
- https://github.com/typestack
- dsherret/ts-morph
- Compiler API wrapper
- AST edit
- 替代 tsc
- ts-patch
- typia
- trpc
- zod
Polyfill
- https://github.com/ardatan/whatwg-node
- fetch
- busboy -> parse form data
- fast-querystring
- fast-url-parser
- events
- server
- fetch
Edge/Serverless
- blueboat
- flareact/flareact
Game
- KilledByAPixel/LittleJS
- Tiny, 2D, WebGL
Template
- eta
- 5.7kB/2.4kB
- linkedin/dustjs
- ejs
- nunjucks
- pug
- twig
- liquid
- doT
- 通用/跨语言/非信任代码
- handlebars
- mustache
- aui/art-template
- 高性能,不再维护
有趣
- enkimute/ganja.js - 几何代数
- lokesh/color-thief
- 提取 image 颜色
Crypto
- Hashing
- travist/jsencrypt
- RSA
- dchest/tweetnacl-js
- Port of TweetNaCl cryptographic library to JavaScript
- aes-decrypter
- pkcs7
- videojs-contrib-hls
- AES-128 segment encryption
- http://www.webtoolkit.info/javascript-sha1.html
- http://www.webtoolkit.info/javascript-sha256.html
- http://www.webtoolkit.info/javascript-md5.html
- http://www.webtoolkit.info/javascript-base64.html
- http://pajhome.org.uk/crypt/md5/
UX
工具
go install github.com/cryogenicplanet/[email protected]
# .depp/config.json
depp init
depp