Skip to content
CAI
Software that uses CAICheck a score

JustArchiNET/ArchiSteamFarm

55.5

Adequate · 22 September 2026

36k

lines of production code

C#

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

ArchiSteamFarm is a multi-bot management application for Steam that automates account farming, trading, and inventory management. It provides a modernized, high-performance runtime with a robust plugin architecture for extending functionality, including official tools for mobile authentication, item matching, and metrics monitoring. The system exposes a comprehensive RESTful IPC interface for remote control, configuration, and real-time logging, supporting a wide range of operating systems and deployment methods.

How it got here

2015–2018 — Modernization and IPC overhaul

13 changes.

This period focused on modernizing the ArchiSteamFarm codebase by upgrading to .NET 8 and rewriting the IPC server using ASP.NET Core Kestrel. Significant architectural improvements included introducing NLog for structured logging, implementing custom thread-safe collections, and enhancing data persistence with atomic file operations. The work also expanded test coverage and refined localization workflows to support a more robust and scalable application structure.

2019–2021 — Core refactoring and plugin infrastructure

24 changes.

This period focused on a comprehensive architectural overhaul of the ArchiSteamFarm core, migrating to .NET 10 and restructuring the Steam integration layer with dedicated handlers and strongly-typed data models. It established a robust official plugin infrastructure with lifecycle management and asynchronous interfaces, while introducing key features like the SteamTokenDumper and enhanced web response handling.

2022–2025 — Security hardening and official plugin expansion

15 changes.

This period focused on enhancing Linux deployment security through hardened systemd services and disabling telemetry by default, alongside a major shift to System.Text.Json for serialization. It also introduced several new official plugins, including Mobile Authenticator for 2FA management, Monitoring for Prometheus metrics, and SignInWithSteam for OpenID authentication, while refactoring backend APIs and data models for improved efficiency.

Features

Add Steam integration callbacks for client app list, library lock status, and user notifications

The application now includes dedicated callback handlers for three Steam integration events: GetClientAppList, SharedLibraryLockStatus, and UserNotifications. This allows the system to properly process and react to Steam's client application list requests, track when a Steam library is locked by another user, and aggregate various user notification types (such as trading, comments, items, and gifts) into a unified dictionary for easier consumption by the rest of the application.

ArchiSteamFarm/Steam/Integration/Callbacks · high confidence

Add zip\_exec tool for setting executable flags in zip archives

Added the \zip\_exec\ utility to the tools directory, which allows users to set the executable flag on specific files within a zip archive. This addresses a limitation on Windows where standard zip creation tools do not preserve Unix executable permissions, ensuring that unpacked files retain the correct execution attributes on Linux and macOS. The tool is provided as source code (C++) along with its README and public domain license.

tools · high confidence

Added in-memory server list caching for Steam connections

ArchiSteamFarm now includes an in-memory provider that caches Steam server endpoints, reducing redundant network lookups. The new InMemoryServerListProvider stores server records (host, port, protocol types) and exposes them via the SteamKit2 IServerListProvider interface, allowing the client to reuse known servers until the cache is refreshed.

ArchiSteamFarm/Steam/SteamKit2 · high confidence

Introduce SteamTokenDumper official plugin

Adds the SteamTokenDumper plugin, which automatically collects and uploads Steam app tokens, depot keys, and package access tokens to the SteamDB Token Dumper service. The plugin supports configuration of secret App, Depot, and Package IDs to exclude them from uploads, allows skipping auto-granted packages, and includes safeguards such as rate limiting between depot key requests and validation of cache integrity. It exposes a global configuration extension and an API endpoint for managing plugin settings.

ArchiSteamFarm.OfficialPlugins.SteamTokenDumper · high confidence

Introduce official Mobile Authenticator plugin for Steam 2FA

This change adds the \ArchiSteamFarm.OfficialPlugins.MobileAuthenticator\ plugin, providing a new capability to manage Steam Mobile Authenticators directly within ArchiSteamFarm. Users can now initiate the authenticator setup process via the \2FAINIT\ command, finalize it with an activation code using \2FAFINALIZE\, and force-finalize with a code using \2FAFINALIZEDFORCE\. The plugin handles the necessary web API interactions to add and finalize the authenticator, stores the resulting mobile authenticator data (including session data for SDA compatibility) in local files, and integrates with the existing bot command system.

