Table of Contents

All Changes in 2sxc and EAV v22

Version 22


2sxc v22.01.00 (2026-10-29)

Highlights

  1. Added a lot more XML Docs for C# APIs (VS Code IntelliSense)
  2. Major improvement in data Admin UI for lists containing more than 1000 items or many columns
    Now the UI will only retrieve the first 1'000 items and only the primary columns, allowing the admin to select what he really wants to load so everything is much faster.
  3. Preparations to support .net Microsoft.Extensions.Logging when using insights (Beta)

Raw Entity Conversion APIs 🦴

  1. 🦴 Improve raw to Entity conversion by respecting properties which have the attribute [ContentTypeField(Type = ValueTypes.Object)]

Bugfixes

  1. 🐞 Fixed issue saving custom data through API, which sometimes resulted in a DB error because of reuse of DB context
  2. 🪲 Bug activating / deactivating features - every toggle reloaded the page
  3. 🪲 Minor bug which prevented view-metadata from being edited
  4. 🪲 Minor bug searching for features / licenses in Admin-UI

Oqtane 🩸

  1. 🩸 Ensure that XML Docs are included in distribution
  2. 🩸 Update ImageFlow 1.13.1 and .net runtimes for that.
  3. 🩸 Ensure XML docs are included in the distribution.
  4. 🩸 Shrink Oqtane distribution from ca. 46MB to 30MB thanks to better ImageFlow binaries without debug data.

JavaScript

  1. Republished npm packages @2sic/2sxc-typings - https://www.npmjs.com/package/@2sic.com/2sxc-typings
  2. Include typed API for fetch commands where the data posted and retrieved are different

SysData

  1. Finish migration of SysData and dropped SpawnNew (an old, bad idea)
  2. Drop almost all cases of AllowUnknownValueTypes and replace with the content-type attribute
  3. Slim down the code needed for most custom data sources using override and primary constructor.

Internal and Code Hygiene

  1. Slim down DataSources - move logic to handle any data to DataSource16 (originally in DataSourceCustom)
  2. Further clean up public APIs to hide APIs which should not be used.
  3. NPM package for sxc-angular republished with v22, various changes. https://www.npmjs.com/package/@2sic.com/sxc-angular
  4. Update all .net projects from .net 9 to .net 10 (DNN and Oqtane)
  5. Improve code for internal UrlValues objects
  6. Replace handling of IResponseMaker
  7. Split state objects from the factory, such as IUser, ISite, IModule etc.
  8. Dramatically improve ContextOf... incl. ISxcCurrentContextService and clarify code paths which prepare and consume. (major)
  9. Improve code structure of permission checkers (composition over inheritance)
  10. Do composition over inheritance for XmlExporter and make for functional
  11. Prevent delete app which has shared content-types used by other apps
  12. Improve Admin-UI when viewing App details, fewer backend calls
  13. Drop old SpawnNew convention (internal)

2sxc v22.00.00 (2026-09-01)

Highlights

  1. 💃🏼 Models API
  2. New App Extension vCard
  3. Linux support for Oqtane
  4. Container support for Oqtane
  5. ImageFlow v2.3.1-RC01 now with new c=x1,y1,x2,y2 and c.gravity=x,y crop option for ImageFlow - see docs
  6. Minimum DNN ☢️ now v10.01.00; .net 4.8 (from 4.7.2)
  7. Minimum Oqtane ☢️ now v10.02.00 to support multi-language, but we recommend the latest version of Oqtane

Models APIs 💃🏼

The Models API was officially released before, but not really communicated, so we believe it's not used yet. During our first attempts to use it we determined that it needs some more love, so we reworked it. This is kind of a breaking change, but we believe it's not used yet, so it should be safe to do.

  1. 💃🏼 Introduce ToModelOptions for type-name and null-conversion options
  2. 💃🏼 Standardize exceptions thrown for better diagnostics, incl. missing empty constructor etc.
  3. 💃🏼 Ensure that interface specs are prioritized to concrete implementations if the interface was used in the ToModel<I> method
  4. 💃🏼 On interfaces which are used for both models and Raw Data, also respect the Name of the [ContentType] attribute
  5. 💃🏼 Change derived class to be on the IModelFromEntity<Concrete> instead of the [Model...] attribute
  6. 💃🏼 Create / test many combinations of ToModel / FirstModel etc. - also with/without factory
  7. 💃🏼 Introduced IFieldSettingsGeneral, IContentTypeDetails, IPaging, IViewConfiguration models
  8. 💃🏼🧪 Created ca. 500 unit tests
  9. 💃🏼📖 Major documentation for models use - still WIP

