DFHack 0.43.05-r3



  • Linux: fixed argument to setarch in the dfhack launcher script

  • Ruby: fixed an error that occurred when the DF path contained an apostrophe

  • diggingInvaders now compiles again and is included

  • labormanager:

    • stopped waiting for on-duty military dwarves with minor injuries to obtain care
    • stopped waiting for meetings when participant(s) are dead
    • fixed a crash for dwarves with no cultural identity
  • Luasocket: fixed receive() with a byte count

  • orders: fixed an error when importing orders with material categories

  • siren: fixed an error

  • stocksettings: fixed serialization of barrel and bin counts

  • view-item-info: fixed a CHEESE_MAT-related error

Misc Improvements

DFHack 0.43.05-r2


  • Rebuilding DFHack can be faster if nothing Git-related has changed
  • Plugins can now hook Screen::readTile()
  • Improved Lua compatibility with plugins that hook into GUI functions (like TWBT)
  • Expanded focus strings for jobmanagement and workquota_condition viewscreens
  • Gui::getAnyUnit(): added support for viewscreen_unitst, viewscreen_textviewerst, viewscreen_layer_unit_relationshipst
  • Fixed (limited) keybinding support in PRINT_MODE:TEXT on macOS
  • Added a new standardized Gui::refreshSidebar() function to fix behavior of some plugins on the lowest z-level
  • New Buildings module functions: markedForRemoval(), getCageOccupants()
  • Limited recursive command invocations to 20 to prevent crashes
  • Added an onLoad.init-example file


  • Improved C++ exception handling for some native functions that aren’t direct wrappers around C++ functions (in this case, error messages could be nil and cause the Lua interpreter to quit)

  • Added support for a key_pen option in Label widgets

  • Fixed to_first argument to dfhack.screen.dismiss()

  • Added optional map parameters to some screen functions

  • Exposed some more functions to Lua:

    • dfhack.gui.refreshSidebar()
    • dfhack.gui.getAnyUnit()
    • dfhack.gui.getAnyBuilding()
    • dfhack.gui.getAnyItem()
    • dfhack.gui.getAnyPlant()
    • dfhack.gui.getDepthAt()
    • dfhack.units.getUnitsInBox()
    • dfhack.units.isVisible()
    • dfhack.maps.isTileVisible()
    • dfhack.buildings.markedForRemoval()
    • dfhack.buildings.getCageOccupants()
    • dfhack.internal.md5()
    • dfhack.internal.md5File()
    • dfhack.internal.threadid()
  • New function: widgets.Pages:getSelectedPage()

  • Added a key option to EditField and FilteredList widgets

  • Fixed an issue preventing repeatUtil.cancel() from working when called from the callback


  • Fixed a crash when creating new instances of DF virtual classes (e.g. fixes a lever crash)
  • Ruby scripts can now be loaded from any script paths specified (from script- paths.txt or registered through the Lua API)
  • unit_find() now uses Gui::getSelectedUnit() and works in more places (e.g. exterminate now works from more screens, like command-prompt)

New Internal Commands

  • alias: allows configuring aliases for other commands

New Plugins

New Scripts