ArchiSteamFarm.OfficialPlugins.MobileAuthenticator · high confidence

Introduce official Monitoring plugin with Prometheus metrics

The new Monitoring plugin exposes ASF metrics via a Prometheus scraping endpoint at /Api/metrics when IPC is enabled. It publishes build and runtime info, IPC ban counts, active plugin counts (official vs custom), bot status, and trade statistics (accepted, rejected, blacklisted, ignored, items given/received). The plugin registers OpenTelemetry metrics, runtime, ASP.NET Core, and HTTP client instrumentation, and provides a Grafana dashboard alongside the plugin distribution.

ArchiSteamFarm.OfficialPlugins.Monitoring · high confidence

Introduction of Bot class and EAccess enum in ArchiSteamFarm/Steam

This change introduces the core Bot class and the EAccess enum within the ArchiSteamFarm/Steam directory. The Bot class serves as the central component for managing individual Steam accounts, exposing properties for configuration, status (such as connection state and account limitations), and sub-handlers for actions, cards, commands, and trading. The EAccess enum defines access levels (None, FamilySharing, Operator, Master, Owner), likely used for permission or sharing logic. This represents the foundational implementation for bot management in this module.

ArchiSteamFarm/Steam · high confidence

Introduction of internal authentication exception and mobile authenticator logic

This change introduces the internal BotAuthenticationException class to handle SteamKit2 EResult errors during authentication, and adds the MobileAuthenticator class which implements Steam Guard mobile token generation and confirmation retrieval using optimized span-based cryptography and time synchronization.

ArchiSteamFarm/Steam/Security · high confidence

Linux service and desktop integration with enhanced security hardening

This update introduces a new systemd service unit (ArchiSteamFarm@.service) and a desktop entry for Linux, providing a standardized way to run ArchiSteamFarm as a system service or from the application menu. The service configuration includes strict security hardening measures such as disabling unnecessary capabilities, restricting system calls, and isolating file systems and IPC. Additionally, telemetry, diagnostics, and the startup logo are disabled by default across all setups to improve privacy and reduce console noise.

ArchiSteamFarm/overlay/variant-base/linux · high confidence

Mobile Authenticator plugin localization infrastructure added

The ArchiSteamFarm.OfficialPlugins.MobileAuthenticator plugin now includes a dedicated Localization directory with a README explaining the string management workflow and a set of empty, schema-compliant .resx files for multiple languages (including Belarusian, Bulgarian, Bosnian, Catalan, Czech, Danish, German, Greek, Spanish, Persian, Finnish, French, Hebrew, Croatian, Hungarian, Indonesian, Italian, Japanese, and Georgian). This establishes the structural foundation for displaying localized strings in the plugin, with all actual translation content to be managed automatically from the main Strings.resx file.

ArchiSteamFarm.OfficialPlugins.MobileAuthenticator/Localization · high confidence

New ExamplePlugin demonstrates custom API routes and third-party service integration

The ArchiSteamFarm.CustomPlugins.ExamplePlugin now includes a complete sample implementation showing how developers can extend ASF with custom functionality. It features a CatController that exposes a GET /Api/Cat endpoint to fetch random cat images via theCatAPI, demonstrating how to register custom API routes and use the WebBrowser. The ExamplePlugin class implements multiple interfaces (IASF, IBot, IBotCommand2, etc.) to illustrate handling bot commands (such as a /cat command), managing bot lifecycle events, processing friend requests and trade offers, and reading custom configuration properties.

ArchiSteamFarm.CustomPlugins.ExamplePlugin · high confidence

New GitHub service for fetching releases and wiki history

A new GitHub service has been introduced to handle interactions with GitHub repositories. This service provides methods to retrieve the latest release, specific release tags, and a list of recent releases via the GitHub API. Additionally, it includes functionality to fetch the revision history and content of wiki pages by parsing HTML responses, replacing previous implementation approaches.

ArchiSteamFarm/Web/GitHub · high confidence

New IPC authentication middleware and Swagger validation attributes

This change introduces a new \ApiAuthenticationMiddleware\ component that enforces IPC access control by validating passwords (with support for hashed formats), tracking failed authorization attempts per IP address to implement rate limiting/banning, and handling loopback or forwarded header scenarios. Additionally, it adds a suite of custom Swagger attributes (\CustomSwaggerAttribute\, \SwaggerItemsMinMaxAttribute\, \SwaggerSecurityCriticalAttribute\, \SwaggerSteamIdentifierAttribute\, \SwaggerValidValuesAttribute\) to enhance API documentation with specific validation rules, minimum/maximum constraints, and security metadata for OpenAPI schemas.

