# cefsharp/cefsharp architecture

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

- Interactive diagram: https://gitdiagram.com/cefsharp/cefsharp
- Repository: https://github.com/cefsharp/cefsharp

## Overview

CefSharp embeds Chromium/CEF in .NET applications through managed browser controls and a C++/CLI runtime bridge. The principal path is application configuration and browser creation, followed by navigation/rendering and interaction through a platform-specific control; optional capabilities include JavaScript binding, DevTools, request contexts, cookies, and URL requests. The tree and README establish these product areas, while sampled code confirms cookie forwarding and request-context callbacks. Unsampled internals are represented at subsystem level, so uncertain call wiring is omitted.

Main entry points: [`CefSharp.Core/ManagedCefBrowserAdapter.cs`](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core/ManagedCefBrowserAdapter.cs) (Core browser API), [`CefSharp.Core/RequestContext.cs`](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core/RequestContext.cs) (Request contexts), [`CefSharp.Core.Runtime/Internals/CefBrowserWrapper.cpp`](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core.Runtime/Internals/CefBrowserWrapper.cpp) (CEF browser wrappers), [`CefSharp.WinForms/ChromiumWebBrowser.cs`](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.WinForms/ChromiumWebBrowser.cs) (WinForms control)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Browser surfaces"]
  node_winforms["WinForms control"]
  node_wpf["WPF control"]
  node_hwnd["HwndHost control"]
  node_offscreen["Off-screen browser"]
  node_render["Rendering handlers"]
end

subgraph group_managed["Managed API"]
  node_config["CEF configuration<br/>[Cef.cs]"]
  node_api["Core browser API"]
  node_settings["Request contexts<br/>[RequestContext.cs]"]
end

subgraph group_native["CEF bridge"]
  node_bridge["Managed-native adapter"]
  node_browserwrap["CEF browser wrappers"]
end

subgraph group_features["Browser capabilities"]
  node_binding["JavaScript binding"]
  node_serialization["JS serialization"]
  node_devtools["DevTools client<br/>[DevToolsClient.cs]"]
  node_requests["Requests and resources"]
  node_cookies["Cookie manager<br/>[CookieManager.cpp]"]
  node_urlrequest["URL requests<br/>[UrlRequest.cs]"]
end

subgraph group_subprocess["Process runtime"]
  node_subproc["Subprocess executable<br/>[Program.cs]"]
  node_subprocapp["Subprocess app<br/>[SubProcessApp.h]"]
end

node_app((".NET application"))
node_cef["CEF / Chromium"]

node_app -->|"configures"| node_config
node_app -->|"creates browser"| node_winforms
node_app -->|"creates browser"| node_wpf
node_app -->|"creates browser"| node_hwnd
node_app -->|"creates browser"| node_offscreen
node_config -->|"initializes"| node_cef
node_winforms -->|"browser API"| node_api
node_wpf -->|"browser API"| node_api
node_hwnd -->|"browser API"| node_api
node_offscreen -->|"browser API"| node_api
node_api -->|"adapts calls"| node_bridge
node_bridge -->|"wraps CEF"| node_browserwrap
node_browserwrap -->|"forwards operations"| node_cef
node_cef -->|"supplies frames"| node_render
node_api -->|"uses context"| node_settings
node_settings -->|"provides manager"| node_cookies
node_cookies -->|"forwards cookie actions"| node_cef
node_settings -->|"configures handlers"| node_requests
node_requests -->|"handles resources"| node_cef
node_api -->|"offers URL requests"| node_urlrequest
node_urlrequest -->|"issues requests"| node_cef
node_api -->|"exposes protocol client"| node_devtools
node_browserwrap -->|"supports JS objects"| node_binding
node_binding -->|"serializes values"| node_serialization
node_cef -.->|"starts subprocess"| node_subproc
node_subproc -->|"runs app"| node_subprocapp