New Tweaks

  • tweak burrow-name-cancel: Implements the “back” option when renaming a burrow, which currently does nothing (Bug 1518)
  • tweak cage-butcher: Adds an option to butcher units when viewing cages with “q”


  • Enforced use of stdout.log and stderr.log (instead of their .txt counterparts) on Windows

  • Fixed getItemBaseValue() for cheese, sheets and instruments

  • Fixed alignment in:

    • viewscreen_choose_start_sitest
    • viewscreen_export_graphical_mapst
    • viewscreen_setupadventurest
    • viewscreen_setupdwarfgamest
  • adv-max-skills: fixed error due to viewscreen changes

  • autolabor: fixed a crash when assigning haulers while traders are active

  • buildingplan: fixed an issue that prevented certain numbers from being used in building names

  • confirm:

    • dialogs are now closed permanently when disabled from the settings UI
    • fixed an issue that could have prevented closing dialogs opened by pressing “s”
  • embark-tools: stopped the sand indicator from overlapping dialogs

  • exportlegends: fixed some crashes and site map issues

  • devel/find-offsets: fixed current_weather scan

  • gui/extended-status: fixed an error when no beds are available

  • gui/family-affairs: fixed issues with assigning lovers

  • gui/gm-editor:

    • made keybinding display order consistent
    • stopped keys from performing actions in help screen
  • gui/manager-quantity:

    • now allows orders with a limit of 0
    • fixed screen detection
  • gui/mechanisms, gui/room-list: fixed an issue when recentering the map when exiting

  • lever: prevented pulling non-lever buildings, which can cause crashes

  • markdown: fixed file encoding

  • modtools/create-unit:

    • fixed when popup announcements are present
    • added checks to ensure that the current game mode is restored
  • resume: stopped drawing on the map border

  • show-unit-syndromes: fixed an error when handling some syndromes

  • strangemood: fixed some issues with material searches

  • view-item-info: fixed a color-related error for some materials

Misc Improvements

  • Docs: prevented automatic hyphenation in some browsers, which was producing excessive hyphenation sometimes

  • command-prompt: invoking command-prompt a second time now hides the prompt

  • gui/extended-status: added an option to assign/replace the manager

  • gui/load-screen:

    • adjusted dialog width for long folder names
    • added modification times and DF versions to dialog
  • gui/mechanisms, gui/room-list, gui/siege-engine: add and list “exit to map” options

  • lever: added support for pulling levers at high priority

  • markdown: now recognizes -n in addition to /n

  • remotefortressreader: more data exported, used by Armok Vision v0.17.0

  • resume, siege-engine: improved compatibility with GUI-hooking plugins (like TWBT)

  • sc-script: improved help text

  • teleport: can now be used as a module

  • tweak embark-profile-name: now enabled in dfhack.init-example

  • tweak hotkey-clear: fixed display on larger screens

DFHack 0.43.05-r1


  • 64-bit support on all platforms
  • Several structure fixes to match 64-bit DF’s memory layout
  • Added DFHack::Job::removeJob() function
  • New module: Designations - handles designation creation (currently for plants only)
  • Added Gui::getSelectedPlant()
  • Added Units::getMainSocialActivity(), Units::getMainSocialEvent()
  • Visual Studio 2015 now required to build on Windows instead of 2010
  • GCC 4.8 or newer required to build on Linux and OS X (and now supported on OS X)
  • Updated TinyXML from 2.5.3 to 2.6.2
  • Added the ability to download files manually before building


  • Lua has been updated to 5.3 - see for details

    • Floats are no longer implicitly converted to integers in DFHack API calls
  • supports more types: char, intptr_t, uintptr_t, long, unsigned long

  • String representations of vectors and a few other containers now include their lengths

  • Added a tile-material module

  • Added a Painter:key_string() method

  • Made dfhack.gui.revealInDwarfmodeMap() available


  • Added support for loading ruby 2.x libraries

New Plugins

New Scripts

New Tweaks


  • The DF path on OS X can now contain spaces and : characters

  • Buildings::setOwner() changes now persist properly when saved

  • ls now lists scripts in folders other than hack/scripts, when applicable

  • Fixed plug output alignment for plugins with long names

  • add-thought: fixed support for emotion names

  • autochop:

    • fixed several issues with job creation and removal
    • stopped designating the center tile (unreachable) for large trees
    • stopped options from moving when enabling and disabling burrows
    • fixed display of unnamed burrows
  • devel/find-offsets: fixed a crash when vtables used by globals aren’t available

  • getplants:

    • fixed several issues with job creation and removal
    • stopped designating the center tile (unreachable) for large trees
  • gui/workflow: added extra keybinding to work with gui/extended-status

  • manipulator:

    • Fixed crash when selecting a profession from an empty list
    • Custom professions are now sorted alphabetically more reliably
  • modtools/create-item:

    • made gloves usable by specifying handedness
    • now creates pairs of boots and gloves
  • modtools/create-unit:

    • stopped permanently overwriting the creature creation menu in arena mode
    • now uses non-English names
    • added -setUnitToFort option to make a unit a civ/group member more easily
    • fixed some issues where units would appear in unrevealed areas of the map
  • modtools/item-trigger: fixed errors with plant growths

  • remotefortressreader: fixed a crash when serializing the local map

  • ruby: fixed a crash when unloading the plugin on Windows

  • Stonesense: disabled overlay in STANDARD-based print modes to prevent crashes

  • title-version: now hidden when loading an arena

