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

🚀 ColdBox CLI 8.11: The Era of AI Skills Comes to Every ColdBox & BoxLang App

🚀 ColdBox CLI 8.11: The Era of AI Skills Comes to Every ColdBox & BoxLang App

ColdBox CLI 8.11 is here, and it's one of the most significant releases we've shipped for AI-assisted development. This release wires the CLI directly into our brand new public skills directory at skills.boxlang.io, brings our AI tooling in line with industry-wide agent conventions, and introduces a wave of quality-of-life improvements that make AI integration feel less like setup and more like infrastructure.

Luis Majano
Luis Majano
April 30, 2026
🛰️ Introducing cbMCP — Your ColdBox App, Live to Every AI Agent

🛰️ Introducing cbMCP — Your ColdBox App, Live to Every AI Agent

Today we're releasing cbMCP, the official ColdBox MCP Server — a BoxLang-only module that turns your running ColdBox application into a fully-compliant Model Context Protocol (MCP) server. Plug in any MCP-capable AI client — Claude Desktop, VS Code Copilot, Cursor, Codex, Gemini CLI, OpenCode — and your AI assistant gets live, read-only introspection across the entire ColdBox platform: routing, handlers, modules, WireBox, CacheBox, LogBox, schedulers, interceptors, and async executors. 🎯

Luis Majano
Luis Majano
April 30, 2026