← Back to dtsx

The numbers.
And how we got them.

Choose a platform, fixture, and library size. Compare tools doing similar work.

16tool configurations
3project sizes
9samples per qualified case
48/48qualified macOS cases
48/48qualified Linux cases
33/48qualified macOS cases
33/48qualified Linux cases
Download results ↓Download results ↓Download results ↓Download results ↓

Per-module emission

Declarations per source file. A semantic typecheck is not required.

macOS · Explicit annotations · 1 module + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
Oxc0.157.017.012.8 - 25.59 / 9
dtsx0.11.3422.216.9 - 49.49 / 9
SWC1.16.2255.050.6 - 82.79 / 9
dtsx JS SDK0.11.3463.942.4 - 107.19 / 9
Rolldown + unplugin-isolated-decl0.17.079.060.1 - 140.89 / 9
TypeScript transpileDeclaration6.0.3152.6115.2 - 173.29 / 9
macOS · Explicit annotations · 25 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
Oxc0.157.024.118.4 - 35.19 / 9
dtsx0.11.3426.020.4 - 40.49 / 9
SWC1.16.2268.355.1 - 188.19 / 9
dtsx JS SDK0.11.3481.856.5 - 102.09 / 9
Rolldown + unplugin-isolated-decl0.17.0111.672.6 - 223.99 / 9
TypeScript transpileDeclaration6.0.3228.4176.7 - 386.19 / 9
macOS · Explicit annotations · 100 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
Oxc0.157.041.328.4 - 77.19 / 9
dtsx0.11.3444.334.3 - 68.69 / 9
SWC1.16.22102.673.4 - 146.99 / 9
Rolldown + unplugin-isolated-decl0.17.0125.395.0 - 319.59 / 9
dtsx JS SDK0.11.34152.0110.2 - 270.19 / 9
TypeScript transpileDeclaration6.0.3417.8327.5 - 727.49 / 9

Checked compiler builds

Includes semantic diagnostics. These compilers do extra work; compare within this group.

macOS · Explicit annotations · 1 module + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
TypeScript 7 native7.0.2252.2202.5 - 301.29 / 9
TypeScript 6 tsc6.0.31145.5909.6 - 1580.79 / 9
macOS · Explicit annotations · 25 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
TypeScript 7 native7.0.2291.4205.0 - 464.79 / 9
TypeScript 6 tsc6.0.31170.2866.2 - 1731.09 / 9
macOS · Explicit annotations · 100 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
TypeScript 7 native7.0.2344.3263.8 - 715.09 / 9
TypeScript 6 tsc6.0.31496.41042.5 - 2190.09 / 9

Standalone bundles

One public declaration entry. Checking and JavaScript work vary by pipeline.

macOS · Explicit annotations · 1 module + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx bundle0.11.3447.645.3 - 74.29 / 9
tsdown / Oxc0.23.796.477.2 - 172.09 / 9
tsdown / TypeScript0.23.7558.7455.5 - 786.19 / 9
tsup9.0.0616.1582.7 - 1004.39 / 9
tsc + rollup-plugin-dts6.5.11220.2907.3 - 1472.59 / 9
dts-bundle-generator9.5.11604.61209.8 - 2298.29 / 9
Vite + unplugin-dts1.1.21636.01282.9 - 1964.19 / 9
tsc + API Extractor7.60.11874.81552.0 - 2495.09 / 9
macOS · Explicit annotations · 25 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx bundle0.11.3466.661.4 - 133.49 / 9
tsdown / Oxc0.23.7129.3107.0 - 298.89 / 9
tsdown / TypeScript0.23.7706.1543.3 - 1106.79 / 9
tsup9.0.0810.3655.6 - 1197.89 / 9
tsc + rollup-plugin-dts6.5.11224.2977.5 - 2013.09 / 9
dts-bundle-generator9.5.11627.31325.5 - 2483.89 / 9
Vite + unplugin-dts1.1.21980.01416.1 - 2380.29 / 9
tsc + API Extractor7.60.12318.71628.9 - 3014.19 / 9
macOS · Explicit annotations · 100 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx bundle0.11.34147.6119.2 - 221.99 / 9
tsdown / Oxc0.23.7244.6181.8 - 421.69 / 9
tsdown / TypeScript0.23.7883.7664.9 - 1222.99 / 9
tsup9.0.01162.3868.7 - 1577.59 / 9
tsc + rollup-plugin-dts6.5.11666.71257.0 - 1931.69 / 9
dts-bundle-generator9.5.12055.41772.9 - 3411.39 / 9
Vite + unplugin-dts1.1.22361.91881.3 - 3345.29 / 9
tsc + API Extractor7.60.12600.11986.8 - 3126.99 / 9

