Flywheel Core 21.5
21.5.0
FEATURES
Data Transfer
Configurable Import/Export Rule Sets
Flywheel now supports centrally managed, versioned rule sets for Import and Export jobs, making it easier for teams to define, store, and apply consistent data handling rules across their organization. Rule sets can be created and managed at the site, group, or project level, with one designated as the default for each context. When starting an Import or Export job, users can select which pre-configured rule set to apply — either from the web app or via the CLI. System-provided rule sets for standard, DICOM-only, and BIDS data organization are available out of the box. Authorized administrators can create and edit custom rule sets, and every job records a reference to the rule set and version it used, providing a full audit trail. Once a rule set has been used in a job, it can only be archived rather than deleted, preserving traceability. This feature is especially valuable for multi-site studies and regulated environments that require consistent, traceable data handling.
Documentation for include and exclude file patterns used in import and export operations is now publicly available. Users can reference these patterns to control which files are included or excluded when transferring data using the Data Transfer CLI and Transfer API.
New CLI (flyw)
- The New CLI now automatically detects whether it is running in an interactive terminal and adjusts its behavior accordingly. In non-interactive environments such as scripts or automated pipelines, the CLI operates without requiring user prompts. Interactive mode can be explicitly overridden using the
--interactiveor--no-interactiveflags, or by setting theFW_CLI_INTERACTIVEenvironment variable. - The New CLI now displays the full help output when an invalid or unrecognized command is entered. Previously, entering an invalid command showed only an error message listing valid commands without additional guidance.
- The New CLI now uses
reviewas the default conflict strategy when running imports. Previously, the default wasskip, which silently bypassed duplicate files. Withreviewas the default, import conflicts are now surfaced for user review rather than silently skipped. - Administrators can now manage rule sets for Bulk Import and Bulk Export directly from the New CLI (
flyw). New commands includeflyw import rule-set list,flyw import rule-set get,flyw import rule-set create,flyw import rule-set update, andflyw import rule-set archive/flyw import rule-set restore(and equivalentflyw export rule-setcommands). Rule sets can also be specified when starting a job via--rule-set <id>to reference a saved rule set by ID or--rule-set <file>to use a local YAML file. - Improved rule set validation and error messaging when specifying rule sets in the New CLI. The CLI now returns clear errors when an archived rule set is specified, when a rule set file contains invalid YAML or the wrong type, and when a rule set name cannot be found, rather than silently applying the default rule set or producing an unhandled error.
Bulk Transfer
- Malware scanning infrastructure now scales dynamically: the malware scanner starts only when active Bulk Import jobs require it and scales down when no jobs are in progress, reducing unnecessary cluster resource consumption on sites where scanning is configured.
- Files are no longer scanned for malware during Bulk Import and Bulk Export dry-run operations, improving performance and accuracy. Malware scanning is only performed when data is actually being transferred.
Viewers
V3 Viewer
- New annotations functionalities:
- Annotations can now be deleted in compliance with 21 CFR Part 11. In validated instances, a reason for deletion is now required to delete annotations saved in Flywheel. The deletion is also logged in the audit trail.
- Annotations can now be downloaded from Flywheel, or directly exported from the Viewer as a DICOM Structured Report (SR).
- Users are now prevented from saving or deleting annotations in a project that is locked.
- Annotations are now removed when their base image file is deleted or gets a new version.
- The visibility of all measurements in a measurement set can now be toggled on/off simultaneously in the Viewer for easy review.
- UI/UX improvements:
- The footer bar now indicates the default mouse action for the zoom tool to help users improve efficiency when reviewing images.
Tasks Manager
- Users can now assign a task to themselves directly from within the viewer so that they can start working on it.
- The viewer tab title now includes the task ID and the task status for improved browser navigation.
- Users can now search the project list when creating a task in the web application. Previously, users had to scroll through the full list of projects to find the correct one. The new search capability makes it easier to locate the intended project, especially when many projects have similar names.
- Users who attempt to open a canceled task in the viewer now see a clear error message indicating that the task has been canceled and cannot be opened.
- The Create Task dialog has been simplified by removing redundant section headings ("Task Linking," "Task Detail," and "Assign Task"). This reduces visual clutter and the amount of scrolling required to complete task creation.
- Avatar components in the web application now support interactive behaviors, such as hover states and click actions, consistent with the design system specification. This improves the visual consistency and usability of participant avatars in the task management interface.
Usage Reporting
Updated Usage Report interface that uses a more efficient API, adds group and gear duration data, and includes a CSV download option. The CSV download contains data for deleted projects, which are hidden in the Web UI. Users can now download usage data as a CSV file from the Usage Report page, making it easier to analyze and share usage metrics outside of Flywheel.
New Usage Report Summary API that aggregates usage data over a date range, intended to replace the deprecated legacy usage report API. The API is experimental and subject to change.
Gears
Updated the Gear Rules configuration interface to clarify that gear rules are triggered by files and process files. The labels and help text on the Gear Rules page (project-level) and the Gear Rules Templates page (Admin settings) now more accurately reflect the file-based trigger behavior of gear rules.
- The Flywheel engine now supports connecting to Flywheel sites that use self-signed or privately-signed TLS certificates. Administrators can configure the engine to use a custom Certificate Authority (CA) bundle or to skip TLS certificate validation when connecting to Flywheel APIs, enabling deployment of the engine in environments where standard certificate validation is not possible.
Jobs
- The Retry button in the Jobs log now correctly reflects whether a job can be retried based on its current state. Jobs in Pending, Running, or Complete states have the Retry button disabled, as retrying these jobs is not applicable. Jobs in Cancelled or Failed states have the Retry button enabled. Retrying a failed job creates a new job and disables the Retry button on the original failed job.
Flywheel Engine
The Flywheel engine now supports connecting to Flywheel sites that use self-signed or privately-signed TLS certificates. Administrators can configure the engine to use a custom Certificate Authority (CA) bundle or to skip TLS certificate validation when connecting to Flywheel APIs, enabling deployment of the engine in environments where standard certificate validation is not possible.
Data Views
- Users can now manually type a field name in Data Views when the field is not found by the search auto-complete. Previously, Data Views required selecting a field from search results, which meant that if a field was not indexed or temporarily unavailable, users could not add that field to their data view. The manually entered field name is validated when the data view preview is loaded.
- Improved the guidance message displayed in Data Views when configuring file columns. The message now clearly explains which container types are available based on the selected data columns, and how to adjust column selections to access files from a specific container level.
Web App
The Legacy DICOM viewer has been removed following the deprecation notice in version 20.0.
FIXES
Data Transfer
New CLI (flyw)
- Fixed an issue where Windows Defender incorrectly flagged the New CLI (
flyw) installer as a security threat (Trojan:Win32/ClickFix.R!ml), preventing users from installing or updating the CLI on Windows. The installer is no longer flagged as malicious. - Fixed an issue where running
flyw loginwith theFW_CLI_PROFILEenvironment variable set did not properly update the existing profile configuration. Profile credentials are now correctly updated when logging in using a profile specified via theFW_CLI_PROFILEenvironment variable. - Fixed an issue where running commands with debug logging enabled could produce an
Unexpected progress stream errorin the debug output. The error was harmless but caused confusion; commands now complete without logging this spurious error. - Fixed an issue where log files could grow to multiple gigabytes in size, particularly during local import operations. Verbose debug messages from internal HTTP libraries were being written to the log at an excessive rate. Log files are now dramatically smaller, improving disk usage and making logs easier to review when troubleshooting.
- Fixed an issue where users running Python 3.13 were unable to install the New CLI (
flyw). The installer would fail with the errorERROR: Package 'fw-cli' requires a different Python: 3.13.11 not in '==3.14.*'. The New CLI now supports Python 3.13.
Bulk Import
- Fixed an issue where uploading DICOM data would fail when a de-identification profile was configured on the project. Uploads now complete successfully when a de-identification profile is active.
- Fixed an issue where Bulk Import operations on large storage systems could encounter out-of-memory errors when tracking the paths of completed imports. Memory usage is now optimized to handle imports on storage systems with millions of files.
- Fixed an issue where Bulk Import and Bulk Export operations could not be started on certain sites with long encryption keys.
- Fixed an issue where Bulk Imports would fail with an out-of-memory error when importing DICOM files from Amazon S3 on Azure-hosted instances.
- Fixed an issue where rerunning a previously completed Bulk Import using
flyw import rerunwould fail immediately with a "timeout: no progress for 1h" error. - Fixed an issue where in-progress Bulk Imports and Bulk Exports would fail if the transfer service restarted mid-operation. The WebSocket retry mechanism now automatically reconnects when the connection is dropped due to a service restart.
- Improved system resource management during periods of high Bulk Import activity to prevent site-wide performance degradation from a large number of concurrent imports.
Bulk Export
- Fixed an issue where users with a read-only role (
files_downloadpermission) were unable to see the Export option in the overflow menu. The Export option is now displayed correctly for all users with the appropriate permissions.
Case Uploader
- Fixed an issue where users with read-write access to a project received a 403 Forbidden error when attempting to upload files using the Case Uploader. Users can now upload to projects they have access to without requiring group admin permissions.
- Fixed an issue where API error notifications in the Case Uploader were displayed in a malformed format, with text overflow and broken visual layout. Error notifications now display the HTTP method, URL, status, and reason in a clean, readable format.
- Fixed an issue where a 404 error notification was incorrectly displayed in the Case Uploader when a project had no de-identification profile configured. The uploader now handles this case gracefully without showing a spurious error.
- Fixed an issue where acquisition details entered during upload were being stored on the file rather than on the acquisition container. Acquisition-level form data is now correctly applied to the acquisition.
Viewers
V2 Viewer
- Fixed an issue where the viewer would throw an error and not display the right-side panel when opening a session where image data with annotations was previously deleted.
- Fixed dialog menus rendering issues.
- Fixed an intermittent issue where opening the series panel from a file-level or acquisition-level task launch could result in 500 Internal Server Error responses, particularly after saving a ring overlay annotation.
V3 Viewer
- Fixed an issue where the name field was incorrectly pre-populated with an existing measurement set name when saving a measurement set for the first time. The name field is now correctly pre-populated with the acquisition name of the image data.
- Fixed an issue where the color bar disappeared from the active viewport when clicking on a different viewport in multi-viewport mode.
- Fixed an issue where color LUTs (Look-Up Tables) could not be applied to fusion viewports in TMTV (Total Metabolic Tumor Volume) mode.
- Fixed an issue where DICOM SR files exported from color images (such as retinal or fundus images) that contained closed or area measurement annotations could not be reloaded into the V3 Viewer side panel.
- Fixed an issue where the area value of ellipse annotations was not retained when loading a saved measurement set.
- Minor UI fixes.
Tasks Manager
- Fixed an issue where filtering Reader Tasks by protocol tags no longer returned any results. The filter was incorrectly appending the protocol version label to the query, causing matches to fail. Filtering by protocol tag now correctly returns all matching tasks.
- Fixed a performance issue where the Reader Tasks page experienced noticeable latency on initial load. The delay was caused by a timing issue in the frontend that triggered the task data request later than expected during page initialization. The page now loads task data promptly.
- Fixed an issue in the Reader Tasks list where truncated cell content was not accessible to users. When cell content in any column is too long to fit within the available column width, a tooltip now appears on hover to display the full text. This is particularly useful for the Protocol column, which can contain long names.
- Fixed an issue where the Task Report Queue page was accessible in the project navigation menu even when the Tasks feature was not enabled for the site. The Task Report Queue link is now correctly hidden when the feature is not enabled.
- Fixed content and formatting issues in the task report. Report fields now display correctly, improving the accuracy and readability of exported task report data.
- Fixed an issue where tasks remained assigned to a user after the associated session or acquisition was moved to a project where that user does not have permission. Tasks are now correctly unassigned when the assignee lacks permission in the destination project.
- Fixed an issue where sorting text columns in the Reader Tasks list (such as Container Label, Creator, and Protocol) was case-sensitive, causing uppercase entries to appear separately from lowercase entries. Columns now sort case-insensitively, so all entries are sorted together in correct alphabetical order.
- Fixed an issue where saving a protocol form with invalid or missing required fields would silently fail — the API returned a success response but the protocol was not saved. Validation is now applied to protocol form JSON on save, and users receive a clear error message if the form contains invalid field types or missing required fields.
- Improved the alert message shown when attempting to create tasks for an empty project. The message now clearly states "No tasks will be created since the project has no sessions" (or acquisitions/files, depending on the task type), rather than displaying a generic message that did not explain the reason.
- Fixed a navigation issue where clicking the Back button from the Queue page incorrectly redirected users to the Data Views page instead of returning to the previous page. The Back button now navigates correctly.
- Improved the alert message shown when attempting to create tasks for an empty project. The message now clearly states "No tasks will be created since the project has no sessions" (or acquisitions or files, depending on the task type), rather than displaying a generic message that did not explain the reason.
- Fixed an intermittent issue where reopening a completed task in the viewer would throw a "Site configuration" error about e-signature even on sites that were properly configured.
Data Management
- Fixed an issue where the recently visited project list could omit or fail to update projects that had been recently modified, such as when changing a project name.
- Fixed an issue where the Web UI incorrectly blocked users from deleting a Smart Copy source project until all destination project copies were deleted.
- Fixed an issue where the Web UI improperly prevented creating a user with an email address matching an existing user. Duplicate user IDs are not permitted, however duplicate user emails should be allowed.
- Fixed an issue where column sort order in the web app was stored in the browser's local storage, causing it to persist for a different user who logged in on the same device. Sort preferences are now stored per user account, so each user sees their own sort order.
- Fixed an issue where the Smart Copy "Copy In Progress..." indicator could display on projects that were not actively being copied.
- Fixed an issue where the Task Report Queue page was accessible in the project navigation menu even when the Tasks feature was not enabled for the site.
- Fixed errors when bulk updating tags on data, such as from Search results or when using the SDK.
- Fixed a navigation issue where clicking the Back button from the Queue page incorrectly redirected users to the Data Views page.
- Fixed an issue where pressing Enter in the browser address bar while viewing the Workspaces tab caused the workspace list to duplicate each time Enter was pressed.
- Fixed an issue where the Workspaces tab was missing from the navigation.
- Fixed an issue where recent changes to a user's project roles were not reflected in the project list UI.
- Fixed an issue where the close/cancel button for the inline file rename field was obscured and inaccessible.
- Fixed an issue where the job log provider was not properly detected when already configured, which could result in job logs being unavailable. The system now correctly checks for an existing log provider configuration before applying defaults.
- Fixed an issue introduced in version 21.3 where the Core API build version was displayed as "UNKNOWN" in the platform UI. The version file is now correctly populated during the Docker build process.
Validated Instance
Audit Trail
- Fixed an issue where audit trail report generation would fail for projects that had non-task based annotations created in the V3 Viewer.
- Fixed an issue in the Audit Trail report where the path field for form responses displayed an internal form response identifier instead of a link to the associated task. The path field now correctly displays the task link when a user submits form responses.
Gears
- Fixed an issue where an enabled Gear Rule would appear disabled while its match criteria (ANY/ALL/EXCEPT ANY) were being edited. An enabled Gear Rule now remains visually enabled during editing; the enabled or disabled state is re-evaluated only when the user saves.
- Fixed an issue in the gear configuration dialog where clicking a tag name, or occasionally clicking the delete button on a tag, would add a duplicate tag instead of performing the expected action. Tag interactions now behave correctly and do not create duplicate tags.
- Fixed an issue where the group selector dropdown in the Manage Gear Access dialog extended to the full page height when many groups were available. The dropdown now has a maximum height and scrolls when the group list is long.
- Fixed an issue on GCP-hosted Flywheel instances where the compute auto-scaling system was not properly cleaning up orphaned persistent disks left over after gear job execution. These disks accumulated over time, resulting in unnecessary cloud storage costs. The cleanup process now correctly identifies and removes orphaned disks.
- Fixed an issue where GPU Gear profiles did not correctly support the Engine VM idle timeout setting. The idle timeout is now properly applied to account for GPU VM startup time, preventing GPU Gear jobs from failing prematurely during VM provisioning.
DICOM Connectors
- Fixed an issue where the Device Settings UI was missing indication of a device's enabled or disabled status.
Python SDK
- Improved the error message when using the Python SDK to upload a file with invalid modality key names. The error now indicates the nature of the error and identifies the offending key names.
Data Views
- Fixed an issue where column sort order in the web app was stored in the browser's local storage, causing it to persist and appear for a different user who logged in on the same device. Sort preferences are now stored per user account, so each user sees their own sort order and it no longer carries over between users.
- Fixed an issue in the Data Views create and edit screens where the Save button remained active even when the label field contained fewer than the required 3 characters. The Save button is now correctly disabled until a valid label is entered.
- Fixed an issue in the Data Views column picker where collection fields (such as collection label and curator) were listed as selectable columns but could not actually be used. Selecting these fields and attempting to save the data view resulted in a non-descriptive error. Collection fields are now hidden from the column picker to prevent confusion.
- Fixed an issue where pressing Enter after typing a Data View name unexpectedly opened the filter dialog. Pressing Enter in the Data View name field now has no unintended action.
Web App
- Fixed an issue where the External Storage dropdown in Workspace configuration remained open after selecting a storage option. The dropdown now collapses correctly after a selection is made.
External Storages
- Fixed an issue where the External Storage dropdown in Workspace configuration remained open after selecting a storage option. The dropdown now collapses correctly after a selection is made.
Infrastructure
-
Fixed an issue where the Condor compute engine referenced an incorrect domain address, causing it to connect through the wrong load balancer. This resulted in compute jobs remaining pending while the engine repeatedly crashed and restarted. The engine now correctly uses the site domain URL.
-
Fixed an issue on GCP-hosted Flywheel instances where the compute auto-scaling system was not properly cleaning up orphaned persistent disks left over after gear job execution. These disks accumulated over time, resulting in unnecessary cloud storage costs. The cleanup process now correctly identifies and removes orphaned disks.
Jobs
- Fixed an issue where the job log provider was not properly detected when already configured, which could result in job logs being unavailable. The system now correctly checks for an existing log provider configuration before applying defaults.
MFA Electronic Signature
- Fixed an issue where e-signature warning messages and signature status indicators were displayed on tasks even when the e-signature feature flag was disabled. These UI elements now correctly appear only when the feature is enabled.
- Fixed an issue in the e-signature warning message where the user's Flywheel profile name was displayed as plain text without a link. The warning message now includes a clickable link to the user's Flywheel profile page, making it easier to navigate to profile settings to complete e-signature setup.
Navigation
- Fixed an issue where the Workspaces tab was missing from the navigation. The tab is now displayed correctly.
- Fixed an issue where pressing Enter in the browser address bar while viewing the Workspaces tab caused the workspace list to duplicate each time Enter was pressed. The page now behaves correctly when the URL is reloaded in the same tab.