ArchiSteamFarm/IPC/Integration · high confidence

New IPC request models for bot management and API operations

The IPC API now supports a broader set of bot management and utility operations through newly defined request models. Users can now rename bots, pause/resume them with optional automatic resume timers, and send custom inputs. License management has been expanded to allow adding or removing licenses for specific apps or packages. Key redemption is now supported via dedicated endpoints for single keys and background batch redemption. Additionally, the API includes endpoints for updating ASF and plugins (with forced downgrade support), encrypting or hashing strings, and handling two-factor authentication confirmations with granular filtering by type and creator ID.

ArchiSteamFarm/IPC/Requests · high confidence

New NLog targets for message history and Steam chat

This change introduces two new NLog target implementations within the ArchiSteamFarm logging infrastructure. The new HistoryTarget allows users to configure a target that retains a configurable number of recent log messages in memory, exposing them via an event for potential integration with other systems. Additionally, the new SteamTarget enables direct logging of messages to Steam, supporting both private messages to a specific SteamID and group messages to a ChatGroupID, with optional routing to specific bots by name.

ArchiSteamFarm/NLog/Targets · high confidence

New OpenAPI documentation transformers for IPC endpoints

The IPC OpenApi module now includes three new transformer classes (DocumentTransformer, OperationTransformer, SchemaTransformer) that enhance the generated OpenAPI specification. DocumentTransformer adds metadata (title, version, contact, license) and defines the IPCPassword authentication scheme. OperationTransformer ensures all API endpoints require the IPCPassword header for security. SchemaTransformer applies custom Swagger attributes and correctly handles enum definitions, including flags and various integer types, by adding an x-definition extension.

ArchiSteamFarm/IPC/OpenApi · high confidence

New PeriodicGC plugin for manual garbage collection

A new custom plugin, PeriodicGCPlugin, has been added to ArchiSteamFarm. This plugin registers as an IPlugin and, upon loading, starts a timer that forces a garbage collection every 60 seconds. It specifically compacts the Large Object Heap before collecting all generations. The plugin logs warnings before and after each collection, including current memory usage in KB, and explicitly warns users that it is intended for debugging tests only.

ArchiSteamFarm.CustomPlugins.PeriodicGC · high confidence

New SignInWithSteam custom plugin for OpenID authentication

A new custom plugin, SignInWithSteam, has been added to ArchiSteamFarm. It exposes an API endpoint at /Api/Bot/{botName}/SignInWithSteam that accepts a redirect URL, initiates an OpenID login procedure on Steam, and returns the final redirection URL. This allows users to programmatically trigger the Steam login flow for a specific bot via the ASF IPC interface.

ArchiSteamFarm.CustomPlugins.SignInWithSteam · high confidence

New data models for parsing GitHub release assets and changelogs

Added \ReleaseAsset\ and \ReleaseResponse\ classes to the GitHub data layer, enabling the application to deserialize GitHub release information including asset download URLs, sizes, and release metadata. The \ReleaseResponse\ model specifically introduces logic to extract and render changelog content from the release body, providing both HTML and plain-text formats for user consumption.

ArchiSteamFarm/Web/GitHub/Data · high confidence

New structured web response types expose final URI and content

The Web/Responses directory now includes a set of new response classes (BasicResponse, BinaryResponse, HtmlDocumentResponse, ObjectResponse, and StreamResponse) that standardize how web requests are handled. BasicResponse exposes the FinalUri (the actual URL after redirects) and StatusCode, making the final destination visible to plugins and internal code. Derived types provide typed access to response bodies: BinaryResponse for raw bytes, StreamResponse for raw streams with length info, HtmlDocumentResponse for parsed HTML documents via AngleSharp, and ObjectResponse for generic deserialized objects. This replaces ad-hoc handling with a consistent, disposable, and plugin-friendly API.

ArchiSteamFarm/Web/Responses · high confidence

New thread-safe collections with modification notifications

