All versions
5.2.0+26.2
Release
ExoScanner 5.2.0+26.22 weeks ago 30
Compatibility
Minecraft: Java Edition
26.2
Platform
Fabric
Supported environments
Client-side
Required content
Unavailable version
Changes
5.2.0 - 2026-10-10
Added
- Added a
hex=modifier to CSV and XLSX database exports for filtering by one or more exact hex codes. - Added named command autofill for the true colors Mint, Maroon, Navy, Ice, Gold, Nint, Pistachio, Brick, Dark Cyan, Grape, Jade, and Stone.
- Added a
type=modifier to/exo searchfor filtering results by illegal color type. - Added
anyas a/exo searchcolor value for searching an armor without filtering by color. - Added
/exo results [page]so large searches remain available without flooding chat. - Added
/exo tasksand/exo cancel <operation>with operation IDs for long searches, exports, API scans, recipes, Seymour analysis, and database maintenance. - Added
/exo scan island cancelplus incremental island-scan progress. - Added a durable
exoscanner_upload_state.jsoncheckpoint for completed record versions, pending batch identity, and retry state. - Added focused automated coverage for configuration migrations, normalization and filters, database identity/import/index behavior, CSV/XLSX output, command registration and legacy grammar, recipe results/cancellation, executor cancellation, API bounds, whitelist reloads, and upload retry/deduplication.
Changed
- Updated the supported Minecraft version to 26.2, Fabric Loader to 0.19.5, Fabric API to 0.161.0, and Cloth Config to 26.2.155; config-screen and tracer rendering integrations now use the 26.2 GUI and backend-neutral render APIs.
- Removed direct Hael-format SQLite
.dbimports and the bundled SQLite JDBC runtime, restoring the lightweight mod artifact size. - Moved initial database loading, scan persistence, API/network work, analysis, imports, exports, configuration writes, and reference reloads onto owned background workers; analysis, network, and database queues are now bounded.
- Budgeted local scanning to four players/1.5 ms per tick and island scanning to eight display entities/2 ms per tick.
- Budgeted unusual-armor tracer refresh to eight players/1 ms per tick while retaining the previous target snapshot until refresh completes.
- Batched scan-cache updates into one debounced atomic replacement instead of rewriting the complete cache per player.
- Changed uploads from one-second full-database polling to committed-record events with identity coalescing, capped exponential retry backoff, and no idle checkpoint rewrite.
- Bounded Mojang/Hypixel connection, request, response, encoded-NBT, and decompressed-NBT work, and count fallback attempts against the request budget.
- Made configuration, whitelist, scan-cache, database-shard, upload-checkpoint, and completed-export replacement atomic where the filesystem supports it.
- Unified search/export record filtering and color normalization, and added a bounded RGB-to-Lab conversion cache for repeated color-distance queries.
- Packed cached dye combinations into one primitive count value instead of retaining a separate count array per combination, while preserving recipe results.
- Bounded the Seymour tier cache and retained output components only for the ten sets that can be displayed.
- Centralized background-to-chat delivery through the client-thread message boundary and made database-readiness/API-mutation waits interruption-aware.
- Updated command autocomplete, in-game help, configuration help, progress messages, README workflows, and error validation while preserving legacy command roots.
Fixed
- Fixed leaf blocks rendering over tracer lines regardless of distance.
- Fixed line-oriented legacy database imports stopping after a malformed dictionary; recoverable records are now parsed independently and unparseable records are reported as failures.
- Fixed database imports skipping username and player UUID backfills when the imported record had the same or an older scan timestamp.
- Fixed newer imported records with missing owner fields erasing a locally known username or player UUID.
- Fixed UUID-backed imports failing to promote matching soft-key records and report the mutation as an update.
- Fixed stale soft identities and armor suggestions remaining after a UUID-backed record changed owner, color, key, or shard.
- Fixed cross-shard updates leaving duplicate records when the source/target rewrite was interrupted; target rollback and index reload now preserve consistency.
- Fixed database lock/action failures retrying protected work without the coarse lock. Lock failures now fail closed, and cancelled/partially completed maintenance rebuilds indexes from disk.
- Fixed failed database-path reloads replacing the active path or published indexes; the previous database remains active.
- Fixed rapid commits for one upload identity losing the newest version, idle upload checkpoint writes, and network/non-2xx retries changing pending batch identity.
- Fixed
/exo db recentwithoutsince=, invalid database count types, invalid Seymourhex=values, and the legacy/findseymourset <hex> <distance>grammar. - Fixed direct command color arguments rejecting the documented leading-
#form before command handlers could normalize it. - Fixed same-player Seymour set totals counting component lines instead of complete sets.
- Fixed the API missing-armor-UUID notification touching Minecraft player state from the network worker.
- Fixed tracer piece-name filtering, target rescans on every render frame, and render state restoration on exceptional paths.
- Fixed malformed whitelist or color-reference reloads replacing the last valid in-memory snapshot.
- Fixed CSV fields containing carriage returns not being quoted, and ensured cancelled/failed exports do not publish partial files.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:DjlYVzoU:rO9Fx6TX"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:DjlYVzoU:rO9Fx6TX"
}

