Skip to main content
Ben Nadel at cf.Objective() 2009 (Minneapolis, MN) with: Samer Sadek
Ben Nadel at cf.Objective() 2009 (Minneapolis, MN) with: Samer Sadek

Strange Whitespace Management Issue With ColdFusion Custom Tags

By
Published in Comments (2)

I ran into a strange issue this weekend while working on my CFMailML ColdFusion custom tag DSL (Domain Specific Language). Newline characters, rendered in between two Adobe ColdFusion custom tags, were being stripped out of the page output. To demonstrate, I have a custom tag (noop.cfm) that does nothing except exit out:

<cfexit method="exitTemplate">

Essentially, the start and end modes of this tag are a no-op (No Operation); but, it lets the child content (this.generatedContent) render naturally.

Then I used the cf_noop tag invocation to run four trials:

  1. Three tags, each on a separate line.
  2. Three tags, all on the same line (with spaces).
  3. Three tags, each on a separate line but wrapped in CFOutput.
  4. Three tags, all on the same line (with spaces) but wrapped in CFOutput.

Note that the comments embedded in the following CFML are using HTML syntax. This way, we can see them in the rendered page output for easier reference:

<!-- CF_NOOP, no output, three lines. -->
<cf_noop>A</cf_noop>
<cf_noop>B</cf_noop>
<cf_noop>C</cf_noop>

<hr>

<!-- CF_NOOP, no output, one line. -->
<cf_noop>A</cf_noop> <cf_noop>B</cf_noop> <cf_noop>C</cf_noop>

<hr>

<!-- CF_NOOP, WITH output, three lines. -->
<cfoutput>
	<cf_noop>A</cf_noop>
	<cf_noop>B</cf_noop>
	<cf_noop>C</cf_noop>
</cfoutput>

<hr>

<!-- CF_NOOP, WITH output, one line. -->
<cfoutput>
	<cf_noop>A</cf_noop> <cf_noop>B</cf_noop> <cf_noop>C</cf_noop>
</cfoutput>

In the rendered output, we would expect that each of the letters, A, B, and C should be separated by a whitespace character. Sometimes it will be the newline, sometimes it will be the space. However, when we run this Adobe ColdFusion 2025 code, we get the following page source:

<!-- CF_NOOP, no output, three lines. -->
ABC

<hr>

<!-- CF_NOOP, no output, one line. -->
A B C

<hr>

<!-- CF_NOOP, WITH output, three lines. -->
A B C 

<hr>

<!-- CF_NOOP, WITH output, one line. -->
A B C 

As you can see, in the first trial — which was three cf_noop tags, each separated by a newline without CFOutput — the output is completely devoid of whitespace. Furthermore, in the third trial, the newlines (wrapped in a CFOuptut) have been replaced by spaces.

Swapping newlines with spaces is less of an issue - unless you're in a pre tag, whitespace is whitespace. But, stripping out whitespace completely will fundamentally change the visual experience of the rendered page. This is problematic.

Disabling Whitespace Management

After debugging this for about an hour, it seems that it was caused by Adobe ColdFusion's "Whitespace Management" setting in the CFAdmin. I updated my CommandBox Dockerfile to include:

ENV cfconfig_whitespaceManagement=false

Then I rebuilt the Docker image and restarted the server. This time, the same CFML code results in the following page source:

<!-- CF_NOOP, no output, three lines. -->
A
B
C

<hr>

<!-- CF_NOOP, no output, one line. -->
A B C

<hr>

<!-- CF_NOOP, WITH output, three lines. -->

	A
	B
	C


<hr>

<!-- CF_NOOP, WITH output, one line. -->

	A B C

Now, all of the whitespace is being maintained. Which is exactly what I need.

As a final note, I don't think there's an Application.cfc equivalent for this ENV setting since I believe this is a compile-time issue, not a runtime issue. I will say that none of the CFProcessingDirective values that I tried seemed to make a difference.

Want to use code from this post? Check out the license.

Reader Comments

16,179 Comments

The craziest part of this is that once I have whitespace management disabled, if I then go back into the CFAdmin and re-enabled it, the output is still ok - even after a server restart. It's a truly strange feature of the platform - probably one to be disabled and never considered again.

Post A Comment — I'd Love To Hear From You!

Post a Comment

I believe in love. I believe in compassion. I believe in human rights. I believe that we can afford to give more of these gifts to the world around us because it costs us nothing to be decent and kind and understanding. And, I want you to know that when you land on this site, you are accepted for who you are, no matter how you identify, what truths you live, or whatever kind of goofy shit makes you feel alive! Rock on with your bad self!
Ben Nadel
Managed ColdFusion hosting services provided by:
xByte Cloud Logo