ArchiSteamFarm introduces a suite of custom concurrent collections—ConcurrentHashSet, ConcurrentList, ObservableConcurrentDictionary, and FixedSizeConcurrentQueue—alongside a dedicated ConcurrentEnumerator. These types provide thread-safe alternatives to standard .NET collections and feature an OnModified event that fires whenever the collection's contents change, enabling components like the bot database to react immediately to updates.

ArchiSteamFarm/Collections · high confidence

API

New IPC response models for API endpoints

The IPC API now returns structured response objects for several endpoints, replacing previous formats. Users will receive detailed license operation results via AddLicenseResult and BotAddLicenseResponse/BotRemoveLicenseResponse, inventory data via BotInventoryResponse, and background key-redeemption status via GamesToRedeemInBackgroundResponse. System information is now exposed through ASFResponse (including version, memory usage, and config), while health checks return HealthCheckResponse. Additional new response types include GitHubReleaseResponse for release metadata, LogResponse for log content, StatusCodeResponse for HTTP status details, and TypeResponse/TypeProperties for type introspection.

ArchiSteamFarm/IPC/Responses · high confidence

Architecture

Refactored Steam integration layer with new handler classes

The Steam integration logic has been reorganized into dedicated handler classes to improve structure and maintainability. ArchiHandler now centralizes Steam network interactions and unified message services, while ArchiWebHandler manages web-based operations like trade offers and inventory fetching. A new BotCredentialsProvider handles authentication flows, and SteamUtilities provides helper functions for language mapping and game identifier parsing. This refactoring consolidates previously scattered Steam-related code into a more organized architecture.

ArchiSteamFarm/Steam/Integration · high confidence

Behavioural changes

14 commits (2 fixes) modifying resources

A change to existing behaviour in resources — 14 commits (2 fixs), 8 files.

resources · medium confidence · unverified

ASF core refactored for .NET 10 with FreeBSD support and improved update safety

The ArchiSteamFarm core has been upgraded to target .NET 10, bringing modern C\# syntax and performance improvements. This update adds native support for FreeBSD, allowing the application to run on that operating system alongside existing Windows, Linux, and macOS variants. The update mechanism has been hardened with additional checksum verification for ASF builds and more robust cleanup of old versions after an update to prevent file-in-use errors. Additionally, the application now includes basic crash protection to handle unexpected failures more gracefully and respects the \--system-required\ flag on Linux via systemd to inhibit system sleep.

ArchiSteamFarm/Core · high confidence

ASF plugin interfaces converted to asynchronous Task-based methods

The plugin interface definitions in ArchiSteamFarm/Plugins/Interfaces have been updated to require all callback methods to return \Task\ instead of \void\. This change affects core extension points such as \IPlugin\, \IBot\, \IASF\, \IBotCommand2\, \IBotMessage\, and \IBotTradeOffer2\, ensuring that plugin lifecycle events and user interactions are handled asynchronously. Plugin developers must update their implementations to return \Task\ to remain compatible with the updated ASF runtime.

ArchiSteamFarm/Plugins/Interfaces · high confidence

ArchiSteamFarm now runs on .NET 8

The application has been upgraded from .NET 6 to .NET 8, bringing performance improvements and access to the latest runtime features. This change includes updated TrimmerRoots.xml to ensure compatibility with the new framework's trimming behavior, and the Program.cs entry point has been modernized to use C\# 10+ features like file-scoped namespaces and collection expressions. Users benefit from a more efficient and modern runtime environment while maintaining full backward compatibility with existing configurations and plugins.

ArchiSteamFarm · high confidence

HTTP/3 support and request compression in WebBrowser

The WebBrowser component now defaults to HTTP/3 for outgoing requests and supports sending compressed payloads (Brotli) to servers, which can reduce bandwidth usage and improve performance for large data transfers. Additionally, the browser now includes an Accept-Language header by default to inform servers of language preferences.

ArchiSteamFarm/Web · high confidence

IPC server rewritten to use ASP.NET Core Kestrel

The internal IPC server implementation has been replaced with a new architecture based on ASP.NET Core's Kestrel web server. This change introduces a modern, high-performance HTTP stack that supports advanced features such as response caching, compression, and proxy header forwarding. For users, this results in a more robust and scalable IPC interface, enabling better integration with reverse proxies and improved handling of static assets and API responses.

ArchiSteamFarm/IPC · high confidence

Introduces ArchiCacheable, CrossProcessFileBasedSemaphore, and safer SerializableFile writes