Misc Improvements

  • Documented all default keybindings (from dfhack.init-example) in the docs for the relevant commands; updates enforced by build system.

  • autounsuspend: reduced update frequency to address potential performance issues

  • gui/extended-status: added a feature to queue beds

  • lua and gui/gm-editor now support the same aliases (scr, unit, etc.)

  • manipulator: added social activities to job column

  • remotefortressreader: Added support for

    • world map snow coverage
    • spatters
    • wall info
    • site towers, world buildings
    • surface material
    • building items
    • DF version info
  • title-version: Added a prerelease indicator

  • workflow: Re-added Alt-W keybindings

DFHack 0.43.03-r1


  • Label widgets can now easily register handlers for mouse clicks

New Features

  • add-thought: allow syndrome name as -thought argument

  • gui/gm-editor

    • Added ability to insert default types into containers. For primitive types leave the type entry empty, and for references use *.
    • Added shift-esc binding to fully exit from editor
    • Added gui/gm-editor toggle command to toggle editor visibility (saving position)
  • modtools/create-unit:

    • Added an option to attach units to an existing wild animal population
    • Added an option to attach units to a map feature


  • autofarm: Can now handle crops that grow for more than a season

  • combine-plants: Fixed recursion into sub-containers

  • createitem: Now moves multiple created items to cursor correctly

  • exportlegends: Improved handling of unknown enum items (fixes many errors)

  • gui/create-item: Fixed quality when creating multiple items

  • gui/mod-manager: Fixed error when mods folder doesn’t exist

  • modtools/item-trigger: Fixed handling of items with subtypes

  • reveal: revflood now handles constructed stairs with floors in generated fortresses

  • stockflow:

    • Can order metal mechanisms
    • Fixed material category of thread-spinning jobs

Misc Improvements

  • The built-in ls command now wraps the descriptions of commands
  • catsplosion: now a lua script instead of a plugin
  • fix/diplomats: replaces fixdiplomats
  • fix/merchants: replaces fixmerchants
  • prefchange: added a help option
  • probe: now displays raw tiletype names
  • Unified script documentation and in-terminal help options


  • tweak manager-quantity: no longer needed

DFHack 0.42.06-r1


  • Commands to run on startup can be specified on the command line with +


    ./dfhack +devel/print-args example
    "Dwarf Fortress.exe" +devel/print-args example
  • Prevented plugins with active viewscreens from being unloaded and causing a crash

  • Additional script search paths can be specified in dfhack-config/script-paths.txt


  • Building-hacks now supports auto_gears flags. It automatically finds and animates gears in building definition
  • Changed how Eventful triggers reaction complete. Now it has onReactionComplete and onReactionCompleting. Second one can be canceled

New Plugins

  • autogems: Creates a new Workshop Order setting, automatically cutting rough gems

New Scripts

