E-Tech


Restores vanilla recipes while keeping everything AAI Industry adds (Krastorio 2 aware). Plus a box of optional features, nearly all on by default: a fourth Factorissimo factory tier, the fix that lets robots charge inside factory buildings at all, a factory outlet/inlet/sensor that bridges factory interiors with your logistic network, teleporter pads, resource map markers, void chests, and a dozen more.

Tweaks
19 hours ago
2.1
33
Transportation Logistics Environment Logistic network Manufacturing Storage

Changelog

Version: 0.22.1
Date: 2026-08-06
  Bugfixes:
    - "Allow all modules in every beacon" no longer breaks beacon-interface.
      That mod does not use allowed_module_categories as a restriction, it uses
      it as an identity marker - its control.lua looks for beacons whose
      whitelist is exactly its own category and registers build handlers for
      them. Clearing the field left it with zero matches and it asserted on
      load ("beacon-interface 1.1.2 errored when running a required file",
      control.lua:63). Beacons carrying that category are now left untouched;
      they are hidden script-driven effect emitters that only ever hold
      beacon-interface's own modules, so there was nothing to open up. Also
      covers mods that deepcopy one of them, such as quality-condenser.
Version: 0.22.0
Date: 2026-08-02
  Features:
    - Teleport to your body after you die. Both teleport features now offer a
      free one-use jump back to where you died: a "Body" entry with a live
      camera view at the top of the teleporter list (next to the return slots),
      and a "Body" button in the teleport-to-player shortcut's picker. New map
      settings "Teleport: teleport to your body after death" (on) and
      "Teleport: body teleport time limit (minutes)" (15, 0 = no limit) - the
      time limit is what makes it a "you just died" offer rather than a
      permanent way home.
    - Factory terminal (Factorissimo): a toolbar shortcut that lists every
      factory outlet, inlet, fluid device and sensor on the surface you are
      standing on - position and what each moved in the last minute - and
      opens any of them from where you stand. Gated twice: the new Factory
      terminal technology, and a Factory link armor module that has to be in
      your armor with charge in it. The link holds 2 MJ off your suit's own
      generators; opening costs 100 kJ, holding the window open costs 20 kW,
      and a flat link closes it. Startup toggle "Factory terminal
      (Factorissimo)", on by default. Its art is the base game's battery
      equipment, tinted - placeholder until real art exists.
    - Teleporters: teleporting to a TEAMMATE now asks them first. They answer
      "Yes, once", "Yes, always", "No, once" or "No, always"; the two standing
      answers are remembered per person and can be taken back at any time in
      the new settings window - the gear button in either teleport window -
      which also decides what happens to requests from anyone you have not
      answered for (ask, always allow, always refuse). No answer within 30
      seconds counts as a refusal, so nobody is left waiting on a window
      someone alt-tabbed away from. New map setting "Teleporter: ask before
      someone teleports to you", on by default; turn it off for the old
      land-on-each-other-unannounced behavior. Single-player is unaffected.
    - Teleporters: starred pads can now be ORDERED. Starring appends to the
      end of your starred pads and Shift + left-click moves one to the front,
      so the pad you actually travel to most sits first instead of wherever
      its name happened to put it. The list numbers the stars (★1, ★2, ...)
      so it says which favorite each one is.
    - Teleporters: EXPRESS PADS. Stand on a pad and CONTROL + click another
      one in the list, or - from the wireless remote, where there is no pad
      underfoot - CONTROL + click the pad that should send you and then the
      one it should send you to. Either way, stepping onto the first pad from
      then on sends you straight to the second - no window, normal energy
      cost. Every linked pad says where it sends you in green under its name,
      and a pad waiting for its destination says so in yellow. The pad you
      arrive on stays inert until you step off it, so two pads pointing at
      each other are a doorway rather than an infinite bounce, and the
      wireless remote still opens the full list from where you stand. Map
      setting "Teleporter: express pads", on by default; turning it off
      ignores every link without clearing them.
    - Teleporters: HOME PAD AND EMERGENCY RECALL. ALT + click a pad in the
      list to mark it home (it gets a house marker), then ALT + R teleports
      you there from anywhere. It costs a multiple of the normal jump (map
      setting, 3x by default) and has its own cooldown (5 minutes by
      default), because it is the "get me out of here" button and not the
      cheap way home. Optionally, dying now puts you back at your home pad
      instead of the force's spawn point - map setting, off by default.
    - Teleporters: PERSONAL TELEPORTER armor module, unlocked by the same
      Teleporter technology as the pads. It holds 50 MJ off your suit's own
      generators and pays up to half of every jump's energy bill out of that
      buffer, so the destination pad is drained less. It never enables a jump
      you could not otherwise make; it makes the ones you do make cheaper for
      the network. Art is the base game's battery equipment, tinted -
      placeholder until real art exists.
    - Teleporters: pads now show how much traffic they see. A pad's tooltip
      says how many times it has been travelled to, by whom last, and how
      long ago - a list of thirty pads otherwise says nothing about which
      ones your base actually uses.
    - Teleporters: a pad still inside its five-second trigger timeout now says
      "cooling down" in the list. It can still be teleported TO; what it will
      not do is open its own window when you step on it, and that silence
      looked like a broken pad.
    - Teleporters: the Return entry's tooltip now says how long it has left
      before it expires.
    - Teleporters: how many pads count as "recently used" is now a map
      setting (default 8, up to 50). It was a hardcoded 8, which on a base
      with a dozen regularly used pads meant the one you wanted had already
      fallen off the list.
    - Teleporters: SHIFT + R jumps straight to the pad you used last, with no
      window at all. Same cost and same gates as a wireless-remote jump, and
      since the pad you leave becomes the most recent one, the key alternates
      between two pads - which is what going back and forth actually is.
    - Teleporters: ENTER in the destination list's search box teleports to the
      first pad still showing. Type three letters, press Enter, gone.
    - Teleporters: pad QUALITY now means something. Every level adds 50% to
      the pad's energy buffer (a legendary pad holds 700 MJ instead of 200 and
      rides out a brownout that would strand a normal one) and takes 10% off
      the cost of jumping to it, to a floor of half price. Does nothing
      without the Quality mod.
    - Teleporters: a tips-and-tricks entry, because starring, renaming,
      sorting, the remote and the jump-back key were all invisible unless you
      read the mod page.
    - Teleporters: "Starred only" tick box above the pad list, for bases where
      the full list runs to dozens of pads. Starred pads plus the Return and
      Body entries, nothing else. Remembered per player.
  Bugfixes:
    - FIXED A CRASH opening the teleporter list: "attempt to index field
      'express_pending' (a nil value)". Every table this version added to the
      teleporter module was created by the migration that runs on a mod-set
      change - and that migration does NOT run when a save is reloaded with a
      rebuild carrying the same version number, which is exactly what a save
      played during 0.22.0's development hits. The tables are now ensured at
      the start of every event instead of being trusted to exist, and the
      one-line-per-table backfill is a list, so adding a table can no longer
      leave the migration behind. Starred pads that predate this version are
      converted to ranked favorites when they are next read, for the same
      reason.
    - Teleporters: the destination window is now GROUPED BY SURFACE. Grouping
      is by kind of surface rather than by name: each planet gets its own
      section, every space platform shares one "Platforms" section, and
      Factorissimo interiors share "Factory floors" - so four ships are one
      section instead of four one-row sections, and launching a fifth changes
      nothing. The surface underfoot comes first, the rest follow in name
      order, and each header carries the surface icon, its name and a count.
      Sections collapse, remembered per player. A "Group" dropdown next to the
      sort order switches the whole thing off for a flat list; grouped is the
      default.
    - Teleporters: with a section header naming the surface, the pads under it
      stop repeating it. A pad on your own surface shows its distance, one on
      another world shows when you last used it, and pads in the shared
      Platforms and Factory floors sections keep their own surface name, since
      a shared header cannot carry it. Turning grouping off puts the surface
      back on every tile.
    - Teleporters: the star rank, home flag and express arrow moved off the
      name and onto their own row, so a pad called "Rocket Launch Site" is no
      longer shown as "Rocket Launch Site...". Tiles with nothing to mark
      don't get the row.
    - Teleporters: Control + right-click sends a starred pad to the BACK of
      your starred pads, the counterpart to Shift + left-click sending one to
      the front. Factorio has no GUI drag events of any kind, so ordering is
      done with gestures rather than by dragging tiles around.
    - Teleporters: every entry in the destination window now leads its grey
      line with the SURFACE'S ICON - the planet's own starmap icon, the
      space-platform foundation for a ship, a factory building for a
      Factorissimo interior floor. Pads on this surface show the icon in front
      of the distance, pads elsewhere in front of the surface name, and the
      Return, Body and player previews carry it too. A name on its own
      ("Return 2", "Teleporter 1259086") never said which world it went to.
    - Teleporters: a button in the destination window's title bar hides the
      pad click-hint tooltips. Six lines of click actions are what you want
      once and clutter afterwards; the "not enough energy" explanation still
      shows on pads that are greyed out. Remembered per player.
    - Teleporters: the recently-used clock is gone from the pad list. It was
      drawn with "[img=quantity-time]", a sprite that has not existed since
      2.0 - and an invalid sprite path does not error, it silently draws a
      placeholder glyph, so a small mystery circle had been sitting in the pad
      list looking deliberate. Rather than fix the icon, the marker is
      retired: the list already sorts by recency, so a clock on half the tiles
      said nothing the order did not. The home-pad flag and the express arrow
      that remain are checked against the sprites actually loaded, and fall
      back to plain text if one ever disappears.
    - Teleporters: the Return and Body previews now actually show their
      surface line. Buttons clip their children, so the line was being laid
      out below the button's own edge and never drawn - which looked exactly
      like the feature not working.
    - Factory terminal: opening a device through it no longer puts you in
      remote view. Remote view replaces your inventory panel with the
      ghost-cursor palette, so the window that opened next to a factory's
      contents was not the inventory you wanted to drag things into - which is
      most of the point of opening a chest. Your character's REACH is extended
      instead, for exactly as long as the device window is open: you stay in
      your body, your own inventory is right there, and normal click,
      shift-click and drag transfers work. Only reach is touched, not build or
      resource reach, and whatever bonus you already had is put back exactly.
    - Teleporters: the Return and Body previews, and the players row, now name
      the surface they are on, with a planet, platform or factory icon. Three
      Return entries were three identical grey squares.
    - The Factory terminal technology, the Factory link and the Personal
      teleporter had no names in locale, so they showed up in-game as
      Unknown key: "technology-name.etech-factory-terminal" and the like.
      Nothing in the Lua source references a prototype's own name key - the
      engine resolves those - so the locale linter could not see the gap; it
      now reads a data-raw dump and checks every E-Tech prototype has one.
    - The teleporter pad tooltip never mentioned the Alt-click and
      Control-click actions added this version, so marking a home pad or
      linking express pads was invisible unless you read the changelog.
    - Factory terminal: taking a stack out of a factory did nothing when the
      device had been opened through the terminal. The terminal puts you in
      remote view, a remote controller is not a character, and the code asked
      the CONTROLLER for its inventory - which is nil there, and the failure
      was silent. It now asks the character, which is what should receive the
      items anyway, and says so when there is no inventory to fill.
    - Teleporters: the pad you were standing on when you opened the WIRELESS
      REMOTE is now marked recently used, so the trip back is at the top of
      the list. Only the pad a window was opened FROM by walking onto it was
      recorded before - a remote jump has no linked source pad, so the pad you
      left never counted as recent and the way home sorted like a pad you had
      never used. Applies to remote, return, body and jump-to-player trips
      alike: leave a pad by any means and it counts as recent.
  Changes:
    - The teleport-to-player shortcut now always opens its picker while you
      have a body to go back to, instead of jumping straight to the only other
      player online - otherwise the body entry would be unreachable. With
      nobody else online it teleports straight to your body.
  Bugfixes:
    - FIXED A CRASH THAT SHIPPED IN 0.21.0: E-Tech failed to load at all, with
      "attempt to index field 'tool'", for anyone running it alongside
      Factorissimo without some other mod that happens to define a tool
      prototype. Factorio 2.1 made science packs plain items, so data.raw.tool
      no longer exists in an otherwise-unmodded game - and three places indexed
      it directly. A developer running a full modpack never sees this, because
      something in the pack always provides one. Turning agricultural science
      spoilage off could hit the same crash. Found by the new mod-combination
      matrix (see below) on its first run.
    - Factory outlet: a second outlet can now be placed inside a different
      factory on the same Factorissimo interior surface. Interior surfaces are
      shared 8-wide grids of unrelated factories and an outlet only ever
      reaches its own cell, but the one-per-surface check searched the whole
      surface - so whoever placed an outlet first locked out every other
      factory that happened to land on the same grid.
    - Filtered void chest no longer destroys its contents when mined. It
      inherited erase-on-mine from the plain void chest, which deletes
      everything on purpose - but the filtered chest exists precisely so the
      items you did not pick sit there safely, and mining it silently ate them.
    - The in-game map settings editor no longer crashes in mod packs that
      remove the enemy force. Applying changes was already guarded; the two
      places that READ the evolution factor to fill the GUI were not, and those
      run on load, on any mod-set change, and on every surface change - so the
      crash happened before a player could touch anything.
    - Applying map settings no longer forces the editor window open on every
      player. Everyone's values still refresh, since the settings are global,
      but a window that was closed stays closed.
    - Changing the resource-marker minimum patch size now takes effect at once.
      The setting is applied when a patch is re-tagged, so raising it left small
      markers on the map and lowering it never revealed the hidden ones until
      that patch happened to be re-scanned - which for a fully charted, fully
      mined patch is never.
    - Teleporters: changing a teleporter map setting now refreshes an open
      destination list. Costs, cross-surface rules and the players section are
      read while the list is built, so an open window kept showing old numbers.
    - Teleporters: the search hotkey no longer registers a second CONTROL + F
      binding alongside the game's own focus-search control.
    - Teleporters: renaming no longer errors for a force that has never placed
      a pad, and refreshing open windows no longer errors when a player has
      been removed from the save.
    - Void pipe now actually gets its intended 2500-unit buffer. It was still
      setting the Factorio 1.1 height/base_area pair, which 2.0 replaced with
      volume and silently ignores.
    - Void pipe throughput statistics no longer accumulate for pipes that have
      been removed; they were only cleared once the last void pipe in the world
      went away.
    - Beacons, cross-pastable furnaces and labs, and crashed-ship parts each get
      their own copy of the tables E-Tech assigns them instead of sharing one
      table across every prototype, so a later mod appending to one no longer
      edits them all.
    - Jetpack fuel HUD no longer divides by zero on a modded fuel with no fuel
      value.
    - Map settings editor: the asteroid and spoiling rate fields are populated
      when the window is built rather than relying on the refresh that follows.
    - The Factory Mk4's "Floor tiles per connection" factoriopedia row read
      "Unknown key". It asked for a bare locale key while the string was
      defined under [description], like every other row beside it.
    - Colorful biochamber now checks that Space Age's biochamber sprite layers
      are still where it expects before remapping them. It addressed four of
      them by hardcoded index with no guard, so a reordering in any Space Age
      update would have mis-tinted the machine or thrown outright. It now skips
      the recolour and says so in the log instead.
    - Factory Mk4 says so in the log when Factorissimo's interior power pole is
      not where it expects. That field is private to Factorissimo, and if it is
      ever renamed the northern half of every Mk4 loses power with nothing to
      trace it by.
    - Biters walking over a teleporter pad no longer disable it. The pad is a
      land mine underneath, and its trigger fired for anything that stepped on
      it - starting the pad's five second cooldown, with nothing in the UI to
      explain why it had gone dead. It now triggers only for its own force,
      which is what the destination list always assumed anyway.
  Compatibility:
    - E-Tech's own recipes and technologies now survive overhaul mods that
      retire the items they are built from. The factory hub, the teleporter pads
      and the void chest hardcoded processing units, batteries, constant
      combinators and stone furnaces, and hardcoded their technology
      prerequisites - so a pack that removed any of them turned into a hard load
      error with E-Tech's name on it. A new late pass substitutes down a
      documented chain instead (processing unit to advanced circuit to
      electronic circuit) and logs every substitution. Factory Mk4 already did
      this for itself; the other three now do too.
    - The map settings editor's four GUI styles are prefixed etech-. They used
      generic names (pusher, deep_frame, ...) in the shared style table, guarded
      with "define it only if nobody else did" - which meant that if another mod
      defined its own `pusher` first, this GUI silently rendered with theirs.
  Optimizations:
    - Factory devices: building or mining a logistic chest anywhere in the world
      used to invalidate every device's interior-chest cache, and any storage
      tank anywhere invalidated every device's factory list. On a base with bots
      continuously building that meant the caches were rebuilt every pass - the
      exact cost they exist to avoid. Both now trigger only for chests actually
      inside a factory and for real factory buildings.
    - Factory outlet: chests holding nothing the outlet currently needs are
      skipped after a single inventory read instead of walking every slot.
    - The factory device GUI-refresh phase no longer rebuilds the device lists
      it never uses.
    - Resource marker rebuilds scan fewer chunks per tick. A rebuild takes
      longer in the background and no longer sags UPS while it runs.
    - Jetpack fuel HUD polls every 15 ticks instead of every 5. It cost a remote
      call per pass even with nobody flying, plus another call per player and an
      item count per fuel type when someone was.
    - Teleporter destination list reads the four energy-cost settings once
      instead of once per pad.
    - Factory outlet: the requester-demand scan is split out and cached for two
      passes. It walks every requester point in the outlet's logistic network,
      so its cost scaled with the size of your base rather than with anything
      the outlet was doing - thousands of API calls on a single tick on a large
      network, even for an outlet with one reachable chest. Repeated lookups of
      the same item on the same chest are now asked once. Construction-ghost
      demand is NOT cached and still updates every pass, so blueprints are
      served as immediately as before.
    - Factory outlet: the give-back path snapshots its candidate chests once per
      pass instead of re-querying every chest four times for every item type
      being returned.
    - Resource markers: mining an ore tile out no longer rescans its whole chunk
      on the spot, once per force. The cell is queued instead and repaired in
      the background, so an outpost being actively mined stops driving a burst
      of chunk scans. Marker totals lag by a few seconds.
    - Factory devices: a Factorissimo building being placed or mined no longer
      makes every device rebuild its factory list and its interior-chest cache
      in the same tick. Profiling a live base showed that stampede costing
      66-76 ms per maintenance pass, once every two seconds, for as long as the
      player kept building. Rebuilds are now paced, and the pull pass tolerates
      a list that is a pass or two old - safe, because every entry is
      re-validated at the moment it is used.
    - Factory outlet: the module-request scan is cut into six strips, one per
      maintenance pass, instead of one sweep of the whole construction area.
      That sweep profiled at 32-36 ms landing on a single tick roughly once a
      minute - the most predictable stutter the mod produced. Same total work,
      spread out; readers still only ever see a complete picture.
    - Factory outlet: the list of roboports the outlet can reach is cached
      alongside the requester scan. Rebuilding it per pass turned out to be the
      bulk of the ghost-demand cost, not the matching that follows it.
    - Factory outlet panel: the item grid is only rebuilt when something it
      shows actually changed. Tearing it down and repopulating it every two
      seconds reached 13 ms with a large factory set, to redraw the same thing.
    - Factory outlets no longer all run on the same tick. Each still pulls once
      every two seconds; they are simply scheduled individually, spread across
      the cycle from their own unit number. Two outlets landing together turned
      a 9 ms pass into a 28 ms one - and because their caches had been created
      at the same moment, both also did their expensive uncached scan on that
      same tick. Existing saves pick the spread up automatically.
    - The roboport-geometry cache and the requester-demand cache no longer share
      a lifetime. Sharing one meant they were always written in the same pass
      and so always expired in the same pass, stacking their cost instead of
      interleaving it. Roboports change far more rarely than logistic requests,
      so that cache is now much longer-lived, and deliberately not a whole
      multiple of the other.
  Changes:
    - Dropped the 0.17.0 legacy-field cleanup for factory devices, per its own
      two-version policy. Those fields are never read, so saves still carrying
      them are unaffected.
    - The map settings editor's toolbar shortcut name and description moved into
      the locale file. They were the only user-facing strings in the mod that
      could not be translated.
    - The void pipe list moved from storage.pipes to storage.etech_void_pipes,
      the naming every other module already used. Rebuilt automatically; the old
      key is cleaned up.
    - teleporters/script_util.lua no longer adds its helpers to the base game's
      shared util table, and its dead functions are gone.
    - Tooling: a locale linter (missing setting strings, references to keys that
      do not exist, dead keys), a changelog-to-info.json version check, and
      tools/verify-matrix.ps1, which loads E-Tech under vanilla, Space Age, AAI,
      AAI+Space Age, AAI+K2 and Factorissimo in throwaway mod directories. Both
      linters run in CI. The matrix is what the compatibility fix above should
      have been caught by years earlier.
    - build.ps1 refuses to overwrite an already-archived release unless given
      -Force.
    - The void chest/pipe colour is one hex setting ("BF00FF") instead of three
      separate red/green/blue sliders. If you had customised the old ones, set
      the colour again.