macOS. One machine. A defined workload.

Measured November 8, 2026 on Apple M1 (Virtual), macOS arm64, 3 CPU cores, 7 GiB memory, Bun 1.4.4. This snapshot uses a hosted GitHub Actions runner. Virtualization and shared host activity can affect timings. Ranges and raw samples are visible.

macOS · Explicit annotations · 100 modules.

Oxc has the lowest per-module emission median among qualified configurations.

dtsx bundle has the lowest standalone bundle median among qualified configurations.

Close medians with overlapping ranges should be treated as similar performance. Compare within the selected platform, fixture and output group.

Per-module emission

Declarations per source file. A semantic typecheck is not required.

Linux · Explicit annotations · 1 module + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx0.11.3417.012.8 - 23.89 / 9
Oxc0.157.017.613.1 - 25.19 / 9
SWC1.16.2231.726.7 - 37.69 / 9
Rolldown + unplugin-isolated-decl0.17.060.055.5 - 70.99 / 9
dtsx JS SDK0.11.3467.061.0 - 72.49 / 9
TypeScript transpileDeclaration6.0.3193.3187.9 - 220.19 / 9
Linux · Explicit annotations · 25 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx0.11.3421.916.7 - 30.79 / 9
Oxc0.157.024.017.5 - 51.19 / 9
SWC1.16.2242.535.1 - 62.39 / 9
Rolldown + unplugin-isolated-decl0.17.071.062.0 - 83.69 / 9
dtsx JS SDK0.11.3480.873.8 - 97.79 / 9
TypeScript transpileDeclaration6.0.3274.9264.6 - 291.59 / 9
Linux · Explicit annotations · 100 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx0.11.3429.824.6 - 37.29 / 9
Oxc0.157.035.625.2 - 70.89 / 9
SWC1.16.2261.452.9 - 74.69 / 9
Rolldown + unplugin-isolated-decl0.17.093.583.6 - 131.49 / 9
dtsx JS SDK0.11.34118.9108.4 - 146.69 / 9
TypeScript transpileDeclaration6.0.3420.1386.7 - 466.89 / 9

Checked compiler builds

Includes semantic diagnostics. These compilers do extra work; compare within this group.

Linux · Explicit annotations · 1 module + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
TypeScript 7 native7.0.2309.4299.8 - 330.79 / 9
TypeScript 6 tsc6.0.31415.31377.1 - 1446.09 / 9
Linux · Explicit annotations · 25 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
TypeScript 7 native7.0.2311.6309.3 - 336.19 / 9
TypeScript 6 tsc6.0.31507.51455.5 - 1568.69 / 9
Linux · Explicit annotations · 100 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
TypeScript 7 native7.0.2317.8306.1 - 346.09 / 9
TypeScript 6 tsc6.0.31614.61556.3 - 1638.49 / 9

Standalone bundles

One public declaration entry. Checking and JavaScript work vary by pipeline.

Linux · Explicit annotations · 1 module + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx bundle0.11.3465.261.5 - 76.29 / 9
tsdown / Oxc0.23.7121.9112.9 - 125.39 / 9
tsdown / TypeScript0.23.7723.5703.8 - 739.99 / 9
tsup9.0.0892.3873.9 - 973.09 / 9
tsc + rollup-plugin-dts6.5.11472.81421.4 - 1563.79 / 9
Vite + unplugin-dts1.1.21964.21915.6 - 2029.89 / 9
dts-bundle-generator9.5.12072.12020.9 - 2103.89 / 9
tsc + API Extractor7.60.12537.22491.1 - 2684.39 / 9
Linux · Explicit annotations · 25 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx bundle0.11.3483.176.9 - 95.49 / 9
tsdown / Oxc0.23.7167.2156.3 - 182.79 / 9
tsdown / TypeScript0.23.7809.4784.7 - 840.99 / 9
tsup9.0.01045.71014.2 - 1107.69 / 9
tsc + rollup-plugin-dts6.5.11593.81534.9 - 1792.89 / 9
dts-bundle-generator9.5.12237.92169.7 - 2374.99 / 9
Vite + unplugin-dts1.1.22244.92121.7 - 2312.09 / 9
tsc + API Extractor7.60.12704.82615.3 - 2823.69 / 9
Linux · Explicit annotations · 100 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx bundle0.11.34131.0120.6 - 143.99 / 9
tsdown / Oxc0.23.7253.7230.3 - 272.19 / 9
tsdown / TypeScript0.23.7999.9936.3 - 1055.39 / 9
tsup9.0.01216.91198.0 - 1260.29 / 9
tsc + rollup-plugin-dts6.5.11814.51771.8 - 1842.19 / 9
dts-bundle-generator9.5.12471.82416.1 - 2505.79 / 9
Vite + unplugin-dts1.1.22508.42424.4 - 2628.19 / 9
tsc + API Extractor7.60.12932.52856.2 - 3021.79 / 9

