Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction to bevy_cef

bevy_cef is a powerful Bevy plugin that integrates the Chromium Embedded Framework (CEF) into Bevy applications, enabling you to render web content as 3D objects in your game world or as UI overlays.

What is bevy_cef?

bevy_cef bridges the gap between modern web technologies and Bevy's 3D engine by:

  • Embedding webviews as textures on 3D meshes or 2D sprites
  • Supporting bidirectional communication between JavaScript and Bevy systems
  • Providing a multi-process architecture for stability and performance
  • Offering local asset serving through a custom URL scheme
  • Enabling developer tools integration for debugging web content

Key Features

🌐 Web Content Rendering

  • Render any web page as a texture on 3D objects
  • Support for HTML5, CSS3, and modern JavaScript
  • Local file serving via the cef://localhost/ scheme
  • Remote web page loading with full browser compatibility

🔄 Inter-Process Communication (IPC)

  • JS Emit: Send events from JavaScript to Bevy systems
  • Host Emit: Send events from Bevy to JavaScript
  • Bevy Remote Protocol (BRP): Bidirectional RPC communication

🎮 Interactive Controls

  • Keyboard input forwarding to webviews
  • Mouse interaction support
  • Navigation controls (back, forward, refresh)
  • Zoom level management
  • Audio muting capabilities

🔧 Developer Experience

  • Chrome DevTools integration for debugging
  • Hot-reload support for local assets
  • Comprehensive error handling and logging
  • Extensive customization options

Architecture Overview

bevy_cef uses a multi-process architecture similar to modern web browsers:

  • Browser Process: The main Bevy application process
  • Render Process: Separate CEF process for web content rendering
  • IPC Communication: Secure inter-process communication channels

This design ensures stability - if a web page crashes, it won't bring down your entire application.

Use Cases

Game UI

Create rich, responsive game interfaces using familiar web technologies:

#![allow(unused)]
fn main() {
commands.spawn((
    CefWebviewUri::local("ui/main-menu.html"),
    // Render as 2D sprite overlay
));
}

In-World Displays

Embed interactive web content directly in your 3D world:

#![allow(unused)]
fn main() {
commands.spawn((
    CefWebviewUri::new("https://example.com"),
    Mesh3d(meshes.add(Plane3d::new(Vec3::Z, Vec2::ONE))),
    MeshMaterial3d(materials.add(WebviewExtendStandardMaterial::default())),
));
}

Data Visualization

Display real-time data using web-based charting libraries:

#![allow(unused)]
fn main() {
// Load a local HTML file with Chart.js or D3.js
commands.spawn((
    CefWebviewUri::local("charts/dashboard.html"),
    WebviewSize(Vec2::new(1920.0, 1080.0)),
));
}

Development Tools

Integrate web-based development and debugging interfaces directly into your game editor or development build.

Getting Started

Ready to integrate web content into your Bevy application? Check out the Quick Start guide to get up and running in minutes, or dive into Basic Concepts to understand the fundamental components and systems.

Platform Support

Currently, bevy_cef focuses on macOS development with plans for expanded platform support. The plugin automatically handles CEF framework installation and configuration on supported platforms.