Version: 0.21.0
Date: 2026-07-30
  Changes:
    - Nearly every feature now defaults ON instead of off. A toggle you never
      knew existed is a feature you never got, and turning something off is one
      switch, whereas discovering it is not. Thirteen features flipped: uranium
      bacteria on Gleba, void chest & pipe (and the filtered void chest),
      FPS-friendly thrusters, pass-through fusion generators, colorful
      biochamber, copy modules with machine settings, the jetpack fuel HUD, the
      in-game map settings editor, resource map markers, the factory
      outlet/inlet/sensor, teleporter pads, and the Factorissimo Factory
      building Mk4 tier.
    - This is safe by construction rather than by hope: every port of a
      standalone mod already disables itself when the original is installed,
      and every feature that needs Space Age, Factorissimo or Jetpack does
      nothing at all without them. Nothing new touches a vanilla recipe.
    - IMPORTANT: this changes nothing for existing saves or servers. A
      setting's default only applies where that setting has never been written
      to mod-settings.dat - i.e. fresh installs, and a server that has never
      loaded the mod. Existing games keep exactly what they had.
    - Four features stay off, each for a specific reason. Total productivity is
      a large balance change rather than a convenience. Restoring Krastorio 2's
      hidden nuclear fuel overrides another mod's deliberate balance call. The
      teleport-to-player shortcut is experimental and free instant travel
      changes a lot. Verbose recipe logging is a diagnostic.
    - One thing to know before ever turning the Mk4 back OFF: it deletes the Mk4
      buildings, because their prototype no longer exists. The interiors are NOT
      deleted - Factorissimo only cleans an interior up when its building is
      mined, which removing a prototype is not - but the building was the only
      way in, so everything inside becomes unreachable without console commands,
      and turning the setting back on does not rebuild the buildings. Stranded,
      not destroyed. Turn it off before building the first Mk4, or leave it on.
    - Setting descriptions and the README were rewritten to match; several
      still claimed "off by default".