Linux. One machine. A defined workload.

Measured November 8, 2026 on AMD EPYC 9V74 80-Core Processor, Linux x64, 4 CPU cores, 16 GiB memory, Bun 1.4.4. This snapshot uses a hosted GitHub Actions runner. Virtualization and shared host activity can affect timings. Ranges and raw samples are visible.

Linux · Explicit annotations · 100 modules.

dtsx has the lowest per-module emission median among qualified configurations.

dtsx bundle has the lowest standalone bundle median among qualified configurations.

Close medians with overlapping ranges should be treated as similar performance. Compare within the selected platform, fixture and output group.

Per-module emission

Declarations per source file. A semantic typecheck is not required.

macOS · Inferred APIs · 1 module + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx0.11.3453.443.4 - 98.69 / 9
dtsx JS SDK0.11.3489.861.0 - 130.69 / 9
Oxc0.157.0Not qualified for this fixture. Inspect the emission diagnostic ↗
SWC1.16.22Not qualified for this fixture. Inspect the emission diagnostic ↗
TypeScript transpileDeclaration6.0.3Not qualified for this fixture. Inspect the emission diagnostic ↗
Rolldown + unplugin-isolated-decl0.17.0Not qualified for this fixture. Inspect the emission diagnostic ↗
macOS · Inferred APIs · 25 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx0.11.3488.450.5 - 175.19 / 9
dtsx JS SDK0.11.34109.565.5 - 167.69 / 9
Oxc0.157.0Not qualified for this fixture. Inspect the emission diagnostic ↗
SWC1.16.22Not qualified for this fixture. Inspect the emission diagnostic ↗
TypeScript transpileDeclaration6.0.3Not qualified for this fixture. Inspect the emission diagnostic ↗
Rolldown + unplugin-isolated-decl0.17.0Not qualified for this fixture. Inspect the emission diagnostic ↗
macOS · Inferred APIs · 100 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx0.11.34129.294.1 - 169.29 / 9
dtsx JS SDK0.11.34182.8134.3 - 269.19 / 9
Oxc0.157.0Not qualified for this fixture. Inspect the emission diagnostic ↗
SWC1.16.22Not qualified for this fixture. Inspect the emission diagnostic ↗
TypeScript transpileDeclaration6.0.3Not qualified for this fixture. Inspect the emission diagnostic ↗
Rolldown + unplugin-isolated-decl0.17.0Not qualified for this fixture. Inspect the emission diagnostic ↗

Checked compiler builds

Includes semantic diagnostics. These compilers do extra work; compare within this group.

macOS · Inferred APIs · 1 module + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
TypeScript 7 native7.0.2326.0264.9 - 583.69 / 9
TypeScript 6 tsc6.0.31740.41149.7 - 2063.29 / 9
macOS · Inferred APIs · 25 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
TypeScript 7 native7.0.2388.0286.8 - 502.49 / 9
TypeScript 6 tsc6.0.31420.71035.7 - 2027.49 / 9
macOS · Inferred APIs · 100 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
TypeScript 7 native7.0.2398.0318.8 - 590.09 / 9
TypeScript 6 tsc6.0.31595.61243.1 - 2232.09 / 9

Standalone bundles

One public declaration entry. Checking and JavaScript work vary by pipeline.

