<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>News | XEarthLayer</title><link>https://xearthlayer.app/news/</link><description>Release notes, development updates, and news from the XEarthLayer project.</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 25 May 2026 12:00:00 -0700</lastBuildDate><atom:link href="https://xearthlayer.app/news/index.xml" rel="self" type="application/rss+xml"/><item><title>Regional scenery update: Asia ships, and what comes next</title><link>https://xearthlayer.app/news/regional-scenery-asia-and-remaster-roadmap/</link><pubDate>Mon, 25 May 2026 12:00:00 -0700</pubDate><author>XEarthLayer Team</author><guid>https://xearthlayer.app/news/regional-scenery-asia-and-remaster-roadmap/</guid><description>Asia parts 1–4 are live, the older regional packages are about to enter a ZL16 remaster phase with updated XP12 bathymetry, and a short note on the road to 0.5.0.</description><content:encoded><![CDATA[<div class="news-lede">
<strong>Asia parts 1 through 4</strong> are now available. That covers the long list of regions previewed in the <a href="/news/regional-scenery-eu2-and-roadmap/">EU-2 update</a>: Russia (the asian portion), China, Mongolia, the Central Asian &ldquo;-stans&rdquo;, the Middle East, India, and everything in between. The release is split across four packages so no single download is unreasonable.
</div>

