Flutter apps included an asset file named `AssetManifest.json`. This file effectively contains a list of assets. Application code can read it using the `AssetBundle` API to determine what assets are available at runtime.
- Who is affected
- Applications and packages relying on the previous behaviour or signature. Code that uses AssetManifest.json, AssetBundle, AssetManifest and related APIs.
- Practical impact
- Behaviour or API differences that can break builds or change runtime behaviour.
- What action should I take?
- Follow the official migration guide below, update affected call sites, run `dart fix --apply` where a fix is available, then run your tests.
Before and after (from the official guide)
| 1 | − | import 'dart:convert'; |
| 2 | import 'package:flutter/services.dart'; | |
| 3 | ||
| 4 | void readAssetList() async { | |
| 5 | − | final assetManifestContent = await rootBundle.loadString('AssetManifest.json'); |
| 6 | − | final decodedAssetManifest = |
| 7 | − | json.decode(assetManifestContent) as Map<String, Object?>; |
| 8 | − | final assets = decodedAssetManifest.keys.toList().cast<String>(); |
| 9 | } |
| 1 | import 'package:flutter/services.dart'; | |
| 2 | ||
| 3 | void readAssetList() async { | |
| 4 | + | final assetManifest = await AssetManifest.loadFromAssetBundle(rootBundle); |
| 5 | + | final assets = assetManifest.listAssets(); |
| 6 | } |
Raw before / after
import 'dart:convert';
import 'package:flutter/services.dart';
void readAssetList() async {
final assetManifestContent = await rootBundle.loadString('AssetManifest.json');
final decodedAssetManifest =
json.decode(assetManifestContent) as Map<String, Object?>;
final assets = decodedAssetManifest.keys.toList().cast<String>();
}import 'package:flutter/services.dart';
void readAssetList() async {
final assetManifest = await AssetManifest.loadFromAssetBundle(rootBundle);
final assets = assetManifest.listAssets();
}Official migration guide (excerpt, © The Flutter Authors, CC BY 3.0)
Reading asset manifest from Flutter application code
Before:
import 'dart:convert';
import 'package:flutter/services.dart';
void readAssetList() async {
final assetManifestContent = await rootBundle.loadString('AssetManifest.json');
final decodedAssetManifest =
json.decode(assetManifestContent) as Map<String, Object?>;
final assets = decodedAssetManifest.keys.toList().cast<String>();
}After:
import 'package:flutter/services.dart';
void readAssetList() async {
final assetManifest = await AssetManifest.loadFromAssetBundle(rootBundle);
final assets = assetManifest.listAssets();
}Reading asset manifest information from Dart code outside of a Flutter app
The flutter CLI tool generates a new file, AssetManifest.bin.
This replaces AssetManifest.json.
This file contains the same information as AssetManifest.json,
but in a different format.
If you need to read this file from code that isn't part of a Flutter app, and
therefore can't use the [AssetManifest][] API,
you can still parse the file yourself.
The [standard_message_codec][] package can be used to parse the contents.
import 'dart:io';
import 'dart:typed_data';
import 'package:standard_message_codec/standard_message_codec.dart';
void main() {
// The path to AssetManifest.bin depends on the target platform.
final pathToAssetManifest = './build/web/assets/AssetManifest.bin';
final manifest = File(pathToAssetManifest).readAsBytesSync();
final decoded = const StandardMessageCodec()
.decodeMessage(ByteData.sublistView(manifest));
final assets = decoded.keys.cast<String>().toList();
}Keep in mind that AssetManifest.bin is an implementation detail of Flutter.
Reading this file isn't an officially supported workflow.
The contents or format of the file might change in
a future Flutter release without an announcement.
AI_PROVIDER (for example to openai-compatible with a local Ollama or LM Studio endpoint) to enable grounded explanations. Everything else on this page works without an AI provider.Listed in the official breaking-changes index (docs.flutter.dev/release/breaking-changes).
An official announcement or migration guide documents an intended behaviour or API change. A verified source change (git diff) shows code changed but does not by itself prove a public API is breaking. AI interpretations are labelled and never used to classify a change.
- Source commit
- b3045439b7c0
- Source last updated
- Oct 21, 2026
- Last synchronized
- Oct 21, 2026
- Publication status
- published
Publication history
- Oct 21, 2026, 8:31 PM: new → published (ingestion) — Backed by an official breaking-change/migration guide.
AI_PROVIDER (for example to openai-compatible with a local Ollama or LM Studio endpoint) to enable grounded explanations. Everything else on this page works without an AI provider.