macOS · Inferred APIs · 1 module + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx bundle0.11.3471.357.1 - 122.59 / 9
tsdown / TypeScript0.23.7806.5532.7 - 1018.59 / 9
tsup9.0.0836.9626.4 - 1151.79 / 9
tsc + rollup-plugin-dts6.5.11341.61051.1 - 1643.69 / 9
Vite + unplugin-dts1.1.21841.91574.1 - 2791.09 / 9
dts-bundle-generator9.5.12008.31438.7 - 2747.39 / 9
tsc + API Extractor7.60.12487.41786.2 - 2732.59 / 9
tsdown / Oxc0.23.7Not qualified for this fixture. Inspect the emission diagnostic ↗
macOS · Inferred APIs · 25 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx bundle0.11.34100.078.2 - 170.39 / 9
tsdown / TypeScript0.23.7904.2687.3 - 1075.49 / 9
tsup9.0.01128.1875.1 - 1370.49 / 9
tsc + rollup-plugin-dts6.5.11544.01191.9 - 1979.99 / 9
dts-bundle-generator9.5.12037.21531.6 - 2634.09 / 9
Vite + unplugin-dts1.1.22322.81675.6 - 3049.59 / 9
tsc + API Extractor7.60.12609.42205.0 - 3169.49 / 9
tsdown / Oxc0.23.7Not qualified for this fixture. Inspect the emission diagnostic ↗
macOS · Inferred APIs · 100 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx bundle0.11.34188.0145.1 - 250.39 / 9
tsdown / TypeScript0.23.71127.31046.9 - 1226.59 / 9
tsup9.0.01292.81034.6 - 1511.49 / 9
tsc + rollup-plugin-dts6.5.11825.61503.0 - 2203.79 / 9
Vite + unplugin-dts1.1.22532.12370.0 - 4141.59 / 9
dts-bundle-generator9.5.12544.82182.2 - 4615.59 / 9
tsc + API Extractor7.60.13100.62692.8 - 3883.69 / 9
tsdown / Oxc0.23.7Not qualified for this fixture. Inspect the emission diagnostic ↗

macOS. One machine. A defined workload.

Measured November 8, 2026 on Apple M1 (Virtual), macOS arm64, 3 CPU cores, 7 GiB memory, Bun 1.4.4. This snapshot uses a hosted GitHub Actions runner. Virtualization and shared host activity can affect timings. Ranges and raw samples are visible.

macOS · Inferred APIs · 100 modules.

dtsx has the lowest per-module emission median among qualified configurations.

dtsx bundle has the lowest standalone bundle median among qualified configurations.

Close medians with overlapping ranges should be treated as similar performance. Compare within the selected platform, fixture and output group.

Per-module emission

Declarations per source file. A semantic typecheck is not required.

Linux · Inferred APIs · 1 module + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx0.11.3467.658.0 - 83.29 / 9
dtsx JS SDK0.11.3483.975.7 - 95.19 / 9
Oxc0.157.0Not qualified for this fixture. Inspect the emission diagnostic ↗
SWC1.16.22Not qualified for this fixture. Inspect the emission diagnostic ↗
TypeScript transpileDeclaration6.0.3Not qualified for this fixture. Inspect the emission diagnostic ↗
Rolldown + unplugin-isolated-decl0.17.0Not qualified for this fixture. Inspect the emission diagnostic ↗
Linux · Inferred APIs · 25 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx0.11.3487.177.3 - 107.89 / 9
dtsx JS SDK0.11.34116.2110.1 - 138.89 / 9
Oxc0.157.0Not qualified for this fixture. Inspect the emission diagnostic ↗
SWC1.16.22Not qualified for this fixture. Inspect the emission diagnostic ↗
TypeScript transpileDeclaration6.0.3Not qualified for this fixture. Inspect the emission diagnostic ↗
Rolldown + unplugin-isolated-decl0.17.0Not qualified for this fixture. Inspect the emission diagnostic ↗
Linux · Inferred APIs · 100 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx0.11.34133.8123.6 - 142.49 / 9
dtsx JS SDK0.11.34182.4178.0 - 186.79 / 9
Oxc0.157.0Not qualified for this fixture. Inspect the emission diagnostic ↗
SWC1.16.22Not qualified for this fixture. Inspect the emission diagnostic ↗
TypeScript transpileDeclaration6.0.3Not qualified for this fixture. Inspect the emission diagnostic ↗
Rolldown + unplugin-isolated-decl0.17.0Not qualified for this fixture. Inspect the emission diagnostic ↗

Checked compiler builds

Includes semantic diagnostics. These compilers do extra work; compare within this group.

