As with each CF release, there are features great and small--ones that may "sell" it, and ones that may simply make your life easier.
This is a follow-up to my post from last month, Getting started with "Project Stratus" public beta, aka CF2021. In that I highlighted some key info one would need to get started USING the prerelease, which came out in August, but I only briefly mentioned then some of the key new features. (I also explained why I had referred even then to it being CF2021, given info I'd found in the prerelease.)
In this post, I want to highlight more clearly what those new features are, nearly 60 of them in several categories!--just with a brief mention of the feature and perhaps its sub-features--and most important with a pointer to where to find them discussed in far more detail.
CF2021 has been released
Just hours after I posted this, I woke to find that CF2021 had been released. What a surprising coincidence! I have edited this post regarding where to find info on the features.
Originally, I had pointed to the pre-release's 500-page release notes, which was available then (and still is to anyone who joined or joins the open beta, whose link is in the first post. The prerelease site and doc will be removed in time).
Now with it released, all that info is in the online docs instead, and I have started to change my references from pages in the beta release notes to links to the online docs. That will take some time.
But otherwise everything I said below still stands. I may also tweak the content if there's new information since the final release. More likely, I will create also a new post in the weeks to follow, sharing new info that has been discovered now that the release is final.
And here is a prime example of that. Two weeks on, I helped a client uncovere a fairly nasty problem that may affect others, if you use any date formatting functions. For more, see my post here.
Finding the info for yourself in the beta, if you dig in
Even though anyone could/can see that huge public beta release notes doc (once they've signed in), there was still a real challenge given the order and organization of the table of contents, which was several pages and without clear sectioning: it showed only a couple of levels of hierarchical order with no change in font size to distinguish levels. So one could be forgiven in not quite discerning the many different sections and what all was new. So I did the digging for you, to create this.
(Of course, I have to dig into these things, to do my "hidden gems" talk on the new CF release, which has been a staple since my first one, "hidden gems in 4.0.1" in Feb 2000, and which I'll be giving on cf2021 next week at the online ColdFusion Summit. And as always, I'll go even beyond just gems within those stated features--which features many could still miss/never hear about--to still more discovered in working with r beta and the first week of the release.
So I've done the dirty work for you, gathering up and organizing the many, many features. And rather than present them in the same order they appear in the release notes, I present them in an order and grouping which I think is a bit more logical to most folks. (I sense that the release notes doc had sections appended to the end rather than folded into their appropriate place within the document.)
So with all that as preface, here finally are the features themselves.
Note that part of what made the release notes so sizable Was that nearly every new feature had a working example offered, to help you easily get started taking advantage of that feature. Fortunately, those have been carried into the final online docs.
But another reason for the size was also the breadth of functionality in some of the new features, such as 70 pages each on AWS S3 and on mongoDB, and half or a quarter as much content on each of several other new features.
So, lots to dig into. Enjoy!
1) CF installation and configuration features
One of the main goals of this next release is that it be smaller "out of the box", and better able to be configured in an automated way. There are a few ways this is being achieved. The current CF installer (or WAR file or Docker image) tends to be several hundred megs in size. With CF2021, the aim is to make it orders of magnitude smaller.
And one of the primary ways that's being done is by breaking the CF feature set into separately installable modules (or "packages"), which can controlled by an available package manage, cfpm. That also includes an optional code scanner (to identify what "packages" are needed for a given set of CFML code), a downloadrepo feature (for those needing to provide for offline access), an available interactive or non-interactive cli (for working with the cfpm tool), and a related CF Admin page for viewing/managing packages implemented in a given CF instance.
Also, while the traditional GUI-based installer remains (still about a gig in size, sadly), a new much smaller zip-based installer has been offered (less than 150m in size), with a cfinstall script for configuring it. Finally, a new feature has been added to permit json-based capture or import of CF Admin settings, again to facilitate automated deployment (similar in many ways to the cfconfig module of Commandbox, but different).
These features are discussed in the following sections of the pre-release release notes document:
- Installation zip and cfinstall script (7 pages in its online docs, was pp 22-24 in the beta docs)
- again, the page numbers referred to here are the pages in the release notes document of the Project Stratus public beta, which is linked to in my other post above. I am leaving the page numbers here in case some may still want to refer to them, and since I'd already done the work. I will continue to edit this document until I have added links to the online docs if available for each feature
2) CF deployment options
Related to the above, another goal of CF2021 is to provide for more flexible deployment options, whether in the cloud or in containers. First up is serverless deployment of CFML via an AWS Lambda capability. Known also as "functions as a service", with serverless there is still a server "somewhere"--but you don't need to know about it or manage it. And to now, you may only have heard of folks deploying Lambda's using python, node.js, go, and other popular languages. Now you can do it with CFML!
Similarly, have you been wanting to consider deployment of your CFML app via Docker or Kubernetes, whether on-premise or in the cloud? Some know that Adobe has provided CF Docker images for CF2018 and 2016, since 2018 (see my post about getting started). CF2021 continues that effort, with a new, smaller image that starts faster.
Finally, some people are interested to deploy CF and their CFML apps as a JEE Web ARchive (WAR) format, and while CF has offered the ability to create that from within the CF installer or admin since CF6, now a WAR file for CF (again, smaller and supporting all the other features here) is available for direct download instead (at the bottom of https://www.adobe.com/products/coldfusion/download-trial/get-started.html)
- AWS Serverless ColdFusion (7 pages in its online docs), or pp 443-450 in the beta docs)
- Docker (8 pages in the online docs for those, though it's not specific to the CF2021 images, as had been discussed on p 508 in the beta docs). The new images are half the size and twice as fast to startup as the previous releases.
- WAR file deployment (p 24 in beta docs)
3) Cloud services integration features
With CF2021, Adobe is moving full speed ahead with support of cloud-based services. While CF has long had support for Amazon S3, for instance, that support is vastly improved. Perhaps more important to many, Adobe has added support for MANY different AWS as WELL as Azure services. Indeed, most of the page count in the release notes document is devoted to these topics. Rather than list them here in words, I will just list them below:
- Overview (pp 31-36 in beta docs)
- AWS S3 (storage) enhancements (77 pages its online docs, was pp 38-94 in the beta docs)
- Azure Blob storage (48 pages in its online docs, was pp 101-129 in beta docs)
- AWS SQS (message queuing) (44 pages in its online docs, was pp 129-146 in beta docs)
- Azure Service Bus (msgqueuing) (24 pages in its online docs, was pp 163-178 in beta docs)
- AWS DynamoDB (36 pages in its online docs, was pp 178-271 in beta docs)
- Azure Cosmos DB (3 pages in its online docs, or pp 361-64 in beta docs)
- AWS SNS (notification) (44 pages in its online docs, was pp 147-162 in beta docs)
- AWS SES (email) (pp 506-7 in beta docs)
Again, each of these has a dozen (or even dozens of) subtopics, so see the docs and the release notes TOC for details. After the final release, again I will update these notes to point to the final location of online resources about all the features in this post.
4) Other new and improved features
If Adobe did nothing more in this release than the things above, it would be lauded by many as a very ambitious and far-reaching new release. But what if your'e not yet moving to the cloud? or don't have a concern about CF's install size or configurability, or deployment alternatives? You're not left out. There are still other new or changed features in CF2021.
First up is for SAML (single sign-on and federated identity) support, configuring either an IdP (Identity Provider) and SP (Service Provider). Many people have waited years for this, relying on 3rd party libraries and services.
Next is new (and deep) support in CFML for noSQL databases, first the open source MongoDB (but consider also that AWS DynamoDB and Azure CosmosDB mentioned above are also noSQL DBs).
- SAML (23 pages in its online docs, was pp 450-463 in the beta docs)
- MongoDB (70 pages in its online docs, was pp 273-359 in beta docs)
5) Language enhancements
For some people, all that matters is how the CFML language evolves. Maybe they have no need to leverage new features, but they do need to continue to develop and maintain CFML code. Maybe they see new styles of coding supported in other languages (or Lucee). Maybe they hit a brick wall with some capability that was simply missing in some existing script, tag, or function.
As with most releases, CF2021 has added a bevy of language enhancements. Indeed, there are so many that I have broken the list into some logical groups (again, of may own making, and not in the order the topics are presented in the release notes).
Update: with the final release, there is now a single page listing most of the language enhancements. It doesn't quite match mine, but it does offer online links to most of the features. Until I get to updating the links below, that page is online here.
First up are some core language features, which expand how CFML can be written:
- Support for parallel programming (pp 364-369 in the beta docs), including in arrays, structs, and queries, with for example StructFilter, ArraySum, and QueryMap
- Immediately invoked function expressions (IIFE) (8 pages in its online docs, pp 380-388 in beta docs)
- Iterable objects, via Spread and Rest operators (5 pages in their online docs, pp 388-395 in beta docs)
- Iterator support for CFCs (4 pages in its online docs, pp 401-403 in beta docs)
- Support for static fields and methods for CFCs (3 pages in its online docs, pp 403-405 in beta docs)
- Identity operator, "==", testing if items are of the same type (one page in half a page in its online docs,p 372 in beta notes)
- Case-sensitive and ordered structs (3 pages in its online docs, pp 431-443 in beta docs)
- Property shorthand (2 pages in its online docs, pp 438-442 in beta docs)
- Merging structs (2 pages in its online docs, p 417 in beta docs (where it was not listed in TOC as own feature)
- "Destructuring assignment" feature for structs, arrays (2 pages in its online docs, pp 418-425 in beta docs)
- Dynamic switch case (5 pages in its online docs, pp 426-431 in beta docs)
Next are some language changes related to how specific existing CFML functions/features work:
- New bcrypt and scrypt functions, for creating password hashes (where scrypt adds more features) (were not in beta docs)
- Return type for cfquery and queryExecute (json/array, array, and the default of query, as well as json/struct and struct, though the latter two were not documented during the prerelease) (pp 374-5 in beta docs)
- New array methods/member functions: ArrayPush, ArrayPop, ArrayShift, ArrayUnshift (pp 405-409 in beta docs)
- Strings as collections: StringSort, StringFilter, StringReduce, StringMap, StringEach, StringEvery, StringSome (pp 409-414 in beta docs)
- New "start" arg for replace/replaceNoCase functions (pp 375-7 in beta docs)
- Support for enhanced/nested savecontents in cfscript (2 pages in its online docs, see top and bottom of online docs page, p 369 in beta docs)
- Label support for loops with break and continue (3 pages in its online docs, p 373 in beta docs)
- Support for Base64Url encoding in binaryEncode/binaryDecode functions (pp 414-415 in beta docs)
Next are some new ways that Java can be integrated with CFML (adding to the long-standing integration that CF has had, starting with CF 4.01, with more in CF6, and still more in CF10):
- Create and execute Java within CFML (2 pages in its online docs, pp 370-372 in beta docs)
- Support for implementing/extending Java Interfaces (3 pages in its online docs, pp 395-401 in beta docs)
Finally are some other rather random additions:
- Set time zone at app level (p 363 in beta docs)
- New Application.cfc values for many of the new features added in CF2021 (pp 377-379 in beta docs)
Phew, that's a LOT of language enhancements, like I said!
6) Administration enhancements
But maybe you're not a developer. Maybe you're responsible for managing CF, and the Admin in particular. There are a few changes you should know about. Some are related to the other new features mentioned above, but not all. Indeed, even developers may be interested to learn of that first point below:
- Addition of AWS Elasticache and Azure Redis cache, as CF distributed caching options (pp 504-505 in the beta docs)
- Addition of Azure Redis cache as CF session storage option (p 504 in beta docs)
- Support for datasource definition for multi-cloud RDS databases (1 page in its online docs, or pp 502-503 in beta docs)
- New admin and admin API features related to most of the new features above (see docs above)
7) PMT enhancements
Finally, as you may know, CF2018 had added a new CF monitor, replacing the CF Server Monitor that existed in CF8 to 2016. While that monitor was for CF Enterprise only, the new PMT (Performance Monitoring Toolset) is available for CF Standard or Enterprise (as well as Developer, of course). CF2021 has added many improvements to the PMT. While a few are related to new features added in CF2021, most are simply enhancements to how the PMT works, addressing challenges that users may have encountered. Again, let's look at these in groups.
Update: With the final release of CF2021, there is a section of the "what's new" document on what's new in the PMT, listing some of the same features below. Until I get to adding specific links for each sub-feature, see that page for the current online links.
First, let's look at the changes made in managing the PMT:
- New PMT Update installation feature (pp 496-497 in the beta docs)
- Support for SSL access to PMT Datastore/elasticsearch (p 481 in beta docs)
- Support for authenticated access to PMT datastore (p 482 in beta docs)
- Improvements for deleting data from the PMT datastore, manually or on a schedule (p 482 in beta docs)
- Ability to clear alerts (p 485 in beta docs)
Next, let's look at features that increase the functionality and day-to-day use of the PMT:
- Capture requests that exceed a certain threshold (p 486 in beta docs)
- Tracking of bytes in/out per second (p 497 in beta docs)
- Active monitoring of sessions, async threads (p 499, p501 in beta docs)
- More easily add "top slow URLs" to code profiler (p 500 in beta docs)
- Monitoring system memory (p 501 in beta docs)
- Tracking cache usage over time (p 502 in beta docs)
Last but not least, here are the PMT enhancements made in support of the new features added in CF2021:
- Monitoring S3 buckets (p 487 in beta docs)
- Monitoring Azure Blob containers (p 488 in beta docs)
- Monitoring Amazon SQS queues (p 490 in beta docs)
- Monitoring Amazon SNS topics (p 491 in beta docs)
- Monitoring Azure Service Bus queues (p 493 in beta docs)
- Monitoring AWS DynamoDB operations (p 494 in beta docs)
- Monitoring MongoDB operations (pp 339-344 in beta docs)
So wow, that's indeed a LOT that's new or improved in CF2021!
And there are still more things, including "hidden gems" and other facets that I have not indicated here, because this was focused on what was listed in the prerelease's 500-page release notes document. I will offer more in that upcoming "hidden gems in 2021" talk, and I also plan to offer a blog post with the other info in time. And I may well do additional blog posts on some of these and other new aspects of CF2021.
I hope you are encouraged to go explore things. You could be kept busy for days simply trying everything out, but most important the hope of course is that any or many of these things will help make your life easier as a CF developer, administrator, architect or organization.
Long live CF!
For more content like this from Charlie Arehart:
Need more help with problems?
- Signup to get his blog posts by email:
- Follow his blog RSS feed
- View the rest of his blog posts
- View his blog posts on the Adobe CF portal
- If you may prefer direct help, rather than digging around here/elsewhere or via comments, he can help via his online consulting services
- See that page for more on how he can help a) over the web, safely and securely, b) usually very quickly, c) teaching you along the way, and d) with satisfaction guaranteed