The Helpers directory now includes a new ArchiCacheable\<T\> class that provides thread-safe, time-limited caching with configurable fallback strategies for failed resolution attempts. Cross-process synchronization has been replaced with a new CrossProcessFileBasedSemaphore implementation that uses file locking instead of OS-level mutexes, improving reliability across different environments. Additionally, SerializableFile writes have been modernized to use atomic file operations (writing to a temporary file first, then moving it), which prevents data corruption during crashes or interruptions.

ArchiSteamFarm/Helpers · high confidence

Introduces NLog-based logging with early-fatal fallback and interactive input handling

The application now uses NLog for structured logging, replacing the previous implementation. This change introduces a new ArchiLogger wrapper and a Logging configuration module that supports enabling trace-level logging and handling interactive user inputs (such as passwords, 2FA codes, and login credentials) via the console. Crucially, it adds an emergency fallback mechanism: if a fatal exception occurs before the NLog system is fully initialized, the application will write error details to both the log file and the console to ensure users are notified of early startup failures.

ArchiSteamFarm/NLog · high confidence

Introduction of new ASP.NET Core-based IPC API controllers

The IPC interface has been rewritten to use ASP.NET Core (Kestrel) instead of the previous HttpListener, introducing a suite of new API controllers under the /Api/ route. This change provides a modern, structured API with dedicated endpoints for managing ASF instances (ASFController), individual bots (BotController), plugin updates (PluginsController), logging via WebSocket (NLogController), and persistent storage (StorageController). Users can now interact with these new endpoints to perform actions such as updating ASF or plugins, managing bot configurations, viewing real-time logs, and handling IP bans, while the legacy command-based IPC remains available via the CommandController.

ArchiSteamFarm/IPC/Controllers · high confidence

Introduction of official plugin infrastructure and core management

The plugin system now distinguishes between official and custom plugins via a new \OfficialPlugin\ base class and a \PluginsCore\ component that manages plugin lifecycle, loading, and updates. This change introduces support for official plugins to participate in automatic update mechanisms through the \IPluginUpdates\ interface, allows plugin creators to initialize their own limiters, and provides better diagnostics when plugin initialization fails (e.g., via \TypeLoadException\ details). Users will see official plugins handled consistently with update overrides and version checks, while custom plugins remain unaffected but benefit from improved core stability and error reporting.

ArchiSteamFarm/Plugins · high confidence

ItemsMatcher plugin data contracts refactored for backend v3

The ItemsMatcher plugin's internal data contracts have been restructured to support the backend's announce endpoint v3. New request models (AnnouncementDiffCheckRequest, AnnouncementDiffRequest, AnnouncementRequest) and base classes (AnnouncementRequestBase) define the payload structure for inventory announcements, introducing fields like PreviousInventoryChecksum and TotalInventoryCount while removing assetID from inventory requests. Supporting data classes (AssetForListing, AssetForMatching, AssetInInventory, ListedUser, SetPart, SetPartsRequest, InventoriesRequest, HeartBeatRequest, BackgroundTaskResponse) have been standardized to handle asset metadata, matching types, and user context, ensuring the plugin correctly formats and sends data to the updated backend API.

ArchiSteamFarm.OfficialPlugins.ItemsMatcher/Data · high confidence

ItemsMatcher plugin introduces !match command and refined inventory announcement logic

The ItemsMatcher plugin now includes a new !match command that allows users to manually trigger active matching for their bots, providing immediate control over the matching process. Additionally, the plugin's backend communication has been updated to use versioned API endpoints (such as /Api/Listing/Announce/v6 and /Api/Listing/AnnounceDiff/v3) and implements optimized inventory checksum calculations using SHA512. These changes enhance the responsiveness of the matching feature and improve the efficiency of inventory synchronization with the central listing service.

ArchiSteamFarm.OfficialPlugins.ItemsMatcher · high confidence

Localization directory structure and documentation clarified

The ArchiSteamFarm/Localization directory now includes a README.md file that clarifies the localization workflow: users should only modify the main Strings.resx file, as all other language-specific .resx files are managed automatically. The diff also shows the addition of new translation files for Belarusian (be-BY), Bulgarian (bg-BG), Bosnian Latin (bs-Latn), and Catalan (ca-ES), ensuring these languages are available for display.

ArchiSteamFarm/Localization · high confidence

New Docker entrypoint script with disabled telemetry and diagnostics

