<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Compatibility on KnightLi Blog</title>
        <link>https://knightli.com/en/tags/compatibility/</link>
        <description>Recent content in Compatibility on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Fri, 19 Jun 2026 21:52:48 +0800</lastBuildDate><atom:link href="https://knightli.com/en/tags/compatibility/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>How to Choose a Godot Renderer: Forward&#43;, Mobile, and Compatibility Compared</title>
        <link>https://knightli.com/en/2026/06/19/godot-renderer-forward-mobile-compatibility/</link>
        <pubDate>Fri, 19 Jun 2026 21:52:48 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/06/19/godot-renderer-forward-mobile-compatibility/</guid>
        <description>&lt;p&gt;When you create a Godot 4.x project, Godot asks you to choose a renderer: &lt;code&gt;Forward+&lt;/code&gt;, &lt;code&gt;Mobile&lt;/code&gt;, or &lt;code&gt;Compatibility&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is not just a question of visual quality. The choice affects which rendering features you can use, which hardware your game can support, whether you can export to the Web, and how the game performs on different devices.&lt;/p&gt;
&lt;p&gt;If you just want a quick starting point, choose by target platform: desktop 3D usually means &lt;code&gt;Forward+&lt;/code&gt;, mobile 3D usually means &lt;code&gt;Mobile&lt;/code&gt;, and Web, older devices, and most 2D projects usually mean &lt;code&gt;Compatibility&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;quick-answer&#34;&gt;Quick answer
&lt;/h2&gt;&lt;p&gt;Use this table as a starting point:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Target&lt;/th&gt;
          &lt;th&gt;Recommended renderer&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Desktop 3D game with advanced rendering features&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Forward+&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Newer mobile 3D, desktop XR, or mobile-aware 3D&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Mobile&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Web/HTML5 export&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Compatibility&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Older desktops, older phones, or standalone XR devices&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Compatibility&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2D games, or 3D games that do not need advanced rendering&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Compatibility&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Widest hardware coverage&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Compatibility&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2D game that needs advanced features such as compute shaders&lt;/td&gt;
          &lt;td&gt;Consider &lt;code&gt;Forward+&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This is only a starting point. Every game is different, and you still need to test on your target devices.&lt;/p&gt;
