Depends on the following (separately installed) library: LibDebugLogger
Depends on the following (separately installed) library: LibDebugLogger
A library of common convenience functionality that I use with most of my addons.
Current Library Documentation Wiki:
http://github.com/Shadowfen/LibSFUtils/wiki
This is a library of common convenience functionality that I use with most of my addons. It is installed as a standalone library/addon. Load the library within your addon code using the global variable LibSFUtils
local SF = LibSFUtils
and then use the variables and functions defined in here with your local variable as the prefix for them. For example:
d(SF.bool2str(true))
Some of the utilities included are:
✓ Chat message and command helper
✓ String manipulation and formatting
✓ Table utilities
✓ Color utilities
✓ Logging and debugging helpers
✓ Timers and delayed callbacks
✓ Hook management
✓ Version checking
✓ Safe function execution
✓ Safe callback execution
✓ Queue management
✓ Miscellaneous convenience functions
Most components are independent and can be used without learning the rest of the library.
ABOUT THIS LISTING
This page describes LibSFUtils by Shadowfen. The description and screenshots are the author's own, imported from their listing on ESOUI on 3 October 2026: https://www.esoui.com/downloads/info2231-LibSFUtils.html
Mythiq.net hosts no files for it. The download button goes straight to the release file on cdn.esoui.com, so you are downloading from the author's own host, not from a copy of ours.
The download count, rating and comments on this page start at zero and count Mythiq.net only. The source's own figures are not copied here — they measure a different site, and a number that cannot be checked against our own ledger is not worth printing.
Requirements
Game versions
12.1.0
12.0.0
11.3.0
11.2.0
11.1.0
11.0.0
API VERSION
Built for ESO API version 12.1.0, 12.0.0, 11.3.0, 11.2.0, 11.1.0. After a patch the game marks add-ons built for the previous API as out of date; the "Allow out of date add-ons" checkbox in the add-on menu loads them anyway, and most work.
LIBRARIES
Many ESO add-ons depend on a shared library — LibAddonMenu-2.0 above all — which is installed separately, exactly like an add-on. A dependency that is missing shows as the add-on simply not appearing in the list.
CONSOLE
Add-ons are PC and Mac only. There is no way to load them on console.
Installation
1. Download the archive with the button on this page and unzip it.
2. Move the unzipped folder into your add-ons directory:
Windows — Documents\Elder Scrolls Online\live\AddOns
3. Start the game, and at the character select screen click Add-Ons.
4. Tick the add-on. If it is greyed out and marked out of date, tick "Allow out of date add-ons" at the top of the same panel.
5. Log in. Most add-ons need a /reloadui after they are first enabled.
UPDATING
Delete the old folder first. ESO loads everything it finds, and two copies of one add-on is the usual cause of "an add-on has produced an error" on login.
This release downloads from cdn.esoui.com, not from us, so
there is no checksum to compare against. Scan the archive before you unpack it.
- Added default color definitions for yellow, and cyan.
- Updated SafeAddString to account for the newer ZOS versions that still don't quite fix their version problem. Tested.
- Created new function typeof() which will return the metatable __type value if it exists for a table or userdata and otherwise returns the standard type() lua function value.
- API bump.
77:
- Created a new logging convenience function that will create specialized logging functions for your addon: sfutil.InitSafeLogger(namespace, loggervar, addonname) which will return three functions:
loggerFn - returns the addon's logger, creating it if necessary (so loggerFn():Warn("whatever"))
logDebug - logs a DEBUG-level message if specific debug logging is enabled
logWouldDebug - returns true if DEBUG-level logging is currently enabled
- Refactored the print-based logger implementation into separate active, disabled/no-op, and state-management implementations.
- Added centralized debug-method state management so Debug() is automatically switched between the active and no-op implementations based on both logger enabled state and debug state.
- Added a shared SetDebug() implementation for both the LibDebugLogger and print-based logger backends.
- Preserved the original LibDebugLogger:Debug() implementation when LibDebugLogger is available, while using the print implementation as the fallback.
- Updated SetEnabled() so enabling/disabling a print logger switches Error(), Warn(), Info(), and Debug() implementations without changing the logger object.
- Ensured debug logging remains disabled unless both the logger and debug logging are enabled.
- Updated SafeLogger() to correctly return an existing logger instead of overwriting it with nil when called repeatedly.
- Added/expanded logger initialization so newly created loggers consistently start enabled with debug logging disabled when created through SafeLogger()/SafeLoggerFunction().
- Added/expanded support for CreateNilLogger() as a no-op logger with the same public logging API.
- Reduced duplication between the LibDebugLogger and print-based logger paths by sharing debug-state management.
76:
- Revised the string functions str(), dstr(), lstr() to consolidate commonly used string formating code.
- Added a tblstr() string function that recurses into tables to create a string from them where the tables are printed inside {} and a "=" delimiter is inserted between keys and values. This differs from the older string functions which recursed into tables and printed keys and values "flattened" instead of indicating tables or embedded tables.
- Added a optstr() to allow the user to specify various formatting options to create the output string. Options that can be set include:
* `showFunctions` — If true, functions are represented as "", and the `runFunctions` option is ignored..
If false, the string "" is NOT added to the result.
* `runFunctions` — If true, functions are executed and their output is formatted for addition to the results.
Note: if `showFunctions` is true then this option is ignored.
If false, then functions are not executed.
* `localizeNumbers` — If true, numeric values are passed to GetString() instead of tostring().
* `seenText` — Text emitted when a table has already been encountered. Defaults to "".
* `tableOpen` — Optional text emitted before the contents of a table.
* `tableClose` — Optional text emitted after the contents of a table.
* `keyValueDelim` - Optional text emitted between a key and a value in a table
- Added file loading checks by asserts for inter-file dependencies.
75:
- Fixed str() and dstr() to properly recurse embedded tables.
- Added file loaded checks by asserts for inter-file dependencies.
74:
- Update manifest.
73:
Off-site on cdn.esoui.com —
no checksum, because we never held this file.
Link checked by our review team on 3 Oct 2026.
Tell us if something is wrong — a file that will not work, content taken from
someone else, or anything that looks unsafe. Reports go to our review team, not
to the author.
We use cookies to ensure that we give you the best experience on our website and improve your experience. By continuing to use this site you consent to such use of cookies.