<p><img src="/images/coverage.png" alt="Global XEarthLayer scenery coverage map showing the regional packages currently available, with Asia now filled in alongside Europe, North and South America, Africa, and Oceania."></p>
<p>With Asia in place, the main inhabited continents are now covered end-to-end, with one outstanding gap: the very far north of Canada. <strong>Antarctica</strong> is still on the table as the seventh and final continent, but whether it ships will depend on whether there is enough demand to justify the production work and whether we can keep the quality bar where it needs to be at those latitudes. We will revisit that decision later in the year.</p>
<h2 id="a-remaster-phase-next">A remaster phase next</h2>
<p>With the global coverage loop almost closed, focus shifts away from new ground and onto the older packages. The next phase of work is bringing <strong>North America, South America, Europe Part 1, Africa Parts 1 and 2, and Oceania</strong> up to the current production standard: a clean <strong>ZL16</strong> baseline and the updated <strong>XP12 water bathymetry mask</strong> settings.</p>
<p>The packages built before we settled on a single zoom-level story (covered in the <a href="/news/regional-scenery-eu2-and-roadmap/">previous roadmap post</a>) still carry the older mixed-zoom and pre-XP12 bathymetry shape. Remastering them brings the visible quality and behaviour of those regions into line with what Asia and EU-2 already deliver, and it removes the awkwardness of telling new pilots that some of the older packages are &ldquo;good but slightly different&rdquo;. This is unglamorous work, but it is what makes the global footprint feel like one product rather than a sequence of generations.</p>
<h2 id="on-the-xearthlayer-app">On the XEarthLayer app</h2>
<p>A short word on the app side. A <strong>0.4.7</strong> release is likely coming in the near future to tidy up a handful of final pieces left over from the 0.4.x line. These are small reliability and polish items rather than new headline features. After that, <strong>0.4.7 will be the last release on this version</strong>, and work on <strong>0.5.0 will start in the summer</strong>. We will write up where 0.5.0 is heading closer to the time.</p>
<h2 id="a-short-break">A short break</h2>
<p><img src="/images/news/ff777-sunset.jpg" alt="A Boeing 777-300ER in cruise into a low sunset, flying over orthophoto-rendered terrain in X-Plane 12."></p>
<p>On a personal note: I will be <strong>taking a break between now and July</strong>, travelling with family and getting some rest. Scenery production and most app work will be quiet during that window. Community channels will still be there, but expect slower responses than usual. Back at it properly in July, and thanks as always for sticking with the project.</p>
]]></content:encoded></item><item><title>XEarthLayer 0.4.6 released</title><link>https://xearthlayer.app/news/xearthlayer-0-4-6-released/</link><pubDate>Sun, 10 May 2026 12:00:00 -0700</pubDate><author>XEarthLayer Team</author><guid>https://xearthlayer.app/news/xearthlayer-0-4-6-released/</guid><description>A friendlier setup wizard, hardened package installs, and an under-the-hood SSOT consolidation of GPU enumeration.</description><content:encoded><![CDATA[<p>XEarthLayer 0.4.6 is now available. This one is mostly a polish and reliability release: the setup wizard does a better job of getting you to a tuned configuration on first run, the package installer is harder to wedge when something goes wrong on the network, and a chunk of internal duplication around GPU detection has been collapsed into a single source of truth that the wizard, the encoder, and the diagnostics report all share.</p>
<p>Grab the latest build from the <a href="/#download">downloads page</a> or straight from the <a href="https://github.com/samsoir/xearthlayer/releases/tag/v0.4.6">GitHub release</a>.</p>
<h2 id="a-more-useful-setup-wizard">A more useful setup wizard</h2>
<p><code>xearthlayer setup</code> has been the recommended onboarding path for a while, but it left a lot on the table. It asked you for a cache directory and then handed you a fixed 40 GB recommendation regardless of how much disk you actually had, and it never mentioned that you could offload DDS encoding to a secondary GPU. New users were unlikely to discover those settings on their own, and a few wizard runs ended with people manually editing <code>config.ini</code> afterwards anyway.</p>
<p>This release reworks the wizard around what your hardware actually looks like. The cache step (<a href="https://github.com/samsoir/xearthlayer/issues/154">#154</a>) now asks for the disk budget with a default that is 25% of free space at your chosen cache directory, floored to the nearest 10 GB. The DDS-to-chunks ratio and the memory cache size are prompted in the same step, with the memory default sized as <code>RAM ÷ 12</code> clamped to a 500 MB to <code>RAM ÷ 4</code> band. That formula is intentional: the memory cache is a small request absorber, not a working set holder, because the DDS disk cache is what actually holds the working set of tiles. The previous tiered defaults handed out memory cache sizes that were several times larger than the absorber actually needs.</p>
<p>There is also a new step for DDS encoding (<a href="https://github.com/samsoir/xearthlayer/issues/153">#153</a>). When two or more GPU adapters are detected, the wizard offers to offload encoding to a secondary GPU and warns explicitly against picking the GPU that X-Plane uses for rendering, since that path causes frame drops rather than buying you anything. Single-GPU systems silently keep the safe ISPC default. Adapter enumeration runs behind a spinner because wgpu can take 10 to 30 seconds probing drivers on multi-GPU hosts, and silence there used to look like a freeze.</p>
<p>If you are using a third-party overlay scenery package such as SimHeaven or Prefab Objects and have been fighting with overlay collisions, there is also a new <code>packages.disable_overlays</code> runtime control (<a href="https://github.com/samsoir/xearthlayer/issues/152">#152</a>). When set to <code>true</code>, <code>xearthlayer run</code> removes XEL&rsquo;s consolidated overlay symlink folder from Custom Scenery on startup. Your overlay packages stay downloaded and cached locally; only the symlink that X-Plane reads is suppressed. Flip the flag back to <code>false</code> and restart, and the overlays come back without re-downloading anything. It is deliberately a runtime control rather than a download-time one, so you can A/B between XEL overlays and a third-party set without paying the bandwidth cost each time.</p>
<h2 id="package-installs-you-can-actually-trust">Package installs you can actually trust</h2>
<p>A few related defects on the install path got cleaned up at the same time.</p>
<p>The big one was that a single failed part download could quietly hang an install (<a href="https://github.com/samsoir/xearthlayer/issues/187">#187</a>). Previously, when a part exhausted its retries, the rest of the workers would keep running and the user got a process that needed Ctrl-C to recover, often with no clear explanation of what had gone wrong. The orchestrator now sets a shared abort flag on the first hard failure and other workers exit at their next abort check. The temp directory holding partial downloads is wrapped in a guard that wipes it on every exit path, including panics, so you no longer end up with leaked partial files in <code>/tmp</code>. The user-facing error names the part that failed, the underlying error message, and a count of any other parts that failed before the abort cascade finished. Same goes for <code>concurrent_downloads = 1</code> users, who used to hit a separate code path with no per-part retry and no progress reporting; that path is gone now and everyone goes through the same single semaphore-bounded implementation.</p>
<p>The installer also now does a pre-flight disk space check (<a href="https://github.com/samsoir/xearthlayer/issues/188">#188</a>). After the package metadata comes back from HEAD requests but before any bytes hit the network, the installer asks &ldquo;is there enough space at <code>packages.install_location</code> for this?&rdquo; and either proceeds or fails fast with an actionable error message. This particularly matters for atomic distros like Bazzite, Silverblue, Kinoite, and SteamOS, where <code>df /</code> reports <code>100%</code> as the steady state because the rootfs is intentionally sized to its content. Diagnostics now annotates that line as &ldquo;normal on atomic distro&rdquo; when it detects an ostree-deployed root, and it reports cache and packages locations with available bytes alongside used so you see the number that actually matters.</p>
<p>And finally, file-level logging now initialises for every CLI subcommand instead of just <code>run</code> (<a href="https://github.com/samsoir/xearthlayer/issues/194">#194</a>). If a <code>packages install</code> failed in the past, <code>xearthlayer.log</code> was empty. It is no longer empty. Structured tracing across the install pipeline emits INFO events at every stage transition (metadata, download, reassembly, extraction, completion) and DEBUG/WARN/ERROR around per-part attempts and retries. The next time something goes wrong on someone&rsquo;s install, the log file is the first place to look.</p>
<h2 id="a-single-source-of-truth-for-gpu-detection">A single source of truth for GPU detection</h2>
<p>While building the wizard&rsquo;s GPU step, three places in the codebase turned out to be doing the same <code>wgpu::Instance::new + enumerate_adapters</code> dance with their own slight format differences: the encoder, the diagnostics report, and (newly) the wizard. They have been collapsed into a single <code>system::gpu</code> module (<a href="https://github.com/samsoir/xearthlayer/pull/198">#198</a>) that everyone now calls. The wizard&rsquo;s adapter-to-config-string mapping (<code>config_value</code>) and the encoder&rsquo;s config-string-to-adapter mapping (<code>find_adapter</code>) are mathematical inverses, and they are now locked together by a round-trip property test that catches any drift if either side changes.</p>
<p>This is mostly invisible to users, but it is the kind of consolidation that matters for the next person who has to add a new GPU device type or change the keyword the encoder accepts. The selector keyword (<code>integrated</code> or <code>discrete</code>) is preferred when the GPU type is unique within the detected set, and the adapter name substring is used otherwise. Dual-discrete render farms get a config value that names the specific card.</p>
<p>A handful of smaller cleanups went in alongside: sensitive credentials in <code>provider.google_api_key</code> and <code>provider.mapbox_access_token</code> are now masked as <code>xxxxxxxx</code> in <code>xearthlayer config list</code> so the command output is safe to paste into bug reports (<a href="https://github.com/samsoir/xearthlayer/issues/162">#162</a>), with the diagnostics report&rsquo;s redaction sharing the same predicate so the two surfaces stay in lockstep. The Google provider tile session parser was also rewritten on <code>serde</code> (<a href="https://github.com/samsoir/xearthlayer/issues/163">#163</a>), which correctly rejects malformed responses that the previous string-search parser would silently misinterpret.</p>
<h2 id="upgrading">Upgrading</h2>
<p>Binaries are on the <a href="/#download">downloads page</a>. Configuration files remain compatible; there is nothing you need to change on your end to upgrade. If you do want to take advantage of the new wizard prompts on a host you have already configured, <code>xearthlayer setup</code> will offer to back up your existing <code>config.ini</code> and reconfigure from scratch. Existing config keys are preserved when compatible.</p>
<p>If you hit anything unexpected, the <a href="https://discord.gg/RPEWQZdxm2">Discord</a> and <a href="https://github.com/samsoir/xearthlayer/issues">GitHub issues</a> are the fastest way to reach us. Thanks as always to everyone running pre-release builds and sending logs back.</p>
]]></content:encoded></item><item><title>XEarthLayer and X-Plane's Raster Scenery Future</title><link>https://xearthlayer.app/news/xplane-scenery-future/</link><pubDate>Fri, 08 May 2026 08:00:00 -0700</pubDate><author>XEarthLayer Team</author><guid>https://xearthlayer.app/news/xplane-scenery-future/</guid><description>Laminar are rebuilding X-Plane's scenery around Raster Data Tiles. Here is what is coming, and why XEarthLayer is well-placed for the transition.</description><content:encoded><![CDATA[<div class="news-lede">
Laminar Research are rebuilding X-Plane&rsquo;s scenery system around <em>Raster Data Tiles</em>, a major departure from the twenty-year-old DSF format. We do not yet know when it lands or what hooks third parties will get, but based on what has been shared publicly we are confident in four things: orthophoto scenery will still be supported, scenery will be streamed on demand rather than loaded in blocks, third-party airports will finally blend cleanly with global imagery, and there is a real possibility of a first-party API for developers. All of these are good news for XEarthLayer, and the architectural work we are already doing, splitting the app into composable modules and exposing third-party hooks, is preparing us for the transition. XEarthLayer and X-Plane will remain compatible long into the next generation of the simulator.
</div>

<h2 id="scenery-system-state-of-the-union-in-x-plane-124">Scenery System: State of the Union in X-Plane 12.4</h2>
<p>The present scenery system used by X-Plane today has been with us for around twenty years. The resolution and fidelity of the system assets have improved significantly over that time as computers have become more capable. At the core however, the <a href="https://developer.x-plane.com/article/dsf-file-format-specification/">DSF</a> framework X-Plane uses today is fundamentally no different from what has come before.</p>
<p>The foundation is simple. X-Plane scenery is packaged in one by one degree tiles, projected using the Web Mercator method to populate the Earth with cities, rivers, mountains, oceans, trees, roads, railways and very importantly, airports. The base DSF file for each tile provides the description of all of the pieces needed to build this slice of the world, from the base mesh which describes the triangles needed to represent the ground in 3D space, to the textures, land-class type and objects that exist on the tile.</p>
<p>Readers familiar with this project will know that <a href="/docs/how-it-works">XEarthLayer intercepts</a> the references of textures as they are requested from disk in order to inject the orthophoto scenery at runtime within the world X-Plane is painting.</p>
<p><img src="/images/news/sliding-window.jpg" alt="Diagram of X-Plane&rsquo;s sliding-window scenery loader. A four-by-three grid of one-degree DSF tiles is loaded around the aircraft&rsquo;s current position. As the aircraft crosses an invisible boundary roughly one degree from the loaded edge, X-Plane loads the next three rows or columns of tiles ahead of it, dropping the tiles furthest behind."></p>
<p>X-Plane loads these tiles into the simulator using a relatively simple sliding window model. When the sim loads into a location in the world for the first time, X-Plane loads a large area around the starting position for the aircraft, usually around four by three tiles in size. Once the current twelve tile area is loaded, the simulator then waits until the aircraft reaches an invisible boundary that is approximately one degree from the edge of the loaded area in either latitude or longitude.</p>
<div class="callout callout--info">
  <div class="callout__icon"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></div>
  <div class="callout__content">
    <strong>Fun side note:</strong> On first load into the simulation, X-Plane currently does not always position the aircraft into a centrally located one by one DSF tile for reasons that remain a mystery.
  </div>
</div>

<p>Once that boundary has been crossed X-Plane begins loading in the next set of rows (latitude) or columns (longitude), consisting of one degree square tiles. X-Plane usually loads three of the next rows or columns of tiles ahead of the aircraft.</p>
<p>As part of the development of XEarthLayer, we were able to understand this loading method in depth thanks to the visibility the FUSE mount provides into what X-Plane requests from the file system at any given time. A <a href="https://github.com/samsoir/xearthlayer/blob/main/docs/dev/xplane-scenery-loading-whitepaper.md">white paper</a> describing this in detail is published in this project&rsquo;s GitHub repository.</p>
<h2 id="streaming-orthophoto-scenery-challenges">Streaming Orthophoto Scenery Challenges</h2>
<p>The current system X-Plane uses to load scenery in blocks of rows or columns (or both in some edge cases) was not designed with streaming orthophoto scenery in mind. It clearly assumes that the resources it needs are going to be on a local disk, and of moderate size.</p>
<p>Orthophoto scenery, even at modest zoom levels, requires a lot of data. At zoom level 16, X-Plane will load in the order of 12-15 gigabytes of image data in DDS BC1 encoding to populate the world. That is a lot of data to load from disk into VRAM in a short amount of time, while flying. If the streaming orthophoto provider is slow to provide the data, or stalls then X-Plane will start to stutter and can even freeze until the data necessary to paint the scene ahead of the aircraft is available.</p>
<p>This is something I have experienced in the sim when using AutoOrtho and Map Enhancer. XEarthLayer has received a lot of engineering focus on eliminating these stutters and freezes, and even we experience them on occasion when the cache has not been able to warm itself fully in time.</p>
<p>The problem is purely the volumes of data required by orthophotos and the ability to deliver that to the sim quickly. The way X-Plane loads tiles today makes this a significant challenge to avoid stutters at the loaded area boundary. Even with the recent improvements to X-Plane&rsquo;s scenery loading system in 12.4 to introduce multi-threaded scenery loading, stutters can still be experienced on occasion.</p>
<p>The X-Plane team are also aware of this and have already signalled a significant change is coming.</p>
<h2 id="enter-raster-data-tiles">Enter Raster Data Tiles</h2>
<p><img src="/images/news/raster-data-tile.jpg" alt="Raster Data Tiles image that illustrates how Raster tile layers combine together to produce scenery in a flight simulator environment. The image describes how multiple raster data layers combine, with vegetation density data at the lowest level, land/water class data in the middle and elevation data at the top. The second segment illustrates how raster data tiles are able to scale level of detail and exclude oceans."></p>
<blockquote>
<p>We are all raster-farians now - <em>Ben Supnik</em></p>
</blockquote>
<p>In an official X-Plane <a href="https://developer.x-plane.com/2024/03/we-are-all-raster-farians-now/">developer blog post</a> published in 2024, Ben Supnik from Laminar Research clearly stated the new direction the base scenery system in X-Plane is heading in: enter <em>Raster Data Tiles</em>.</p>
<p>A Raster Data tile can be thought of as a two-dimensional array, like an image, that contains information about the area it represents. These can be layered on top of each other, so one layer can represent elevation, another vegetation, land class, water, networks (roads, rail, power), object class and anything else developers can think of. A Raster Data tile can include a layer that is purely a color map, albedo, specular and so on to create complex layers of color information that can be rendered in real time. Those maps can contain ortho-photos if desired.</p>
<p>This is a major departure from the current system, where all of the scenery information other than textures is described in the DSF and supporting files as vectors. Vectors have some advantages, especially when it comes to the amount of data required to describe a shape when compared to raster data.</p>
<p>Vectors have been historically good for flight sim scenery description because the trade-off made was to keep the scenery description as small as possible at the expense of overall visual fidelity. This indexed on keeping the simulator performance good while running on systems with restrictive hardware constraints — smaller disk drives and less memory. For many years this was fine as the rendered world that X-Plane produced was as good as it needed to be and certainly held its own against the competition.</p>
<p>This approach does have challenges when you want to change the level of detail in flight. Any change in the rendered fidelity of vectors in DSF tiles usually result in very noticeable visual artifacts like tears in the scenery. In reality this means the 3D mesh is locked at the level of detail provided by the tile regardless of any optimizations available due to distance from the camera. All level of detail savings are found in scenery objects and textures.</p>
<p>With the progression of PC hardware, fast internet connections and graphics cards with main-computer levels of memory, the landscape has changed significantly in the last decade. Modern PC hardware is capable of storing gigabytes of data in memory to describe scenes. The speed of internet connections has also significantly increased, allowing for more data to be downloaded quickly. The advancement of PC hardware means that the Laminar team can re-evaluate the trade-offs they want to make when rebuilding the scenery system.</p>
<p>If you have used Google Earth or Apple Maps to view the 3D world with photo scenery, you have experienced Raster Data Tiles in action. You will also understand how performant they are even when presented on a mobile phone. The entire Earth can be shown in a single frame, and then seconds later you can be 1000ft above the streets of San Francisco. The transitions are seamless, rendered at 60 frames per second or better. This is what X-Plane is aspiring to deliver in the future state. As Ben so eloquently wrote in his blog post, for the base mesh, X-Plane is aiming to use <em>all raster tiles, all the time</em>.</p>
<h2 id="implications-for-xearthlayer-in-a-raster-data-tile-world">Implications for XEarthLayer in a Raster Data Tile World</h2>
<p>The information shared so far by Ben and the Laminar team on the direction of travel for the future state of X-Plane scenery is fascinating. I can foresee many interesting features and functions that will help scenery content creators paint a far more convincing world in the simulator. At the same time this is a huge amount of work for the team. It will require a complete reimplementation of the foundational scenery system, as well as updating or rewriting the supporting tooling such as <a href="https://developer.x-plane.com/docs/scenery/#World_Editor_WED">WED</a>. It is therefore no surprise the team have been largely quiet on this subject since the 2024 announcement.</p>
<p>With the information shared so far it is impossible to predict the precise nature of the new scenery system, or what hooks or apis will be provided to third parties to further enhance the environment. Therefore everything presented here is pure conjecture and subject to change in the future. Given the information shared so far we can make a few assumptions and predictions about the future state of X-Plane scenery.</p>
<h3 id="assumption-1-orthophoto-scenery-will-be-supported-in-the-future">Assumption 1: Orthophoto Scenery will be supported in the future</h3>
<p>The most important assumption is that orthophoto scenery will be supported in this new system. Ben called it out specifically in his blog post, and we are assuming that the ability to provide photoscenery tiles to this system will remain. That bodes well for the future of XEarthLayer.</p>
<h3 id="assumption-2-scenery-will-be-streamed-into-the-simulator-as-needed">Assumption 2: Scenery will be streamed into the simulator as needed</h3>
<p>The second assumption we will make, which is unconfirmed but we are reasonably confident about, is that scenery will be streamed into the simulator on demand at a given level of detail rather than loaded in blocks of columns and rows as it is today. The specific function of how that works based on the view point is unknown, but we are confident X-Plane will adopt a loading method that more closely aligns with Google Earth and Apple Maps.</p>
<p>This also bodes well for XEarthLayer as the system is already designed to support this dynamic loading model today.</p>
<h3 id="assumption-3-first-party-scenery-api-for-developers">Assumption 3: First-party Scenery API for developers</h3>
<p>A third assumption we are less confident about but will put out there is that there will be some form of API provided by X-Plane to developers to interact with scenery. We can imagine that hooks will be provided so that third-parties can provide Raster Tile data at any layer during runtime.</p>
<p>If this turns out to materialize it will have some impact on XEarthLayer. For the most part it will simplify our system by negating the need for the FUSE interception layer in our architecture. We would <strong>very warmly welcome</strong> this change, should anyone from Laminar Research be reading this! Removing the FUSE layer would also increase performance of the entire system considerably by removing the repetitive transit from user space to kernel space and back again for system IO calls.</p>
<p>Should this not materialize however, we are reasonably confident we will be able to use the existing approach based on what we know today.</p>
<h3 id="assumption-4-better-interoperability-between-third-party-airports-and-global-scenery">Assumption 4: Better interoperability between third party airports and global scenery</h3>
<p>The final assumption that we are very confident about because Ben provided this as an example in his post, is that using Raster Tile data will eliminate a major issue that has plagued orthophoto scenery providers since the beginning — that is, third party airports overriding the orthophoto tiles.</p>
<p>To the simulator pilot, this results in loading into an airport provided by a third party scenery developer and discovering that the area covered by the one by one tile around the airport does not have any photo scenery. Only when you fly away from the airport do you discover the photo scenery again, presented with a very hard and immersion destroying boundary between the two. The current scenery implementation makes this almost impossible to mitigate against, unless the third party designer provides their own complete orthophoto tile.</p>
<p>In the new system presented by Ben it will be relatively simple to blend the elevation data and any other provided layers with the global scenery using many existing methods for combining data of this kind. After all, we have been blending images successfully for many decades with Lanczos, Gaussian and many more mathematical models for resampling and combining image data. They can all be used for this use case as well. This removes the need to try and do complex 3D geometry merging and smoothing operations that seldom work out well.</p>
<p>This will enable all third party scenery and airports to coexist with everything else present in world without them having to ship their own complete orthophoto tiles, providing a seamless and invisible transition when rendered in the simulator environment.</p>
<p>For XEarthLayer this change will probably require zero effort on our part to support, but will be a nice free enhancement for all users of X-Plane regardless of whether they use orthophoto scenery.</p>
<hr>
<p>There is real work ahead for us when Laminar reveal more, but we are not waiting. We are already laying the groundwork for whatever the new scenery system looks like by splitting the monolithic XEarthLayer application into smaller composable modules, building strong contracts between the layers, and exposing third-party API hooks so others can plug additional behaviour into the processing pipeline. Whichever of the assumptions above turn out to be reality, that work will let us move quickly when the picture sharpens. When Laminar share more, we will follow up with concrete details on how XEarthLayer will support the new scenery environment.</p>
<p>It is safe to assume that XEarthLayer and X-Plane will remain compatible long into the next generation of the simulator.</p>
]]></content:encoded></item><item><title>Regional scenery update: EU-2 ships, and what is next</title><link>https://xearthlayer.app/news/regional-scenery-eu2-and-roadmap/</link><pubDate>Wed, 06 May 2026 12:00:00 -0700</pubDate><author>XEarthLayer Team</author><guid>https://xearthlayer.app/news/regional-scenery-eu2-and-roadmap/</guid><description>EU-2 reaches into eastern Europe and European Russia, the rest of Asia and Antarctica are in production, and a roadmap toward smaller packages, new zoom-level tiers, and SimHeaven X-World Pro support.</description><content:encoded><![CDATA[<p>The <strong>EU-2</strong> package is live. It picks up where EU left off and extends coverage across Greece, Bulgaria, Romania, Moldova, Ukraine, Belarus, the Baltic states, Finland, Sweden, Norway, Turkey, Cyprus, Georgia, Armenia, Azerbaijan, and European Russia out to the Ural Mountains. Between EU and EU-2, the European side of the map is now contiguous from the Atlantic to the Urals.</p>
<h2 id="what-is-in-production-now">What is in production now</h2>
<p>With Europe filled in, focus shifts to the rest of Asia. That covers a long list of countries currently in production: Russia (the asian portion), China, Mongolia, the Central Asian &ldquo;-stans&rdquo;, Iran, Iraq, Kuwait, the UAE, Qatar, Saudi Arabia, Jordan, Syria, Israel, Palestine and the West Bank, and India, among others. Once Asia is wrapped, <strong>Antarctica</strong> comes in as the seventh and final continent, closing the global coverage loop.</p>
<p>Russia is, predictably, the hardest piece of this. It is just enormous, and even chopping it into producible chunks is a non-trivial planning exercise on its own, the splits have to make sense as downloads, render reasonably in X-Plane, and not leave ugly seams across regions that real flights routinely cross.</p>
<p>That production work also fed back upstream. While chasing stability problems with very large area generation, we landed <a href="https://github.com/shred86/Ortho4XP/pull/90">a fix in Ortho4XP</a> that improves reliability when producing the kind of huge regions Russia forces on us. It is a small contribution, but it makes the rest of the Asia work materially less painful, and anyone else producing scenery at that scale benefits too.</p>
<h2 id="smaller-packages">Smaller packages</h2>
<p>One of the biggest pieces of feedback from EU and the larger regional packages has been disk pressure. The current shape of things asks users to keep up to ~250 GB free just to install. That is a non-starter for a lot of laptop pilots and even some desktop setups, and it discourages people from trying packages outside their primary flying area.</p>
<p>The plan is to cap individual downloadable packages at <strong>~20 GB</strong> going forward. North America, Asia, Europe, Africa, and Antarctica will all be reshaped into smaller collections under that cap. Users should land closer to <strong>~50 GB free</strong> required to install, picking up only the slices they actually fly. The existing large packages will be reworked to match.</p>
<h2 id="7z-compression">7z compression</h2>
<p>Future packages will ship with 7z (LZMA2) compression instead of the current format. The realistic savings depend on what is inside any given package. Already-compressed imagery does not give up much regardless of algorithm, but the metadata and uncompressed payloads should see meaningful gains. The working estimate is roughly another <strong>third off</strong> typical package size, which we will firm up once the first 7z-built packages go through the pipeline.</p>
<h2 id="a-clearer-zoom-level-story">A clearer zoom-level story</h2>
<p>Today, most packages mix ZL16 and ZL18. Broad ZL16 coverage with ZL18 patches around airports. Anyone who has flown a few hours over a covered region knows the visible side effect: a striping seam where the two zoom levels meet, usually visible on approach into a covered field. That artifact is not a bug in any single package; it is a consequence of mixing two zoom levels in one footprint. The striping deserves its own focused write-up later, with screenshots and the geometry behind it.</p>
<p>The fix is to commit to a single zoom level per package and build out three tiers:</p>
<ul>
<li><strong>ZL14 — SD.</strong> Aimed at pilots running 4–8 GB VRAM GPUs and anyone on a metered or slower connection. Lower bandwidth, lower VRAM pressure, still a meaningful step up from default scenery.</li>
<li><strong>ZL16 — HD.</strong> The mainline tier. Comfortable on anything with 12 GB of VRAM or more. This becomes the default global option.</li>
<li><strong>ZL18 — UHD.</strong> Future-proofing for high-end setups, likely a later-in-2026 effort once the rest of the optimisations are in place. Expect very high data usage; the working guidance is a 5 Gbps+ connection and a 32 GB VRAM GPU.</li>
</ul>
<p>Single-zoom packages also remove the striping artifact as a side effect, because a package can no longer disagree with itself about how detailed a given area should be.</p>
<h2 id="simheaven-x-world-pro">SimHeaven X-World Pro</h2>
<p>Finally, <a href="https://simheaven.com/x-world-pro/">SimHeaven X-World Pro</a> is on the way, and XEarthLayer is preparing support for it. Concretely, that means a configuration option to suppress XEarthLayer&rsquo;s own overlays in scenarios where X-World Pro is providing them — cities, landmarks, national parks, monuments — so the two products complement rather than fight each other.</p>
<p>That is the day-one shape of the integration. Once X-World Pro actually ships and we have hands on it, the goal is tighter coordination beyond just &ldquo;stay out of each other&rsquo;s way&rdquo;, but it is hard to predict what that looks like in detail until it is in front of us. The headline is that XEarthLayer and X-World Pro are designed to be <strong>complementary</strong> upgrades to X-Plane, not competing ones, and the configuration plumbing will be there from the moment X-World Pro is available.</p>
<p>More to come as each of these lands.</p>
]]></content:encoded></item><item><title>XEarthLayer 0.4.5 released</title><link>https://xearthlayer.app/news/xearthlayer-0-4-5-released/</link><pubDate>Tue, 05 May 2026 12:00:00 -0700</pubDate><author>XEarthLayer Team</author><guid>https://xearthlayer.app/news/xearthlayer-0-4-5-released/</guid><description>A small patch release that stops failed chunk downloads from poisoning the tile cache with magenta-filled DDS tiles.</description><content:encoded><![CDATA[<p>XEarthLayer 0.4.5 is now available. This is a small patch release that fixes a caching bug (<a href="https://github.com/samsoir/xearthlayer/issues/180">#180</a>) where a network failure during tile generation could produce magenta-filled DDS tiles that were structurally valid and got written into both the memory and DDS disk caches, surviving even an X-Plane &ldquo;Reload Scenery&rdquo;. On reconnect, re-requests short-circuited to the poisoned entry instead of re-fetching. Cache writes are now gated on every chunk completing successfully: incomplete tiles are still served to X-Plane so the sim does not stall during an outage, but they are no longer persisted. The chunk-disk tier was already correct, so it now acts as a natural retry-resume buffer, with only the previously failed chunks being re-fetched on re-request. If you saw magenta tiles persist across an outage on 0.4.4 or earlier, run <code>xearthlayer cache clear</code> to purge any poisoned tiles. Grab the build from the <a href="/#download">downloads page</a> or the <a href="https://github.com/samsoir/xearthlayer/releases/tag/v0.4.5">GitHub release</a>.</p>
]]></content:encoded></item><item><title>XEarthLayer 0.4.4 released</title><link>https://xearthlayer.app/news/xearthlayer-0-4-4-released/</link><pubDate>Thu, 16 Apr 2026 12:00:00 -0700</pubDate><author>XEarthLayer Team</author><guid>https://xearthlayer.app/news/xearthlayer-0-4-4-released/</guid><description>A rewrite of prefetch, clearer cache metrics in the TUI, and a long-haul flight fix that took a nine-hour flight log to chase down.</description><content:encoded><![CDATA[<p>XEarthLayer 0.4.4 is now available. This release started life follwing a bug report regarding prefetch behaving strangely on very long flights, and ended up reshaping a chunk of the plugin&rsquo;s internals. The headline changes are a rewritten prefetch engine, terminal UI improvements to cache usage reporting, and a set of fixes that only surface after you have been airborne for a few hours.</p>
<p>Grab the latest build from the <a href="/#download">downloads page</a> or straight from the <a href="https://github.com/samsoir/xearthlayer/releases/tag/v0.4.4">GitHub release</a>.</p>
<h2 id="the-long-haul-story">The long-haul story</h2>
<p>The work that drove this release came out of a flight log from a long-haul out of Vienna. Somewhere past the second hour, prefetched regions started slipping into a state the system could never recover from, marked as in-progress forever, never flipping to prefetched, and serving stale data back to X-Plane.</p>
<p>Digging in turned up three interacting defects at once:</p>
<ul>
<li>Regions were being marked <code>InProgress</code> before the tile submission even came back. Anything that failed silently was invisible to the scheduler.</li>
<li>The <code>cached_tiles</code> shadow set, the in-memory guess of what was on disk, was drifting badly, tracking only about 6% of the tiles that were actually cached.</li>
<li>DDS disk cache look-ups were being performed with chunk coordinates instead of tile coordinates. The lookup returned <code>false</code> every single time, silently.</li>
</ul>
<p>On a long flight they compounded into permanent dead regions. The fix (<a href="https://github.com/samsoir/xearthlayer/issues/172">#172</a>) defers the in-progress mark until the submission is confirmed, replaces the shadow set with authoritative DDS disk cache queries, and corrects the coordinate mismatch.</p>
<h2 id="prefetch-unified">Prefetch, unified</h2>
<p>Tracking down the long-haul bug meant pulling the prefetch code apart, once in there it was clear the ground and cruise paths had drifted into two different shapes of the same problem, providing two code paths to solve the same problem.</p>
<p>The old ring-based <code>GroundStrategy</code> is now gone. In its place is a symmetric <code>PrefetchBox</code> that both on the ground and in flight phases share. Ground prefetch uses a fixed extent with symmetric bias (0.5); cruise prefetch uses a speed-proportional extent with a heading bias (0.8).</p>
<p>The debug map now reads from the same source of truth. The coordinator computes prefetch bounds once per cycle and publishes a <code>BoxBoundsSnapshot</code>; the map renders that snapshot verbatim. No re-computation, no drift between what you see on the map and what is actually being requested.</p>
<p>Region colors in the debug view are also cleaner: yellow (<code>InProgress</code>) until every tile in a region is verified on disk, green (<code>Prefetched</code>) once it is, and a new orange (<code>Mixed</code>) state when FUSE has started serving tiles from a prefetched region.</p>
<h2 id="clearer-cache-metrics-in-the-terminal-ui">Clearer cache metrics in the Terminal UI</h2>
<p>The combined &ldquo;Disk&rdquo; line in the cache widget was hiding the thing you actually care about: how often X-Plane&rsquo;s requests were being served from local disk. The TUI now splits that into three tiers; Memory, DDS Disk, and Chunks; each with its own progress bar and hit/miss counts (<a href="https://github.com/samsoir/xearthlayer/issues/166">#166</a>). Flight testing consistently shows DDS disk hit rates over 93%, which had been lost in the noise of chunk-level traffic.</p>
<p>While in there, we also fixed how the Memory and DDS Disk tiers count hits (<a href="https://github.com/samsoir/xearthlayer/issues/171">#171</a>). They used to aggregate every cache read, including prefetch and prewarm. On a long flight with a full memory cache, hit rate could read around 47% because prefetch misses were overly influencing the denominator. The fix tags events by <code>RequestOrigin</code> and renders FUSE-only rates for the tiers where it matters. The Chunks tier still uses aggregate because there is only one code path reading chunks anyway.</p>
<p>Another small interface fix; the queue column in the TUI now shows oldest jobs at the top and new ones at the bottom, matching how you&rsquo;d naturally read a processing pipeline (<a href="https://github.com/samsoir/xearthlayer/issues/165">#165</a>).</p>
<h2 id="a-gentler-default-for-executor-concurrency">A gentler default for executor concurrency</h2>
<p><code>executor.max_concurrent_jobs</code> now defaults to <code>num_cpus / 2</code>, down from <code>ceil(num_cpus × 0.75)</code>. This halves the CPU pressure prefetch puts on X-Plane during heavy activity. Flight testing settled on this as the sweet spot between prefetch throughput and keeping your frame rate intact. If you have been running a custom value, this change will not override it.</p>
<h2 id="upgrading">Upgrading</h2>
<p>Binaries are on the <a href="/#download">downloads page</a>. Configuration files remain compatible; there is nothing you need to change on your end. If you hit anything unexpected, the <a href="https://discord.gg/RPEWQZdxm2">Discord</a> and <a href="https://github.com/samsoir/xearthlayer/issues">GitHub issues</a> are the fastest way to reach us.</p>
<p>Thanks to everyone who flew the pre-release builds and shared logs.</p>
]]></content:encoded></item><item><title>Upstream patch to Rust fuse3 crate</title><link>https://xearthlayer.app/news/upstreaming-a-fuse3-fix/</link><pubDate>Tue, 07 Apr 2026 12:00:00 -0700</pubDate><author>XEarthLayer Team</author><guid>https://xearthlayer.app/news/upstreaming-a-fuse3-fix/</guid><description>How a kernel default crushed XEarthLayer's throughput, what was patched, and why it was pushed upstream.</description><content:encoded><![CDATA[<p>A few weeks before 0.4.4 shipped, we pushed upstream a patch back into <a href="https://github.com/Sherlock-Holo/fuse3"><code>fuse3</code></a>, the Rust crate that XEarthLayer uses to talk to the Linux kernel&rsquo;s FUSE layer. The patch adds two small controls that, for workloads like ours, make a large difference to overall performance. The change will be part of a future fuse3 crate release, and XEarthLayer 0.4.4 is the first release built against the upstream version rather than our own fork.</p>
<p>The change itself is tiny. The story is more interesting than the diff.</p>
<h2 id="a-small-kernel-default-with-large-consequences">A small kernel default with large consequences</h2>
<p>Linux FUSE has two settings that govern how many background read requests the kernel will keep in flight for a given file system at once:</p>
<ul>
<li><code>max_background</code>; the ceiling for concurrent background requests. The kernel default is <strong>12</strong>.</li>
<li><code>congestion_threshold</code>; the point at which the kernel starts reporting the file system as &ldquo;congested&rdquo; and stops sending new requests until the queue drains. The kernel default is <strong>9</strong>.</li>
</ul>
<p>For the kinds of file systems FUSE is most often used for, those defaults are generous. A typical FUSE file system might be serving a handful of file metadata requests, or backing a cloud drive that sees <em>bursty</em> but modest I/O. Twelve simultaneous reads is plenty.</p>
<p>XEarthLayer is not a typical FUSE filesystem. When you fly over a scenery boundary, X-Plane 12 asks for multiple DDS texture tiles all at once, fifty or more is normal in X-Plane 12.4, sometimes higher. Every one of those requests arrives through our FUSE mount. With the kernel capped at twelve concurrent in-flight requests, the remaining forty get queued. The kernel flags the file system as congested, everything stalls until the queue drains. You see it as a frame drop or a sim freeze, exactly the kind of thing scenery streaming is supposed to prevent.</p>
<p>The patch we provided ensures that we can unlock the full potential of the FUSE I/O throughput to handle the huge data requests X-Plane 12 can make. This will also support other FUSE use-cases that require support for a high volume of concurrent requests.</p>
<h2 id="what-the-patch-actually-does">What the patch actually does</h2>
<p><code>fuse3</code> exposes a <code>ReplyInit</code> struct that a file system sends back to the kernel during initialization. Before this patch, it only had one control, <code>max_write</code>, and the two background-related fields were hard coded to the kernel defaults.</p>
<p>The patch adds two optional fields:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-rust" data-lang="rust"><span style="display:flex;"><span><span style="color:#66d9ef">pub</span> max_background: Option<span style="color:#f92672">&lt;</span><span style="color:#66d9ef">u16</span><span style="color:#f92672">&gt;</span>,
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">pub</span> congestion_threshold: Option<span style="color:#f92672">&lt;</span><span style="color:#66d9ef">u16</span><span style="color:#f92672">&gt;</span>,
</span></span></code></pre></div><p>Leave them <code>None</code> and nothing changes, the kernel defaults still apply. Set them, and the kernel uses your values instead. XEarthLayer now runs with <code>max_background = 256</code> and <code>congestion_threshold = 192</code>, which is enough headroom for the worst scene transitions we have been able to produce.</p>
<p>This change also marks <code>ReplyInit</code> as <code>#[non_exhaustive]</code> and added a <code>ReplyInit::new(max_write)</code> constructor. That is a small, one-time migration for existing users, struct literals have to become constructor calls, but it means future additions to <code>ReplyInit</code> will not be semver-breaking. For a crate that sits underneath everyone&rsquo;s file system, that future-proofing felt worth the one-line migration.</p>
<h2 id="what-this-means-for-you">What this means for you</h2>
<p>If you are running XEarthLayer, nothing changes, you already had these limits applied, because our fork was doing this since v0.3.1. The 0.4.4 release is the first version that gets the same behavior from a dependency you could install yourself rather than one we maintained out-of-tree.</p>
<p>If you are building something else with <code>fuse3</code> and your filesystem serves a lot of concurrent reads, it&rsquo;s worth a look at <code>ReplyInit::max_background</code> and <code>ReplyInit::congestion_threshold</code>. The defaults are good for ordinary workloads and actively harmful for throughput-heavy ones. You will know immediately whether it matters to you.</p>
<p>Thanks to <a href="https://github.com/Sherlock-Holo">Sherlock-Holo</a> for maintaining <code>fuse3</code> and for merging the patch quickly. One of the quiet privileges of building on open source is that when you hit a sharp edge, the fix can go back into the thing everyone uses; and the people who run into the same problem next year will never know there was a sharp edge there at all. Another win for Open Source.</p>
]]></content:encoded></item></channel></rss>