click node_winforms "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.WinForms/ChromiumWebBrowser.cs"
click node_wpf "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Wpf/ChromiumWebBrowser.cs"
click node_hwnd "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Wpf/HwndHost/ChromiumWebBrowser.cs"
click node_offscreen "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.OffScreen/ChromiumWebBrowser.cs"
click node_config "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core/Cef.cs"
click node_api "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core/ManagedCefBrowserAdapter.cs"
click node_settings "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core/RequestContext.cs"
click node_bridge "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core.Runtime/ManagedCefBrowserAdapter.cpp"
click node_browserwrap "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core.Runtime/Internals/CefBrowserWrapper.cpp"
click node_render "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.OffScreen/DefaultRenderHandler.cs"
click node_binding "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.BrowserSubprocess.Core/JavascriptRootObjectWrapper.cpp"
click node_serialization "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core.Runtime/Internals/Serialization/V8Serialization.cpp"
click node_devtools "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core/DevTools/DevToolsClient.cs"
click node_requests "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core.Runtime/Internals/CefResourceHandlerAdapter.cpp"
click node_cookies "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core.Runtime/CookieManager.cpp"
click node_urlrequest "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core/UrlRequest.cs"
click node_subproc "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.BrowserSubprocess/Program.cs"
click node_subprocapp "https://github.com/cefsharp/cefsharp/blob/master/CefSharp.BrowserSubprocess.Core/SubProcessApp.h"

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_winforms,node_wpf,node_hwnd,node_offscreen,node_render toneBlue
class node_config,node_api,node_settings toneAmber
class node_bridge,node_browserwrap toneMint
class node_binding,node_serialization,node_devtools,node_requests,node_cookies,node_urlrequest toneRose
class node_subproc,node_subprocapp,node_app,node_cef toneIndigo
```

## Components

### Browser surfaces

- [WinForms control](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.WinForms/ChromiumWebBrowser.cs): `CefSharp.WinForms/ChromiumWebBrowser.cs`
- [WPF control](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Wpf/ChromiumWebBrowser.cs): `CefSharp.Wpf/ChromiumWebBrowser.cs`
- [HwndHost control](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Wpf/HwndHost/ChromiumWebBrowser.cs): `CefSharp.Wpf/HwndHost/ChromiumWebBrowser.cs`
- [Off-screen browser](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.OffScreen/ChromiumWebBrowser.cs): `CefSharp.OffScreen/ChromiumWebBrowser.cs`
- [Rendering handlers](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.OffScreen/DefaultRenderHandler.cs): `CefSharp.OffScreen/DefaultRenderHandler.cs`

### Managed API

- [CEF configuration](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core/Cef.cs): `CefSharp.Core/Cef.cs`
- [Core browser API](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core/ManagedCefBrowserAdapter.cs): `CefSharp.Core/ManagedCefBrowserAdapter.cs`
- [Request contexts](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core/RequestContext.cs): `CefSharp.Core/RequestContext.cs`

### CEF bridge

- [Managed-native adapter](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core.Runtime/ManagedCefBrowserAdapter.cpp): `CefSharp.Core.Runtime/ManagedCefBrowserAdapter.cpp`
- [CEF browser wrappers](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core.Runtime/Internals/CefBrowserWrapper.cpp): `CefSharp.Core.Runtime/Internals/CefBrowserWrapper.cpp`

### Browser capabilities

- [JavaScript binding](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.BrowserSubprocess.Core/JavascriptRootObjectWrapper.cpp): `CefSharp.BrowserSubprocess.Core/JavascriptRootObjectWrapper.cpp`
- [JS serialization](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core.Runtime/Internals/Serialization/V8Serialization.cpp): `CefSharp.Core.Runtime/Internals/Serialization/V8Serialization.cpp`
- [DevTools client](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core/DevTools/DevToolsClient.cs): `CefSharp.Core/DevTools/DevToolsClient.cs`
- [Requests and resources](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core.Runtime/Internals/CefResourceHandlerAdapter.cpp): `CefSharp.Core.Runtime/Internals/CefResourceHandlerAdapter.cpp`
- [Cookie manager](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core.Runtime/CookieManager.cpp): `CefSharp.Core.Runtime/CookieManager.cpp`
- [URL requests](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.Core/UrlRequest.cs): `CefSharp.Core/UrlRequest.cs`

### Process runtime

- [Subprocess executable](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.BrowserSubprocess/Program.cs): `CefSharp.BrowserSubprocess/Program.cs`
- [Subprocess app](https://github.com/cefsharp/cefsharp/blob/master/CefSharp.BrowserSubprocess.Core/SubProcessApp.h): `CefSharp.BrowserSubprocess.Core/SubProcessApp.h`

### Other components

- **.NET application**
- **CEF / Chromium**

## Connections

- .NET application → CEF configuration: configures
- .NET application → WinForms control: creates browser
- .NET application → WPF control: creates browser
- .NET application → HwndHost control: creates browser
- .NET application → Off-screen browser: creates browser
- CEF configuration → CEF / Chromium: initializes
- WinForms control → Core browser API: browser API
- WPF control → Core browser API: browser API
- HwndHost control → Core browser API: browser API
- Off-screen browser → Core browser API: browser API
- Core browser API → Managed-native adapter: adapts calls
- Managed-native adapter → CEF browser wrappers: wraps CEF
- CEF browser wrappers → CEF / Chromium: forwards operations
- CEF / Chromium → Rendering handlers: supplies frames
- Core browser API → Request contexts: uses context
- Request contexts → Cookie manager: provides manager
- Cookie manager → CEF / Chromium: forwards cookie actions
- Request contexts → Requests and resources: configures handlers
- Requests and resources → CEF / Chromium: handles resources
- Core browser API → URL requests: offers URL requests
- URL requests → CEF / Chromium: issues requests
- Core browser API → DevTools client: exposes protocol client
- CEF browser wrappers → JavaScript binding: supports JS objects
- JavaScript binding → JS serialization: serializes values
- CEF / Chromium → Subprocess executable: starts subprocess
- Subprocess executable → Subprocess app: runs app
