Research spike (curiosity / cleanup): inventory what spikersoft-angular still ships that can be replaced by built-in browser APIs in 2026, or dropped as unused, to slim dependencies and feature chunks.
Browser target already helps a lot (browserslist):
The app is already zoneless (provideZonelessChangeDetection(), polyfills: []). Several “compat” packages look overdue for pruning.
Already native in this codebase:crypto.randomUUID() (several call sites), navigator.clipboard, URL.createObjectURL + <a download>, AbortController, ResizeObserver/IntersectionObserver at runtime. No lodash/date-fns/moment/file-saver. No package.json"browser" shims.
Not in scope: replacing product engines (Monaco, Three, Leaflet, Keycloak, SignalR, PDF.js viewer, Tesseract, DuckDB, Blockly, Rete, Pyodide, Clang, v86, etc.) unless there is a genuine native alternative.
Related research: OPFS / offline pin+outbox — #865.
Highest-confidence drops
Package / code
Size (approx)
Used where
Native / reality
Verdict
process ^0.11.10
~1.5 KB gz
Import in polyfills.tscommented out; polyfills: []
Node polyfill — unused
DROP direct dep
temporal-polyfill ^1.0.1
~32.5 KB gz
Zero app imports
Temporal not Baseline yet (Safari still missing); package unused today
DROP direct dep (FullCalendar may still bring its own transitively)
zone.js 0.16.2
~13 KB gz if loaded
Not imported; zoneless boot
Leftover
DROP from our deps; confirm Storybook/tests don’t still pull it
asn1js ^3.0.10
~16 KB gz
No imports — voxel uses custom ASN1.ts (+ asset)
No ASN.1 platform API
DROP npm package; keep custom parser
bigint-mod-arith ^3.3.1
~1 KB gz npm
npm unused — code imports vendored util/bigint-mod-arith.ts from CryptManager.ts
No BigInt.modPow
DROP npm package; keep vendored modPow
uuid ^14.0.1
~0.4 KB gz v4
Sole import: menu-bar.component.ts → guid = uuidv4() — appears unused in template
crypto.randomUUID() — Baseline
DROP — swap or delete guid
js-sha1 ^0.7.0
~2.6 KB gz (+ vendored asset)
Voxel Authentication.createServerHash
crypto.subtle.digest("SHA-1", …) — Baseline for digest
DROP — keep Minecraft signed-hex post-processing; hash step becomes async
@spikersoft/shared-utils-crc32
tiny
No production consumers (alias + self-tests only)
No CRC-32 browser API
DROP unused leaf lib (or wire it later)
Also noted as likely unused direct deps in an earlier pass (confirm dynamic import / assets before delete): mermaid, ngx-socket-io, avif.js, three-addons. Real AVIF path is @jsquash/avif.
Strong “maybe replace with built-ins”
Package / pattern
Why it exists
Native angle
Caveat
fflate ^0.8.3 (~12–22 KB gz)
x86 playground sync gzip for localStorage + share-URL parity with upstream x64.halb.it
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Research spike (curiosity / cleanup): inventory what
spikersoft-angularstill ships that can be replaced by built-in browser APIs in 2026, or dropped as unused, to slim dependencies and feature chunks.Browser target already helps a lot (
browserslist):The app is already zoneless (
provideZonelessChangeDetection(),polyfills: []). Several “compat” packages look overdue for pruning.Already native in this codebase:
crypto.randomUUID()(several call sites),navigator.clipboard,URL.createObjectURL+<a download>,AbortController, ResizeObserver/IntersectionObserver at runtime. No lodash/date-fns/moment/file-saver. Nopackage.json"browser"shims.Not in scope: replacing product engines (Monaco, Three, Leaflet, Keycloak, SignalR, PDF.js viewer, Tesseract, DuckDB, Blockly, Rete, Pyodide, Clang, v86, etc.) unless there is a genuine native alternative.
Related research: OPFS / offline pin+outbox — #865.
Highest-confidence drops
process^0.11.10polyfills.tscommented out;polyfills: []temporal-polyfill^1.0.1Temporalnot Baseline yet (Safari still missing); package unused todayzone.js0.16.2asn1js^3.0.10ASN1.ts(+ asset)bigint-mod-arith^3.3.1util/bigint-mod-arith.tsfromCryptManager.tsBigInt.modPowmodPowuuid^14.0.1menu-bar.component.ts→guid = uuidv4()— appears unused in templatecrypto.randomUUID()— Baselineguidjs-sha1^0.7.0Authentication.createServerHashcrypto.subtle.digest("SHA-1", …)— Baseline for digest@spikersoft/shared-utils-crc32Also noted as likely unused direct deps in an earlier pass (confirm dynamic import / assets before delete):
mermaid,ngx-socket-io,avif.js,three-addons. Real AVIF path is@jsquash/avif.Strong “maybe replace with built-ins”
fflate^0.8.3 (~12–22 KB gz)x64.halb.itCompressionStream("gzip")/DecompressionStream— Baseline (Safari 16.4+)mtime/filenamemust stay byte-compatible with share URLspako^3.0.1 (~14 KB gz; fat ES5 asset also present)NetworkManagersync zlib inflate/deflate on hot packet pathCompressionStream("deflate")/ decompress — Baselinedeflate-raw; prefer dropping fat asset if npm import is realwasm-voxel/.../aes.ts)ngx-mask^22.1.0 (~44 KB gz)provideEnvironmentNgxMask()inmain.ts; only Marks phone fieldsJSON.parse(JSON.stringify(...))clonesstructuredClone()— BaselineKeep — no real browser replacement
isomorphic-git,lightning-fs,wasm-gitlg2_opfs*) — possible evolution to drop lightning-fs IndexedDB layer later (#865-adjacent)jszip@msgpack/msgpackng-qrcodeBarcodeDetectoris decode-onlydompurify(#409)setHTMLnot Baseline — Safari still missinghls.js+ovenplayertslibASN1, AES-CFB, MinecraftUUIDjs-sha1is the easy native swappdfjs-distSuggested execution order
process,temporal-polyfill(direct),asn1js,bigint-mod-arith(npm),zone.js(our dep), unusedcrc32lib; plus auditmermaid/ngx-socket-io/avif.js/three-addonsuuid→ delete/crypto.randomUUID();js-sha1→crypto.subtle.digest("SHA-1")(+ remove vendoredsha1.min.jsif unused)fflate→ CompressionStream (share-URL byte parity); scopengx-maskout ofmain.tspakoon Minecraft packetsdompurifyuntil Safari ships Sanitizer APISuccess metrics
js-sha1guidremoved)Prime examples
js-sha1→ Web Cryptouuid→crypto.randomUUID()(or delete unusedguid)Single remaining npm import in
menu-bar.component.ts; everywhere else already migrated.Ask
uuid/js-sha1cleanup PR (low risk).fflate→CompressionStreamspike (+ngx-maskmain-bundle scoping).