Raw Entity Conversion APIs 🦴

  1. 🦴 Created / improved ContentTypeFromCode generation system as it's the foundation of type-names for models
  2. 🦴 also renamed [ContentTypeSpecs] to [ContentType] and introduced [ContentTypeUse] for referencing other content-types
  3. 🦴 Changed base object RawEntity to be a record
  4. 🦴 Created fallback RawEntityClassic for class based data - not sure if we'll keep this though
  5. 🦴 Reworked Object-To Dictionary APIs to reduce the code needed
  6. 🦴 Major rework in general...
  7. 🦴🧪 Created ca. 400 unit tests
  8. 🦴📖 Documentation for this Coded Content-Type Definitions new v22 / Coded Data Creation of Entities WIP v22

Other

  1. ⚠️ a vCard API extension was removed. We believe it has never been used since v20 where the folders changed, so we don't think this will affect anyone.
  2. In addition, a new/separate App Extension vCard was created, which is a much better implementation of the same idea.
  3. An internal GetOnce<T> API was changed to be LazyGet<T>

Copilot Enhancements ✈️

  1. ✈️ Data Copilot should not generate Ephemeral fields
  2. ✈️ Data Copilot better detects entity-fields and the expected data type within
  3. ✈️ Data Copilot auto-generate models on changes (WIP / BETA) - ATM for changes in ContentType (like name) and for changes in field names

App Enhancements

  1. Changed all apps to build with Vite

Bugfixes

  1. 🪲 MailService threw exception when not providing attachments
  2. 🪲 Compiling code fails to pick up config.json on the fly, so installing Radmin doesn't work until restart
  3. 🪲 Bug exporting apps with very long names
  4. 🪲 Quick-Dialog had timing issues, so it sometimes didn't appear as expected

Toolbars

  1. ✏️ Toolbars opening the edit dialog for only an entity-field works now
  2. ✏️ Toolbars targeting a entity-field for add-new can now specify the content-type to use for the new entity (New(contentType: '...'))
  3. ✏️ Improve icon assignment - especially for entity-fields with multiple target types to pick up the right one from the configurations

DNN ☢️

  1. Performance improvements loading Razor; we discovered a piece of code reviewing all registered assemblies during page load which we could reduce to once per system start.