Linux · Inferred APIs · 1 module + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
TypeScript 7 native7.0.2401.7389.0 - 414.39 / 9
TypeScript 6 tsc6.0.31898.11855.9 - 1998.89 / 9
Linux · Inferred APIs · 25 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
TypeScript 7 native7.0.2414.8390.0 - 438.09 / 9
TypeScript 6 tsc6.0.32018.01938.2 - 2065.29 / 9
Linux · Inferred APIs · 100 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
TypeScript 7 native7.0.2446.0416.0 - 490.79 / 9
TypeScript 6 tsc6.0.32232.92207.8 - 2289.99 / 9

Standalone bundles

One public declaration entry. Checking and JavaScript work vary by pipeline.

Linux · Inferred APIs · 1 module + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx bundle0.11.3492.480.0 - 107.79 / 9
tsdown / TypeScript0.23.7940.7895.7 - 1012.99 / 9
tsup9.0.01207.71178.0 - 1241.29 / 9
tsc + rollup-plugin-dts6.5.11963.71908.8 - 2073.59 / 9
Vite + unplugin-dts1.1.22658.22592.0 - 2833.39 / 9
dts-bundle-generator9.5.12739.62677.2 - 2875.49 / 9
tsc + API Extractor7.60.13415.93313.3 - 3513.09 / 9
tsdown / Oxc0.23.7Not qualified for this fixture. Inspect the emission diagnostic ↗
Linux · Inferred APIs · 25 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx bundle0.11.34135.0129.3 - 148.69 / 9
tsdown / TypeScript0.23.71176.71094.6 - 1268.09 / 9
tsup9.0.01441.01375.5 - 1515.59 / 9
tsc + rollup-plugin-dts6.5.12184.92096.5 - 2376.09 / 9
Vite + unplugin-dts1.1.22910.42830.5 - 3010.19 / 9
dts-bundle-generator9.5.12984.42929.2 - 3119.49 / 9
tsc + API Extractor7.60.13624.93549.0 - 3811.79 / 9
tsdown / Oxc0.23.7Not qualified for this fixture. Inspect the emission diagnostic ↗
Linux · Inferred APIs · 100 modules + one entrypoint · milliseconds · lower is faster
Tool / versionMedianMin - maxSamples
dtsx bundle0.11.34211.3204.1 - 258.99 / 9
tsdown / TypeScript0.23.71440.61410.4 - 1500.29 / 9
tsup9.0.01753.11710.6 - 1800.69 / 9
tsc + rollup-plugin-dts6.5.12519.32409.1 - 2670.19 / 9
Vite + unplugin-dts1.1.23334.63233.0 - 3388.39 / 9
dts-bundle-generator9.5.13367.53253.0 - 3417.59 / 9
tsc + API Extractor7.60.14010.53819.5 - 4092.29 / 9
tsdown / Oxc0.23.7Not qualified for this fixture. Inspect the emission diagnostic ↗

Linux. One machine. A defined workload.

Measured November 8, 2026 on AMD EPYC 7763 64-Core Processor, Linux x64, 4 CPU cores, 16 GiB memory, Bun 1.4.4. This snapshot uses a hosted GitHub Actions runner. Virtualization and shared host activity can affect timings. Ranges and raw samples are visible.

Linux · Inferred APIs · 100 modules.

dtsx has the lowest per-module emission median among qualified configurations.

dtsx bundle has the lowest standalone bundle median among qualified configurations.

Close medians with overlapping ranges should be treated as similar performance. Compare within the selected platform, fixture and output group.

Engine benchmarks.

The lab above times whole published workflows on hosted runners. These numbers come from dtsx's own suite: the emitter itself, file by file, against oxc and TypeScript 7. Measured November 9, 2026 on Apple M3 Pro (Mac15,6), 11-core CPU (5 performance + 6 efficiency), 18 GB memory, macOS 27.0.1, Bun 1.4.4. Measured source: dtsx 0.11.34 at 0aa5843. Each tool's output is verified before timing, and dtsx runs in its value-inferring mode. Times are means; lower is faster. Each time is the median of 5 full runs; the 1-minute load average ranged 7.3–16.0 during measurement.