The Docker overlay now includes a new \ArchiSteamFarm.sh\ entrypoint script that standardizes how the application is launched within containers. By default, this script disables .NET telemetry, diagnostics, and the startup logo to reduce noise and improve privacy. It also handles argument parsing for paths and service mode, supports running the process under a specific user ID via the \ASF\_UID\ environment variable, and ensures the process is correctly backgrounded or foregrounded based on the headless configuration.

ArchiSteamFarm/overlay/variant-specific/docker · high confidence

New data models for token submission and response handling

The SteamTokenDumper plugin introduces new internal data classes (\SubmitRequest\, \SubmitResponse\, \SubmitResponseData\) to structure the JSON serialization of token submission requests and the corresponding server responses. \SubmitRequest\ now explicitly defines the payload structure including the ASF identifier, Steam ID, token, API version, and immutable dictionaries for apps, depots, and subscriptions, ensuring correct serialization via System.Text.Json. \SubmitResponse\ and \SubmitResponseData\ define the schema for parsing server replies, specifically exposing sets of new and verified apps, depots, and subscriptions (packages). This change refactors how the plugin prepares and interprets data for the token submission API, replacing previous ad-hoc or less structured approaches with strongly-typed, serializable models.

ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/Data · high confidence

New generic launchers and hardened systemd service with disabled telemetry

The generic deployment variant now includes new entry-point scripts (ArchiSteamFarm.sh, .cmd, .desktop) and a systemd unit file (ArchiSteamFarm@.service) that enforce the disabling of .NET telemetry, diagnostics, and the startup logo by default via environment variables. The systemd unit also applies comprehensive security hardening (e.g., PrivateDevices, NoNewPrivileges) and requires the process to be run as a non-root user, changing the default execution context for Linux service deployments.

ArchiSteamFarm/overlay/variant-specific/generic · high confidence

New overlay directory structure with static redirect pages and placeholder folders

The application now includes a new \overlay/all\ directory containing static HTML files that serve as redirects to external resources (the GitHub changelog, the WebConfigGenerator, the Wiki manual, and the local UI at localhost:1242) alongside empty placeholder directories for config, logs, and plugins. This change reorganizes static assets into a dedicated overlay structure, likely to support the new UI interface and external documentation links.

ArchiSteamFarm/overlay/all · medium confidence

New storage infrastructure for crash tracking and global data

The Storage module now includes new classes to handle application state more robustly. CrashFile tracks startup counts and last startup times to help diagnose crashes, while GenericDatabase and GlobalDatabase provide a key-value JSON storage system for global settings like package data, bad bot caches, and server lists. PackageData models Steam package information including change numbers and country restrictions.

ArchiSteamFarm/Storage · high confidence

New strongly-typed data models for Steam inventory, assets, and confirmations

The \ArchiSteamFarm/Steam/Data\ directory now contains a comprehensive set of new C\# classes that provide strongly-typed, JSON-serializable models for Steam Web API responses. This includes \Asset\ and \InventoryDescription\ for detailed item data, \InventoryResponse\ for fetching inventory contents, \Confirmation\ and \ConfirmationsResponse\ for handling mobile confirmations, and \TradeOffer\ for managing trade offers. These models replace previous ad-hoc handling with structured data contracts, improving reliability and type safety when interacting with Steam's economy and inventory systems.

ArchiSteamFarm/Steam/Data · high confidence

New trade fairness and result parsing logic

The trading subsystem now includes a new \ParseTradeResult\ class to standardize trade outcomes (including specific states like Blacklisted or RetryAfterOthers) and implements updated \IsFairExchange\ and \IsTradeNeutralOrBetter\ methods in \Trading.cs\ that evaluate item value based on RealAppID, Type, and Rarity to ensure trades are beneficial or neutral to the user's inventory.

ArchiSteamFarm/Steam/Exchange · high confidence

Refactored Steam interaction logic into dedicated Actions and Commands classes

The Steam interaction layer has been restructured by extracting bot-specific command handling into a new \Commands\ class and action logic into a new \Actions\ class, replacing the previous monolithic implementation. This change introduces \EGameIdentifier\ to standardize how game targets (Application, Package, Name, Regex) are identified across commands. For users, this represents a backend architectural improvement that consolidates command routing and action execution, ensuring more consistent behavior for commands like \!inventory\, \!balance\, and \!addlicense\ without altering the external command interface.