New Features

  • buildingplan: Support for floodgates, grates, and bars

  • colonies: new place subcommand and supports any vermin (default honey bees)

  • confirm: Added a confirmation for retiring locations

  • exportlegends: Exports more information (poetic/musical/dance forms, written/artifact content, landmasses, extra histfig information, and more)

  • search: Support for new screens:

    • location occupation assignment
    • civilization animal training knowledge
    • animal trainer assignment
  • tweak:

    • tweak block-labors: Prevents labors that can’t be used from being toggled
    • tweak hide-priority: Adds an option to hide designation priority indicators
    • tweak title-start-rename: Adds a safe rename option to the title screen “Start Playing” menu
  • zone:

    • Added unassign subcommand
    • Added only option to assign subcommand


  • Fixed a crash bug caused by the historical figures DFHack uses to store persistent data.

  • More plugins should recognize non-dwarf citizens

  • Fixed a possible crash from cloning jobs

  • moveToBuilding() now sets flags for items that aren’t a structural part of the building properly

  • autotrade, stocks: Made trading work when multiple caravans are present but only some can trade

  • confirm note-delete: No longer interferes with name entry

  • exportlegends: Handles entities without specific races, and a few other fixes for things new to v0.42

  • fastdwarf: Fixed a bug involving teleporting mothers but not the babies they’re holding.

  • gaydar: Fixed text display on OS X/Linux and failure with soul-less creatures

  • manipulator:

    • allowed editing of non-dwarf citizens
    • stopped ghosts and visitors from being editable
    • fixed applying last custom profession
  • modtools/create-unit: Stopped making units without civs historical figures

  • modtools/force:

    • Removed siege option
    • Prevented a crash resulting from a bad civilization option
  • showmood: Fixed name display on OS X/Linux

  • view-item-info: Fixed density units

Misc Improvements


  • DFusion: legacy script system, obsolete or replaced by better alternatives

DFHack 0.40.24-r5

New Features

  • confirm:

    • Added a uniform-delete option for military uniform deletion
    • Added a basic in-game configuration UI


  • Fixed a rare crash that could result from running keybinding in onLoadWorld.init
  • Script help that doesn’t start with a space is now recognized correctly
  • confirm: Fixed issues with haul-delete, route-delete, and squad-disband confirmations intercepting keys too aggressively
  • emigration should work now
  • fix-unit-occupancy: Significantly optimized - up to 2,000 times faster in large fortresses
  • gui/create-item: Allow exiting quantity prompt
  • gui/family-affairs: Fixed an issue where lack of relationships wasn’t recognized and other issues
  • modtools/create-unit: Fixed a possible issue in reclaim fortress mode
  • search: Fixed a crash on the military screen
  • tweak max-wheelbarrow: Fixed a minor display issue with large numbers
  • workflow: Fixed a crash related to job postings (and added a fix for existing, broken jobs)

Misc Improvements

  • Unrecognized command feedback now includes more information about plugins
  • fix/dry-buckets: replaces the drybuckets plugin
  • feature: now implemented by a script

DFHack 0.40.24-r4


  • A method for caching screen output is now available to Lua (and C++)
  • Developer plugins can be ignored on startup by setting the DFHACK_NO_DEV_PLUGINS environment variable
  • The console on Linux and OS X now recognizes keyboard input between prompts
  • JSON libraries available (C++ and Lua)
  • More DFHack build information used in plugin version checks and available to plugins and lua scripts
  • Fixed a rare overflow issue that could cause crashes on Linux and OS X
  • Stopped DF window from receiving input when unfocused on OS X
  • Fixed issues with keybindings involving CtrlA and CtrlZ, as well as AltE/U/N on OS X
  • Multiple contexts can now be specified when adding keybindings
  • Keybindings can now use F10-F12 and 0-9
  • Plugin system is no longer restricted to plugins that exist on startup
  • dfhack.init file locations significantly generalized


  • Scripts can be enabled with the built-in enable/disable commands
  • A new function, reqscript(), is available as a safer alternative to script_environment()
  • Lua viewscreens can choose not to intercept the OPTIONS keybinding

New internal commands

  • kill-lua: Interrupt running Lua scripts
  • type: Show where a command is implemented

New plugins

  • confirm: Adds confirmation dialogs for several potentially dangerous actions
  • fix-unit-occupancy: Fixes issues with unit occupancy, such as faulty “unit blocking tile” messages (Bug 3499)
  • title-version (formerly vshook): Display DFHack version on title screen

