123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480 |
- .. _doc_command_line_tutorial:
- Command line tutorial
- =====================
- .. highlight:: shell
- Some developers like using the command line extensively. Godot is
- designed to be friendly to them, so here are the steps for working
- entirely from the command line. Given the engine relies on almost no
- external libraries, initialization times are pretty fast, making it
- suitable for this workflow.
- .. note::
- On Windows and Linux, you can run a Godot binary in a terminal by specifying
- its relative or absolute path.
- On macOS, the process is different due to Godot being contained within an
- ``.app`` bundle (which is a *folder*, not a file). To run a Godot binary
- from a terminal on macOS, you have to ``cd`` to the folder where the Godot
- application bundle is located, then run ``Godot.app/Contents/MacOS/Godot``
- followed by any command line arguments. If you've renamed the application
- bundle from ``Godot`` to another name, make sure to edit this command line
- accordingly.
- Command line reference
- ----------------------
- .. |release| image:: img/template_release.svg
- .. |debug| image:: img/template_debug.svg
- .. |editor| image:: img/editor.svg
- **Legend**
- - |release| Available in editor builds, debug export templates and release export templates.
- - |debug| Available in editor builds and debug export templates only.
- - |editor| Only available in editor builds.
- Note that unknown command line arguments have no effect whatsoever. The engine
- will **not** warn you when using a command line argument that doesn't exist with a
- given build type.
- **General options**
- +----------------------------+-----------------------------------------------------------------------------+
- | Command | Description |
- +----------------------------+-----------------------------------------------------------------------------+
- | ``-h``, ``--help`` | |release| Display the list of command line options. |
- +----------------------------+-----------------------------------------------------------------------------+
- | ``--version`` | |release| Display the version string. |
- +----------------------------+-----------------------------------------------------------------------------+
- | ``-v``, ``--verbose`` | |release| Use verbose stdout mode. |
- +----------------------------+-----------------------------------------------------------------------------+
- | ``-q``, ``--quiet`` | |release| Quiet mode, silences stdout messages. Errors are still displayed. |
- +----------------------------+-----------------------------------------------------------------------------+
- **Run options**
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | Command | Description |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--``, ``++`` | |release| Separator for user-provided arguments. Following arguments are not used by the engine, but can be read from ``OS.get_cmdline_user_args()``. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``-e``, ``--editor`` | |editor| Start the editor instead of running the scene. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``-p``, ``--project-manager`` | |editor| Start the Project Manager, even if a project is auto-detected. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--debug-server <uri>`` | |editor| Start the editor debug server (``<protocol>://<host/IP>[:<port>]``, e.g. ``tcp://127.0.0.1:6007``) |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--quit`` | |release| Quit after the first iteration. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--quit-after`` | |release| Quit after the given number of iterations. Set to 0 to disable. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``-l``, ``--language <locale>`` | |release| Use a specific locale. ``<locale>`` follows the format ``language_Script_COUNTRY_VARIANT`` where language is a 2 or 3-letter language code in |
- | | lowercase and the rest is optional. See :ref:`doc_locales` for more details. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--path <directory>`` | |release| Path to a project (``<directory>`` must contain a 'project.godot' file). |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``-u``, ``--upwards`` | |release| Scan folders upwards for 'project.godot' file. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--main-pack <file>`` | |release| Path to a pack (.pck) file to load. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--render-thread <mode>`` | |release| Render thread mode ('unsafe', 'safe', 'separate'). See :ref:`Thread Model <class_ProjectSettings_property_rendering/driver/threads/thread_model>` |
- | | for more details. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--remote-fs <address>`` | |release| Remote filesystem (``<host/IP>[:<port>]`` address). |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--remote-fs-password <password>`` | |release| Password for remote filesystem. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--audio-driver <driver>`` | |release| Audio driver. Use ``--help`` first to display the list of available drivers. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--display-driver <driver>`` | |release| Display driver (and rendering driver). Use ``--help`` first to display the list of available drivers. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--rendering-method <renderer>`` | |release| Renderer name. Requires driver support. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--rendering-driver <driver>`` | |release| Rendering driver (depends on display driver). Use ``--help`` first to display the list of available drivers. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--gpu-index <device_index>`` | |release| Use a specific GPU (run with ``--verbose`` to get available device list). |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--text-driver <driver>`` | |release| Text driver (Fonts, BiDi, shaping). |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--tablet-driver <driver>`` | |release| Pen tablet input driver. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--headless`` | |release| Enable headless mode (``--display-driver headless --audio-driver Dummy``). Useful for servers and with ``--script``. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--write-movie <file>`` | |release| Run the engine in a way that a movie is written (usually with .avi or .png extension). |
- | | ``--fixed-fps`` is forced when enabled, but can be used to change movie FPS. |
- | | ``--disable-vsync`` can speed up movie writing but makes interaction more difficult. |
- | | ``--quit-after`` can be used to specify the number of frames to write. |
- +------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
- **Display options**
- +------------------------------------+----------------------------------------------------------------------------+
- | Command | Description |
- +------------------------------------+----------------------------------------------------------------------------+
- | ``-f``, ``--fullscreen`` | |release| Request fullscreen mode. |
- +------------------------------------+----------------------------------------------------------------------------+
- | ``-m``, ``--maximized`` | |release| Request a maximized window. |
- +------------------------------------+----------------------------------------------------------------------------+
- | ``-w``, ``--windowed`` | |release| Request windowed mode. |
- +------------------------------------+----------------------------------------------------------------------------+
- | ``-t``, ``--always-on-top`` | |release| Request an always-on-top window. |
- +------------------------------------+----------------------------------------------------------------------------+
- | ``--resolution <W>x<H>`` | |release| Request window resolution. |
- +------------------------------------+----------------------------------------------------------------------------+
- | ``--position <X>,<Y>`` | |release| Request window position. |
- +------------------------------------+----------------------------------------------------------------------------+
- | ``--screen <N>`` | |release| Request window screen. |
- +------------------------------------+----------------------------------------------------------------------------+
- | ``--single-window`` | |release| Use a single window (no separate subwindows). |
- +------------------------------------+----------------------------------------------------------------------------+
- | ``--xr-mode <mode>`` | |release| Select XR mode ('default', 'off', 'on'). |
- +------------------------------------+----------------------------------------------------------------------------+
- **Debug options**
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | Command | Description |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``-d``, ``--debug`` | |release| Debug (local stdout debugger). |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``-b``, ``--breakpoints`` | |release| Breakpoint list as source::line comma-separated pairs, no spaces (use ``%20`` instead). |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--profiling`` | |release| Enable profiling in the script debugger. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--gpu-profile`` | |release| Show a GPU profile of the tasks that took the most time during frame rendering. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--gpu-validation`` | |release| Enable graphics API :ref:`validation layers <doc_vulkan_validation_layers>` for debugging. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--gpu-abort`` | |debug| Abort on GPU errors (usually validation layer errors), may help see the problem if your system freezes. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--remote-debug <uri>`` | |release| Remote debug (``<protocol>://<host/IP>[:<port>]``, e.g. ``tcp://127.0.0.1:6007``). |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--single-threaded-scene`` | |release| Scene tree runs in single-threaded mode. Sub-thread groups are disabled and run on the main thread. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--debug-collisions`` | |debug| Show collision shapes when running the scene. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--debug-paths`` | |debug| Show path lines when running the scene. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--debug-navigation`` | |debug| Show navigation polygons when running the scene. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--debug-avoidance`` | |debug| Show navigation avoidance debug visuals when running the scene. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--debug-stringnames`` | |debug| Print all StringName allocations to stdout when the engine quits. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--frame-delay <ms>`` | |release| Simulate high CPU load (delay each frame by <ms> milliseconds). |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--time-scale <scale>`` | |release| Force time scale (higher values are faster, 1.0 is normal speed). |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--disable-vsync`` | |release| Forces disabling of vertical synchronization, even if enabled in the project settings. |
- | | Does not override driver-level V-Sync enforcement. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--disable-render-loop`` | |release| Disable render loop so rendering only occurs when called explicitly from script. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--disable-crash-handler`` | |release| Disable crash handler when supported by the platform code. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--fixed-fps <fps>`` | |release| Force a fixed number of frames per second. This setting disables real-time synchronization. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--delta-smoothing <enable>`` | |release| Enable or disable frame delta smoothing ('enable', 'disable'). |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- | ``--print-fps`` | |release| Print the frames per second to the stdout. |
- +--------------------------------+-----------------------------------------------------------------------------------------------------------------+
- **Standalone tools**
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | Command | Description |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``-s``, ``--script <script>`` | |release| Run a script. ``<script>`` must be a resource path relative to the project (``myscript.gd`` will be interpreted as ``res://myscript.gd``) |
- | | or an absolute filesystem path (for example on Windows ``C:/tmp/myscript.gd``) |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--check-only`` | |release| Only parse for errors and quit (use with ``--script``). |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--import`` | |editor| Starts the editor, waits for any resources to be imported, and then quits. Implies ``--editor`` and ``--quit``. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--export-release <preset> <path>`` | |editor| Export the project using the given preset and matching release template. The preset name should match one defined in export_presets.cfg. |
- | | ``<path>`` should be absolute or relative to the project directory, and include the filename for the binary (e.g. 'builds/game.exe'). The target |
- | | directory should exist. Implies ``--import``. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--export-debug <preset> <path>`` | |editor| Like ``--export-release``, but use debug template. Implies ``--import``. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--export-pack <preset> <path>`` | |editor| Like ``--export-release``, but only export the game pack for the given preset. The ``<path>`` extension determines whether it will be in PCK |
- | | or ZIP format. Implies ``--import``. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--convert-3to4 [<max_file_kb>] [<max_line_size>]`` | |editor| Convert project from Godot 3.x to Godot 4.x. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--validate-conversion-3to4 [<max_file_kb>] [<max_line_size>]`` | |editor| Show what elements will be renamed when converting project from Godot 3.x to Godot 4.x. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--doctool [<path>]`` | |editor| Dump the engine API reference to the given ``<path>`` in XML format, merging if existing files are found. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--no-docbase`` | |editor| Disallow dumping the base types (used with ``--doctool``). |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--gdscript-docs <path>`` | |editor| Rather than dumping the engine API, generate API reference from the inline documentation in the GDScript files found in <path> |
- | | (used with ``--doctool``). |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--build-solutions`` | |editor| Build the scripting solutions (e.g. for C# projects). Implies ``--editor`` and requires a valid project to edit. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--dump-gdextension-interface`` | |editor| Generate GDExtension header file 'gdnative_interface.h' in the current folder. This file is the base file required to implement a GDExtension. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--dump-extension-api`` | |editor| Generate JSON dump of the Godot API for GDExtension bindings named 'extension_api.json' in the current folder. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--validate-extension-api <path>`` | |editor| Validate an extension API file dumped (with the option above) from a previous version of the engine to ensure API compatibility. |
- | | If incompatibilities or errors are detected, the return code will be non-zero. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--benchmark`` | |editor| Benchmark the run time and print it to console. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- | ``--benchmark-file <path>`` | |editor| Benchmark the run time and save it to a given file in JSON format. The path should be absolute. |
- +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
- Path
- ----
- It is recommended to place your Godot editor binary in your ``PATH`` environment
- variable, so it can be executed easily from any place by typing ``godot``.
- You can do so on Linux by placing the Godot binary in ``/usr/local/bin`` and
- making sure it is called ``godot`` (case-sensitive).
- To achieve this on Windows or macOS easily, you can install Godot using
- `Scoop <https://scoop.sh>`__ (on Windows) or `Homebrew <https://brew.sh>`__
- (on macOS). This will automatically make the copy of Godot installed
- available in the ``PATH``:
- .. tabs::
- .. code-tab:: sh Windows
- # Add "Extras" bucket
- scoop bucket add extras
- # Standard editor:
- scoop install godot
- # Editor with C# support (will be available as `godot-mono` in `PATH`):
- scoop install godot-mono
- .. code-tab:: sh macOS
- # Standard editor:
- brew install godot
- # Editor with C# support (will be available as `godot-mono` in `PATH`):
- brew install godot-mono
- Setting the project path
- ------------------------
- Depending on where your Godot binary is located and what your current
- working directory is, you may need to set the path to your project
- for any of the following commands to work correctly.
- When running the editor, this can be done by giving the path to the ``project.godot`` file
- of your project as either the first argument, like this:
- ::
- godot path_to_your_project/project.godot [other] [commands] [and] [args]
- For all commands, this can be done by using the ``--path`` argument:
- ::
- godot --path path_to_your_project [other] [commands] [and] [args]
- For example, the full command for exporting your game (as explained below) might look like this:
- ::
- godot --headless --path path_to_your_project --export-release my_export_preset_name game.exe
- When starting from a subdirectory of your project, use the ``--upwards`` argument for Godot to
- automatically find the ``project.godot`` file by recursively searching the parent directories.
- For example, running a scene (as explained below) nested in a subdirectory might look like this
- when your working directory is in the same path:
- ::
- godot --upwards nested_scene.tscn
- ..
- Creating a project
- ------------------
- Creating a project from the command line can be done by navigating the
- shell to the desired place and making a ``project.godot`` file.
- ::
- mkdir newgame
- cd newgame
- touch project.godot
- The project can now be opened with Godot.
- Running the editor
- ------------------
- Running the editor is done by executing Godot with the ``-e`` flag. This
- must be done from within the project directory or by setting the project path as explained above,
- otherwise the command is ignored and the Project Manager appears.
- ::
- godot -e
- When passing in the full path to the ``project.godot`` file, the ``-e`` flag may be omitted.
- If a scene has been created and saved, it can be edited later by running
- the same code with that scene as argument.
- ::
- godot -e scene.tscn
- Erasing a scene
- ---------------
- Godot is friends with your filesystem and will not create extra metadata files.
- Use ``rm`` to erase a scene file. Make sure nothing references that scene.
- Otherwise, an error will be thrown upon opening the project.
- ::
- rm scene.tscn
- Running the game
- ----------------
- To run the game, execute Godot within the project directory or with the project path as explained above.
- ::
- godot
- Note that passing in the ``project.godot`` file will always run the editor instead of running the game.
- When a specific scene needs to be tested, pass that scene to the command line.
- ::
- godot scene.tscn
- Debugging
- ---------
- Catching errors in the command line can be a difficult task because they
- scroll quickly. For this, a command line debugger is provided by adding
- ``-d``. It works for running either the game or a single scene.
- ::
- godot -d
- ::
- godot -d scene.tscn
- .. _doc_command_line_tutorial_exporting:
- Exporting
- ---------
- Exporting the project from the command line is also supported. This is
- especially useful for continuous integration setups.
- .. note::
- Using the ``--headless`` command line argument is **required** on platforms
- that do not have GPU access (such as continuous integration). On platforms
- with GPU access, ``--headless`` prevents a window from spawning while the
- project is exporting.
- ::
- # `godot` must be a Godot editor binary, not an export template.
- # Also, export templates must be installed for the editor
- # (or a valid custom export template must be defined in the export preset).
- godot --headless --export-release "Linux/X11" /var/builds/project
- godot --headless --export-release Android /var/builds/project.apk
- The preset name must match the name of an export preset defined in the
- project's ``export_presets.cfg`` file. If the preset name contains spaces or
- special characters (such as "Windows Desktop"), it must be surrounded with quotes.
- To export a debug version of the game, use the ``--export-debug`` switch instead
- of ``--export-release``. Their parameters and usage are the same.
- To export only a PCK file, use the ``--export-pack`` option followed by the
- preset name and output path, with the file extension, instead of
- ``--export-release`` or ``--export-debug``. The output path extension determines
- the package's format, either PCK or ZIP.
- .. warning::
- When specifying a relative path as the path for ``--export-release``, ``--export-debug``
- or ``--export-pack``, the path will be relative to the directory containing
- the ``project.godot`` file, **not** relative to the current working directory.
- Running a script
- ----------------
- It is possible to run a ``.gd`` script from the command line.
- This feature is especially useful in large projects, e.g. for batch
- conversion of assets or custom import/export.
- The script must inherit from ``SceneTree`` or ``MainLoop``.
- Here is an example ``sayhello.gd``, showing how it works:
- .. code-block:: python
- #!/usr/bin/env -S godot -s
- extends SceneTree
- func _init():
- print("Hello!")
- quit()
- And how to run it:
- ::
- # Prints "Hello!" to standard output.
- godot -s sayhello.gd
- If no ``project.godot`` exists at the path, current path is assumed to be the
- current working directory (unless ``--path`` is specified).
- The script path will be interpreted as a resource path relative to
- the project, here ``res://sayhello.gd``. You can also use an absolute
- filesystem path instead, which is useful if the script is located
- outside of the project directory.
- The first line of ``sayhello.gd`` above is commonly referred to as
- a *shebang*. If the Godot binary is in your ``PATH`` as ``godot``,
- it allows you to run the script as follows in modern Linux
- distributions, as well as macOS:
- ::
- # Mark script as executable.
- chmod +x sayhello.gd
- # Prints "Hello!" to standard output.
- ./sayhello.gd
- If the above doesn't work in your current version of Linux or macOS, you can
- always have the shebang run Godot straight from where it is located as follows:
- ::
- #!/usr/bin/godot -s
|