From 50ce77f6a9b22237b29a21c94e7480ff7ea166ef Mon Sep 17 00:00:00 2001 From: Rob Hogan Date: Mon, 6 Jul 2026 08:21:21 -0700 Subject: [PATCH] Switch `unstable_compactSourceMaps` and `unstable_allowIndexMap` defaults to `true` (#1763) Summary: Pull Request resolved: https://github.com/react/metro/pull/1763 Flip these defaults to: - Change Metro's internal source map format to VLQ strings rather than decoded tuples - Emit [index maps](https://tc39.es/ecma426/#sec-index-source-map) for `.map` requests and programmatic and CLI source map builds. These are coupled, because allowing index maps without enabling compact source maps is a no-op, and enabling compact source maps without index maps is a performance regression for source map generation. Together, though, this reduces Metro's total memory footprint by more than 50%, and makes serving source maps ~2x faster. `/symbolicate` performance is preserved. ``` - **[Breaking]**: Metro now emits source maps as [index maps](https://tc39.es/ecma426/#sec-index-source-map). - **[Breaking]**: Custom serialisers now receive a module list with maps in `VlqMap` form (`module.output[].data.map`) ``` Reviewed By: GijsWeterings, hoxyq Differential Revision: D110759649 --- packages/metro-config/src/defaults/index.js | 4 +- .../__snapshots__/buildGraph-test.js.snap | 381 +----------------- 2 files changed, 6 insertions(+), 379 deletions(-) diff --git a/packages/metro-config/src/defaults/index.js b/packages/metro-config/src/defaults/index.js index 8ee4308daf..602776ccbe 100644 --- a/packages/metro-config/src/defaults/index.js +++ b/packages/metro-config/src/defaults/index.js @@ -70,7 +70,7 @@ const getDefaultValues = (projectRoot: ?string): ConfigT => ({ customSerializer: null, isThirdPartyModule: module => /(?:^|[/\\])node_modules[/\\]/.test(module.path), - unstable_allowIndexMap: false, + unstable_allowIndexMap: true, }, server: { @@ -136,7 +136,7 @@ const getDefaultValues = (projectRoot: ?string): ConfigT => ({ unstable_disableNormalizePseudoGlobals: false, unstable_renameRequire: true, unstable_compactOutput: false, - unstable_compactSourceMaps: false, + unstable_compactSourceMaps: true, unstable_memoizeInlineRequires: false, unstable_workerThreads: false, }, diff --git a/packages/metro/src/integration_tests/__tests__/__snapshots__/buildGraph-test.js.snap b/packages/metro/src/integration_tests/__tests__/__snapshots__/buildGraph-test.js.snap index 3be10525a9..52456009a1 100644 --- a/packages/metro/src/integration_tests/__tests__/__snapshots__/buildGraph-test.js.snap +++ b/packages/metro/src/integration_tests/__tests__/__snapshots__/buildGraph-test.js.snap @@ -24,394 +24,21 @@ Array [ ], }, "lineCount": 13, - "map": Array [ - Array [ - 2, - 2, - 11, - 0, - ], - Array [ - 2, - 14, - 11, - 12, - ], - Array [ - 4, - 2, - 13, - 0, - ], - Array [ - 4, - 6, - 13, - 6, + "map": Object { + "mappings": ";EAUA,YAAY;;EAEZ,IAAMA,GAAG,GAAGC,WAAO,CAAAC,cAAA,GAAQ,CAAC;EAC5B,IAAMC,GAAG,GAAGF,WAAO,CAAAC,cAAA,GAAQ,CAAC;EAG5B,IAAME,UAAU,GAAGH,WAAO,CAAAC,cAAA,GAAe,CAAC;EAE1CG,MAAM,CAACC,IAAI,CAAAD,MAAA,CAAAE,MAAA,KAAKP,GAAG,CAAC,CAAC;EAErBQ,MAAM,CAACC,OAAO,GAAG;IAACN,GAAG,EAAHA,GAAG;IAAEH,GAAG,EAAHA,GAAG;IAAEI,UAAU,EAAVA;EAAU,CAAC;AAAC,G", + "names": Array [ "Bar", - ], - Array [ - 4, - 9, - 13, - 9, - ], - Array [ - 4, - 12, - 13, - 12, "require", - ], - Array [ - 4, - 23, - 13, - 19, - ], - Array [ - 4, - 24, - 13, - 19, "_dependencyMap", - ], - Array [ - 4, - 38, - 13, - 19, - ], - Array [ - 4, - 41, - 13, - 27, - ], - Array [ - 4, - 42, - 13, - 28, - ], - Array [ - 5, - 2, - 14, - 0, - ], - Array [ - 5, - 6, - 14, - 6, "Foo", - ], - Array [ - 5, - 9, - 14, - 9, - ], - Array [ - 5, - 12, - 14, - 12, - "require", - ], - Array [ - 5, - 23, - 14, - 19, - ], - Array [ - 5, - 24, - 14, - 19, - "_dependencyMap", - ], - Array [ - 5, - 38, - 14, - 19, - ], - Array [ - 5, - 41, - 14, - 27, - ], - Array [ - 5, - 42, - 14, - 28, - ], - Array [ - 6, - 2, - 17, - 0, - ], - Array [ - 6, - 6, - 17, - 6, "TypeScript", - ], - Array [ - 6, - 16, - 17, - 16, - ], - Array [ - 6, - 19, - 17, - 19, - "require", - ], - Array [ - 6, - 30, - 17, - 26, - ], - Array [ - 6, - 31, - 17, - 26, - "_dependencyMap", - ], - Array [ - 6, - 45, - 17, - 26, - ], - Array [ - 6, - 48, - 17, - 41, - ], - Array [ - 6, - 49, - 17, - 42, - ], - Array [ - 7, - 2, - 19, - 0, "Object", - ], - Array [ - 7, - 8, - 19, - 6, - ], - Array [ - 7, - 9, - 19, - 7, "keys", - ], - Array [ - 7, - 13, - 19, - 11, - ], - Array [ - 7, - 14, - 19, - 11, - "Object", - ], - Array [ - 7, - 20, - 19, - 11, - ], - Array [ - 7, - 21, - 19, - 11, "assign", - ], - Array [ - 7, - 27, - 19, - 11, - ], - Array [ - 7, - 32, - 19, - 16, - "Bar", - ], - Array [ - 7, - 35, - 19, - 19, - ], - Array [ - 7, - 36, - 19, - 20, - ], - Array [ - 7, - 37, - 19, - 21, - ], - Array [ - 8, - 2, - 21, - 0, "module", - ], - Array [ - 8, - 8, - 21, - 6, - ], - Array [ - 8, - 9, - 21, - 7, "exports", ], - Array [ - 8, - 16, - 21, - 14, - ], - Array [ - 8, - 19, - 21, - 17, - ], - Array [ - 9, - 4, - 21, - 18, - "Foo", - ], - Array [ - 9, - 7, - 21, - 21, - ], - Array [ - 9, - 9, - 21, - 18, - "Foo", - ], - Array [ - 9, - 12, - 21, - 21, - ], - Array [ - 10, - 4, - 21, - 23, - "Bar", - ], - Array [ - 10, - 7, - 21, - 26, - ], - Array [ - 10, - 9, - 21, - 23, - "Bar", - ], - Array [ - 10, - 12, - 21, - 26, - ], - Array [ - 11, - 4, - 21, - 28, - "TypeScript", - ], - Array [ - 11, - 14, - 21, - 38, - ], - Array [ - 11, - 16, - 21, - 28, - "TypeScript", - ], - Array [ - 12, - 2, - 21, - 38, - ], - Array [ - 12, - 3, - 21, - 39, - ], - Array [ - 13, - 0, - 21, - 40, - ], - Array [ - 13, - 3, - ], - ], + }, }, "type": "js/module", },