ArchiSteamFarm/Steam/Interaction · high confidence

Refactored bot configuration and database storage models

The bot configuration and database storage structures have been rewritten to use modern C\# features and immutable collections. BotConfig now defines default values for settings such as farming preferences, online status flags, and proxy credentials using immutable types like ImmutableList and ImmutableDictionary. BotDatabase has been updated to use concurrent collections for managing game queues, blacklists, and trading restrictions, with automatic background saving triggered on property changes. This refactoring improves thread safety and serialization reliability for bot state persistence.

ArchiSteamFarm/Steam/Storage · high confidence

Replaced Newtonsoft.Json with System.Text.Json and added custom serialization converters

The JSON serialization engine has been switched from Newtonsoft.Json to the built-in System.Text.Json. This change introduces custom converters to maintain compatibility: BooleanNormalizationConverter handles non-standard boolean representations (numbers/strings), and GuidJsonConverter allows parsing GUIDs in various formats. JsonUtilities now provides the new serialization options, including support for \[JsonDisallowNull\] attributes and ShouldSerialize methods, ensuring existing configuration and data formats continue to work without manual migration.

ArchiSteamFarm/Helpers/Json · high confidence

Steam Card farming logic and data model updates

The CardsFarmer component now exposes the NowFarming state publicly and implements a more precise calculation for the TimeRemaining property, accounting for both card drops and the hours required to trigger drops. The underlying Game data model has been updated to include BadgeLevel and PlayableAppID fields, and the system now maintains a blacklist of specific AppIDs (SalesBlacklist) to prevent farming on certain promotional or risky applications.

ArchiSteamFarm/Steam/Cards · high confidence

Updated ItemsMatcher localization strings

The ItemsMatcher plugin's localization files have been updated with new translations for multiple languages, including Bulgarian, Czech, Danish, German, Greek, Spanish, Persian, Finnish, French, Hebrew, and Bosnian. These updates ensure that user-facing messages regarding item matching, trade offer status, and listing announcements are correctly displayed in the user's selected language.

ArchiSteamFarm.OfficialPlugins.ItemsMatcher/Localization · high confidence

Updated localization strings for the Steam Token Dumper plugin

The localization resources for the Steam Token Dumper plugin have been updated, adding new translation files for Belarusian (be-BY), Bulgarian (bg-BG), Bosnian Latin (bs-Latn), Catalan (ca-ES), Czech (cs-CZ), Danish (da-DK), and German (de-DE). These files provide user-facing messages for plugin initialization, token retrieval progress, and data submission status, ensuring the plugin displays appropriate feedback in these languages.

ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/Localization · high confidence

Test coverage

Expanded unit test coverage for core ASF components

Added comprehensive unit tests in ArchiSteamFarm.Tests to verify the correctness of several internal subsystems. These new tests cover cryptographic operations (encryption, decryption, and hashing) in ArchiCryptoHelper, concurrent collection thread-safety in ConcurrentTests, mobile authenticator token and confirmation hash generation, and file serialization logic. Additionally, the suite now validates Steam chat message splitting and escaping rules, game identifier parsing utilities, trading fairness and neutrality logic, and badge item selection algorithms, ensuring these features behave as expected under various edge cases.

ArchiSteamFarm.Tests · high confidence

Dependencies

New plugin project scaffolds and dependency updates

The repository introduces new .csproj files for several plugin projects (ExamplePlugin, PeriodicGC, SignInWithSteam, ItemsMatcher, MobileAuthenticator), establishing their build structure and dependencies. These projects reference core libraries such as SteamKit2, AngleSharp, and Microsoft.AspNetCore.OpenApi, and utilize JetBrains.Annotations.Sources and System.Composition.AttributedModel. The ItemsMatcher project specifically includes localization resource generation and a post-build step to copy the compiled plugin to the main application's plugins directory.

(dependencies) · high confidence

Updated ASF-ui and wiki submodules

The ASF-ui and wiki submodules have been updated to their latest commits, bringing in the latest interface improvements and documentation changes.

(repo-wide) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 64 → 55 (-8.2)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 69 → 67 (-1.3)
  • Architecture 95 → 95 (-0.2)
  • Maturity 54 → 56 (+1.7)
  • Readiness 78 → 76 (-2.8)
  • Security 73 → 45 (-28.1)
  • Performance 71 → 71 (+0.3)