Version: 0.20.2
Date: 2026-07-30
  Features:
    - Factory Mk4 now exists on space platforms too, as Space factory Mk4.
      Factorissimo builds its space-factory-1/2/3 from a hardcoded per-tier
      list, so the fourth tier got none of it. It is gated behind the same
      Factorissimo space architecture setting, unlocked by the same Space
      architecture research (which now also requires Architecture 4, since the
      recipe consumes a Mk4), and its ingredients are copied from whatever
      Factorissimo gave Space factory 3 under the current mod set - so it works
      under both Space Age and Space Exploration without guessing at either.
    - The Mk4's interior walls and floor logo are teal instead of the Mk3's
      yellow. The stock tiers are orange, blue and yellow; teal stays clear of
      factory-2's blue. Inside a Mk4 no longer looks exactly like inside a Mk3.
      The space variant's tiles and paint are amber, since all three stock
      space tiers already share one blue-grey skin.
    - The Mk4's factoriopedia entry gains a "floor tiles per connection" row -
      450, against a Mk3's 112. The ports did not grow with the floor, and that
      is much cheaper to learn from a tooltip than from a finished build.
  Changes:
    - The research is now called "Architecture 4", matching Factorissimo's own
      "Architecture 2" and "Architecture 3", and is ordered to sit directly
      after Architecture 3 and before Space architecture instead of landing
      elsewhere in the tech tree.
    - The Mk4's description now teaches the same controls every other tier
      does - port markers, opening the floor in remote view, moving the
      building from remote view - which it had been silently dropping.
    - The technology icon reads "04" instead of "03". Repainted in place on
      Factorissimo's isometric render, following the tilted face rather than
      screen rows, so the architecture techs still look like a set.
    - The "04" on the building is rebuilt from a real typeface. The facade font
      is a heavy rounded grotesque - 136x151 with a ~42px stroke, measured off
      the "0" - and the first hand-drawn attempt was far too thin. The crate
      that sat under the digit is gone: it is drawn on top of the lettering in
      the same colour at every brightness, so it cannot be masked away, and it
      hid the 4's crossbar.
    - Cerys radiative towers in a Mk4 go from 4 to 9. Four is right for a
      60-wide floor; on four times the area it left the middle and the edges
      cold.
    - The hidden power relay has its own name instead of borrowing the
      building's, so log and debug output is not misleading.
  Bugfixes:
    - The Mk4's research cost and recipe are now re-derived from the Mk3's in
      data-final-fixes, after other mods have rewritten them. Factorissimo's own
      Pyanodons compatibility rewrites the factory technologies in data-updates,
      and overhauls can retire an item the recipe asks for; deriving late means
      the Mk4 inherits whatever they settled on instead of a snapshot taken
      before they ran. Ingredients that no longer exist are dropped with a log
      line rather than failing the load.
