2026 Frontend Pitfall Checklist:
Biome + TypeScript Incremental on a Remote Mac
Release engineers on rented Mac runners often run Biome and TypeScript back to back without a shared contract for caches, threads, or CI order. This checklist compares biome.json with tsc --incremental settings, names realistic cache paths, and adds a three-step acceptance gate before you tag. Use it beside our monorepo remote-cache checklist and Vite and Webpack cache guide so static analysis stays fast and deterministic.
01 Pain points on shared remote Mac workers
Pain 1 — stampeding threads: Biome parallelizes file work while tsc holds a large single-process graph. Together they can oversubscribe performance cores and stall SSH. Pain 2 — poisoned caches: switching branches without invalidating tsbuildinfo yields green pipelines that fail locally. Pain 3 — wrong stage order: running expensive browser checks before cheap lint and type gates wastes minutes on every push.
02 Decision matrix: biome.json vs tsc incremental
The table below is the fastest way to align owners of formatting rules with owners of type graphs. Biome covers lint and format; TypeScript incremental covers type information reuse.
| Topic | Biome (biome.json / CLI) |
TypeScript (tsc / tsconfig) |
|---|---|---|
| Primary knobs | files.include, files.ignore, formatter, linter, vcs.useIgnoreFile |
"incremental": true, optional "tsBuildInfoFile", "composite": true for project refs |
| CLI flags (examples) | biome check --write ., biome ci . in pipelines |
tsc -p tsconfig.json --incremental or tsc -b for monorepos |
| Parallelism model | Multi-file worker pool inside the Biome binary | Mostly single program; use tsc -b to parallelize projects at the graph level |
| Typical cache artifact | Project-local caches; consult Biome release notes for version-specific paths and log verbosity flags | *.tsbuildinfo path from tsBuildInfoFile, default .tsbuildinfo beside config |
| CI cache key inputs | Lockfile, Biome version, biome.json hash |
Lockfile, TypeScript version, tsconfig graph, source glob hash |
03 Parallel workers and CPU core binding
macOS does not expose taskset. Practical binding means policy, not pinning threads by hand. Keep one or two cores free for remote desktop, sshd, and metadata daemons. Treat hw.ncpu as an upper bound, not a target concurrency.
| Host profile | Biome + tsc suggestion |
|---|---|
| 8 performance cores (base M4 class) | Run Biome and tsc sequentially in CI, or parallel only if RAM exceeds roughly twenty-four gigabytes free. |
| 10–12 cores (Pro class) | Parallel allowed: start Biome, then tsc with NODE_OPTIONS=--max-old-space-size=8192; cap other Node tools to half of logical CPUs. |
| Interactive SSH session | Prefer nice or lower overall job count so WindowServer stays responsive during long checks. |
Advanced teams may wrap jobs with taskpolicy attributes on macOS to bias QoS, but most frontend pipelines simply limit simultaneous heavy steps and rely on incremental files to shorten wall time.
04 Cache directories worth restoring in CI
Persist read-only caches between commits when lockfiles are unchanged. Always separate caches per branch or include the lockfile hash in the key. Pair this section with package.json script preflight so script changes invalidate the right layers.
- TypeScript: restore the directory that contains each
tsBuildInfoFileplusnode_modules/.cacheif your wrapper stores auxiliary data. - Biome: cache the repository root that holds
biome.jsonand any internal cache folder your version writes after first run. - Clean rule: delete build info when
package.json, workspace globs, or compiler options change.
05 CI and CD placement on remote Mac
Order jobs from cheapest signal to most expensive artifact. Install dependencies, then Biome, then tsc --noEmit incremental, then unit tests, then bundlers, then smoke and predeploy checks. CD should never promote a build that skipped type information when Biome alone passed, because Biome does not replace the type checker.
06 Five-step executable runbook
- Pin Biome and TypeScript versions in the lockfile and print both versions into the CI log header.
- Run
biome ci .with repository-rootbiome.jsoncommitted; fail on formatter drift. - Run
tsc -p tsconfig.json --incremental --noEmit(ortsc -bfor references) and uploadtsbuildinfoas a cache artifact keyed by branch and lockfile. - Record wall time and CPU saturation; if both steps together exceed eighty percent CPU for ten minutes, split them across two workflow jobs.
- On failure, attach the first fifty diagnostics from each tool to the ticket to avoid rerunning full suites blindly.
07 Three-step pre-release acceptance
Step A: On the exact release SHA, run Biome and incremental tsc with cold caches once to prove reproducibility. Step B: Warm-cache run must finish at least thirty percent faster or you likely mis-keyed artifacts. Step C: Execute the smoke path documented in your CD runbook before tagging; link failures back to the cache key used.
Treat biome.json and tsc --incremental as complementary gates, persist their cache files with strict keys, and cap parallelism on remote Mac hosts so SSH stays usable. The three-step acceptance block catches stale tsbuildinfo before customers do.
Next steps: open the MacWww home page for product context, compare plans and pricing for Apple Silicon rental, and read the help center for SSH, VNC, and automation setup. Browse the full blog index for more CI recipes.
Run Biome and tsc Incremental on a Rented Mac
Stable Apple Silicon, real macOS paths, and bandwidth for parallel CI steps. View pricing without login, then follow help docs to wire SSH runners.