Resolved (30)

  • Bounded contexts not declared
  • Duplicated block (10 lines × 2) (ArchiSteamFarm.OfficialPlugins.ItemsMatcher/MatchingUtilities.cs)
  • Duplicated block (10 lines × 2) (ArchiSteamFarm/IPC/Controllers/Api/BotController.cs)
  • Duplicated block (10 lines × 5) (ArchiSteamFarm/IPC/Controllers/Api/BotController.cs)
  • Duplicated block (11 lines × 2) (ArchiSteamFarm.CustomPlugins.SignInWithSteam/SignInWithSteamController.cs)
  • Duplicated block (11 lines × 2) (ArchiSteamFarm/IPC/Integration/SwaggerSecurityCriticalAttribute.cs)
  • Duplicated block (11 lines × 2) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (12 lines × 16) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (12 lines × 2) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (13 lines × 2) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (13 lines × 3) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (14 lines × 19) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (15 lines × 2) (ArchiSteamFarm.OfficialPlugins.ItemsMatcher/Commands.cs)
  • Duplicated block (15 lines × 8) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (18 lines × 2) (ArchiSteamFarm/Core/ASF.cs)
  • Duplicated block (18 lines × 2) (ArchiSteamFarm/Web/GitHub/Data/ReleaseResponse.cs)
  • Duplicated block (19 lines × 2) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (20 lines × 2) (ArchiSteamFarm/Steam/Storage/BotConfig.cs)
  • Duplicated block (6 lines × 2) (ArchiSteamFarm/Steam/Exchange/Trading.cs)
  • Duplicated block (9 lines × 2) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • …and 10 more

New (156)

  • Change coupling: Bot.cs ↔ InMemoryServerListProvider.cs (ArchiSteamFarm/Steam/Bot.cs)
  • Commands.ResponseAddLicense (cyclomatic 16) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 2) (ArchiSteamFarm/IPC/Controllers/Api/BotController.cs)
  • Duplicated block (10 lines × 2) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (10 lines × 2) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (10 lines × 22) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (10 lines × 5) (ArchiSteamFarm/IPC/Controllers/Api/BotController.cs)
  • Duplicated block (11 lines × 2) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (11–15 lines × 3) (ArchiSteamFarm/Steam/Integration/ArchiWebHandler.cs)
  • Duplicated block (12 lines × 18) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (12 lines × 2) (ArchiSteamFarm.OfficialPlugins.ItemsMatcher/MatchingUtilities.cs)
  • Duplicated block (12 lines × 2) (ArchiSteamFarm/Steam/Cards/CardsFarmer.cs)
  • Duplicated block (12 lines × 2) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (12 lines × 2) (ArchiSteamFarm/Steam/Storage/BotConfig.cs)
  • Duplicated block (12 lines × 7) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (13 lines × 2) (ArchiSteamFarm.OfficialPlugins.MobileAuthenticator/Commands.cs)
  • Duplicated block (13 lines × 2) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • Duplicated block (13 lines × 2) (ArchiSteamFarm/Steam/Interaction/Commands.cs)
  • …and 136 more

Changes since last survey

  • 102 commits — 102 feature/other, 0 fixes

By area

  • (root) — 76 commits
  • .github/workflows — 11 commits
  • ArchiSteamFarm/Localization — 3 commits
  • ArchiSteamFarm/Steam — 3 commits
  • ArchiSteamFarm.OfficialPlugins.ItemsMatcher/RemoteCommunication.cs — 2 commits
  • (repo) — 1 commit
  • ArchiSteamFarm.OfficialPlugins.Monitoring/MonitoringPlugin.cs — 1 commit
  • ArchiSteamFarm.OfficialPlugins.Monitoring/TagNames.cs — 1 commit
  • ArchiSteamFarm/Helpers — 1 commit
  • ArchiSteamFarm/Program.cs — 1 commit
  • ArchiSteamFarm/TrimmerRoots.xml — 1 commit
  • ArchiSteamFarm/overlay — 1 commit

Notable commits

  • change: Add extra logging for STM
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • change: Automatic translations update
  • …and 82 more

API surface

  • Unchanged — 49 HTTP endpoints

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

JustArchiNET/ArchiSteamFarm was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 22 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 04b2cee9cffb7e1071bcb313b0c6eb44b8dfee23 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-0849c4f988a8.