Oqtane 🩸

  1. 🩸 Support the new Multi-Language system of Oqtane (note that it's still very buggy, because the Oqtane implementation is buggy)
  2. 🩸 Improve ImageFlow in edge cases
  3. 🩸 Introduce Linux support (and test on Linux), preparing for container use as well and multi-DB
    Side effect: Oqtane distribution is now ca. 30MB larger, because it contains all variants of the native DLLs. As soon as the Marketplace supports it, we'll create a separate package for Linux and MacOS.
  4. 🩸 Introduce multi-DB support for Postgres, MySQL and SqlLite

SysData

This is about changing how most of our internal APIs work. To make them more flexible, we're changing most of them to use DataSources. This is the list of systems which we changed, but there are way more as we can't list every one.

  1. Apps
  2. ZoneApps
  3. AppLanguages
  4. SiteLanguages
  5. ZoneLanguages
  6. SystemInfo
  7. Fields
    1. InputTypes
    2. ReservedNames
    3. SharedFields
    4. Ancestors
    5. Descendants
  8. InheritableApps
  9. AppStatistics
  10. Scopes
  11. AppEnhancements
    1. AppSettings
    2. AppResources
    3. AppSettingFields
    4. AppResourceFields
    5. AppMetadata
  12. GetEntitiesForAdmin
  13. AppWebApiControllers
    1. AppWebApiControllerDetails
    2. AppWebApiControllerEndpoints
  14. ContentTypeDetails

Internal and Code Hygiene

  1. Entity Framework: Disabled MARS (Multiple Action Result Sets)
  2. EAV UI: Upgrade to Angular 22
  3. Quick-Dialog: Upgrade to Angular 22
  4. Improve handling of git dependabot requests
  5. Various unit tests in the $2sxc ui using Vitest
  6. Refactor import/export code
  7. Change build of all JS projects to Vite and ESBuild; $2sxc, inpage, quick-dialog, eav-ui and more
  8. Updated ImageFlow from v2.1.0-RC11 to v2.3.1-RC01
  9. Added docs for targeted SQL delete operations

Breaking Changes in EAV and 2sxc v22.00

  1. ⚠️ Minimum DNN ☢️ now v10.00.00; .net 4.8 (from 4.7.2)
  2. ⚠️ Minimum Oqtane ☢️ now v10.02.00 but we recommend the latest version of Oqtane If you did, you can use the new IEntityField interface instead, which is very similar to the old IField interface.
  3. 🛑 We dropped a very old object _2sxcEditInformation which was on some JSON when serializing entities in edit mode
    This was deprecated in v9, but there may still be some JS around relying on this.
    If you run into issues, please contact us so we can help.
  4. ⬇️ a vCard API extension was removed. We believe it has never been used since v20 where the folders changed, so we don't think this will affect anyone.
  5. ⬇️ The interface IContentTypeAttribute was renamed to IContentTypeField.
    This is an internal API but was used once in Radmin, so for compatibility we're keeping the old interface for a while but will update the extension.
  6. ⬇️ An internal GetOnce<T> API was changed to be LazyGet<T>
  7. ⬇️ Some internal Field setters for Url, Raw and Value were removed as they should not be used.
  8. ⬇️ The internal base class for dependencies ToSic.Sys.Services.DependenciesBase was changed to be a record (previously it was a class)
  9. ⬇️ The internal PiggyBack system was simplified.
  10. ⬇️🩸 Oqtane: Removed old Razor APIs GetCode() and CreateInstance() which were probably never used on Oqtane
    You should only be affected, if you were a very early adopter and used some of the earliest template Apps. If so, please reach out.
  11. ⬇️ Extensions in the very old folder /system were deprecated in v20, but it seems we missed some cases, so it may still have worked. It's now fully removed.

Breaking Changes in v22

We marked the breaking changes like this

  • ⚠️ things which may affect you
  • ⬇️ things which are extremely unlikely to affect you

Breaking Changes in EAV and 2sxc v22.00

Breaking Changes in EAV and 2sxc v22.00

  1. ⚠️ Minimum DNN ☢️ now v10.00.00; .net 4.8 (from 4.7.2)
  2. ⚠️ Minimum Oqtane ☢️ now v10.02.00 but we recommend the latest version of Oqtane If you did, you can use the new IEntityField interface instead, which is very similar to the old IField interface.
  3. 🛑 We dropped a very old object _2sxcEditInformation which was on some JSON when serializing entities in edit mode
    This was deprecated in v9, but there may still be some JS around relying on this.
    If you run into issues, please contact us so we can help.
  4. ⬇️ a vCard API extension was removed. We believe it has never been used since v20 where the folders changed, so we don't think this will affect anyone.
  5. ⬇️ The interface IContentTypeAttribute was renamed to IContentTypeField.
    This is an internal API but was used once in Radmin, so for compatibility we're keeping the old interface for a while but will update the extension.
  6. ⬇️ An internal GetOnce<T> API was changed to be LazyGet<T>
  7. ⬇️ Some internal Field setters for Url, Raw and Value were removed as they should not be used.
  8. ⬇️ The internal base class for dependencies ToSic.Sys.Services.DependenciesBase was changed to be a record (previously it was a class)
  9. ⬇️ The internal PiggyBack system was simplified.
  10. ⬇️🩸 Oqtane: Removed old Razor APIs GetCode() and CreateInstance() which were probably never used on Oqtane
    You should only be affected, if you were a very early adopter and used some of the earliest template Apps. If so, please reach out.
  11. ⬇️ Extensions in the very old folder /system were deprecated in v20, but it seems we missed some cases, so it may still have worked. It's now fully removed.