Blog

BoxLang FTP Support has landed

Luis Majano January 17, 2025

Spread the word

Luis Majano

January 17, 2025

Spread the word


Share your thoughts

We’re excited to announce the release of the bx-ftp module for BoxLang! This powerful module enables seamless interaction between your BoxLang applications and FTP servers. Whether you need to upload files, download content, or manage directories on an FTP server, the bx-ftp module has you covered.

Key Features

  • Open and manage FTP connections effortlessly, even with proxy servers.
  • Perform directory and file operations, including listing, renaming, and removing.
  • Supports secure connections, passive mode, and proxy configurations.
  • Flexible result handling with detailed response metadata.
  • Receive listing results not only as queries, but array of structs

Reporting Issues

If you encounter any issues or have feature requests, please report them to:

Please send us your feedback and testing!

Quick Usage

You can find much more information at the module's readme: https://github.com/ortus-boxlang/bx-ftp and the coming docs page: https://boxlang.ortusbooks.com/boxlang-framework/modularity/ftp

You can leverage the bx:ftp component call in your BoxLang applications. Below are some common usage examples:

Connect to an FTP Server

bx:ftp 
    action="open" 
    connection="myConnection" 
    server="ftp.example.com" 
    username="myuser" 
    password="mypass";

List Directory Contents

bx:ftp 
    action="listdir" 
    connection="myConnection" 
    directory="/" name="results"
    returnType="array";

Download a File

bx:ftp 
    action="getfile" 
    connection="myConnection" 
    remoteFile="/path/to/remote/file.txt" 
    localFile="/path/to/local/file.txt";

Upload a File

bx:ftp 
    action="putfile" 
    connection="myConnection" 
    localFile="/path/to/local/file.txt" 
    remoteFile="/path/to/remote/file.txt";

Close the Connection

bx:ftp action="close" connection="myConnection";

Note: The connection attribute is required for all actions, as it references the active connection managed by BoxLang’s FTPService.

Available Actions

The module supports a wide range of actions categorized into:

Connection Actions

  • open: Open a connection to an FTP server.
  • close: Close an existing connection.

Directory Actions

  • changeDir: Change the current directory.
  • createDir: Create a new directory.
  • existsDir: Check if a directory exists.
  • getCurrentDir: Get the current working directory.
  • listDir: List the contents of a directory.
  • removeDir: Remove a directory.
  • renameDir: Rename a directory.

File Actions

  • removeFile: Remove a file.
  • renameFile: Rename a file.
  • putFile: Upload a file to the server.
  • getFile: Download a file from the server.
  • existsFile: Check if a file exists on the server.

Each action can use a result attribute to store the operation’s outcome in a variable. By default, the results are stored in the bxftp variable (or cftp in CFML compatibility mode).

Example: Working with Results

bx:ftp 
    action="listdir" 
    connection="myConnection" 
    directory="/" 
    result="ftpResult";
assert ftpResult.returnValue.recordCount == 5;

Result Object Keys

  • statusCode: Integer representing the action’s status code.
  • statusText: String describing the action’s status.
  • returnValue: Action-specific return value (if any).
  • succeeded: Boolean indicating whether the action was successful.

CFML Compatibility

For CFML-style functionality, you can integrate the bx-cfml-compat module. This ensures compatibility with Adobe ColdFusion and Lucee.


Start building powerful FTP-enabled applications with BoxLang today! For more details, check out the bx-ftp documentation and stay tuned for more updates.

Add Your Comment

Recent Entries

Introducing the BoxLang Spring Boot Starter: Dynamic JVM Templating for Spring

Introducing the BoxLang Spring Boot Starter: Dynamic JVM Templating for Spring

Spring Boot developers know the pain of evaluating view technologies. Thymeleaf is great — until you need more expressiveness. FreeMarker is powerful — until the syntax fights you. What if you could write templates in a dynamic JVM language that gives you the full power of the platform, feels natural, and requires zero setup to integrate?

Meet the BoxLang Spring Boot Starter.

Luis Majano
Luis Majano
March 13, 2026
Why Swiss Banks Are Modernizing CFML Platforms Without Rewrites

Why Swiss Banks Are Modernizing CFML Platforms Without Rewrites

The growing need to evolve legacy financial platforms safely

Many Swiss banks and financial institutions still operate important systems built on ColdFusion and CFML platforms.

These systems manage a wide range of functions, including:

  • internal banking workflows
  • reporting systems
  • client portals
  • data integration platforms
  • compliance and risk management tools

In many cases, thes...

Cristobal Escobar
Cristobal Escobar
March 13, 2026
Reactive vs Proactive ColdFusion Support: Why Waiting for an Outage Is the Most Expensive Strategy

Reactive vs Proactive ColdFusion Support: Why Waiting for an Outage Is the Most Expensive Strategy

Many ColdFusion environments operate in a reactive mode without realizing it.

Everything seems fine… until something breaks.

A server crashes.

Performance drops suddenly.

An integration stops working.

A security audit reveals missing patches.

At that point the response is urgent:

“Can someone help us fix this now?”

Emergency support is sometimes unavoidable. But when reactive intervention becomes the norm, it usually means something deep...

Cristobal Escobar
Cristobal Escobar
March 12, 2026