In-process API, no cache. One file per call: dtsx through its native binding, oxc-transform through N-API. Every dtsx cache is cleared on every iteration.
ToolSmall (~50 lines)Medium (~100 lines)Large (~330 lines)XLarge (~1050 lines)
dtsx6.74 µs13.96 µs58.13 µs325.92 µs
oxc-transform8.20 µs 1.22x26.75 µs 1.92x71.10 µs 1.22x327.74 µs 1.01x
CLI, single file. Each tool runs as an executable, so process startup is included. oxc has no declaration CLI, so it runs through a minimal Bun-compiled wrapper; tsc is TypeScript 7 native with --noCheck.
ToolSmall (~50 lines)Medium (~100 lines)Large (~330 lines)XLarge (~1050 lines)
dtsx3.10 ms2.54 ms2.74 ms4.03 ms
oxc10.04 ms 3.2x9.51 ms 3.7x11.32 ms 4.1x12.56 ms 3.1x
tsc 732.17 ms 10x31.22 ms 12x45.81 ms 17x42.16 ms 10x
CLI, multi-file project. A directory of generated modules. dtsx and tsc use multiple threads; oxc has no parallel declaration CLI.
Tool50 files100 files500 files
dtsx13.57 ms17.76 ms87.46 ms
oxc25.50 ms 1.88x38.65 ms 2.2x203.60 ms 2.3x
tsc 765.67 ms 4.8x101.32 ms 5.7x449.79 ms 5.1x

JavaScript SDK.

The @dtsx/dtsx SDK, which powers the bundler and build-tool plugins, called in-process like the JavaScript SDKs it is compared with. It ships the native engine for each platform and runs it in-process, falling back to its TypeScript engine where no native library applies.

JS SDK, in-process, no cache. The @dtsx/dtsx SDK, which runs its bundled native engine through Bun FFI, against oxc-transform, whose SDK runs Rust through N-API.
ToolSmall (~50 lines)Medium (~100 lines)Large (~330 lines)XLarge (~1050 lines)
dtsx JS SDK7.74 µs15.04 µs55.66 µs247.90 µs
oxc-transform8.20 µs 1.06x26.75 µs 1.78x71.10 µs 1.28x327.74 µs 1.32x
JS SDK, bundled declarations: fresh builds of the same project, checked by strict consumers outside timing.
Source filesToolAverage
2dtsx JS SDK3.10 ms
2tsdown JS SDK44.26 ms
11dtsx JS SDK6.93 ms
11tsdown JS SDK48.61 ms
101dtsx JS SDK58.90 ms
101tsdown JS SDK88.93 ms

Two ways to write your API.

The Explicit annotations fixture covers authored public types, generics, private fields, mapped types and enums. The Inferred APIs fixture omits type annotations and type assertions. It tests inferred defaults, returns, arrow functions, class members, objects, arrays and imported function results.

Every configuration receives the same source in the selected fixture. Emission failures and incorrect inferred types remain visible. Only fully qualified configurations receive medians. Raw results include the diagnostics.

What these results measure.

Same source. Fresh process.

Each tool receives the same source for the selected fixture. Every sample starts in a new process and a fresh output directory. Filesystem caches are warm. Incremental and result caches are not reused.

Useful output comes first.

Every sample must exit successfully, emit declarations, and pass a strict consumer covering every module. Exercised API positions must avoid any. Parameter types, arity and default optionality are checked. Inferred types must also preserve expected widening. Two negative assignments must produce exactly TS2322. Bundled declarations are tested in a standalone directory.

The whole command counts.

Wall time includes startup, package loading, source reads, emission, writes, and disposal. Cleanup and correctness checks happen outside timing. Two warmups precede nine samples, with tool order rotated each round.

Different tools do different work.

TypeScript compilers perform semantic checks. API Extractor and Rollup include prerequisite tsc emission. Vite runs its JavaScript pipeline. tsup and tsdown use declaration-only mode. The adapter source shows every setting.

Separate platforms. The same workload.

Every configuration is rerun on each platform. macOS and Linux timings stay separate, as do annotated and inferred APIs. A failed configuration is never ranked as a fast result. The fixtures exclude external dependencies, JSX, watch mode, declaration maps, and incremental rebuilds. The checks qualify this API; they do not prove correctness for arbitrary TypeScript.

The dtsx row uses the official dtsx 0.11.34 release: its native engine library with the matching Bun binding. The dtsx JS SDK row uses the published npm package. Linux shared libraries target GNU libc 2.17. Inferred dtsx builds include project planning and dependency snapshots in the measured command; the native engine performs inference and emission. The setup verifies pinned SHA-256 checksums before measuring. The source commit and artifact checksums are included in each raw snapshot. Inspect the release checksums ↗