This is documentation for EmbersTextAPI 2.9.4. View the latest version

Configuration

Embers Text API ships with sensible defaults and requires no configuration to get started. For server operators who want fine-grained control, a full config system is available.


LoaderFile(s)Location
Forge / NeoForgeemberstextapi-common.toml (server)config/
Forge / NeoForgeemberstextapi-client.toml (client)config/
Fabricemberstextapi.json (all options)config/

On Forge and NeoForge, server-side options live in the common config (synced to all players), while client-side options live in the client config (per-player). On Fabric, everything is in a single JSON file.

Config files are created automatically on first launch.


TypeDefaultSide
BooleantrueServer

When enabled, new players see a one-time info message about ETA on first join.

TypeDefaultSide
BooleantrueClient

Master toggle for immersive messages. When set to false, all immersive messages (from commands, API, or queues) are silently ignored on the client — nothing renders on screen.


TypeDefaultSide
List of strings[] (empty)Client

A list of effect names to disable. Disabled effects render as plain text — the tag is still parsed, but the effect does nothing.

Forge / NeoForge example (emberstextapi-client.toml):

[effects]
disabledEffects = ["glitch", "shake", "turbulence"]

Fabric example (emberstextapi.json):

{
"disabledEffects": ["glitch", "shake", "turbulence"]
}

This disables the effects everywhere: chat markup, immersive messages, and API calls. The text content still appears — only the visual effect is suppressed.

All effect names: rainbow, rainb, grad, gradient, color, col, pulse, fade, wave, bounce, swing, turb, turbulence, shake, circle, wiggle, pend, pendulum, scroll, glitch, neon, glow, shadow, typewriter, type, obfuscate, obf

TypeDefaultSide
BooleanfalseClient

An accessibility toggle that disables all positional/motion effects while keeping color effects working. When enabled, the following effects are treated as disabled:

wave, bounce, swing, shake, circle, wiggle, pendulum, pend, turbulence, turb, scroll

Color-based effects like rainbow, gradient, pulse, fade, neon, and color continue to work normally.

Forge / NeoForge example (emberstextapi-client.toml):

[effects]
reduceMotion = true

Fabric example (emberstextapi.json):

{
"reduceMotion": true
}
TypeDefaultRangeSide
Integer31–3Client

Caps the maximum quality level for neon/glow effects. The neon effect uses multi-ring sampling that can be expensive on lower-end hardware. This setting limits how many samples are used, regardless of what the markup requests.

ValueQualitySamples per character
1Fast~6
2Balanced~12
3Quality (default)~20

If a message uses <neon q=3> but the config has maxNeonQuality = 1, the effect renders at quality 1.

Forge / NeoForge example (emberstextapi-client.toml):

[effects]
maxNeonQuality = 1

These settings control which players can use markup tags like <rainbow> in regular chat messages.

TypeDefaultSide
String"NONE"Server
ValueBehavior
NONENo restrictions — all players can use markup in chat
WHITELISTOnly players listed in markupPlayerList can use markup
BLACKLISTPlayers listed in markupPlayerList cannot use markup; everyone else can
TypeDefaultSide
List of strings[] (empty)Server

Player UUIDs for the whitelist or blacklist. UUIDs are case-insensitive.

Forge / NeoForge example (emberstextapi-common.toml):

[markup]
markupPermissionMode = "BLACKLIST"
markupPlayerList = ["550e8400-e29b-41d4-a716-446655440000"]

Fabric example (emberstextapi.json):

{
"markupPermissionMode": "WHITELIST",
"markupPlayerList": [
"550e8400-e29b-41d4-a716-446655440000",
"6ba7b810-9dad-11d1-80b4-00c04fd430c8"
]
}

When a player who is not allowed to use markup sends a chat message containing tags, all tags are silently stripped — the plain text content is preserved and broadcast normally.

TypeDefaultSide
List of strings[] (empty)Server

Specific markup tags to strip from player-authored chat messages. Unlike disabledEffects (which is client-side and disables effects everywhere), this only affects chat — effects sent via the API or commands still work.

This is useful for modpack developers who want to allow most effects in chat but ban specific ones (e.g., glitch or neon) that are too distracting or performance-heavy.

Forge / NeoForge example (emberstextapi-common.toml):

[markup]
disallowedMarkupTags = ["glitch", "neon", "glow"]

Fabric example (emberstextapi.json):

{
"disallowedMarkupTags": ["glitch", "neon", "glow"]
}

TypeDefaultSide
Integer50Server

Maximum character length for item names in the anvil. Vanilla Minecraft limits names to 50 characters. Increase this to allow longer names — useful for items with markup-styled names.

