Back
The Elder Scrolls Online

LibAsync

Overview

This is the lower limit for the frame-rate and LibAsync stops processing*.

Description
For developers:
Read this article of the Wiki.

For users:
There is a new (v3.0.2+) slash command:

This is the lower limit for the frame-rate and LibAsync stops processing*.
* If your machine is overloaded by other things, the frame-rate still could be even lower. Just saying.

Normally the frame-rate gets stabilized at 60, 30, 20, 15 fps, depending on your system.

API
local async = LibAsync
local task = async:Create(name)

The signature of FuncOfTask is:

-- Get the current context, if you are within a FuncOfTask or nil.

-- Create an interruptible task context.

-- Resume the execution context.

-- Suspend the execution context and allow to resume anytime later.

-- Interupt and fully stop the execution context. Can be called from outside to stop everything.

-- Run the given FuncOfTask in your task context execution.

-- Continue your task context execution with the given FuncOfTask after the previous as finished.

-- Start an interruptible for-loop.

-- Execute the async-for with the given step-function. The parameters of the step-function are those you would use in your for body.

The signature if func is function(index) or function(key, value)
If you return async.BREAK within func, it will break the loop.

-- Start an interruptible while-loop.

As long as func returns true, doFunc and func will be called again.

-- Start an once per frame wait loop.

Until func returns true, the function will be called again in the next frame. Keep the check condition simple. For example, checking a flag variable set by an event.

-- Suspend the execution of your task context for the given delay in milliseconds and then call the given FuncOfTask to continue.

Delay will suspend the exceution immediately, no matter there in the chain it is used. For delaying at chain position use:

-- Stop the delay created by Delay

-- Set a FuncOfTask as a final handler. Called even if something went wrong in your context.

-- Set a FuncOfTask as an error handler. Called if something went wrong in your context.

Example 1

Example 2

Example 3

Example 4

Example 5: Nested calls.

Output:
a
b
c
d
e
f

Remarks

- Yes, using LibAsync increases the total duration of the process for a better framerate.
- Lua code can cause hiccups and (micro-)freezes, but has nothing to do the lag.
- Lua can cause crash to bug report, if too much memory is allocated within one frame. (e.g. string operations) => Spread you code over time.
- Lua can cause kick to login, if too much server request are done within a time range. (e.g. map pings/buy/sell/ignore, etc.) => Spread you code over time.

ABOUT THIS LISTING

This page describes LibAsync by votan. The description and screenshots are the author's own, imported from their listing on ESOUI on 31 August 2026: https://www.esoui.com/downloads/info2125-LibAsync.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 version
  • 12.0.0
API VERSION

Built for ESO API version 12.0.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

macOS — ~/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.

Version history

  1. v3.1.4 Latest 9 Jun 2026 · 19 KB via cdn.esoui.com · 0 downloads Download
    version 3.1.4:
    - Improved log output, if debug is enabled. Thanks to @Dack.

    version 3.1.3:
    - GameCoreUI support.

    version 3.1.2:
    - Performance tracking enhancement for ConsoleUI.

    version 3.1.1:
    - Fixed issue with nested calls. Thanks for reporting.

    version 3.1:
    - Update version and dependencies.
    - Add test suite for LibAsync using Taneth framework.
    - Fix encoding issues and enhance testing documentation.
    - Updated README.md to fix encoding issues and add a testing section with detailed instructions and best practices.
    - Update async quick-sort.
    - Fixed While keyword.

    Thanks to @DakJaniels.

    version 3.0.2:
    - Reworked scheduling as a compromise between frame-rate stabilization and throughput. Thanks to @Sharlikran and @Dack.

    version 3.0.1:
    - Reverted use of zo_callLater.
    - Changed values adjustments.

    version 3.0.0:
    - Trade-off between high frame rate and lower end systems get things done at all.
    - Big Thank You to @Dack and @Sharlikran for their improvements and performance testing.

    version 2.3.4:
    - Update for "Necrom".
    - No LibStub support.

    version 2.3.2:
    - Fixed issue with nested "WaitUntil".

    version 2.3.1:
    - Forgot to remove return in "ThenDelay".

    version 2.3.0:
    - Fixed execution order issue, if operation are added ourside a running task.
    - Add new operation "ThenDelay".

    version 2.2.1:
    - Update to API 100033 "Markarth".

    version 2.2.0:
    - Update to API 100032 "Stonethorn".
    - New async functions: While and WaitUntil.

    version 2.1.0: Register scheduler as late as possible to take count to all actions not using LibAsync.

    version 2.0.2:
    - Update to API 100029 "Dragonhold".

    version 2.0.1:
    - Update to API 100028 "Scalebreaker".

    version 2.0.0:
    - API bump 100027 "Elsweyr".
    - Need to go to 2.0 because of the version check of LibStub.

    version 1.10.0:
    - API bump 100027 "Elsweyr".
    - Use of LibStub is optional.

    version 1.9.0:
    - Update to API 100026 "Wrathstone".
    - For V-Sync off/G-Sync the minimum target framerate is 80.

    version 1.8.1:
    - Work without LibStub as well.

    version 1.8.0:
    - API update "Murkmire".
    - Adjustment to scheduler calculation: Reduce allowed-time after a burst even if loops still running.
    - Change from GetGameTimeMilliseconds to GetGameTimeSeconds, which has in fact more precision. Thanks to @zsban.

    Off-site on cdn.esoui.com — no checksum, because we never held this file. Link checked by our review team on 31 Aug 2026.

Comments

No comments yet.

Sign in to leave a comment.

Report this mod

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.

Sign in to report this mod.

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.

Learn More