Skip to main content
Home  ›  Blog

2sxc 12.05 Pre LTS - 1000 hours of work

We are getting nearer to LTS and invested over 500 hours of iJungleboy and another 500 hours of other helpers within the last month. So much to tell...

This is another huge release. As we migrated all our apps to become Hybrid and run on Oqtane and Dnn, we found hundreds of improvements to make your life easier.


We updated 18 of our most popular apps to be super-clean, easy to understand and use the latest best-practices, while making them compatible with Oqtane. You can find them on our App Catalog


  1. New Cross-Platform IMailService for sending mails #2554
    2. This is extra awesome, as you can also give it an array of ADAM IFiles and it will attach them ot the mail
  2. New Cross-Platform ILogService to report errors to Dnn/Oqtane
  3. New IJsonService #2516 #2513
  4. New Convert property which is an IConvertService to safely convert numbers, strings and more, also for use in JS or JSON #2533
  5. New IRenderService for inner content #2550
  6. Created IParameters with AddRemove and Set commands to easily generate url-parameters which reuse existing url-parameters - for example when paging on a list which already has filters #2532
  7. Created an ISecureDataService to decrypt protected values/secrets in settings like google API keys #2556


  1. Link.To and Link.Image now always creates a Safe-URL (encoding Umlauts and spaces etc.) #2542
  2. Link.To and Link.Image can now also have a parameter type: "full" to ensure a domain is added - important for linking stuff in WebAPIs like for RSS feeds #2543
  3. Link.To can now easily re-use existing parameters of the CmsContext.Page.Parameters or slighly modify them #2532
  4. Link.Image now has a parameters parameter to add stuff to the URL #2548
  5. Link.Image now can use 1:2 or 3/4 for the factor and aspectRatio parameter #2520
  6. Adam IFile objects now have a property PhysicalPath making certain operations like adding e-mail attachments easier #2549
  7. Edit.Toolbar now has a condition to selectively add a toolbar or not (for example only for certain users) #2525
  8. DataSource objects now have a new GetStream(...) method which lets you get an empty list or null back if it doesn't find the stream #2522
  9. CmsContext.Site.Url now consistently has the current protocol as well #2547
  10. The SerializationConfiguration DataSource can now also filter out null/empty/zero values to make the JSON of a VisualQuery smaller #2551 #2557
  11. DynamicObjects can now wrap anonymous objects for mixing with settings, determining fallbacks etc. - great for Link.Image #2519

Internal Refactoring and Improvements

  1. LogHistory is now non-static and uses DI #2528
  2. Insights now shows warning if services were not customized to a platform #2529
  3. System features now also use Dependency Injection instead of static accessors #2539
  4. New Razor12, Code12 and Api12 don't support obsolete APIs any more #2540
  5. Entity Decorators now use a simpler model #2552
  6. Improve error message if a stream on a DataSource can't be found #2521
  7. DynamicObject wrappers wrapping anonymous objects will also auto-wrap anonymous object properties to make object navigation a breeze #2535
  8. Updated to RazorBlade 3.7 #2534
  9. Clean-up data-to-dictionary conversion, created official IConvertToEavLight objects for DI #2512
  10. ADAM now doesn't create folders when just checking if files exist #2517
  11. exporting apps will now exclude empty ADAM folders

Possible Breaking Changes

  1. The Link.To now creates a safe url and converts special characters. If you were playing around with urls after Link.To it may not have the identical format any more
  2. If you were already using new base classes like Razor12 and used obsolete APIs in there, it will fail now and tell you what you should use instead

Minor Bugfixes

  1. Oqtane now treats ADAM files as normal files and shows them in the file manager
  2. Lots of small Oqtane bugfixes like #2527 #2537 #2555 #2536
  3. Serializing a DynamicJacket Object now works as expected #2511
  4. Dnn 9.10 updated a Microsoft-DLL which cause issues #2544
  5. string-from-query shows IDs instead of titles #2515
  6. CmsContext.Page.Parameters was also providing magic-parameters like the Dnn TabID - this was filtered out #2530 #2531
  7. Bugfix requireJs issue which affected custom input fields #2526
  8. Random bug, sometimes App file-system based content-types are missing till restart #2524

Get it while it's Hot!

Github releases:

Huge thanks to all who worked really, really hard incl.

  1. Tonci @tvatavuk
  2. Petar @PagnoDunadan
  3. Maxim @maaaximum
  4. Roman @ropalko
  5. me myself and I @iJungleboy

Daniel Mettler grew up in the jungles of Indonesia and is founder and CEO of 2sic internet solutions in Switzerland and Liechtenstein, an 20-head web specialist with over 800 DNN projects since 1999. He is also chief architect of 2sxc (see github), an open source module for creating attractive content and DNN Apps.

Read more posts by Daniel Mettler