Organization Firely

Forge 22.1 for FHIR R4 - Atlanta 2019 Edition

avatar   MichelR  


Forge is the official HL7 FHIR Profile & Conformance editor.
Forge 22.1 for R4 is a major update with important improvements to conformancy, including a significant revision of type slicing according to the new R4 behavior.

Release information

This Forge release supports FHIR R4.

We publish separate Forge releases for FHIR DSTU2, STU3 and R4. Each release only supports a single FHIR version and is updated separately. Different releases can be installed side-by-side on the same machine.

Visit to download the latest versions.


  • .NET Framework
    Forge requires the .NET Framework 4.7.2.
    The .NET Framework 4.7.2 is fully .NET Standard 2.0 compliant, without any additional dependencies.

    Update to FHIR R4 .NET API 1.4.0-forge4 (internal alpha release)
    Provides a number of bug fixes and improvements, especially for the Snapshot Generator:

    • #1074 Derive implicit type constraint from renamed choice type element
      Example: valueString implies element type constrained to String
    • #1051 Normalize type slices in snapshot
      Transform renamed choice type elements (valueString) in differential to fully expanded type slice (value[x]:valueString) in snapshot (generated snapshot will never contain renamed elements, making it easier to process & compare).
      Generate default ElementDefinition.slicing component for slice entry of type slice to snapshot, even if missing from differential.
      Initialize default sliceName for renamed choice type element, if missing from differential.
      Example: value[x] constrained to Quantity implies sliceName valueQuantity.
      Fix incorrect expansion of resliced elements.
      Implement official HL7 FHIR Snapshot Generator unit tests.
    • #1052 Initialize ElementDefinition.constraint.source
    • #1067 Fix incorrect base for profile extension root element
    • #1090 SnapshotGenerator supports Logical Models
    • #1101 Handle element constraint without a path


  • Improved rendering of named slices
    The rendering of named slices has been updated, similar to the official FHIR website & build tool. The element tree now displays named slices as elementName:sliceName, to clearly indicate slice groups. Type slices only display the slice name (valueString), not the original choice type element name (value[x]), as the common element name prefix (value) already indicates the slice group.

  • Save dialog: select output serialization format (XML or JSON)
    The Save dialogs now provide distinct file type selection options (XML or JSON). Saving an existing profile to a different serialization format will automatically create a separate copy; the active document will still refer to the original file with the original format.

    Note: when opening a Folder, the user can select a preferred serialization format (XML or JSON).
    In case a project folder contains duplicates of the same profile in different serialization formats, then Forge will only resolve and display the version with the preferred format and ignore/exclude all other versions. Generally, it is recommended to use a single serialization format per project.

  • Copy global mappings
    The configuration option Copy global mappings is now enabled by default. This option affects newly created profiles. Enabled: initialize new profiles by copying global mappings over from selected base profile. Disabled: new profiles are initialized with empty global mappings.

  • Serialize Logical Model to differential component
    After some discussion within the community, we have changed the serialization of logical models in Forge, in order to harmonize the behavior of different kinds of StructureDefinitions. Previous Forge releases would serialize logical model constraints to the StructureDefinition.snapshot component. As of this release, Forge will now serialize logical models to the StructureDefinition.differential component, similar to regular resource profiles. This allows a FHIR API to generate (calculate) the snapshot component of the logical model, based on the author-specified constraints included in the differential component and by resolving any referenced external structures, again similar to regular resource profiles.

  • Show package versions in descending order
    The Package Manager shows a drop-down combobox with the available versions for each package. The package versions are now sorted in descending order, with the highest (latest) version on top.

Bug fixes:

  • Generate Extension.url element for Extension definitions
    Fixed a bug that caused the Extension.url element definition to be omitted from the generated differential component. Forge now always ensures that the Extension.url element is in sync with StructureDefinition.url and included in the output. When opening an existing extension definition, Forge will automatically fix missing/invalid Extension.url element.
    Note: this bug was caused by a subtle change in the FHIR spec that broke some existing application logic. Originally, in STU3, the Extension.url element was defined with type Uri. In FHIR R4, the Extension.url element type is now specified using special "compiler magic" extensions. (because Extension.url is not a complex FHIR Uri, but a plain Uri string that does not allow extensions)

  • Improve compliancy for type slicing in FHIR R4
    FHIR R4 introduces new behavior and rules for type slicing. This version improves compliancy of type slicing according to new R4 rules. For more details, see the FHIR API change log above.

  • Fix application freezes/hangs after Save
    In some circumstances, the application could freeze/hang after saving a profile. This was caused by infinite recursion in broken cache invalidation logic. The relevant cache invalidation logic has been completely rewritten and optimized. Save operations more efficient, faster and no longer cause deadlocks.

  • Fix constraint detection (yellow pen)
    The logic to aggregate element constraints was not working properly. In some circumstances, this would prevent the yellow pen from showing and exclude elements from the output that should be included. For example, if a derived profile introduces constraints on child elements of a named slice that is inherited from the base profile, then Forge would incorrectly exclude the parent slice from the output. This has now been fixed. Named parent slices of constrained elements are always included in the output.

  • Fix sdf-0
    Fixed invariant sdf-0 for validating StructureDefinition.Name to also accept underscore characters _.

  • Fix eld-19
    Fixed invariant eld-19 for validating element names (in logical models).


Visit our Firely website to read more about type slicing changes introduced in FHIR R4.


We love to hear from you! If you want to submit a comment or report an issue, please don't hesitate to contact us at

Happy profiling!

Other news from Firely
Ward Weistra 🔥
💎 Read the new Firely blog on hidden gems that will make managing FHIR resources and projects in easier.
Ward Weistra 🔥
Use Forge for FHIR R5 Preview #2 during the HL7 FHIR Connectathon. And specify precisely against what packages you want to resolve, validate and document with our latest releases.
Ward Weistra 🔥
🆕 The latest FHIR everywhere in our suite: Both in FHIR version (4.0.1 and 3.0.2) and in having all the official FHIR packages now available to you! Read our full blog post.
Ardon Toonstra
Your chance to speak at DevDays, June 16-18, 2020, Cleveland, OH
Ardon Toonstra
We always release the DevDays content – videos, slides, exercises – 6 months after the event. On the DevDays website you will now find the content of DevDays US 2019 (Redmond, June 2019).
Michel Rutten
Forge 23.0 for STU3 is a major update with new features and improvements and important bug fixes. We recommend all users to update to this release.
Michel Rutten
Forge 23.0 for FHIR R4 is a minor update with some important bug fixes. We recommend all users to update to this release.
Michel Rutten
Forge is the official HL7 FHIR Profile & Conformance editor. Forge 22.1 for R4 is a major update with important improvements to conformancy, including a significant revision of type slicing according to the new R4 behavior.
Michel Rutten
Minor update with compliance & usability improvements
Michel Rutten
Minor update with compliance & usability improvements