New scripts

  • armoks-blessing: Adjust all attributes, personality, age and skills of all dwarves in play
  • brainwash: brainwash a dwarf (modifying their personality)
  • burial: sets all unowned coffins to allow burial (“-pets” to allow pets too)
  • deteriorateclothes: make worn clothes on the ground wear far faster to boost FPS
  • deterioratecorpses: make body parts wear away far faster to boost FPS
  • deterioratefood: make food vanish after a few months if not used
  • elevate-mental: elevate all the mental attributes of a unit
  • elevate-physical: elevate all the physical attributes of a unit
  • emigration: stressed dwarves may leave your fortress if they see a chance
  • fix-ster: changes fertility/sterility of animals or dwarves
  • gui/family-affairs: investigate and alter romantic relationships
  • make-legendary: modify skill(s) of a single unit
  • modtools/create-unit: create new units from nothing
  • modtools/equip-item: a script to equip items on units
  • points: set number of points available at embark screen
  • pref-adjust: Adjust all preferences of all dwarves in play
  • rejuvenate: make any “old” dwarf 20 years old
  • starvingdead: make undead weaken after one month on the map, and crumble after six
  • view-item-info: adds information and customisable descriptions to item viewscreens
  • warn-starving: check for starving, thirsty, or very drowsy units and pause with warning if any are found

New tweaks

  • embark-profile-name: Allows the use of lowercase letters when saving embark profiles
  • kitchen-keys: Fixes DF kitchen meal keybindings
  • kitchen-prefs-color: Changes color of enabled items to green in kitchen preferences
  • kitchen-prefs-empty: Fixes a layout issue with empty kitchen tabs


  • Plugins with vmethod hooks can now be reloaded on OS X
  • Lua’s os.system() now works on OS X
  • Fixed default arguments in Lua gametype detection functions
  • Circular lua dependencies (reqscript/script_environment) fixed
  • Prevented crash in Items::createItem()
  • buildingplan: Now supports hatch covers
  • gui/create-item: fixed assigning quality to items, made Esc work properly
  • gui/gm-editor: handles lua tables properly
  • help: now recognizes built-in commands, like help
  • manipulator: fixed crash when selecting custom professions when none are found
  • remotefortressreader: fixed crash when attempting to send map info when no map was loaded
  • search: fixed crash in unit list after cancelling a job; fixed crash when disabling stockpile category after searching in a subcategory
  • stocksettings: now checks/sanitizes filenames when saving
  • stocks: fixed a crash when right-clicking
  • steam-engine: fixed a crash on arena load; number keys (e.g. 2/8) take priority over cursor keys when applicable
  • tweak fps-min fixed
  • tweak farm-plot-select: Stopped controls from appearing when plots weren’t fully built
  • workflow: Fixed some issues with stuck jobs. Existing stuck jobs must be cancelled and re-added
  • zone: Fixed a crash when using zone set (and a few other potential crashes)

Misc Improvements

  • DFHack documentation:

    • massively reorganised, into files of more readable size
    • added many missing entries
    • indexes, internal links, offline search all documents
    • includes documentation of linked projects (df-structures, third-party scripts)
    • better HTML generation with Sphinx
    • documentation for scripts now located in source files
  • autolabor:

    • Stopped modification of labors that shouldn’t be modified for brokers/diplomats
    • Prioritize skilled dwarves more efficiently
    • Prevent dwarves from running away with tools from previous jobs
  • automaterial: Fixed several issues with constructions being allowed/disallowed incorrectly when using box-select

  • dwarfmonitor:

    • widgets’ positions, formats, etc. are now customizable
    • weather display now separated from the date display
    • New mouse cursor widget
  • gui/dfstatus: Can enable/disable individual categories and customize metal bar list

  • full-heal: -r option removes corpses

  • gui/gm-editor

    • Pointers can now be displaced
    • Added some useful aliases: “item” for the selected item, “screen” for the current screen, etc.
    • Now avoids errors with unrecognized types
  • gui/hack-wish: renamed to gui/create-item

  • keybinding list accepts a context

  • lever:

    • Lists lever names
    • lever pull can be used to pull the currently-selected lever
  • memview: Fixed display issue

  • modtools/create-item: arguments are named more clearly, and you can specify the creator to be the unit with id (useful in conjunction with modtools/create-unit)

  • nyan: Can now be stopped with dfhack-run

  • plug: lists all plugins; shows state and number of commands in plugins

  • prospect: works from within command-prompt

  • quicksave: Restricted to fortress mode

  • remotefortressreader: Exposes more information

  • search:

    • Supports noble suggestion screen (e.g. suggesting a baron)
    • Supports fortress mode loo[k] menu
    • Recognizes ? and ; keys
  • stocks: can now match beginning and end of item names

  • teleport: Fixed cursor recognition

  • tidlers, twaterlvl: now implemented by scripts instead of a plugin

  • tweak:

    • debug output now logged to stderr.log instead of console - makes DFHack start faster
    • farm-plot-select: Fixed issues with selecting undiscovered crops
  • workflow: Improved handling of plant reactions


  • embark-tools nano: 1x1 embarks are now possible in vanilla 0.40.24

