Passenger

Godot

A free IDE for Godot 4 games in C# and GDScript

Passenger runs, debugs, profiles and Hot Reloads your game, checks its C# against its scenes, reads its GDScript and shaders as Godot does, and shows the running game's tree and values beside your code. It works beside Godot's editor, or as its script editor. Free and open source, on Windows, macOS and Linux.

A Godot 4 game running from Passenger: its C# script's properties and fields each with their value now after their lines, the tank's litres and the day changing as the game plays

Run, debug and Hot Reload the game

Run and Debug start the game on the Godot that Settings names or the one found, a game of GDScript alone too. Passenger is its remote debugger, as Godot's editor is: its C# under Passenger's debugger and its GDScript under Passenger's GDScript debugger, both at once.

Both languages, one stop

A breakpoint in C# or GDScript stops the game. Godot's types read as you think of them in Variables and the hover, Vector3, Transform2D and Color among them.

Changed as it runs

Hot Reload puts your C# edits in the running game, under Run too, and a GDScript you save reloads in it.

The game in a pane

On Windows, macOS and Linux under X11, the game can draw in Passenger's Game window beside its code. It takes the keys when you click it, and Ctrl+F11 takes them back.

A scene, or several copies

Run Current Scene plays the scene open in the editor. Run Another Copy plays up to 16 copies for a multiplayer game, debugged as one group that one Stop ends.

From a new game to an export

New Solution and New Project make a Godot 4 game, C# or GDScript, ready to run. Publish exports it through the presets of your export_presets.cfg.

The project at a glance

project.godot opens as a page of its main scene, autoloads, input map, export presets and plugins. A project's launch profiles run as configurations, Chickensoft's %GODOT% ones too, and F1 opens Godot's documentation at the class or member.

A Godot game playing in Passenger's Game window beside its C# script, whose members show their running values at their lines, with the Live Visual Tree below the game.
Squash the Creeps (3D) with C#, from the Godot demo projects, © Godot Engine contributors, MIT licence.

Your scenes, read with your code

The scene's tree beside its C#

A .tscn opens as Structure's tree of its nodes, each with its type and script, its properties edited there. A scene is marked where Godot would not load what it says, with fixes, and a script shows the scenes it runs in.

C# that knows its scenes

The C# of a script is checked against every scene that runs it. GetNode<T> paths and types, res:// and uid:// paths and [Export] values complete and are checked, and every string Godot takes (input actions, groups, animations, autoloads, shader parameters, translations, layers and theme items) completes, is checked and renames. Signals and their handlers lead to each other, and a rename reaches the scenes.

A Godot game's C# script beside its scene, whose tree Structure shows: the greenhouse's benches, plants, sprinkler and tank, each with its type and script

C# and GDScript, together

Calls, connections, usages and renames lead across both languages, so a C# member's GDScript callers are found and renamed with it.

Your Godot editor's work kept

What your Godot editor holds unsaved is safe: Passenger asks before it writes over it, and the headless Godot behind GDScript's language server never changes your project.

GDScript and shaders, read as Godot reads them

GDScript of its own

Passenger's port of Godot's parser and analyzer gives Godot's warnings and errors with their fixes, and answers completion, the hover, Find Usages, Rename and the outline, mostly without starting Godot. It marks only what Godot would, in Godot's order.

Rename, Change Signature and Move reach every caller, through scenes' connections and C# strings. Reformat Code follows Godot's style guide, and Order Script's Parts puts a script in its order.

A GDScript in Passenger with its code help open and a Godot warning marked in Godot's own words, no Godot editor running

Shaders checked as Godot's compiler checks them

A .gdshader shows every error and warning at once, with no Godot running, its built-ins completed and explained on hover. A scene's shader is checked too, and a .tres, uids and res:// paths are read and checked.

A Godot .gdshader in Passenger: its marks in Godot's words, and a built-in completed

The running game, in your code

While the game runs, Passenger follows it over Godot's own remote debug protocol: its tree, its values and its errors, beside the code that made them.

The live tree

The Live Visual Tree shows the game's nodes as they are, each property with its value now. Tune one with a swatch, a slider or a vector's parts and the game takes it at once; Keep writes it back into the scene. Click in the game to select a node, and pause the game or step it a frame.

Values and errors at their lines

The values of a script's members show after their lines as the game plays, with no breakpoint. An error the game hits stays pinned to its line after the run, and frame time and your own monitors are charted live.

A running Godot game's Live Visual Tree in Passenger: its scene's nodes as they are, a plant chosen with its properties and values, beside the plant's GDScript with each member's value after its line

With Godot's editor

Tools › Make Passenger Godot's Script Editor… has Godot open each script in Passenger at its line, and Open in Godot Editor goes the other way. Passenger's addon has a game Godot's Play starts debugged in Passenger, and lets Passenger play and stop the game in your editor.

For your coding agent

An agent plays and debugs the game through Passenger's MCP server: its tree, values, clicks and keys, a picture of its frame with no window on your screen, and the scenes of your open Godot editor changed, each change one step of Godot's Undo.

Your game's tests, run and debugged

GdUnit4, GUT and GoDotTest tests are found in the Unit Tests window, and run and debugged there as any other test is.

The Unit Tests window over a Godot game's tests in Passenger, one failed with its line, beside the test's code

One profile, GDScript and C#

Profile the game and its call tree holds both languages: its GDScript's functions as Godot's own profiler measured them, each opening at its line, beside the C# it sampled, in one scale. The Frames page charts each frame's time and opens the slowest on what it spent, its costliest function chosen, GDScript's or C#'s. Memory snapshots of the game are taken too.

The profiler
A Godot game profiled in Passenger: one call tree with the C# greenhouse's Forecast method and its calls above the GDScript plants' _process and grow functions, each with its time, the GDScript opened at its line

Good to know

  • Godot 4. GDScript works with any Godot 4; C# needs Godot's .NET build. Passenger finds it from GODOT, the PATH or your applications, or where Settings › Godot names it, and is tested on Godot 4.7 and 4.8's betas.
  • The Game window takes Godot 4.4 or newer (4.5 or newer on macOS), and under Wayland it needs XWayland; otherwise the game draws in a window of its own.
  • GdUnit4 on Godot 4.8's betas: its tests that need the engine don't run yet, since GdUnit4's runner doesn't build there; each such test's details say why. They run on Godot 4.7.
  • A .gdshaderinc is checked on its own, as Godot's shader editor checks one.