Current Firely Server release notes (v6.x)
Note
For information on how to upgrade, please have a look at our documentation on Upgrading Firely Server. You can download the binaries of the latest version from this site, or pull the latest docker image:
docker pull firely/server:latest
Release 6.3.1, August 11th, 2025
Fixes
We updated dependencies of the Elasticsearch sink to fix a security vulnerability in a dependency of the Elastic.Serilog.Sinks package. The updated version is now 8.18.2. See the release notes for more information.
We fixed a bug where FSI would take a long time to start up when the MongoDb target database would contain a large number of resources. This was caused by FSI trying to perform a count on the target database, which would take a long time when there were many resources.
Release 6.3.0, July 22th, 2025
Features
We introduced the AdvisorRules setting for the validator for CMS and Scale licenses. The implementation of the Advisor Rules system allows users to customize validation behaviour on a more granular level by setting filters with which the outcome of validation or the validation itself can be modified. Note that this feature is still in beta. For meore information see Filter validation outcome based on advisor rules.
The validator will now create extensions on validation errors pointing to the profile that caused the error in the http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source extension. These issues will also be annotated with line numbers in the http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col and http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line extension.
Release 6.2.0, July 15th, 2025
Improvements
Updated Serilog ApplicationInsights sink configuration to use Connection String instead of the deprecated Instrumentation Key. Azure no longer supports Instrumentation Keys, so one should use
connectionStringin the ApplicationInsights sink configuration. The connection string can also be configured viaApplicationInsights:ConnectionStringin appsettings.json. See Application Insights for more information.Updated search anonymization to work across multiple Firely Server instances. This also changed the configuration, see: Search Anonymization on how to configure the search anonymization.
It is now possible for Firely Server to pick up appsettings.json files during startup by specifying the file location in the environment variable
VONK_PATH_TO_SETTINGS. See Providing settings in a different folder. Before, the configuration was only loaded from appsettings.instance.json.We improved the behavior of license checks upon startup so that users will no longer see warnings for unlicensed plugins that are not enabled in the pipeline.
- We made some improvements to Firely Server Ingest (FSI):
We have improved the efficiency of FSI with regard to memory usage/CPU when generating the final usage statistics after a run. This could lead previously to excessive memory consumption and crashes.
FSI will now show a warning if it is unable to connect to a source database.
Fixes
Requests with a double slash (//) would lead to an uncaught exception. This will now lead to a
501 Not Implementedresponse in case the double slash is used within the URL and to a404 Not Foundresponse in case the double slash is at the end of the URL.- We made some fixes to the Vonk.Facade.Starter kit to help developers on their way with building a facade.
It is now possible to create Observation resources again.
_total=noneis now handled properly. Before this would lead to an error when doing a search.
Features
It is now possible to validate QuestionnaireResponse resources against their original Questionnaire resource. See Advanced Validation for more information.
Message brokers can now be used as a target for Firely Server Ingest. FSI will publish messages to the message broker upon ingesting resources, which can then be consumed by Firely Server. Currently, only Azure Service Bus and RabbitMQ can be configured as message brokers for FSI. The use of a MongoDb source is not supported if the target is set to a message broker, only ingestion from files/folders is supported. See Target (for PubSub) for more information.
We upgraded the .Net SDK to v5.12.0. See the release notes for more information.
Release 6.1.0, May 23rd, 2025
Security
AccessPolicy resources can now only be accessed or modified with system-level scopes (e.g.,
system/AccessPolicy.*). Patient-level scopes (patient/AccessPolicy.*) and user-level scopes (user/AccessPolicy.*) are not allowed and will be rejected with a 403 Forbidden response.TrustedProxyIPNetworksnow has an additional settingAllowAnyNetworkOriginsto allow any network origins to be trusted. Before, this configuration was only allowed ifASPNETCORE_ENVIRONMENTwas set toDevelopment. Systems that used this environment variable to bypass the ip-range restrictions should switch to using this setting instead. This setting is disabled by default and should only be enabled if you are sure that your network is secure.We added a check to the SMART on FHIR settings to ensure that
Authorityis always configured.We added the
ClockSkewsetting to theSmartAuthorizationOptions. This setting is used to adjust the expiration time and validity of JWT tokens. Before, you could only adjust the expiration time of a JWT token in FA, and Firely server would add an additional window of 5 minutes to this expiration time where the token would still be valid. This window can now be adjusted with this setting. See SMART on FHIR Configuration for more information.
Improvements and Fixes
We improved the behavior of AuditEvent generation in combination with
$member-match. The AuditEvent will now capture the Patient ID and Identifier of the member after a successful match.We improved the performance of snapshot generation queries for Bulk Data Export against a SQL back-end.
We fixed a bug for the Document Handling operation. Before, references of the posted document bundle could not always be resolved.
We improved error messaging of Firely Server for SMART on FHIR reference tokens. Operation Outcomes indicating errors with regard to the token would only mention JWT tokens when a reference token was used. As this was misleading, we adjusted the error message to dynamically show the type of token that was used.
We fixed a bug in the handling of the
abovemodifier in search queries. Firely Server does not support theabovemodifier and would show a large stack trace when this modifier was used in queries. Error handling for the use of this modifier is now improved.
Features
We added support for the use of the Claim Check pattern in PubSub. This features allows you to outsource the payload of a message to an Azure Blob Storage Account that can be referenced in the message, leading to smaller messages and improved performance. See Claim Check Pattern for more information.
Release 6.0.0, April 15th, 2025
Firely is proud to announce a new major version of Firely Server. This release represents a significant step forward in our commitment to providing a reliable, compliant, and easy to use FHIR server. With this new version, we’ve focused on delivering:
support for Sharding with MongoDB (see MongoDB Sharding)
zero-downtime migrations with MongoDB (see Zero-downtime Migration)
detailed insights into Firely Server deployments based on OpenTelemetry metrics and traces (see OpenTelemetry)
improved integration into existing infrastructures with Kafka support for Firely Server PubSub (see Configuration)
out-of-the-box compliance with more HL7 DaVinci Implementation Guides, e.g. by providing support for the HRex $member-match operation (see Da Vinci - Da Vinci Payer Data Exchange)
flexibility for deployments requiring multi-tenancy (see Multi-tenancy)
Please study the release notes carefully as they contain breaking changes to the behavior of Firely Server, as well as the configuration of the server. Our support team is happy to provide assistance in the upgrade and can be reached at server@fire.ly or through the support desk. Need hands-on support with your upgrade? Our expert consultants are here to help. Explore our Upgrade Support Package to get started.
Note
With the release of Firely Server 6.0, we will officially stop support for Firely Server v4.x. We will continue supporting customers that run Firely Server v5.x.
Security
To avoid accidentally granting access to AccessPolicies,
AccessPolicyresources cannot be accessed by a resource wildcard scope. E.g.system/*.*should be replaced with -system/AccessPolicy.*to be able to access AccessPolicy resources.The
$lastNoperation can now be used with in combination with permissions defined in anAccessPolicyresource.Intreractions with system-level scopes where the token is bound to a fhirUser of type
Devicewill be rejected if no matchingAccessPolicycan be found.
Database
Raised the minimum supported version of MongoDB to 6.0 to enable sharding.
Sharding is now natively supported by Firely Server when using MongoDB as the database backend (see MongoDB Sharding). Sharding improves the read/write performance of Firely Server. A new license token is required for this feature. Please contact us for an updated license.
Virtual multi-tenancy can now be enabled to logically separate stored resources in the database. The tenant identifier can be retrieved either from an HTTP header value or from a token claim (see Multi-tenancy).
Firely Server Ingest can now auto-provision the target database to facilitate zero-downtime migrations (see Zero-downtime Migration). A new license token is required for this feature. Please contact us for an updated license.
Attention
Firely Server requires a schema upgrade to version v28 of the database. This is only required for MongoDB database backends. The migration MUST be done using the zero-downtime migration process.
Features
Firely Server now implements the
$member-matchoperation to find members of a health plan based on demographic information. See HRex Member Match - $member-match for more information.Traces and ASP .NET metrics based on
OpenTelemetrycan now be exported to OTLP-enabled backends. See OpenTelemetry for more information.memberOf()expressions are now supported in FHIRPath constraints when validating resources.Added support for validating MIME types (bcp:13) and language codes (bcp:47).
Firely Server has a new homepage featuring a refreshed and modern UI.
$realworldtestingcan now be executed using a POST request.It is now possible to disable the create-on-update feature with a new setting in the
FhirCapabilitiessection of the app settings. See FHIR Capabilities for more information.With this release
Update with no changes (No-Op)is enabled by default. For more information about the plugin see Update with no changes.The NoOp plugin now also works in combination with transaction bundles.
Added support for reading messages from a Kafka topic when using Firely Server PubSub.
We have updated the validator api that is used by Firely Server for improved validation.
Added support for JWT-based authentication against remote terminology services. See Options for more information.
Expose port option in PubSub for RabbitMQ. See Configuration for more information.
Performance counters are now exported via OpenTelemetry when ingesting data via Firely Server Ingest.
Enable use of AuditEvent output parameters (e.g. IP address) for regular logging.
Attention
With the introduction of the new validator it is no longer allowed to use id fields containing underscores (_) in the resource id.
Programming API changes and plugins
Upgraded the Firely .NET SDK to v5.11.4, see its release notes.
Upgraded to v2.0 of the firely-validator-api for validation and removed the legacy validator previous used. This applies to all validation within Firely Server.
ISearchRepositoryprogramming API has been changed to prevent unintended unauthorized access. It is required to explicitly setSearchOptions.Authorizationwhen calling search, or use one of the extension methods for ISearchRepository, e.g.:GetByKeyWithFullAccessorSearchCurrentWithFullAccess.SearchOptionsauthorization can be configured using one of the extension methods:WithAuthorization,WithFullAccess.ISearchRepositoryextension methods that were not acceptingSearchOptionsas a parameter:GetByKeyandSearchCurrent- are replaced withGetByKeyWithFullAccessandSearchCurrentWithFullAccessrespectively.SearchOptionsis now an immutable record type, which might be a breaking change for some plugin code.Extended the base class
RelationalQueryFactorywith support for theResourceTypesNotValue(see IFilterValue implementations) and methods to express a predicate that isAlwaysFalse()orAlwaysTrue().The
VonkConfigurationAttributeno longer supports the deprecatedisLicensedAsproperty.The deprecated
VonkConstants.MediaTypevaluesXmlR3,JsonR3andTurtleR3have been removed. UseFhirXml,FhirJsonandFhirTurtleinstead.The deprecated method
Check.HasValue()has been removed. UseCheck.NotNull()instead.Added documentation for ICapabilityStatementBuilder and related methods, see Capability Statement Management.
Starting from this release the
Vonk.SmartandVonk.Plugin.SoFv2plugins are no longer supported and have been removed. They are replaced by theVonk.Plugin.Smartplugin. For more information see SMART on FHIR Configuration. It is necessary to adjust the pipeline options accordingly.Removed plugin
Vonk.Plugins.TerminologyIntegration.Vonk.Pluigins.Terminologyshould be used instead.Removed
ISpecificationZipLocatorfrom the public API.
Adjustments and Fixes
“This is an open FHIR endpoint for testing and educational purposes only. Uploading real personal data is strictly prohibited.” will no longer be shown on the homepage when running in production mode.
Improved transaction handling for MongoDB to avoid duplicate key exceptions during the ingestion of resources.
SearchParameters of type
Referencewithout a target are no longer logged as errors; they are now logged as warnings.Improved handling of invalid resources within batch bundles. Firely Server now returns HTTP 200 - OK with individual OperationOutcomes when resources in the bundle are invalid.
Improved handling of large Bulk exports for MongoDB.
Fixed pre-validation when a pipe character (|) and a version are used within a canonical in meta.profile.
Improved handling of Patch exceptions.
Fixed
FormatExceptionwhen using$versionswith an invalid MIME type.Limited recursive Group-level Bulk exports to skip other Group resources that are transitively included.
Authorization endpoints listed in
AdditionalIssuersInTokenwere previously accepted as the only valid issuers when the setting was used. Now, the authority is also accepted as a valid issuer of tokens.Fixed indexing of elements of type
urlfor URI search parameters.Improved debug logging for the reindex operation to allow tracking the progress of long-running operations.
Administration APIs
reset,reindex/all,reindex/searchparameters,preloadandimportResourcesare now$reset,$reindex-all,$reindex,$preloadand$import-resourcesto conform with the naming rules for custom operations.SMART on FHIR v2 scopes can include search arguments. Upon writing resources (create, update, delete) Firely Server used to only evaluate those for
patient/scopes. Now, they are also evaluated foruser/andsystem/scopes.
Configuration
Attention
Default behavior of Firely Server has been tweaked by changing configuration values.
Make sure to reflect the desired behaviour by adjusting appsettings.instance.json or environment variables.
The use of other compartments then Patient in SMART on FHIR authorization is not well defined and potentially unsafe. So we redacted the
Filterssettings inSmartAuthorizationOptions. You can now only specify a filter on the Patient compartment. For more information see SMART on FHIR Configuration. If you configured just a Patient filter in the old format, Firely Server will interpret it in the new format and log a warning that you should update your settings. If you configured a filter on a different compartment, Firely Server will log an error and halt.Evaluation of Subscriptions is now turned off by default. To enable - adjust
SubscriptionEvaluatorOptionsaccordingly.BundleOptions.DefaultTotalfrom now on has a default value ofnonefor performance reasons. For available options see Search size.TaskFileManagement.StoragePathwas already marked as obsolete, and is now also no longer forward compatible. Use theTaskFileManagement.StorageServicesettings to provide the storage path, see Bulk Data Export for details.SupportedInteractionOptionstype has now been replaced byOperations<T>to accommodate for the requirements of a configuration revamp.The configuration structure for operations has been completely revamped:
SupportedInteractionOptionshas been replaced by a new top-levelOperationsconfiguration sectionAdministration.Security.OperationsToBeSecuredhas been replaced by per-operationNetworkProtectedpropertySmartAuthorizationOptions.Protectedhas been replaced by per-operationRequireAuthorizationpropertyEach operation now has granular control over authorization, network protection, tenant requirements, etc.
See configure_operations for detailed information about the new configuration structure and migration guide
Note
If MultiTenancy is enabled, the history and vread operations are blocked for all resources. This is to prevent the possibility of cross-tenant access to resources. The history and vread operations are not supported in a multi-tenant environment.
