{"id":18837033,"url":"https://github.com/xreef/simpleftpserver","last_synced_at":"2025-10-25T21:03:25.866Z","repository":{"id":37034605,"uuid":"348859617","full_name":"xreef/SimpleFTPServer","owner":"xreef","description":"A simple FTP server for Arduino, ArduinoSAMD WiFiNINA, esp8266, esp32, stm32 and Raspberry Pi Pico W","archived":false,"fork":false,"pushed_at":"2025-03-22T16:12:59.000Z","size":135,"stargazers_count":147,"open_issues_count":3,"forks_count":43,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-28T13:04:49.827Z","etag":null,"topics":["arduino","esp32","esp8266","ethernet","fat","ftp","ftp-server","littlefs","microcontroller","raspberry-pi-pico-w","rp2040","spiffs","stm32","wemos-d1-mini"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xreef.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-17T21:41:46.000Z","updated_at":"2025-03-28T10:54:23.000Z","dependencies_parsed_at":"2023-02-09T15:16:22.467Z","dependency_job_id":"bc369104-85ba-436f-b4cc-0074ad0896bb","html_url":"https://github.com/xreef/SimpleFTPServer","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xreef%2FSimpleFTPServer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xreef%2FSimpleFTPServer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xreef%2FSimpleFTPServer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xreef%2FSimpleFTPServer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xreef","download_url":"https://codeload.github.com/xreef/SimpleFTPServer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247185469,"owners_count":20897978,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","esp32","esp8266","ethernet","fat","ftp","ftp-server","littlefs","microcontroller","raspberry-pi-pico-w","rp2040","spiffs","stm32","wemos-d1-mini"],"created_at":"2024-11-08T02:33:22.930Z","updated_at":"2025-10-25T21:03:25.860Z","avatar_url":"https://github.com/xreef.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SimpleFTPServer Library\n\n![SimpleFTPServer Logo](resources/SimpleFTPServerLogo.png)\n\n[![arduino-library-badge](https://www.ardu-badge.com/badge/SimpleFTPServer.svg?)](https://www.ardu-badge.com/SimpleFTPServer)\n[![](https://img.shields.io/badge/Platform-Arduino%20%7C%20ArduinoSAMD%20%7C%20ESP32%20%7C%20ESP8266%20%7C%20RP2040%20%7C%20STM32-green.svg)]()\n[![](https://img.shields.io/badge/License-MIT-lightgrey.svg)](LICENSE.md)\n\nA lightweight Arduino/embedded library to expose a device filesystem over FTP, allowing uploads, downloads and remote file management from standard FTP clients (FileZilla, WinSCP, Explorer, etc.). This version supports a single FTP session.\n\n**Author:** Renzo Mischianti\n**Website:** [www.mischianti.org](https://www.mischianti.org/category/my-libraries/simple-ftp-server/)\n**GitHub:** [xreef/SimpleFTPServer](https://github.com/xreef/SimpleFTPServer)\n\n---\n\n## 📚 Documentation \u0026 Tutorials\nComplete tutorials and platform-specific guides by the author are available on mischianti.org.\n\n### General Documentation\n- 🌐 **[Simple FTP Server Library Home](https://www.mischianti.org/category/my-libraries/simple-ftp-server/)** - Main library page with articles and examples\n- 📖 **[FTP server on ESP8266 and ESP32](https://www.mischianti.org/2020/02/08/ftp-server-on-esp8266-and-esp32)** - Getting started guide\n- 📖 **[Simple FTP server library now with support for Wio Terminal and SD](https://www.mischianti.org/2021/07/01/simple-ftp-server-library-now-with-support-for-wio-terminal-and-sd/)**\n\n---\n\n## 📋 Table of Contents\n- [Features](#-features)\n- [Supported Platforms](#-supported-platforms)\n- [Supported Network Interfaces](#-supported-network-interfaces)\n- [Supported Storage Systems](#-supported-storage-systems)\n- [Installation](#-installation)\n- [Basic Usage](#-basic-usage)\n- [Configuration](#-configuration)\n- [Included Examples](#-included-examples)\n- [Changelog](#-changelog)\n- [License](#-license)\n- [Contributing](#-contributing)\n- [Support \u0026 Contact](#-support--contact)\n\n## ✨ Features\n\n- Expose device filesystem via a single FTP session (upload, download, delete, rename, list)\n- Resume support (REST) and RFC-like commands (ALLO, STAT, SYST, HELP)\n- UTF-8 filename support (configurable)\n- Configurable buffers and timeouts via `FtpServerKey.h`\n- Works with internal flash filesystems (SPIFFS, LittleFS, FFAT) and external SD (SD, SdFat)\n- Small footprint and simple API: `begin()` and `handleFTP()`\n\n## 🎯 Supported Platforms\n\n| Platform | Filesystems | Notes |\n|---|---|---|\n| ESP32 | SPIFFS, LittleFS, FFAT, SD, SD_MMC | Full support, see examples |\n| ESP8266 | SPIFFS, LittleFS, SD | Limited RAM vs ESP32 |\n| RP2040 / Pico W | LittleFS, SD | See Pico W examples |\n| STM32 | SdFat, SPI flash | Use SdFat examples |\n| Arduino (AVR) | SD (8.3), SdFat | Use SdFat for better compatibility |\n| Wio Terminal | SdFat, Seed SD, native FAT | See Wio examples |\n\n\u003e ⚠️ Note: Some older AVR boards (Uno/Mega) have limited RAM and may not support large transfers.\n\n## 🌐 Supported Network Interfaces\n\n- WiFi (ESP32, ESP8266, RP2040-W, WiFiNINA)\n- Ethernet (W5x00, W5500, ENC28J60, ESP32-ETH)\n- Seeed RTL8720DN\n\n## 💾 Supported Storage Systems\n\n### Internal flash\n- SPIFFS (ESP8266/ESP32)\n- LittleFS (ESP8266/ESP32/RP2040)\n- FFAT (ESP32)\n\n### External storage\n- SD (Arduino SD library)\n- SdFat / SdFat2 (recommended)\n- SD_MMC (ESP32)\n- Adafruit_SPIFlash\n\n## 📦 Installation\n\n### Arduino IDE (Library Manager)\n1. Open Arduino IDE\n2. Sketch \u003e Include Library \u003e Manage Libraries\n3. Search for \"SimpleFTPServer\" and install\n\n### Manual installation\n1. Copy the repository folder into your Arduino `libraries/` folder\n2. Restart Arduino IDE\n\n### PlatformIO\nAdd to `platformio.ini`:\n```ini\nlib_deps = xreef/SimpleFTPServer\n```\n\n## 🚀 Basic Usage\n\n### Quick start (ESP32 example)\n\n```cpp\n#include \u003cWiFi.h\u003e\n#include \"SPIFFS.h\"\n#include \u003cSimpleFTPServer.h\u003e\n\nconst char* ssid = \"YOUR_SSID\";\nconst char* password = \"YOUR_PASS\";\n\nFtpServer ftpSrv;\n\nvoid setup(){\n  Serial.begin(115200);\n  WiFi.begin(ssid, password);\n  while (WiFi.status() != WL_CONNECTED) {\n    delay(500);\n    Serial.print(\".\");\n  }\n  Serial.println();\n  Serial.print(\"Connected. IP: \");\n  Serial.println(WiFi.localIP());\n\n  // Mount filesystem before starting FTP\n  if (SPIFFS.begin(true)) {\n      Serial.println(\"SPIFFS opened!\");\n      // username, password for ftp.\n      ftpSrv.begin(\"esp32\",\"esp32\");\n  }\n}\n\nvoid loop(){\n  ftpSrv.handleFTP();\n}\n```\n\n## ⚙️ Configuration\n\nSee `FtpServerKey.h` for config defines and defaults. Key settings:\n- `FTP_BUF_SIZE` — transfer buffer size\n- `FTP_TIME_OUT` — inactivity timeout (seconds)\n- `FTP_AUTH_TIME_OUT` — authentication timeout (seconds)\n- `DEBUG_PRINTER` — debug output stream (defaults to `Serial`)\n- `UTF8_SUPPORT` — enable/disable UTF-8 support\n\n## 🧩 Included Examples\n\nSee the `examples/` folder for ready-to-use sketches for many platforms (ESP32, ESP8266, RP2040, STM32, Wio Terminal, Arduino). Adapt SSID, credentials and SD pins as needed.\n\n## 📝 Changelog\n- 2025-10-13 3.0.0 Fix: \n  - updated SdFat2 initialization for Arduino Mega; integrated W5500 initialization (example Arduino_Mega_W5500_SdFat2)\n  - Fix READ WRITE APPEND problem\n  - update README\n  - Fix ram usage\n  - Set correct buffer size\n  - Add FTP callbacks for connection events and file transfers; update data types for free space and transferred size\n- 2025-02-11 2.1.11 Management of relative and absolute path in command prompt (./ ../ /)\n- 2025-01-28 2.1.11 Fix REST and add ALLO, and STAT commands\n- 2025-01-13 2.1.11 Add addictional LOG to prevent multiple user issues\n- 2025-01-12 2.1.11 Add REST (resume) command\n- 2025-01-11 2.1.10 Multiple minor fix and optimization\n- 2024-09-16 2.1.9 Fix LittleFS filename size.\n- 2024-07-16 2.1.8 Add SYST command.\n- 2023-10-07 2.1.7 Fix ESP32 rename on SD (thanks @scuba-hacker) #44\n- 2023-02-02 2.1.6 Fix esp8266 Ethernet (w5x00) issue and explain solution for ESP32 Ethernet (w5x00), add new Networks management\n- 2023-01-13 2.1.5 Fix SPIFM external SPI Flash date management (add SPIFM esp32 example)\n- 2022-09-21 2.1.4 Add support for Raspberry Pi Pico W and rp2040 boards, Fix SD card config\n- 2022-09-20 2.1.3 Soft AP IP management, more disconnect event and SD_MCC\n- 2022-05-21 2.1.2 Fix SD path (#19)\n- 2022-05-21 2.1.1 Minor fix\n- 2022-03-30 2.1.0 Add UTF8 support and enabled It by default (Thanks to @plaber)\n- 2022-03-30 2.0.0 Complete support for STM32 with SD and SPI Flash minor bux fix and HELP command support\n- 2022-03-17 1.3.0 Fix enc28j60 and w5500 support and restructuring for local settings\n- 2022-02-25 1.2.1 Fix anonymous user begin and fix SPIFFS wrong display\n- 2022-02-22 1.2.0 Add anonymous user and implement correct RFC (#9 now work correctly with File Explorer)\n- 2022-02-01 1.1.1 Add workaround to start FTP server before connection, add end and setLocalIP method.\n\n## 📄 License\nMIT License — see `LICENSE.md` for details.\n\nCopyright (c) 2017-2025 Renzo Mischianti\n\n## 🤝 Contributing\nContributions are welcome! Fork the repo, create a feature branch, commit and submit a Pull Request. Please ensure examples build on target platforms before opening a PR.\n\n## 📞 Support \u0026 Contact\n- Website: https://www.mischianti.org/category/my-libraries/simple-ftp-server/\n- GitHub Issues: https://github.com/xreef/SimpleFTPServer/issues\n- Forum / Articles: https://www.mischianti.org/\n\n## 👤 Author\n**Renzo Mischianti**\nWebsite: https://www.mischianti.org\nEmail: renzo.mischianti@gmail.com\nGitHub: [@xreef](https://github.com/xreef)\n\n---\n\n⭐ If this library helped your project, please star the repository on GitHub!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxreef%2Fsimpleftpserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxreef%2Fsimpleftpserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxreef%2Fsimpleftpserver/lists"}