Version: 0.20.1
Date: 2026-07-30
  Bugfixes:
    - Factory Mk4: the northern half of the floor had no electricity. Machines
      built there sat at "No power" with nothing to trace, because the pole
      that feeds a factory interior is hidden and draws no wire. Factorissimo
      places that pole beside the DOOR, and factory-power-pole has
      supply_area_distance 63 - fine up to a 60-wide floor, but from the door
      of a 120-wide one it stops one tile past the middle. The engine caps
      supply_area_distance at 64 for every electric pole prototype, so no pole
      at the door can ever cover a Mk4.
    - The visible pole and the interior roboport stay at the entrance where
      they belong. Instead a hidden, uncollidable, unselectable relay pole is
      built at the centre of the floor and script-wired to the door pole, so
      the whole interior is supplied from one network. It is registered through
      Factorissimo's own layout `upgrades` hook, which re-runs on build, on
      every configuration change and on every research finish - so it repairs
      itself on existing factories instead of needing a migration.
    - The interior roboport needed no such treatment: its reach was already
      raised to 128 in 0.20.0, which covers a 120-wide floor from the door.
  Changes:
    - Factory Mk4 now ships real artwork instead of a runtime sprite tint. The
      tint was a multiply, so it could only darken - in game the Mk4 still read
      as a brown Mk3, and no tint could do anything about the "03" painted on
      the facade. The building is now steel blue with "04" on the front, with a
      matching icon and technology icon. Generated from Factorissimo's own
      factory-3 art by tools/make-mk4-art.py, reusing its shadow untouched,
      the same way Factorissimo builds its space-factory variants.
    - The Mk4 map colour is stronger, since map view does not draw the artwork
      at all.
Version: 0.20.0
Date: 2026-07-30
  Features:
    - Factory building Mk4 (etech-factory-mk4, off by default): a fourth
      Factorissimo tier with a 120x120 interior - four times a Mk3's floor -
      behind an exterior that is still 16x16, with the Mk3's 32 connection
      ports unchanged and in the same positions. A Mk4 drops straight into a
      spot already built for a Mk3, and reuses factory-power-input-16, so no
      new exterior prototypes exist.
    - No fork of Factorissimo is needed. Layouts live in Factorissimo's own
      storage rather than in data.raw, and it exposes
      remote.call("factorissimo", "add_layout", table); E-Tech registers the
      tier there on on_init and on_configuration_changed, then verifies with
      has_layout and reports to the log and to chat if it did not take. A
      silently unregistered layout would break every placed Mk4, so it is
      never allowed to fail quietly.
    - Because the exterior is identical to a Mk3's, the Mk4 is tinted blue and
      given its own map colour - every stock factory shares one map colour, so
      without this the two tiers would be indistinguishable on the ground, on
      the map and in inventory. Factorissimo does the same for its own
      space-factory variants: same footprint, same shadow, different body.
    - Quality unlocks the same extra ports at the same levels a Mk3 gets, for
      46 at legendary, and the factoriopedia quality table is filled in to
      match the stock tiers.
    - Interior construction and logistics coverage is raised from 64 to 128
      tiles when the Mk4 is enabled. Factorissimo builds the interior roboport
      at the factory's DOOR, not its centre; at radius 64 that reaches only
      two tiles past the middle of a 120-wide floor, leaving the whole northern
      half of every Mk4 uncovered. Applies whether or not the interior roboport
      buff is on, and the Krastorio 2 mode variants are recomputed from it.
    - 120x120 is the largest interior Factorissimo can generate, so this is the
      last tier on this exterior size. Its create_factory_position() marks only
      the chunks within 64 tiles of an interior's centre as generated, and
      add_hidden_tile_rect() covers the same box; a Mk4's walls sit at 61 and
      its door corridor ends at 63, one tile inside that limit. The 512-tile
      spacing between interiors would allow far more - the chunk loop is the
      real ceiling.
    - Known trade-off, by design: the ports did not grow with the floor, so 32
      of them now serve four times the area. Expect to want more internal
      bussing per port than a Mk3 needs. Mk4s are not available on space
      platforms (Factorissimo builds its space-factory variants from a
      hardcoded per-tier list).
Version: 0.19.7
Date: 2026-07-30
  Features:
    - Factorissimo interior roboport: whole-floor logistics coverage, slots for
      robots and repair packs, more charging pads, and an energy source that can
      actually charge robots. Absorbs factorissimo-roboport-buff by RandomBruh
      (public domain). Defaults are logistics radius 64, 7 robot + 7 material
      slots and 16 charging pads at 4000 kW; every value is a startup setting.
    - Robots could not charge inside factory buildings at all. Factorissimo runs
      the interior roboport on a void energy source, and robot charging is paid
      out of a roboport's stored energy - a void source stores none, so charging
      never begins no matter how many charging pads the roboport has or how much
      power each pad is given. Factorissimo's own hidden construction robots are
      defined with no energy drain and never charge, so the limitation only
      appears once player robots operate inside a factory.
    - "Charge bots from your power grid" (etech-factory-roboport-electric, on by
      default) replaces the void source with a real electric one, with a 200 MJ
      buffer and a 100 MW draw limit. This is what makes charging work. Charging
      inside a factory therefore draws from the same electric network as the rest
      of the base - roughly 1-2 MW per factory with a busy robot fleet, scaling
      with the number of robots in the air rather than with pad count. It uses the
      same low priority as a vanilla roboport, so an under-supplied grid slows
      charging instead of stopping machines. Turning the setting off restores
      Factorissimo's void source; robots then stop charging, and a warning is
      written to the log explaining why.
    - When the void source is kept, energy_usage and recharge_minimum are lowered
      from 50 kW / 40 MJ to 1 W / 1 W. A vanilla roboport satisfies a 40 MJ
      threshold from its 100 MJ buffer; a void source has no buffer and never can.
      This is a second, independent blocker on the same prototype.
    - The roboport's icon now matches the vanilla roboport. Factorissimo gives it a
      construction-chest icon, which goes unnoticed while the roboport is a hidden
      entity but appears as a chest consuming tens of MW in the electric network
      screen once it draws power.
    - Krastorio 2's roboport mode variants are patched to match. K2 builds its
      logistic-only and construction-only modes by deep-copying every roboport
      prototype during data-updates, before this feature runs, so the factory
      roboport's "-logistic-mode" and "-construction-mode" twins were copies of the
      stock version: void energy source, 4 pads at 500 kW, logistics radius 3, no
      robot slots. Switching a factory roboport's mode would have reverted all of
      the above. The twins now inherit the patched energy source, charging and
      slots, with K2's derived radius formulas recomputed from the new values.
    - Both toggles default on, unlike every other E-Tech feature toggle: this
      feature replaces a standalone mod rather than adding new content, and its
      grid-power half is what makes charging work at all. Turning the main toggle
      off restores Factorissimo's stock interior roboport, which has a logistics
      radius of 2.
    - REMOVE THE OLD MOD: delete factorissimo-roboport-buff from your mods folder.
      Leaving it installed is harmless but pointless - E-Tech now covers everything it
      did, and its two settings just sit there doing nothing. E-Tech logs a reminder
      when it sees the mod still present.
    - Everything is applied in data-final-fixes rather than data-updates, so mods
      that modify the interior roboport later cannot overwrite the result.
      Krastorio 2, Combat Mechanics Overhaul and Cerys are listed as optional
      dependencies purely to pin load order.
    - Only the visible interior roboport is modified. Factorissimo's hidden interior
      roboport - the reservoir that keeps 200 free construction robots in each
      factory network - is left alone: its robots have no energy drain and never
      charge, and its single centre charging pad is intentional.
Version: 0.19.6
Date: 2026-07-23
  Bugfixes:
    - Factory outlet: returned items (on-demand give-backs, mined-device dumps) no
      longer land in whatever provider chest happened to be empty - that scattered
      random items into machine-output chests. Returns now go to a chest already
      holding the item, then interior storage chests (filtered match first, then
      unfiltered), and otherwise stay in the outlet buffer.
Version: 0.19.5
Date: 2026-07-21
  Gui:
    - Factory fluid outlet: the panel now lists every fluid inside the reachable
      factories with total amounts (live, refreshed every 2 s while open). Clicking
      a fluid sets it as the pull pick (click again to stop pulling); the picked one
      shows highlighted.
Version: 0.19.4
Date: 2026-07-21
  Changes:
    - Factory fluid outlet: idle until a fluid is picked. The lock-onto-contents
      fallback is gone - a freshly placed outlet no longer grabs whatever interior
      fluid it happens to find first.
Version: 0.19.3
Date: 2026-07-21
  Gui:
    - Factory fluid outlet: opening it now shows a "Fluid to pull" panel with a fluid
      picker - 0.19.2 pointed at the tank's filter slot, which vanilla storage tanks
      don't actually offer. The pick survives blueprints and cloning; clearing it
      returns to lock-onto-contents behavior.
Version: 0.19.2
Date: 2026-07-21
  Changes:
    - Factory fluid outlet: set its tank FILTER (in its own GUI) to choose which
      interior fluid it pulls - with many different tanks inside the factories the
      first-found fluid was effectively random. Without a filter it still locks onto
      whatever it holds. Changing the filter flushes the old fluid back into matching
      interior tanks before the new one is pulled.
Version: 0.19.1
Date: 2026-07-21
  Bugfixes:
    - Fixed a crash when a factory fluid outlet/inlet ran its first pass: the code
      used the removed 2.0 LuaEntity.fluidbox / table-form remove_fluid APIs. Now
      uses get_fluid_capacity and extract_fluid (2.1).
