Skip to main content


We expect the input to follow the general syntax, but in some cases we might want to alter what is being submitted to support custom functionality.
As an example, Ghost Commands support using macros by altering the incoming input by substituting registered macros with something else.

Creating a processor

Create a static method that returns a string and mark it as a processor using the [Processor] attribute.
This example removes exclamation marks from the input. In case you want to prevent aggressive commands.

public static string RemoveExclamationProcessor(string input)
return input.Replace("!", string.Empty);

Supporting cheat codes

Maybe we want to add cheat codes to our game, either for ourselves to test features quickly, or for the players to have fun with. Processors are perfect for this, and you can probably already guess why.

public static string CheatCodeProcessor(string input)
switch (input.ToLower())
case "cheese":
return "money.add 5000";

case "godmode":
return " True";

case "noclip":
return "player.movement.noclip True";

// If input doesn't match any cheatcode, we cancel the input
// to prevent other commands from being executed.
return string.Empty;

As you can see, we simply check if the input matches any of our cheat codes, and if it does, we replace the entire input string with an actual command.


By default, Ghost Commands are only available inside the editor and inside a Development Build. If you want your players to access commands in a final build, navigate to project settings and turn off the Development Only toggle. You might also wanna turn off suggestions. Read more in the settings section, and custom styles section.

Setting priorities

As multiple processors can operate concurrently, unexpected results can occur if we do not specify the order at which they are executed. To designate the priority of a processor method, assign it a value to the attribute. Lower values indicate higher priority and are executed first.

public static string CheatCodeProcessor(string input) (...)

You may not wanna go overboard with processors, as it could lead to unexpected behaviour if not handled with caution. Remember to make sure the final string is still executable after being modified.