This page is an overview of the five major tool panels in the Godot editor that support project development: the FileSystem dock, Script Editor, Output log, property Inspector, and export configuration system. These are distinct from the 2D/3D viewport editing plugins covered in Editor Plugins.
For the EditorNode singleton that owns and initializes these tools, see EditorNode. For the EditorPlugin API that governs tool registration, see EditorPlugin System. For the Control and Container UI foundations all of these tools build on, see Control & UI System.
| Page | Subsystem | Key Classes | Source Path |
|---|---|---|---|
| 10.1 | FileSystem Dock | FileSystemDock, EditorFileSystem | editor/filesystem_dock.h, editor/editor_file_system.h |
| 10.2 | Script Editor | ScriptEditor, ScriptTextEditor, CodeTextEditor | editor/plugins/script_editor_plugin.h |
| 10.3 | EditorLog & Output | EditorLog | editor/editor_log.h |
| 10.4 | Editor Inspector | EditorInspector, EditorProperty, EditorInspectorPlugin | editor/editor_inspector.h |
| 10.5 | Export System | EditorExportPlatform, EditorExportPlugin | editor/export/editor_export_platform.h |
All five tools are instantiated by EditorNode at startup. Panels are added to the editor layout as docks or dialogs; some are wrapped in an EditorPlugin subclass for plugin-system integration.
Editor UI Tools — Ownership and Composition
Sources: editor/editor_node.h, editor/filesystem_dock.h, editor/plugins/script_editor_plugin.h, editor/editor_log.h, editor/editor_inspector.h, editor/export/editor_export_platform.h
FileSystemDock provides a tree view of the project res:// directory and supports file management: create, rename, move, duplicate, and delete. It is implemented in editor/filesystem_dock.h.
The dock is backed by EditorFileSystem (editor/editor_file_system.h), which runs a background scan thread to detect file additions, deletions, and modifications. Detected changes trigger EditorFileSystem::reimport_files() for affected assets and update the resource UID database.
Key behaviors:
For full documentation, see FileSystem Dock.
The Script Editor is a tabbed multi-file code editor registered as an EditorPlugin subclass (ScriptEditorPlugin).
Class responsibilities:
| Class | Role |
|---|---|
ScriptEditorPlugin | Registers the plugin; manages menu items and toolbar |
ScriptEditor | Top-level tabbed UI; manages open scripts, breakpoints, and the member sidebar |
ScriptTextEditor | Per-file editor; connects CodeTextEditor to a Script resource |
CodeTextEditor | Composite widget wrapping CodeEdit with find bar, goto-line, and error gutter |
Script files are loaded through ResourceLoader and saved through ResourceSaver. Code completion and inline diagnostics are sourced from the active ScriptLanguage implementation (e.g., GDScriptLanguage).
For full documentation, see Script Editor.
EditorLog implements the Output panel at the bottom of the editor. It collects messages from three sources:
print() calls — routed from the script runtimeERR_PRINT, WARN_PRINT, etc.Each message carries a type (standard, warning, error). Messages that include a source file and line number appear as clickable entries that open the relevant file in the Script Editor.
For full documentation, see EditorLog & Output.
The Inspector is the most extensible of the five tools. It renders all inspectable properties of the currently selected object and exposes EditorInspectorPlugin as an extension point so editor plugins can override how specific properties or object types are displayed.
EditorInspector inherits ScrollContainer and is the root widget of the Inspector dock. It is accessible at runtime via EditorInterface::get_inspector().
Rendering pipeline:
edit(object) is called with the target object.Object::get_property_list() enumerates properties.EditorInspectorPlugin instances are queried in priority order._parse_property() returns true, the plugin provides the widget. Otherwise, a built-in default widget for the Variant::Type is used.Property names containing / generate nested collapsible sections. Properties with PROPERTY_USAGE_GROUP create named section headers.
Signals emitted by EditorInspector:
| Signal | When emitted |
|---|---|
property_edited(property) | User commits a property change |
property_keyed(property, value, advance) | User presses the animation keyframe button |
property_selected(property) | User clicks a property row |
resource_selected(resource, path) | User activates the "inspect" action on a resource property |
edited_object_changed | edit() is called with a different object |
restart_requested | A changed property requires an editor restart |
Sources: doc/classes/EditorInspector.xml1-80
EditorProperty inherits Container and is the base class for all property editor widgets inside the inspector.
Implementation contract for custom subclasses:
_update_property() to refresh the widget when the property value changes externally.emit_changed(property, value, field, changing) when the user makes a change. The changing flag suppresses full undo-redo recording for intermediate values during a drag._set_read_only(read_only) to propagate read-only state to child widgets.add_focusable(control) so focus is restored after an inspector refresh.Key members:
| Member | Type | Purpose |
|---|---|---|
label | String | Display name on the left side of the row |
read_only | bool | Disables editing |
checkable | bool | Adds a checkbox beside the label |
checked | bool | Checkbox state when checkable is true |
keying | bool | Shows an animation keyframe button |
draw_warning | bool | Shows a warning icon beside the label |
name_split_ratio | float | Ratio of label column width to editor widget width |
Sources: doc/classes/EditorProperty.xml1-170
EditorInspectorPlugin inherits RefCounted and is the extension point for customizing inspector behavior. Plugins are registered via EditorPlugin::add_inspector_plugin().
EditorInspectorPlugin — Parse Sequence per Object
Sources: doc/classes/EditorInspectorPlugin.xml1-80
Methods available inside parse callbacks:
| Method | Effect |
|---|---|
add_property_editor(property, editor) | Binds an EditorProperty widget to a named property |
add_property_editor_for_multiple_properties(label, properties, editor) | One widget edits several named properties |
add_custom_control(control) | Inserts an arbitrary Control widget (not bound to a property) |
EditorResourcePicker inherits HBoxContainer and is the standard widget for editing properties whose value is a Resource. It is embedded inside EditorProperty subclasses that handle Resource-type properties.
Key features:
base_type restricts acceptable resource types (e.g., "Texture2D" limits the picker to Texture2D subclasses).base_type.ClassDB — all non-abstract classes inheriting base_type are listed.Extension virtuals:
| Virtual | Purpose |
|---|---|
_set_create_options(menu) | Customize items in the New submenu |
_handle_menu_selected(id) | Handle selection of a custom menu item |
Signals:
| Signal | When emitted |
|---|---|
resource_changed(resource) | User selects a different resource |
resource_selected(resource, inspect) | User activates the inspect action on the current resource |
Sources: doc/classes/EditorResourcePicker.xml1-80
EditorInspector — Class Diagram
Sources: doc/classes/EditorInspector.xml1-80 doc/classes/EditorProperty.xml1-170 doc/classes/EditorInspectorPlugin.xml1-80 doc/classes/EditorResourcePicker.xml1-80
For float and int properties, the inspector uses SpinBox (scene/gui/spin_box.h47-189) embedded within the property row. SpinBox extends Range (scene/gui/range.h1-100) and combines a LineEdit with increment/decrement arrow buttons.
Notable behaviors relevant to the inspector:
2 * PI + 1 directly; the expression is evaluated by the Expression class before the value is committed (scene/gui/spin_box.cpp139-168).px, °, etc.) (scene/gui/spin_box.h76-78).custom_arrow_step overrides the step used by arrow buttons without affecting snapping behavior (scene/gui/spin_box.cpp228-242).For full documentation, see Script Editor (for CodeEdit) and GUI Controls (for SpinBox and Range).
The export system generates distributable builds for target platforms from editor/export/.
Core classes:
| Class | Role |
|---|---|
EditorExportPlatform | Abstract base for a platform exporter; implements export_project(), get_export_options(), get_os_name() |
EditorExportPreset | Stores user-configured options (output path, icon, signing certificates, feature flags) for one export target |
EditorExportPlugin | Hook class executed at each stage of the export pipeline for file injection or post-processing |
Built-in EditorExportPlatform subclasses:
| Class | Platform |
|---|---|
EditorExportPlatformAndroid | Android APK / AAB |
EditorExportPlatformIOS | iOS Xcode project |
EditorExportPlatformMacOS | macOS .app bundle |
EditorExportPlatformWindows | Windows executable |
EditorExportPlatformWeb | HTML5 / WebAssembly |
EditorExportPlatformLinuxBSD | Linux and BSD binaries |
EditorExportPlugin callbacks:
| Callback | When invoked |
|---|---|
_export_begin(features, debug, path, flags) | Before any files are processed |
_export_file(path, type, features) | Once per file added to the PCK |
_export_end() | After all files are processed |
_customize_resource(resource, path) | To transform a resource before export |
_customize_scene(scene, path) | To transform a scene before export |
EditorExportPlugin instances are registered via EditorPlugin::add_export_plugin().
For full documentation, see Export System.
Refresh this wiki
This wiki was recently refreshed. Please wait 2 days to refresh again.