Version: 0.19.0
Date: 2026-07-21
  Features:
    - Factory fluid outlet and fluid inlet: storage-tank devices that bridge FLUIDS
      across the factory wall. The outlet fills itself from storage tanks inside the
      factories (one fluid per device - it locks onto what it holds), the inlet drains
      itself into interior tanks already holding the same fluid. Same tech unlock.
    - Restored the vanilla offshore pump recipe (pipe 3 + iron gear wheel 2 - values
      verified against base 2.1), closing the mod's oldest open item.
    - Teleporter pads keep their names through blueprints (stored as blueprint entity
      tags; pasted pads reuse the name, suffixed on collision).
    - Factory outlet/inlet settings (filters, mode, storage toggle, auto-request)
      survive cloning and blueprints.
    - Teleporting while driving a car, tank or spidertron now teleports the vehicle
      with you (pads, remote, return and teleport-to-player alike). Riding a train
      refuses politely instead of failing silently.
    - The factory inlet gained the outlet's distribution filter (whitelist/blacklist)
      and a "still missing inside" panel showing interior deficits after each pass.
    - New startup toggles: "Vanilla engine unit names and icons" (the cosmetic restore
      can now be turned off) and "Verbose recipe-restore logging" (per-recipe log
      lines are off by default - only summaries are always logged).
  Changes:
    - All mod settings moved to proper locale entries and regrouped: core tweaks,
      absorbed features and teleport features now sort together per settings tab.
    - Teleporter sound volume, pad preview size and hide-platforms are per-player
      settings now (they were map-wide; stored values reset once).
    - Hovering a void pipe shows what it voided in the last pass; the first time a
      filtered void chest is opened its infinity-filter workflow is explained in chat.
    - Resource marker rebuilds run in the background (a batch of chunks at a time)
      instead of stalling the game for seconds on large maps; the summary reports
      patches hidden by the minimum-size setting; failed marker placements on
      uncharted ground now retry periodically.
    - Outlet panel: the pause reason is shown when a circuit gates the outlet off,
      and the empty state distinguishes "no chests reachable" from "factories empty"
      from "nothing matches the search". Truncated factory lists show "+N more"
      instead of "...". Filter slots grew from 10 to 15.
    - Placing an outlet/inlet with no reachable factories says so as flying text.
    - Teleporter list: the search text survives list rebuilds, hiding the search box
      clears the filter, and searching also matches surface names and aliases.
    - Teleporter favorites and recents follow the player (keyed by player, not by
      player name - renames no longer orphan them) and are cleaned up when a pad is
      removed.
  Optimizations:
    - Factory sensor only rewrites its circuit section when the totals actually
      changed; the outlet's rate-sample pruning no longer copies every pass.
    - Teleporter minimap chart calls are throttled to once a minute per pad; the
      unpowered-pad alert scan skips forces with nobody online.
    - Jetpack HUD: when nobody is airborne the per-player remote calls are skipped.
  Bugfixes:
    - Cloned void pipes (and platform-built ones) never registered, so they never
      drained fluid. Cloned void chests missed their filter setup.
    - Colorful biochamber no longer crashes the load when another mod removed one of
      the tinted recipes; a missing biochamber prototype skips the feature cleanly.
    - Copy Paste Modules: a machine without a module inventory aborts the module
      request gracefully instead of crashing the paste.
    - Edit map settings: applying no longer errors in packs that removed the enemy
      force.
    - Krastorio 2 recipe restores are idempotent (no misleading "restored" log when
      nothing changed) and warn when overwriting a recipe that matches neither AAI
      nor K2 - a third mod may own it.
    - The recipe fingerprint now includes fluid temperature bounds, so recipes
      differing only in fluid temperature can't false-match.
    - Teleporter energy is drained only after a successful jump; stale GUI actions
      and missing rename targets are guarded.
  Info:
    - README and the in-game tips page no longer claim everything is off by default
      (four vanilla-behavior restores default on); the optional-tweaks table gained
      the missing quality-module-slots and factory hub rows.
Version: 0.18.1
Date: 2026-07-21
  Changes:
    - Machines affected by "Quality adds module slots to all machines" now say so in
      their entity and item tooltips ("Quality increases module slots").
Version: 0.18.0
Date: 2026-07-21
  Features:
    - New startup toggle "Quality adds module slots to all machines" (on by default,
      needs the Quality mod): every machine with at least one module slot - assemblers,
      furnaces, rocket silos, beacons, mining drills, and labs, modded ones included -
      gains extra module slots at higher quality. Machines with no module slots are
      untouched. Blanket replacement for the retired QualityEffectsFixed mod (clean
      reimplementation, no code reused); honors that mod's qef_ignore opt-out field.
Version: 0.17.5
Date: 2026-07-20
  Bugfixes:
    - Void pipe: draining no longer skips the pipe after a removed one in the same pass
      (removal during list iteration shifted the remaining entries).
  Optimizations:
    - Factory outlet/inlet/sensor: when several devices' factory-list caches expire at the
      same time, they now re-scan one device per maintenance pass instead of all at once,
      refreshing early enough that none of them falls back to scanning during a pull.
Version: 0.17.4
Date: 2026-07-20
  Optimizations:
    - Factory outlet/inlet/sensor: the work pass no longer runs everything in a single tick
      every 2 seconds (profiled at 10-46 ms per pass - a visible periodic hitch). The pass
      is now split into four phases on separate ticks: outlet pulls, inlet/sensor updates,
      cache maintenance, and GUI refresh. Each device still updates every 2 seconds.
    - Factory outlet/inlet/sensor: the interior chest lists are now cached and only rebuilt
      when a logistic chest is built or mined, or the factory list changes - previously
      every pass re-scanned every factory interior for chests.
    - Factory outlet: the periodic factory-list rescan and module-request scan now refresh
      ahead of time in the maintenance phase, so their cost never lands on the same tick as
      an outlet pull.
Version: 0.17.3
Date: 2026-07-20
  Bugfixes:
    - Teleporters: the destination window now reopens at the position you dragged it to.
      Previously the position was lost whenever a teleport closed the window - the next
      open re-centered it, which read as the window "moving" after using the surface
      filter and teleporting. Off-screen saved positions (after a resolution change)
      fall back to centered.