&lt;h2 id=&#34;when-forward-makes-sense&#34;&gt;When Forward+ makes sense
&lt;/h2&gt;&lt;p&gt;If you mainly target desktop platforms and relatively new hardware, &lt;code&gt;Forward+&lt;/code&gt; is a good first choice.&lt;/p&gt;
&lt;p&gt;Choose &lt;code&gt;Forward+&lt;/code&gt; when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You are developing for desktop.&lt;/li&gt;
&lt;li&gt;Your target hardware is fairly new and supports Vulkan, Direct3D 12, or Metal.&lt;/li&gt;
&lt;li&gt;The project is a 3D game.&lt;/li&gt;
&lt;li&gt;You want to use Godot&amp;rsquo;s most complete and advanced rendering features.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Forward+&lt;/code&gt; is better suited to 3D projects with higher visual requirements. It gives access to more advanced rendering features and fits newer GPUs, newer operating systems, and desktop platforms.&lt;/p&gt;
&lt;p&gt;But it is not the best default for every project. If your game must run on older devices, browsers, or low-end phones, &lt;code&gt;Forward+&lt;/code&gt; may bring compatibility or performance problems.&lt;/p&gt;
&lt;h2 id=&#34;when-mobile-makes-sense&#34;&gt;When Mobile makes sense
&lt;/h2&gt;&lt;p&gt;The &lt;code&gt;Mobile&lt;/code&gt; renderer targets newer mobile devices and can also suit some desktop XR or desktop projects. It still depends on modern graphics APIs such as Vulkan, Direct3D 12, or Metal, but it accounts for mobile hardware limits.&lt;/p&gt;
&lt;p&gt;Choose &lt;code&gt;Mobile&lt;/code&gt; when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You target newer mobile devices.&lt;/li&gt;
&lt;li&gt;You target desktop XR or desktop platforms.&lt;/li&gt;
&lt;li&gt;Your target hardware supports Vulkan, Direct3D 12, or Metal.&lt;/li&gt;
&lt;li&gt;The project is a 3D game.&lt;/li&gt;
&lt;li&gt;You want advanced rendering features while accepting mobile hardware limits.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short, &lt;code&gt;Mobile&lt;/code&gt; is the more natural choice for 3D projects on newer mobile devices. It is not meant for every phone; it is better for newer devices.&lt;/p&gt;
&lt;p&gt;If you need to support very old Android devices, low-end phones, or as much mobile hardware as possible, &lt;code&gt;Compatibility&lt;/code&gt; is usually safer.&lt;/p&gt;
&lt;h2 id=&#34;when-compatibility-makes-sense&#34;&gt;When Compatibility makes sense
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Compatibility&lt;/code&gt; has the widest hardware support. It is suitable for older devices, Web, standalone XR, and projects that do not need advanced rendering features.&lt;/p&gt;
&lt;p&gt;Choose &lt;code&gt;Compatibility&lt;/code&gt; when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You target older mobile devices.&lt;/li&gt;
&lt;li&gt;You target older desktop devices.&lt;/li&gt;
&lt;li&gt;You target standalone XR devices.&lt;/li&gt;
&lt;li&gt;The target hardware does not support Vulkan.&lt;/li&gt;
&lt;li&gt;You need Web/HTML5 export.&lt;/li&gt;
&lt;li&gt;The project is a 2D game.&lt;/li&gt;
&lt;li&gt;The project is a 3D game that does not need advanced rendering features.&lt;/li&gt;
&lt;li&gt;You want stable performance across as many devices as possible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are making a Web game, &lt;code&gt;Compatibility&lt;/code&gt; is the only choice. Godot documentation clearly states that Web projects must use &lt;code&gt;Compatibility&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For many 2D projects, &lt;code&gt;Compatibility&lt;/code&gt; is also the simpler default. It supports more devices, performs steadily, and reduces the chance of device compatibility issues during testing and release.&lt;/p&gt;
&lt;h2 id=&#34;web-projects-should-use-compatibility&#34;&gt;Web projects should use Compatibility
&lt;/h2&gt;&lt;p&gt;If your target includes Web/HTML5, do not overthink it: choose &lt;code&gt;Compatibility&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The reason is direct. In Godot 4.x, Web export can only use the &lt;code&gt;Compatibility&lt;/code&gt; renderer. Even if your development machine has a modern GPU, this conclusion does not change.&lt;/p&gt;
&lt;p&gt;Web cases that should choose &lt;code&gt;Compatibility&lt;/code&gt; include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Browser mini-games&lt;/li&gt;
&lt;li&gt;Itch.io Web builds&lt;/li&gt;
&lt;li&gt;Website demos&lt;/li&gt;
&lt;li&gt;Teaching demos&lt;/li&gt;
&lt;li&gt;Small interactive projects embedded in web pages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you plan to export the game to Web later, test with &lt;code&gt;Compatibility&lt;/code&gt; early. Do not wait until the end of the project to switch renderers.&lt;/p&gt;
&lt;h2 id=&#34;2d-games-usually-fit-compatibility&#34;&gt;2D games usually fit Compatibility
&lt;/h2&gt;&lt;p&gt;For a normal 2D game, &lt;code&gt;Compatibility&lt;/code&gt; is usually the better choice.&lt;/p&gt;
&lt;p&gt;Most 2D games do not need the advanced 3D rendering capabilities of &lt;code&gt;Forward+&lt;/code&gt;. You care more about fast startup, broad compatibility, stable performance, and more publishing options.&lt;/p&gt;
&lt;p&gt;These projects can usually start with &lt;code&gt;Compatibility&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platformers&lt;/li&gt;
&lt;li&gt;Top-down shooters&lt;/li&gt;
&lt;li&gt;2D puzzle games&lt;/li&gt;
&lt;li&gt;Card games&lt;/li&gt;
&lt;li&gt;Visual novels&lt;/li&gt;
&lt;li&gt;Pixel art games&lt;/li&gt;
&lt;li&gt;Web playable demos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are exceptions. Godot documentation notes that you might choose &lt;code&gt;Forward+&lt;/code&gt; for a 2D game if you need advanced features such as compute shaders. But that is for cases where you clearly know you need those features. It is not the beginner default.&lt;/p&gt;
&lt;h2 id=&#34;how-to-decide-for-3d-games&#34;&gt;How to decide for 3D games
&lt;/h2&gt;&lt;p&gt;For 3D games, target platform matters more.&lt;/p&gt;
&lt;p&gt;If the target is newer desktop hardware and you want advanced rendering effects, choose &lt;code&gt;Forward+&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If the target is newer mobile devices or desktop XR, choose &lt;code&gt;Mobile&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If the target is older devices, Web, standalone XR, or broad hardware coverage, choose &lt;code&gt;Compatibility&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A simple rule:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;New desktop 3D: Forward+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;New mobile 3D: Mobile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Web / old devices / broad compatibility: Compatibility
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Do not choose only by &amp;ldquo;highest visual quality.&amp;rdquo; The game ultimately runs on player devices, and compatibility plus stable frame rate often matter more than the visuals on your development machine.&lt;/p&gt;
&lt;h2 id=&#34;older-and-low-end-devices-prefer-compatibility&#34;&gt;Older and low-end devices: prefer Compatibility
&lt;/h2&gt;&lt;p&gt;If your users&amp;rsquo; devices are uncertain, or you want to support as much hardware as possible, &lt;code&gt;Compatibility&lt;/code&gt; is safer.&lt;/p&gt;
&lt;p&gt;Typical cases include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;School lab computers&lt;/li&gt;
&lt;li&gt;Old office PCs&lt;/li&gt;
&lt;li&gt;Older laptops&lt;/li&gt;
&lt;li&gt;Older Android phones&lt;/li&gt;
&lt;li&gt;Player devices with unknown specs&lt;/li&gt;
&lt;li&gt;Browser or lightweight distribution channels&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Forward+&lt;/code&gt; and &lt;code&gt;Mobile&lt;/code&gt; both assume relatively modern graphics API support. If the device does not support Vulkan, &lt;code&gt;Compatibility&lt;/code&gt; is the only choice.&lt;/p&gt;
&lt;h2 id=&#34;can-you-switch-renderers-later&#34;&gt;Can you switch renderers later?
&lt;/h2&gt;&lt;p&gt;You can switch, but you should not treat it as a harmless toggle.&lt;/p&gt;
&lt;p&gt;Different renderers do not support exactly the same features. Some advanced rendering features used under &lt;code&gt;Forward+&lt;/code&gt; may be unavailable or behave differently after switching to &lt;code&gt;Compatibility&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If the project is still early and has few rendering dependencies, switching is usually not too expensive. The later the project gets, the more materials, lights, post-processing, shaders, and particles you may have, and the higher the risk becomes.&lt;/p&gt;
&lt;p&gt;Recommendations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Choose based on your target platform early.&lt;/li&gt;
&lt;li&gt;Test on target devices as soon as possible.&lt;/li&gt;
&lt;li&gt;Do not wait until the game is almost finished to switch renderers.&lt;/li&gt;
&lt;li&gt;If you plan to support Web, validate with &lt;code&gt;Compatibility&lt;/code&gt; from the beginning.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;my-recommendation&#34;&gt;My recommendation
&lt;/h2&gt;&lt;p&gt;If you are new to Godot, use this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Making 2D or Web: choose &lt;code&gt;Compatibility&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Making desktop 3D for newer hardware: choose &lt;code&gt;Forward+&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Making 3D for newer mobile devices: choose &lt;code&gt;Mobile&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Want the widest device coverage: choose &lt;code&gt;Compatibility&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For a first Godot project, I recommend &lt;code&gt;Compatibility&lt;/code&gt;. It has fewer surprises, wider support, and a steadier publishing path, especially for 2D, Web, teaching demos, and small indie games.&lt;/p&gt;
&lt;p&gt;When you clearly need advanced 3D rendering, compute shaders, or more complex desktop graphics, consider &lt;code&gt;Forward+&lt;/code&gt;. If your project truly targets newer mobile 3D hardware, consider &lt;code&gt;Mobile&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The most advanced renderer is not always the best renderer. The best renderer is the one that runs reliably on your target players&amp;rsquo; devices.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
