Repository navigation
v2.0.0
QuickWin v2.0.0 — declarative FFI rewrite
This major release replaces libffi with built-in assembly call stubs and rebuilds the FFI surface as a declarative, type-checked API. Code written against the 1.x FFI API will not work unchanged on 2.x — hence the semver major.
123 files changed, +12615 / −2253 since v1.3.0.
⚠️ Breaking Changes
- libffi removed —
bind()now dispatches through built-in asm call stubs; the libffi dependency and its API are gone. - Struct syntax flattened — nested builder calls replaced by plain object literals with string sugar; layout runs on a CType IR with MSVC-compatible lowering.
u64/i64unified asbigint— 64-bit integers are alwaysbigint, on every platform.- Token vocabulary tightened — typedef aliases and
Normdropped; the kind vocabulary is single-sourced. - Direction-split codecs — encode / decode / alloc split by direction; struct codecs return
PtrArrayBuffer(zero-initialized). - Branded handles and NULL — handle pointer slots across structs,
.d.tsand kernel32 are branded;NULLis branded per pointer type. - Bindings regrouped under
lib/windows/—user32/kernel32/gdi32/comdlg32/shell32/ole32/ntdllmodules, with struct definitions centralized inlib/windows/structs.ts.
Added
- Closures — JS callbacks as native function pointers, including ia32 64-bit integer returns.
- Bitfields — MSVC layout rules.
- Unions, typed pointers, NUL-terminated strings.
- Declarative bind/struct FFI — named
<NAME>ptrlayouts,alloc()out-params,arrayOf, tuple-typed fixed arrays. - Codec
encode/decode/allocplus curated user32 bindings. - Token modifiers —
!non-null and@Enumvalue domains. - exec_server — GUI log window, token auth,
--noguiheadless mode; window enumeration and screenshot capture (clamped to screen); kills subprocess on disconnect with optional per-request timeout; win11cmd /ukeeps UTF-16 output lossless. - TLS certificate verification for
fetch/ WebSocket /import(https). - HTTP server — streaming
ReadableStreamresponse bodies, trailing headers on chunked responses, client disconnect surfaced viaAbortSignal. - fetch — recognizes the
Trailerfooter when completing chunked responses. - Win11 VM — version-numbered ports and a CI matrix entry (currently disabled; enable by uncommenting).
Fixed
DeepPartialno longer recurses into primitive brand types.- Hardened bitfields, closure bounds checks and
bindLibgenerics. - 64-bit window handles written without JS bit-shift wraparound (exec_server).
- SMB: oplocks disabled in
smb_wrapperto stop stale guest reads. - Stale winpty references removed after the CreateProcess + CreatePipe exec rewrite.
Docs
- FFI notes:
!modifier cost, node:ffi gap (73–424×), callPacked attribution (90% in the JS layer). - JSDoc
@param args_Non binding parameters; binding JSDoc deduplicated. - exec_server article and architecture notes; dev-docs overhaul.
Full diff: v1.3.0...v2.0.0
Assets
| File | Notes |
|---|---|
qwin.exe |
x64 (Win7+) |
qwin-x86.exe |
x86 / XP |
qwin-nowasm.exe |
x64, no WASM |
qwin-nowasm-x86.exe |
x86, no WASM |
main.js |
bundled JS entry |
quickwin-2.0.0.tgz |
npm tarball (also on npm as quickwin@2.0.0) |