DFHack 0.40.24-r3


  • Ruby library now included on OS X - Ruby scripts should work on OS X 10.10
  • libstdc++ should work with older versions of OS X
  • Added support for onMapLoad.init / onMapUnload.init scripts
  • game type detection functions are now available in the World module
  • The DFHACK_LOG_MEM_RANGES environment variable can be used to log information to stderr.log on OS X
  • Fixed adventure mode menu names
  • Fixed command usage information for some commands


  • Lua scripts will only be reloaded if necessary
  • Added a df2console() wrapper, useful for printing DF (CP437-encoded) text to the console in a portable way
  • Added a strerror() wrapper

New Internal Commands

  • hide, show: hide and show the console on Windows
  • sc-script: Allows additional scripts to be run when certain events occur (similar to onLoad*.init scripts)

New Plugins

New Scripts

New Tweaks

  • fps-min: Fixes the in-game minimum FPS setting
  • shift-8-scroll: Gives Shift+8 (or *) priority when scrolling menus, instead of scrolling the map
  • tradereq-pet-gender: Displays pet genders on the trade request screen


Misc Improvements

  • autolabor: A negative pool size can be specified to use the most unskilled dwarves
  • Building-hacks:
    • Added a way to allow building to work even if it consumes more power than is available.
    • Added setPower/getPower functions.
  • catsplosion: Can now trigger pregnancies in (most) other creatures
  • exportlegends: info and all options export legends_plus.xml with more data for legends utilities
  • manipulator:
    • Added ability to edit nicknames/profession names
    • added “Job” as a View Type, in addition to “Profession” and “Squad”
    • added custom profession templates with masking
  • remotefortressreader: Exposes more information

DFHack 0.40.24-r2


  • Lua scripts can set environment variables of each other with dfhack.run_script_with_env

  • Lua scripts can now call each others internal nonlocal functions with dfhack.script_environment(scriptName).functionName(arg1,arg2)

  • Eventful: Lua reactions no longer require LUA_HOOK as a prefix; you can register a callback for the completion of any reaction with a name

  • Filesystem module now provides file access/modification times and can list directories (normally and recursively)

  • Units Module: New functions:

  • Buildings Module: New Functions:



  • dfhack.run_script should correctly find save-specific scripts now.
  • add-thought: updated to properly affect stress.
  • hfs-pit: should work now
  • autobutcher: takes gelding into account
  • init.lua existence checks should be more reliable (notably when using non-English locales)

Misc Improvements

Multiline commands are now possible inside dfhack.init scripts. See dfhack.init-example for example usage.

DFHack 0.40.24-r1


CMake shouldn’t cache DFHACK_RELEASE anymore. People may need to manually update/delete their CMake cache files to get rid of it.

DFHack 0.40.24-r0


  • Events from EventManager: fixed crash error with EQUIPMENT_CHANGE event.
  • key modifier state exposed to Lua (ie Ctrl, Alt, Shift)

Fixes can now be run from other directories on OS X

New Plugins

  • blueprint: export part of your fortress to quickfort .csv files

New Scripts

  • hotkey-notes: print key, name, and jump position of hotkeys


  • needs_porting/*

Misc Improvements

Added support for searching more lists

Older Changelogs

Are kept in a seperate file: HISTORY - old changelogs