# flutter/packages architecture

> Architecture diagram of the GitHub repository flutter/packages, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/flutter/packages
- Repository: https://github.com/flutter/packages

## Overview

This repository hosts Flutter first-party packages; the supplied tree shows native platform implementations for camera, maps, file selection, cross-platform file access, webview, and ads. The typical workflow is a Flutter app request crossing a platform API bridge, invoking a native plugin or SDK, then returning results or events. The graph emphasizes these runtime product areas and omits package delivery infrastructure. Some links reflect explicit API behavior in the excerpts; broader package capabilities are represented by tree paths where implementation excerpts were not provided.

Main entry points: [`packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Messages.java`](https://github.com/flutter/packages/blob/main/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Messages.java) (Flutter platform bridge), [`packages/google_maps_flutter`](https://github.com/flutter/packages/tree/main/packages/google_maps_flutter) (Maps API), [`packages/webview_flutter`](https://github.com/flutter/packages/tree/main/packages/webview_flutter) (Webview APIs), [`packages/camera`](https://github.com/flutter/packages/tree/main/packages/camera) (Camera API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_camera["Camera capture"]
  node_camera_api["Camera API"]
  node_cam_android["Android camera<br/>[CameraPlugin.java]"]
  node_cam_camerax["CameraX adapter"]
  node_cam_av["AVFoundation camera<br/>[CameraPlugin.swift]"]
  node_cam_win["Windows camera<br/>[camera_plugin.cpp]"]
  node_preview["Preview handler"]
  node_capture_listener["Capture listener"]
  node_capture_engine["Capture engine"]
  node_camera_permissions["Camera permissions"]
end

subgraph group_maps["Maps"]
  node_maps_api["Maps API"]
  node_maps_android["Android map controller"]
  node_maps_ios["iOS map controller"]
  node_google_maps_sdk["Google Maps SDK"]
end

subgraph group_files["File access"]
  node_file_api["File selector API"]
  node_file_platforms["Native file dialogs"]
  node_cross_file["Cross-file access"]
  node_cross_platform["Platform file APIs"]
end

subgraph group_web["Web and ads"]
  node_webview["Webview APIs"]
  node_web_storage["Web storage"]
  node_user_content["Web content control"]
  node_ads["Interactive media ads"]
end

subgraph group_bridge["Platform bridges"]
  node_platform_bridge["Flutter platform bridge<br/>[Messages.java]"]
end

node_app(("Flutter app"))

node_app -->|"requests capture"| node_camera_api
node_camera_api -->|"uses platform API"| node_platform_bridge
node_platform_bridge -->|"dispatches calls"| node_cam_android
node_platform_bridge -->|"dispatches calls"| node_cam_camerax
node_platform_bridge -->|"dispatches calls"| node_cam_av
node_platform_bridge -->|"dispatches calls"| node_cam_win
node_cam_av -->|"requests access"| node_camera_permissions
node_cam_win -->|"starts preview"| node_preview
node_preview -->|"starts preview"| node_capture_engine
node_capture_engine -->|"delivers samples"| node_capture_listener
node_app -->|"requests map"| node_maps_api
node_maps_api -->|"dispatches calls"| node_maps_android
node_maps_api -->|"dispatches calls"| node_maps_ios
node_maps_android -->|"controls map"| node_google_maps_sdk
node_maps_ios -->|"controls map"| node_google_maps_sdk
node_app -->|"selects files"| node_file_api
node_file_api -->|"opens dialog"| node_file_platforms
node_app -->|"accesses file"| node_cross_file
node_cross_file -->|"uses platform API"| node_cross_platform
node_app -->|"controls webview"| node_webview
node_webview -->|"calls storage API"| node_web_storage
node_webview -->|"manages scripts"| node_user_content
node_app -->|"controls ads"| node_ads

click node_camera_api "https://github.com/flutter/packages/tree/main/packages/camera"
click node_cam_android "https://github.com/flutter/packages/blob/main/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java"
click node_cam_camerax "https://github.com/flutter/packages/blob/main/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java"
click node_cam_av "https://github.com/flutter/packages/blob/main/packages/camera/camera_avfoundation/darwin/camera_avfoundation/Sources/camera_avfoundation/CameraPlugin.swift"
click node_cam_win "https://github.com/flutter/packages/blob/main/packages/camera/camera_windows/windows/camera_plugin.cpp"
click node_preview "https://github.com/flutter/packages/blob/main/packages/camera/camera_windows/windows/preview_handler.cpp"
click node_capture_listener "https://github.com/flutter/packages/blob/main/packages/camera/camera_windows/windows/capture_engine_listener.cpp"
click node_maps_api "https://github.com/flutter/packages/tree/main/packages/google_maps_flutter"
click node_maps_android "https://github.com/flutter/packages/blob/main/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java"
click node_file_api "https://github.com/flutter/packages/tree/main/packages/file_selector"
click node_file_platforms "https://github.com/flutter/packages/blob/main/packages/file_selector/file_selector_windows/windows/file_dialog_controller.h"
click node_cross_file "https://github.com/flutter/packages/tree/main/packages/cross_file"
click node_cross_platform "https://github.com/flutter/packages/blob/main/packages/cross_file/cross_file_android/android/src/main/kotlin/dev/flutter/packages/crossfileandroid/proxies/ContentResolverProxyApi.kt"
click node_webview "https://github.com/flutter/packages/tree/main/packages/webview_flutter"
click node_web_storage "https://github.com/flutter/packages/blob/main/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebStorageProxyApi.java"
click node_user_content "https://github.com/flutter/packages/blob/main/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/UserContentControllerProxyAPIDelegate.swift"
click node_ads "https://github.com/flutter/packages/blob/main/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsManagerProxyAPIDelegate.swift"
click node_platform_bridge "https://github.com/flutter/packages/blob/main/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Messages.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_camera_api,node_cam_android,node_cam_camerax,node_cam_av,node_cam_win,node_preview,node_capture_listener,node_capture_engine,node_camera_permissions toneBlue
class node_maps_api,node_maps_android,node_maps_ios,node_google_maps_sdk toneAmber
class node_file_api,node_file_platforms,node_cross_file,node_cross_platform toneMint
class node_webview,node_web_storage,node_user_content,node_ads toneRose
class node_platform_bridge,node_app toneIndigo
```

## Components

### Camera capture

- [Camera API](https://github.com/flutter/packages/tree/main/packages/camera): `packages/camera`
- [Android camera](https://github.com/flutter/packages/blob/main/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java): `packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java`
- [CameraX adapter](https://github.com/flutter/packages/blob/main/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java): `packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java`
- [AVFoundation camera](https://github.com/flutter/packages/blob/main/packages/camera/camera_avfoundation/darwin/camera_avfoundation/Sources/camera_avfoundation/CameraPlugin.swift): `packages/camera/camera_avfoundation/darwin/camera_avfoundation/Sources/camera_avfoundation/CameraPlugin.swift`
- [Windows camera](https://github.com/flutter/packages/blob/main/packages/camera/camera_windows/windows/camera_plugin.cpp): `packages/camera/camera_windows/windows/camera_plugin.cpp`
- [Preview handler](https://github.com/flutter/packages/blob/main/packages/camera/camera_windows/windows/preview_handler.cpp): `packages/camera/camera_windows/windows/preview_handler.cpp`
- [Capture listener](https://github.com/flutter/packages/blob/main/packages/camera/camera_windows/windows/capture_engine_listener.cpp): `packages/camera/camera_windows/windows/capture_engine_listener.cpp`
- **Capture engine**
- **Camera permissions**

### Maps

- [Maps API](https://github.com/flutter/packages/tree/main/packages/google_maps_flutter): `packages/google_maps_flutter`
- [Android map controller](https://github.com/flutter/packages/blob/main/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java): `packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java`
- **iOS map controller**
- **Google Maps SDK**

### File access

- [File selector API](https://github.com/flutter/packages/tree/main/packages/file_selector): `packages/file_selector`
- [Native file dialogs](https://github.com/flutter/packages/blob/main/packages/file_selector/file_selector_windows/windows/file_dialog_controller.h): `packages/file_selector/file_selector_windows/windows/file_dialog_controller.h`
- [Cross-file access](https://github.com/flutter/packages/tree/main/packages/cross_file): `packages/cross_file`
- [Platform file APIs](https://github.com/flutter/packages/blob/main/packages/cross_file/cross_file_android/android/src/main/kotlin/dev/flutter/packages/crossfileandroid/proxies/ContentResolverProxyApi.kt): `packages/cross_file/cross_file_android/android/src/main/kotlin/dev/flutter/packages/crossfileandroid/proxies/ContentResolverProxyApi.kt`

### Web and ads

- [Webview APIs](https://github.com/flutter/packages/tree/main/packages/webview_flutter): `packages/webview_flutter`
- [Web storage](https://github.com/flutter/packages/blob/main/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebStorageProxyApi.java): `packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebStorageProxyApi.java`
- [Web content control](https://github.com/flutter/packages/blob/main/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/UserContentControllerProxyAPIDelegate.swift): `packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/UserContentControllerProxyAPIDelegate.swift`
- [Interactive media ads](https://github.com/flutter/packages/blob/main/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsManagerProxyAPIDelegate.swift): `packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsManagerProxyAPIDelegate.swift`

### Platform bridges

- [Flutter platform bridge](https://github.com/flutter/packages/blob/main/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Messages.java): `packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/Messages.java`

### Other components

- **Flutter app**

## Connections

- Flutter app → Camera API: requests capture
- Camera API → Flutter platform bridge: uses platform API
- Flutter platform bridge → Android camera: dispatches calls
- Flutter platform bridge → CameraX adapter: dispatches calls
- Flutter platform bridge → AVFoundation camera: dispatches calls
- Flutter platform bridge → Windows camera: dispatches calls
- AVFoundation camera → Camera permissions: requests access
- Windows camera → Preview handler: starts preview
- Preview handler → Capture engine: starts preview
- Capture engine → Capture listener: delivers samples
- Flutter app → Maps API: requests map
- Maps API → Android map controller: dispatches calls
- Maps API → iOS map controller: dispatches calls
- Android map controller → Google Maps SDK: controls map
- iOS map controller → Google Maps SDK: controls map
- Flutter app → File selector API: selects files
- File selector API → Native file dialogs: opens dialog
- Flutter app → Cross-file access: accesses file
- Cross-file access → Platform file APIs: uses platform API
- Flutter app → Webview APIs: controls webview
- Webview APIs → Web storage: calls storage API
- Webview APIs → Web content control: manages scripts
- Flutter app → Interactive media ads: controls ads
