> For the complete documentation index, see [llms.txt](https://helpcenter.gitprotect.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://helpcenter.gitprotect.io/changelog/2026/gitprotect-2.5.0.md).

# GitProtect 2.5.0

Release 2.5.0, featuring improved repository restore workflow, updated Microsoft 365 backup engine, and enhanced logging for custom action scripts.

<p align="center"><a href="https://gitprotect.io/latest-update.html#changelogs" class="button secondary" data-icon="globe-www">PREVIOUS RELEASES</a></p>

### 🔨 IMPROVEMENTS

#### <mark style="background-color:$tint;">Optimized replication task initialization and memory usage</mark>

Improved replication task initialization performance and resource efficiency. Replication task initialization is now significantly faster when the target storage already contains existing data, while simultaneously reducing peak CPU and memory consumption. For cyclic replication scenarios, this optimization accelerates task execution by up to 66 times (e.g., reducing initialization time from 12 hours to 11 minutes), maintaining a stable infrastructure load without compromising data restore capabilities from replicated storage.

#### <mark style="background-color:$tint;">Microsoft 365 backup and recovery migration to Microsoft Graph API</mark>

Updated **Microsoft 365** backup and restore engine to **Microsoft Graph** API. **GitProtect** now uses the **Microsoft Graph** API instead of legacy **Exchange Web Services** (**EWS**) to process **Microsoft 365** email messages, contacts, and calendars. This architectural transition ensures long-term service compliance and stability ahead of **Microsoft's** October 2026 **EWS** deprecation while accelerating backup and restore throughput. The update is fully backward-compatible with existing **EWS**-created backups and enhances item-level recovery fidelity by preserving message properties, categories, and attachment integrity. Additionally, optimized pagination and duplicate detection resolve stability issues during recovery across all backup types.

#### <mark style="background-color:$tint;">Concurrent backup task limit enforcement</mark>

Updated management panel task execution logic to consistently respect **GitProtect Management Service** concurrency limits. The management panel now strictly enforces maximum concurrent backup task limits returned by **GitProtect Management Service** across all backup plan types. This change eliminates legacy environment-specific caps and hard-coded constraints, ensuring the panel correctly applies configured defaults (5 concurrent tasks for cloud, 20 for on-premises) and fully honors custom values defined via the `XOPERO_MAX_CONCURRENT_BACKUP_TASKS` environment variable.

#### <mark style="background-color:$tint;">Context-aware AES-256 encryption warning in backup plan settings</mark>

Updated AES-256 encryption warning display behavior in backup plan configurations. **GitProtect** no longer displays the AES-256 encryption warning for workloads such as **Microsoft 365** to eliminate unnecessary user confusion regarding features not applicable to those configurations.

#### <mark style="background-color:$tint;">Enhanced logging for custom action scripts</mark>

Improved custom action script execution logging for backup and replication tasks. **GitProtect** now logs the execution progress and output of custom action scripts across **Windows** and **Linux** backup agents (workers). Execution logs track script initiation, completion status, and console output, providing complete visibility into pre- and post-task operations, while ensuring that sensitive data such as passwords remain masked in the logs.

#### <mark style="background-color:$tint;">Jira and Confluence restore performance and reliability</mark>

Improved **Jira** and **Confluence** backup browsing performance. **GitProtect** now utilizes a metadata caching mechanism to accelerate browsing and enhance reliability when preparing **Jira** and **Confluence** backups for restoration. This update eliminates timeout issues in large enterprise organizations, introduces real-time visual progress indicators during data loading, and guarantees accurate synchronization status feedback regardless of backup retention age.

#### <mark style="background-color:$tint;">Organization mapping and restore validation for repositories</mark>&#xD;

Improved repository restore workflow with enhanced destination controls and validation. **GitProtect** now gives administrators clearer visibility and control over restore destinations during repository recovery. This update separates custom repository naming from target path selection, enforces strict organization and repository naming rules, and introduces clear in-app notification guidance detailing fallback behaviors across **GitHub**, **GitLab**, and **Azure DevOps** environments.

***

### 🐛 BUGFIXES

#### <mark style="background-color:$tint;">Intel-based MacOS backup agent startup failure</mark>

Fixed an issue where the **Intel**-based **macOS** backup agent failed to start and register after installation. The agent now starts correctly following installation and successfully registers with the **GitProtect Management Service**. Previously, initialization on **Intel**-based **macOS** devices failed without generating diagnostic logs.

#### <mark style="background-color:$tint;">Backup agent remote update failure on Linux</mark>&#xD;

Fixed an issue where remote updates failed on **GitProtect Linux** backup agents due to library dependencies. The agent now completes remote updates successfully and remains online throughout the entire upgrade process. Previously, remote updates could fail when restarting the agent service due to a library dependency issue, causing the agent device to go offline. This fix resolves the dependency handling during service restarts to ensure a smooth and reliable upgrade path for **Linux** endpoints.

#### <mark style="background-color:$tint;">SharePoint backup failure due to list view threshold limits</mark>

Resolved an issue where **SharePoint** list view threshold limits caused backup task failures. The **SharePoint** backup module now gracefully handles **SharePoint's** list view threshold limit during backup execution. Instead of failing the entire backup task with an unhandled exception, the backup engine logs error code `DV0395` specifying the affected site and list, allowing the job to continue backing up all remaining resources without interruption.

#### <mark style="background-color:$tint;">Filtering sub-log entries in the events list</mark>

The events list now accurately displays log entries for restore tasks and other sub-logs. When a filter targets sub-logs exclusively, the system automatically switches to a dedicated query mode that retrieves sub-log entries independently from standard task package logs, delivering precise filter results without degrading database performance during standard event searches.

#### <mark style="background-color:$tint;">SharePoint backup failing on items with null Author field</mark>

Resolved an issue where **SharePoint** backups failed when encountering a null **Author** field. The **SharePoint** backup module now correctly handles sites and items where the **Author** field contains a null value. Previously, encountering an unassigned **Author** field triggered a `NullReferenceException`, causing the backup task to fail. The backup engine now gracefully preserves null values during execution, ensuring uninterrupted backup operations across all **SharePoint** resources.

#### <mark style="background-color:$tint;">Incorrect SLA data protection values in the management panel</mark>

Fixed an issue where SLA percentages displayed incorrectly after switching **Jira** backup types. The SLA summary in the management panel now displays accurate data protection metrics, providing backup administrators with a clear and reliable view of overall coverage. Previously, switching a **Jira** backup plan configuration to granular backup mode could cause inaccurate SLA compliance percentages to render in the executive overview.

#### <mark style="background-color:$tint;">Cleanup of temporary database files during Microsoft 365 email recovery</mark>

Temporary database files are now automatically removed from the target directory during **Microsoft 365** email restore operations to on-premises locations. This eliminates leftover conversion containers that previously caused file access blocks during restoration and cluttered the final storage path.

#### <mark style="background-color:$tint;">Refresh storage information task failure due to unavailable storage</mark>

Fixed an issue where refresh storage information tasks failed when target S3 storage was offline. The system now automatically skips the operation if target S3-compatible storage is unavailable at the completion of a replication task.

#### <mark style="background-color:$tint;">Linux pre- and post-backup script execution stability</mark>

Resolved an issue where pre- and post-backup scripts failed on **Linux** agents due to system library interference. Pre-backup and post-backup scripts executed by the backup agent now run reliably when invoking applications that depend on system libraries. Previously, inherited agent environment settings interfered with external application execution, causing custom scripts to unexpectedly fail or crash.

#### <mark style="background-color:$tint;">SharePoint backup plan error messages</mark>

The management panel now correctly displays descriptive, readable error messages instead of raw error codes when a **SharePoint** protection plan cannot be applied due to insufficient permissions or missing site assignments. This enables backup administrators to rapidly diagnose and resolve configuration issues directly within the interface without consulting external diagnostic documentation.

#### <mark style="background-color:$tint;">Restore resilience against transient SMB errors</mark>

Fixed an issue where transient SMB errors caused backup and restore tasks to fail. Backup and restore operations targeting SMB storage destinations now gracefully handle transient `STATUS_INVALID_SMB` errors by automatically retrying the connection. Previously, temporary network or server-side interruptions could cause task execution to fail immediately. The engine now automatically recovers from connection drops, ensuring uninterrupted data protection and reliable recovery workflows.

#### <mark style="background-color:$tint;">Jira attachment backup stability for large organizations</mark>

Fixed an issue where **Jira** attachment backups failed with an `OutOfMemoryException` in large environments. These backups in large-scale organizations (500 GB+) now execute reliably without triggering memory exhaustion. This fix optimizes memory allocation during attachment processing, ensuring complete and reliable backups across all **Jira** space resources.

#### <mark style="background-color:$tint;">GitHub custom properties synchronization</mark>

Resolved an issue where **GitHub** custom properties synchronization failed across all organizations due to single-organization transient errors. **GitHub** custom properties synchronization now continues processing remaining organizations if fetching the schema for one organization fails due to a transient error (such as HTTP 404). Previously, a transient error in a single organization blocked synchronization across the entire account; the system now preserves the existing schema for the affected organization while successfully updating all remaining entities. If a permanent authorization failure (HTTP 401) or suspended account state occurs, synchronization halts cleanly, and the organization is correctly flagged for repair.

#### <mark style="background-color:$tint;">Backing up archived Confluence spaces</mark>

Fixed an issue where backing up archived **Confluence** spaces triggered errors during blueprint and template processing. Backup operations for archived **Confluence** spaces now correctly capture space blueprints and templates across both full and incremental backup tasks. This update ensures complete, automated data protection for archived **Confluence** environments without requiring manual workarounds (such as temporarily restoring spaces to an active state).