Version: 0.17.2
Date: 2026-07-20
  Bugfixes:
    - Teleporters: merging two forces no longer strands the source force's pads - they move
      into the destination force's network (renamed on name collision) and stay usable and
      removable. Previously they vanished from the destination list and mining them leaked
      their name label and map tag.
    - Teleporters: mining a pad no longer errors if another mod wiped the mod's screen
      renderings (the pad's name label) first.
    - Teleporters: renaming a pad to an empty name via the rename window is now rejected,
      matching the map-tag rename path.
    - Teleporters: clicking a return slot whose list shifted since the window opened (a slot
      expired or was used) now teleports to the slot that was clicked instead of whichever
      entry took over that position.
    - Teleporters: arrival-position checks now use the player's actual character prototype,
      so mods that swap it (e.g. Jetpack in flight) get a correct landing spot.
    - Teleporters: the destination window no longer errors when the preview size is larger
      than fits the window width - the list just becomes a single column.
    - Resource markers: merging two forces now rebuilds all markers for the merged force.
      Previously the source force's markers were forgotten but stayed on the map, and the
      next chart scan added duplicates next to them.
    - Resource markers: when another mod deletes a marker tag, the marker is recreated
      immediately instead of only after the patch next changes.
  Optimizations:
    - Resource markers: amount changes now update the existing map tag's text in place;
      the tag is only destroyed and recreated when the patch centroid drifts more than
      8 tiles. This stops marker flicker during active mining and no longer spams tag
      add/remove events into other mods on every depleted ore tile.
    - Resource markers: an ore tile running dry now rescans its chunk for that resource
      only, instead of re-counting every resource type in the chunk.
Version: 0.17.1
Date: 2026-07-20
  Changes:
    - Factory outlet: on-demand is now the only behavior - the buffer mode (keep N stacks of
      everything on hand) and its "Stacks per item" override are gone. The outlet panel
      already shows the factories' stock, so pre-staging items bought nothing.
    - Factory outlet: the circuit-enable checkbox is gone; gating is automatic. No wire
      connected = the outlet always runs; wire connected = it only runs while receiving a
      nonzero signal.
    - Factory outlet: the side panel is taller so it matches the height of the chest window.
    - Teleporter list: surfaces now show their real names - space platforms show the ship
      name ("Icarus" instead of "platform-1") and planets their proper capitalized name
      ("Nauvis" instead of "nauvis"). Player-set aliases still win.
  Features:
    - Tips and tricks: new E-Tech category with an overview entry, plus a factory
      outlet/inlet/sensor guide that gets suggested when the Factory logistics technology
      finishes.
Version: 0.17.0
Date: 2026-07-20
  Changes:
    - Krastorio 2 games: AAI's motor ("Single-cylinder engine") is now fully retired instead
      of only hidden from the player crafting menu - its icon is a vanilla engine-unit
      lookalike, so assembler recipe pickers still showed two near-identical engines. Every
      recipe that used it gets iron gear wheels instead (burner lab, fuel processor, Mining
      Drones, and any other mod's recipe), research triggers that counted crafted motors now
      count iron gear wheels, the crash-site debris motors become gears on new games, and
      the item and recipe are hidden. Games without Krastorio 2 keep the motor unchanged.
    - Factory outlet: only one outlet can be placed per surface (per force). Placing a
      second refunds the item with a message. Outlets were already surface-local - each
      planet's outlet only ever saw that planet's factories - this makes the one-per-planet
      rule explicit. Existing saves with several outlets on one surface keep working; the
      limit applies to new placements.
    - Factory outlet/inlet/sensor: the tuning settings are now fixed values instead of mod
      settings - inventory slots 200, one stack kept per item (the per-outlet override in
      the outlet window remains), pulls from both passive and active providers, no energy
      cost per item (the hidden buffer entity is gone; old saves clean it up automatically),
      whole-surface reach, and nested factories always included. The per-outlet priority
      field is gone too - with one outlet per surface there is nothing to order.
Version: 0.16.1
Date: 2026-07-18
  Optimizations:
    - Reduced the two remaining scheduled scans: the factory-list fallback rescan now runs
      every 5 minutes instead of every minute (building or mining a factory still refreshes
      the list instantly, and removed factories are filtered out immediately), and the
      item-request-proxy rescan runs every 60 s instead of every 30 s.
Version: 0.16.0
Date: 2026-07-18
  Optimizations:
    - Ghost demand is now an event-driven index instead of a periodic scan. On large maps,
      surface-wide entity searches are expensive no matter how little they find, so any
      rescan interval caused a periodic stutter. The index scans once per surface, then
      maintains itself: each new ghost is added from its build event, and each removed ghost
      (built, deconstructed, decayed or removed by script) subtracts exactly what it added.
      Steady-state scanning cost is zero.
    - Item-request-proxies (module/fuel requests on built machines) have no build event to
      hook, so they keep a slow periodic scan: every 30 s, limited to the area covered by
      construction bots.
    - Ghost coverage per outlet is recomputed every pass, so roboport coverage changes are
      picked up within 2 s.
Version: 0.15.4
Date: 2026-07-18
  Debug:
    - /etech-hub-profile now times each ghost-scan stage separately (entity find/loop, tile
      find/loop, proxies) to pin down whether the remaining scan cost is the engine finds or
      the per-ghost processing loop. No behavior change.
Version: 0.15.3
Date: 2026-07-18
  Optimizations:
    - Ghost scans are now confined to the bounding box of the force's construction-bot
      coverage on that surface. Ghosts outside bot range can't be built anyway; with no
      coverage, no scan runs at all.
    - The factory-list rescan is now event-driven: building or mining a factory refreshes
      the list instantly, and the timed fallback rescan runs once a minute instead of every
      10 seconds.
Version: 0.15.2
Date: 2026-07-18
  Optimizations:
    - Ghost scan rebuilt for big blueprint pastes: ghost demand now aggregates per 32x32
      chunk at scan time, so per-outlet coverage math scales with chunks instead of ghosts;
      module/fuel/ammo request checks are skipped for prototypes that can't carry them
      (belts, walls, rails and other plain buildables); and surfaces with more than 4000
      ghosts rescan at 10 s instead of 5 s.
    - /etech-hub-profile now also logs reach-chests and net-wants sub-phases to break down
      where a pull pass spends its time.
Version: 0.15.1
Date: 2026-07-18
  Debug:
    - /etech-hub-profile: toggle per-pass timing capture. Every outlet/inlet/sensor pull pass
      and every ghost scan appends its exact duration to script-output/etech-profile.csv,
      for pinning down what a perceived hitch actually costs. Off by default, zero overhead
      when off.
Version: 0.15.0
Date: 2026-07-18
  Features:
    - On-demand outlets now cover construction ghosts. Ghosts aren't logistic requests, so an
      on-demand outlet used to sit empty while construction bots starved (blueprint a factory
      building, nothing gets built). The outlet now derives ghost demand itself: entity ghosts,
      tile ghosts, and module requests (on ghosts and on built machines) within the network's
      construction range count as demand, and the needed items materialize from the factories
      like any other request. Always on in on-demand mode — no new toggle.
    - /etech-hub-debug now prints the ghost demand an on-demand outlet currently sees (and
      warns when the outlet isn't in a logistic network at all).
  Optimizations:
    - Ghost scanning is built to scale: one surface scan per force every 5 seconds shared by
      all outlets on that surface (cached in savegame storage, so multiplayer joiners stay in
      sync), per-prototype item lookups memoized, and network membership computed as pure
      coordinate math against the roboports' construction squares - no per-ghost API calls.
Version: 0.14.3
Date: 2026-07-18
  Compatibility:
    - Cerys 4.24.5 fixes the nitric acid conflict at the source (it no longer defines the fluid
      when Krastorio 2 is installed), so E-Tech's compat fix now only fires when it actually
      detects the old 15C overwrite. The recipe temperature-bound stripping is gone entirely -
      it deleted K2's intended 25-100C gate from every nitric acid recipe, and existing saves
      self-heal anyway (the engine clamps stored fluid temperatures to the prototype range on
      load). Players on Cerys 4.24.5+ get K2's untouched fluid and recipes.
Version: 0.14.2
Date: 2026-07-17
  Bugfixes:
    - Fixed a crash in the factory outlet/inlet GUI handlers: when another mod (or E-Tech
      module) rebuilds its own GUI during the same event, the element can already be invalid
      and reading it crashed the game ("LuaGuiElement API call when LuaGuiElement was
      invalid"). All handlers now check element validity first.
    - Outlet returns no longer scatter items into random factory chests. Overflow and
      on-demand give-backs went to the first chest with a free slot, filling provider chests
      with items that never belonged there. Returns now only go to a chest already holding
      that exact item (the origin chest wins) or a completely empty chest; otherwise the item
      stays in the outlet (or the mining buffer) instead of mixing into someone else's chest.
Version: 0.14.1
Date: 2026-07-17
  Features:
    - Outlet panel: shift-click an item to take a stack of it straight from the factories into
      your inventory (spoilage/quality preserved).
  Changes:
    - On-demand mode is now the default for newly placed outlets (buffer mode is the opt-in).
      Existing outlets keep whatever they were set to.
Version: 0.14.0
Date: 2026-07-16
  Features:
    - Outlet: click an item in the panel to print clickable map pins for every factory holding
      it; right-click to pin it to the top of the list. Tooltips now use factory names.
    - Outlet: factory naming - the panel lists every reachable factory with a Map button and a
      name field. Names show up in tooltips and map-pin prints.
    - Outlet: on-demand mode (per-outlet checkbox) - instead of buffering stacks, the outlet
      sits empty and only fetches items from the factories when the logistic network has unmet
      requester demand (chests, players, spidertrons). Unneeded leftovers return to the
      factories. Construction ghosts aren't covered (yet).
    - Outlet: circuit enable (per-outlet checkbox) - only works while any nonzero circuit
      signal reaches the chest.
    - Outlet: optional pulling from yellow storage chests inside factories (per-outlet
      checkbox, off by default).
    - Outlet: priority field - lower numbers pull first when several outlets compete.
    - Inlet: auto-request (checkbox in its new side panel) - reads the unmet requests of the
      requester/buffer chests inside the factories and sets them as the inlet's own bot
      requests in a managed "etech-inlet-auto" logistics group. Bots deliver exactly what the
      factories need, the inlet forwards it inside.
Version: 0.13.1
Date: 2026-07-16
  Bugfixes:
    - Opening a factory outlet crashed ("attempt to index field 'etech-hub-cap'") - the
      stacks-per-item textfield was looked up in the wrong GUI container when loading the
      panel's saved settings.
Version: 0.13.0
Date: 2026-07-16
  Features:
    - Factory outlet (renamed from "Factory provider hub"): new expensive recipe worthy of the
      power - 1 factory building + provider chest + 20 advanced circuits + 10 processing units
      + 25 steel.
    - Factory inlet: the outlet's counterpart. Fill it (by hand or bot requests) and it
      distributes its contents into the requester/buffer chests inside the factories on its
      surface, up to their requested amounts. Same recipe idea, mining returns items too.
    - Factory sensor: a constant combinator that broadcasts the factories' provider chest
      totals as circuit signals.
    - Outlet GUI: per-outlet pull filter (all / only selected / all except selected, 10 item
      slots), per-outlet stacks-per-item override, search box over the contents list,
      per-factory breakdown in each item's tooltip, quality shown separately, and a "pulled
      last minute" counter.
    - Optional energy cost (map setting, default off): outlets and inlets drain a hidden
      electric buffer per item moved.
    - Optional range limit (map setting, default off): devices only reach factories within N
      tiles.
    - /etech-hub-debug command: prints per-device diagnostics including why each item type is
      or isn't being pulled.
  Bugfixes:
    - The placed chest was yellow: Factorio 2.1 keeps logistic chest sprites in
      robot_door.animation, not the old animation field, so the 0.12.0 orange tint silently
      missed the entity. Both the outlet and everything else are now tinted for real.
Version: 0.12.1
Date: 2026-07-16
  Bugfixes:
    - Factory hub: opening the hub crashed Filter Helper ("Given logistic container isn't a
      storage type"). The hub's sprite rebuild from the storage chest also inherited its
      storage-filter slot (max_logistic_slots = 1); Filter Helper saw the slot and asked for
      the filter of a chest that isn't storage mode. Slot removed.
Version: 0.12.0
Date: 2026-07-16
  Features:
    - Factory hub: opening a hub now shows an "Inside the factories" panel next to the chest
      window - every item sitting in the provider chests the hub reaches, with counts,
      refreshed live.
    - Factory hub: mining a hub sends its buffered items back into the factories' provider
      chests - you pick up an empty chest instead of an inventory full of parts.
    - Factory hub: anything above the per-item cap (e.g. items put in by hand) is returned to
      the factories on the next pull pass, requester-trash style. The hub only ever holds what
      it's willing to provide.
  Changes:
    - Factory hub: inventory slots setting now defaults to 200 (was 80) and allows up to 1000,
      so hundreds of different parts fit at once. Existing installs keep their saved value -
      raise the slider in mod settings.
    - Factory hub: the inventory limiter (red X) is gone - the per-item cap makes it pointless.
    - Factory hub: chest is now properly orange in hand and on the ground (was: red icon, muddy
      brown placed sprite).
Version: 0.11.0
Date: 2026-07-16
  Features:
    - Factory provider hub (startup toggle, needs Factorissimo 3, off by default): a logistic
      chest that automatically pulls items out of the provider chests INSIDE the Factorissimo
      factory buildings on its surface and offers them to the local logistic network as a
      passive provider. Robots can't fly between surfaces, so the hub teleports the items out.
      Reaches into nested factories (toggleable, 5 levels). Keeps a configurable number of
      stacks per item buffered; can be limited to active provider chests only. Never drains
      another hub. Spoilage, quality, ammo and durability survive the transfer. Unlocked by a
      technology alongside logistic robotics and Factorissimo's chest connections.
Version: 0.10.4
Date: 2026-07-15
  Bugfixes:
    - Teleporter GUI: the "N tiles away" line was still clipped at the bottom of each pad
      button - the button's own vertical padding ate the row. Padding zeroed + more headroom.
Version: 0.10.3
Date: 2026-07-15
  Changes:
    - Teleporter GUI: energy line removed from the pad buttons (it kept getting clipped) -
      cost and stored MJ now show in the pad's hover tooltip instead. Unaffordable pads stay
      greyed out with the cost in their tooltip.
Version: 0.10.2
Date: 2026-07-15
  Bugfixes:
    - Teleporter GUI: distance/surface/energy labels actually visible this time. Factorio
      buttons clip children to the button's own size (minimal_height doesn't grow with
      content), so each pad button's height is now computed from its label rows.
  Changes:
    - Pad preview size default 200 (was 160 in 0.10.1).
Version: 0.10.1
Date: 2026-07-15
  Bugfixes:
    - Teleporter GUI: the distance / surface / energy labels under each pad were invisible -
      the pad buttons had a FIXED height sized for the name row only, clipping everything
      below it (the energy line had been clipped since the original port). Buttons now use a
      minimal height and grow to fit their labels.
  Changes:
    - Teleporter GUI: pad preview size is a map setting (96-512 px). Default shrunk from the
      original's 256 to 160 - the old size made the window enormous with many pads.
Version: 0.10.0
Date: 2026-07-15
  Features:
    - Teleporters: SHIFT+T hotkey opens the remote (same as the toolbar shortcut, rebindable).
    - Teleporters: distance shown on every same-surface pad ("N tiles away").
    - Teleporters: sort dropdown - recently used (default), A-Z, or nearest first. Starred
      pads always come first.
    - Teleporters: Shift+right-click a pad in the list to rename it (no more walking to the
      pad or editing the map tag).
    - Teleporters: return history holds the last 3 remote-jump origins (was a single slot);
      each shows its own camera button and is consumed on use.
    - Teleporters: unpowered-pad map alerts - while a pad's buffer is empty (and teleporting
      costs energy), the owning force gets a custom alert. Toggleable map setting.
    - Teleporters: teleport sound volume map setting (0-2).
    - Teleport-to-player shortcut now shows the teleport flash at both ends (when the pads
      toggle is on) in addition to the sound.
    - Void: optional filtered void chest (greenish) - destroys only items you pick via
      infinity filters set to "exactly 0"; everything else sits. Same tech unlock.
  Bugfixes:
    - Teleporter GUI search hotkey registered "Control + F", which Factorio 2.1 rejects
      (logged "unknown key_sequence" and the Ctrl+F link never worked) - now "CONTROL + F".
  Changes:
    - One-shot save cleanups moved to migrations/ (run once per save instead of on every
      mod-set change).
    - Repo: luacheck lint config + GitHub Actions workflow; dev module map in the README.
Version: 0.9.0
Date: 2026-07-15
  Features:
    - Copy modules with machine settings toggle (default off): shift-click paste moves modules
      straight from your inventory (old modules handed back, bot request for what's missing),
      handles ghosts and remote view, and makes furnaces/labs/beacons cross-pastable. Port of
      the abandoned Copy Paste Modules mod by kajacx (MIT); auto-skipped if the original is
      installed. Per-player runtime switch included.
    - Teleporters: favorite pads. Right-click a pad in the destination list to star it -
      starred pads sort before everything else and show a star prefix.
    - Teleporters: the teleporting player now always hears the teleport sound. The world-side
      flash sound plays at the destination before you arrive (inaudible cross-surface); a
      direct sound now follows the player on pad, remote, return, player-to-player, and
      teleport-to-player shortcut jumps.
  Bugfixes:
    - Krastorio 2 + Cerys: nitric acid works in K2 recipes again. Cerys redefines K2's
      kr-nitric-acid fluid with default_temperature 15 and drops K2's other fields, so all
      Cerys-produced acid arrived at 15C - below the 25C minimum K2 recipes expect (imersite
      crystal plants showed permanent fluid shortage), and the fluid tooltip lost its info.
      E-Tech now restores K2's full fluid definition after Cerys and strips temperature bounds
      from recipes consuming it, so cold acid already in pipes stays usable. Active only when
      both mods are present.
    - Jetpack fuel HUD no longer draws over the map/remote view; it hides until you're back in
      the world.
Version: 0.8.0
Date: 2026-07-15
  Features:
    - Absorbed five abandoned 2.0-era mods as optional toggles (all default off, each skipped
      automatically when the original mod is still enabled; prototype names kept identical so
      entities already placed in a save survive the switch):
    - Void chest & void pipe (port of Easy Void by zoryn, MIT). Settings renamed to
      etech-void-* (tint RGB + chest slots), so re-set them if you changed the defaults.
    - In-game map settings editor (port of Edit Map Settings by Morsk, MIT): pollution,
      evolution, expansion, peaceful/no-enemies, spoilage rate, and per-surface map gen
      settings. E-Tech change: the top-left mod-gui button is replaced by a toolbar
      shortcut (like the teleporter remote); the window otherwise works as before.
    - FPS-friendly thrusters (port of FPS Friendly Thrusters by RockPaperKatana, MIT):
      strips thruster exhaust plumes.
    - Pass-through fusion generators (port of pass-through-fusion-generator by daahl, MIT):
      input-output plasma connections on all sides so generators chain.
    - Colorful biochamber (port of Colorful Biochamber by meifray, public domain):
      per-recipe RGB recolor of the biochamber pools/dome/windows.
Version: 0.7.1
Date: 2026-07-14
  Bugfixes:
    - Jetpack HUD: remaining-time estimate no longer inflates to hours. The consumption
      sample could be measured across the gap between two flights, making burn rate look
      tiny; estimates now reset per flight, only accept sane tick deltas, and skip the
      sample when the fuel item switches.
  Changes:
    - Jetpack HUD window fixed at 180px wide to line up with the weapon/quickbar panel,
      and the label reads "Est time left ..." like the original mod.
Version: 0.7.0
Date: 2026-07-14
  Features:
    - Total productivity toggle (default off): allows productivity modules on recipes the
      game normally forbids - belts, inserters, rails, pipes, solar, walls, ammo, equipment,
      and more, with four category group toggles (logistics / buildings / military / misc).
      Port of the abandoned Total Productivity mod by AivanF (LGPLv3, see
      LICENSE-third-party.txt), skipped automatically when the original mod is installed.
    - Jetpack fuel HUD toggle (default off, needs the Jetpack mod): while flying, a small
      movable window shows current fuel + inventory count, a burn bar, and estimated
      remaining flight time. Port of Puppy's Jetpack UI (MIT) without the flib dependency,
      skipped automatically when the original mod is installed.
  Bugfixes:
    - The jetpack HUD keeps its window position across restarts and server joins. The
      original discarded the saved position when it looked off-screen, judged against a
      display resolution that reports a stale default during the first ticks after joining -
      the position is now always restored and clamped when the resolution/scale events
      deliver real values.
Version: 0.6.4
Date: 2026-07-14
  Changes:
    - Removed the short-lived Factorissimo map icons experiment (0.6.2/0.6.3, never released):
      map tags can't match the recipe-icon look and feel. Saves that ran it get their factory
      markers and stored data cleaned up automatically.
Version: 0.6.1
Date: 2026-07-14
  Changes:
    - Dev build bump (no code change from the final 0.6.0 build). During development each
      built zip now gets its own patch version so the game reliably fires
      on_configuration_changed and multiplayer version checks stay unambiguous.
Version: 0.6.0
Date: 2026-07-14
  Features:
    - Teleporter pads toggle (default off): port of the Teleporters mod by Klonan (LGPLv3, see
      LICENSE-third-party.txt), updated for Factorio 2.1 and extended. Buildable pads researched
      with chemical science; walk onto a pad to get a map of your other pads and click one to
      teleport. Pads are named, renamable, and shown as map tags.
    - Energy cost: each pad has a 200 MJ electric buffer; teleporting drains the DESTINATION
      pad, so an unpowered pad can't be teleported to. Map settings for MJ per teleport
      (0 = free), extra MJ per 100 tiles, and a cross-surface multiplier.
    - Cross-surface teleporting with a per-player surface filter dropdown in the GUI, custom
      display-only surface aliases (rename button next to the dropdown), and an optional
      hide-space-platforms setting.
    - Wireless remote: toolbar shortcut opens the teleporter list from anywhere once the tech
      is researched. Costs a configurable multiple of the pad-to-pad price (default 2x), still
      drained from the destination pad.
    - Return teleport: after a remote jump the list offers a free Return entry with a live
      camera preview of where you came from (configurable time limit, default 10 min).
    - Players in the list: your team's online players appear at the top with map previews -
      click to teleport to them for free.
    - Migration from the original Teleporters mod: run /etech-migrate-teleporters while BOTH
      mods are installed to convert every placed teleporter to an E-Tech pad (names recovered
      from map tags), convert teleporter items in player inventories, and carry over the
      researched technology. Then save and remove the original mod.
    - Resource map markers toggle (default off): automatically tags resource patches on the
      map - one marker per patch with the resource icon and total amount (infinite resources
      like crude oil show well count and average yield). Markers update as chunks are charted,
      ore is mined out, or chunks are deleted; deleting a marker mutes that patch;
      /etech-markers-rebuild rescans everything (also runs automatically when the toggle is
      first enabled on an existing save). Minimum patch size is a map setting. Written from
      scratch for E-Tech (public domain) as a 2.1-native replacement for the abandoned
      Resource Map Label Marker mod, whose fork crashes on Factorio 2.1.
      Leftover markers from removed marker mods are swept automatically when the toggle is
      first enabled and whenever a known marker mod is removed; /etech-markers-clean-legacy
      does the same on demand (count first, "confirm" to delete). Player-placed tags are
      never touched.
  Changes:
    - The teleport-to-player shortcut's internals moved to an event_handler lib so both
      teleport systems can share GUI events. No behavior change.
Version: 0.5.3
Date: 2026-07-11
  Changes:
    - Mod retitled "E-Tech: Vanilla Recipes for AAI Industry + QoL Toggles" and description
      rewritten to reflect the expanded scope. No gameplay changes.
Version: 0.5.2
Date: 2026-07-11
  Bugfixes:
    - More Factorio 2.1 fixes for the uranium bacteria recipes, now verified field-by-field
      against the game's own 2.1 iron-bacteria recipes: removed 'result_is_always_fresh'
      (product gets 'reset_freshness_on_craft' like vanilla cultivation), removed
      'show_amount_in_title' (gone in 2.1), replaced removed 'organic-or-hand-crafting'
      category with 'organic' + 'crafting', added 'auto_recycle = false' to cultivation.
Version: 0.5.1
Date: 2026-07-11
  Bugfixes:
    - Fixed load error on Factorio 2.1: product 'probability' was renamed to
      'independent_probability' (uranium bacteria recipe).
Version: 0.5.0
Date: 2026-07-11
  Features:
    - Uranium bacteria on Gleba toggle (default off, needs Space Age): port of the abandoned
      Simple Gleba Uranium mod by cindersash (MIT, see LICENSE-third-party.txt). Jelly gives a
      1% chance of uranium bacteria (Jellynut tech), bacteria + bioflux multiplies it in a
      biochamber (Bacteria cultivation tech), and the bacteria spoils into uranium ore.
      Prototype names keep the original sgu_ prefix so saves from the old mod keep their items.
Version: 0.4.0
Date: 2026-07-11
  Features:
    - Restore nuclear fuel crafting toggle (default off): brings back the vanilla nuclear fuel
      item and recipe that Krastorio 2 hides. Unlocked by Kovarex enrichment like vanilla when
      that tech is available, otherwise enabled from the start.
    - Teleport-to-player toolbar shortcut (default off, experimental): with one other player
      online, clicking teleports straight to them; with several, a picker window opens.
      Works across surfaces and follows the target's physical position.
Version: 0.3.1
Date: 2026-07-08
  Features:
    - Allow quality modules in asteroid crushing/reprocessing recipes (toggle, default on).
    - Nuclear fuel stack size setting (default 1 = vanilla).
    - Artillery shell stack size setting (default 1 = vanilla).
    - Agricultural science pack spoilage toggle (default on = vanilla; turn off to stop spoiling).
Version: 0.3.0
Date: 2026-07-08
  Features:
    - New toggle (default on): allow all module types in every beacon, including productivity
      and quality modules. Applies to modded beacons too. Opens allowed_effects and clears
      allowed_module_categories on every beacon prototype.
Version: 0.2.5
Date: 2026-07-08
  Bugfixes:
    - Electronic circuit: with Krastorio 2 Spaced Out the baseline is iron plate 2 + copper
      cable 4 (no wood; K2SO removes K2's wood ingredient). Wood version only applies with
      K2 alone.
    - AAI's redundant "Electronic circuit (Wood)" alternate recipe hidden when K2 is present
      (K2/K2SO provide their own wood path).
Version: 0.2.4
Date: 2026-07-08
  Changes:
    - With Krastorio 2: AAI's Single-cylinder engine (motor) recipe is hidden from the player
      crafting menu (machines can still craft it - burner lab and fuel processor use it, and
      AAI's belt-unlock trigger counts crafted motors).
Version: 0.2.3
Date: 2026-07-08
  Bugfixes:
    - With Krastorio 2: recipes K2 itself modifies now restore to K2's version instead of plain
      vanilla (the pre-AAI state of a K2 game). Fixed: engine-unit (iron plate, not steel),
      gun-turret, assembling-machine-1, steam-turbine, electronic-circuit, solar-panel,
      heavy-armor, roboport, laser-turret, lab.
Version: 0.2.2
Date: 2026-07-08
  Changes:
    - Cosmetic restore: engine-unit and electric-engine-unit get their vanilla names and icons
      back ("Engine unit" instead of AAI's "Multi-cylinder engine"). Same items as always -
      AAI only renamed/reskinned them; assemblers were never switched.
Version: 0.2.1
Date: 2026-07-08
  Bugfixes:
    - New K2-restore pass: AAI's own Krastorio2-compat rewrites some K2 recipes; those now get
      K2's originals back. First entry: Chemical tech card (AAI added a multi-cylinder engine
      and changed glass amounts; restored to K2's blank card 5 + glass 15 + adv circuit 5 +
      sulfuric acid 50).
Version: 0.2.0
Date: 2026-07-08
  Major Features:
    - Redesign: single purpose, no per-recipe toggles. All vanilla recipes AAI Industry
      changed are unconditionally restored to their vanilla ingredients (45+ recipes:
      logistics, inserters, drills, furnaces, assemblers, power, oil processing, science
      packs, electric network, military, armor, vehicles).
    - Science packs are hand-craftable again (vanilla behaviour).
    - Everything AAI adds is kept as-is: burner assembler/lab/turbine, industrial furnace,
      area mining drill, fuel processor, wall & gate tiers, stone path, motors, glass, sand,
      stone tablets - including their AAI recipes, since they are new items.
    - Tech tree and research progression are untouched; recipes unlock where AAI put them.
    - Mod-respect guard: a recipe is only restored if it still matches AAI's version (or
      contains an AAI-only item). Recipes rewritten by another mod (e.g. Krastorio 2) are
      detected and left alone; skips are logged with an [E-Tech] prefix.
  Changes:
    - Removed all per-recipe/per-bundle startup settings. Only the crashed-ship toggle remains.
  Info:
    - boiler is not listed: AAI's ingredients already equal vanilla's (only its tech gate
      differs, and tech is out of scope).
    - offshore-pump ingredients are left as AAI's (vanilla 2.x values unverified; cheap either way).
Version: 0.1.0
Date: 2026-07-07
  Features:
    - Initial release: per-recipe revert toggles, fluid-basics un-gate, crashed-ship pickup.