Forge / NeoForge example (emberstextapi-common.toml):

[anvil]
anvilNameMaxLength = 200

Fabric example (emberstextapi.json):

{
"anvilNameMaxLength": 200
}

TypeDefaultRangeSide
Integer (ticks)0 (unlimited)0–72000Client

Maximum duration for any immersive message, in ticks (20 ticks = 1 second). Messages with longer durations (or unlimited duration) are capped to this value. Set to 0 for no limit.

TypeDefaultRangeSide
Integer0 (unlimited)0–100Client

Maximum number of immersive messages that can be on screen simultaneously. When the limit is reached, new messages are silently dropped until an existing message expires. Set to 0 for no limit.


Server-Side Message Limits {#server-limits}

Section titled “Server-Side Message Limits {#server-limits}”

These settings are enforced on the server before messages are sent to clients. They protect all players regardless of their individual client config, and are particularly useful for modpack developers.

TypeDefaultRangeSide
Integer (ticks)12000–72000Server

Server-enforced maximum message duration in ticks. Messages with longer durations (or unlimited duration) are capped to this value before being sent. 1200 ticks = 60 seconds. Set to 0 for no limit.

Forge / NeoForge example (emberstextapi-common.toml):

[messages]
maxServerMessageDuration = 600
TypeDefaultRangeSide
Integer100–100Server

Server-enforced maximum simultaneous messages per player. Set to 0 for no limit.

Forge / NeoForge example (emberstextapi-common.toml):

[messages]
maxServerActiveMessages = 5
TypeDefaultRangeSide
Integer500–1000Server

Maximum pending steps per queue channel. Prevents memory exhaustion from excessively large queues. When the limit is reached, additional steps are silently dropped. Set to 0 for no limit.

Forge / NeoForge example (emberstextapi-common.toml):

[messages]
maxQueueSize = 25
TypeDefaultSide
List of strings[] (empty)Server

If non-empty, only effects in this list are allowed in server-sent messages. Effects not in the list are replaced with no-ops (plain text). An empty list means all effects are allowed.

This is an allowlist — it controls what effects the server will send to clients, providing server-side control over what API consumers and commands can use.

Forge / NeoForge example (emberstextapi-common.toml):

[messages]
allowedEffects = ["rainbow", "gradient", "color", "fade", "pulse"]

Fabric example (emberstextapi.json):

{
"allowedEffects": ["rainbow", "gradient", "color", "fade", "pulse"]
}

TypeDefaultRangeSide
Integer25664–2048Client

Maximum entries in the text layout cache (LRU). Higher values use more memory but avoid recomputing character widths and line breaks for frequently rendered text. Lower values are suitable for memory-constrained environments.

Forge / NeoForge example (emberstextapi-client.toml):

[performance]
textLayoutCacheSize = 128
TypeDefaultSide
BooleantrueClient

Master toggle for SDF (Signed Distance Field) font rendering. When set to false, SDF fonts (like the bundled Norse font) fall back to vanilla bitmap rendering.

Disable this if you experience GPU compatibility issues or visual glitches with custom fonts.

Forge / NeoForge example (emberstextapi-client.toml):

[performance]
sdfEnabled = false

Fabric example (emberstextapi.json):

{
"sdfEnabled": false
}

config/emberstextapi-common.toml:

[general]
welcomeMessageEnabled = true
[markup]
markupPermissionMode = "NONE"
markupPlayerList = []
disallowedMarkupTags = []
[messages]
maxServerMessageDuration = 1200
maxServerActiveMessages = 10
maxQueueSize = 50
allowedEffects = []
[anvil]
anvilNameMaxLength = 50

config/emberstextapi-client.toml:

[general]
immersiveMessagesEnabled = true
[effects]
disabledEffects = []
reduceMotion = false
maxNeonQuality = 3
[limits]
maxMessageDuration = 0
maxActiveMessages = 0
[performance]
textLayoutCacheSize = 256
sdfEnabled = true

config/emberstextapi.json:

{
"welcomeMessageEnabled": true,
"immersiveMessagesEnabled": true,
"disabledEffects": [],
"markupPermissionMode": "NONE",
"markupPlayerList": [],
"disallowedMarkupTags": [],
"maxMessageDuration": 0,
"maxActiveMessages": 0,
"anvilNameMaxLength": 50,
"maxServerMessageDuration": 1200,
"maxServerActiveMessages": 10,
"maxQueueSize": 50,
"allowedEffects": [],
"reduceMotion": false,
"maxNeonQuality": 3,
"textLayoutCacheSize": 256,
"sdfEnabled": true
}