Skip to content

mtheall/ftpd

Repository files navigation

ftpd

FTP Server for 3DS/Switch/Linux.

Features

  • Appears to work well with a variety of clients.

  • Supports multiple simultaneous clients. The 3DS itself only appears to support enough sockets to perform 4-5 simultaneous data transfers, so it will help if you limit your FTP client to this many parallel requests.

  • Cutting-edge graphics.

  • Exit on NDS/3DS with START button

  • Exit on Switch with PLUS button

  • Toggle backlight on NDS/3DS with SELECT button

  • Toggle backlight on Switch with MINUS button

  • Emulation of a /dev/zero (/devZero) device for network performance testing

    • Example retrieve curl ftp://192.168.1.115:5000/devZero -o /dev/zero
    • Example send curl -T /dev/zero ftp://192.168.1.115:5000/devZero

Dear ImGui

ftpd uses Dear ImGui as its graphical backend.

Standard Dear ImGui controller inputs are supported.

  • A
    • Activate/Open/Toggle
    • Tweak value with D-Pad (+ L/R to tweak slower/faster)
  • B
    • Cancel/Close/Exit
  • X
    • Edit text / on-screen keyboard
  • Y
    • Tap: Toggle menu
    • Hold + L/R: Focus windows
  • Left Stick
    • Scroll
    • Move window (when holding Y)
  • D-Pad
    • Move
    • Tweak values (when activated with A)
    • Resize window (when holding Y)

Latest Builds

NDS: https://mtheall.com/~mtheall/ftpd.nds

CIA: https://mtheall.com/~mtheall/ftpd.cia

3DSX: https://mtheall.com/~mtheall/ftpd.3dsx

NRO: https://mtheall.com/~mtheall/ftpd.nro

CIA QR Code

ftpd.cia

Classic Builds

Classic builds use a console instead of Dear ImGui.

CIA: https://mtheall.com/~mtheall/ftpd-classic.cia

3DSX: https://mtheall.com/~mtheall/ftpd-classic.3dsx

NRO: https://mtheall.com/~mtheall/ftpd-classic.nro

CIA QR Code

ftpd-classic.cia

Build and install

You must set up the development environment.

NDS

The following pacman packages are required to build nds/ftpd.nds:

devkitARM
dswifi
libfat-nds
libnds

They are available as part of the nds-dev meta-package.

3DSX

The following pacman packages are required to build 3ds/ftpd.3dsx:

3dstools
devkitARM
libctru

They are available as part of the 3ds-dev meta-package.

Build 3ds/ftpd.3dsx:

make 3dsx

NRO

The following pacman packages are required to build switch/ftpd.nro:

devkitA64
libnx
switch-tools
switch-libzstd

The first three are available as part of the switch-dev meta-package. Additionally, ImageMagick is required for converting assets.

Build switch/ftpd.nro:

make nro

Supported Commands

  • ABOR
  • ALLO (no-op)
  • APPE
  • CDUP
  • CWD
  • DELE
  • FEAT
  • HELP
  • LIST
  • MDTM
  • MKD
  • MLSD
  • MLST
  • MODE (no-op)
  • NLST
  • NOOP
  • OPTS
  • PASS (no-op)
  • PASV
  • PORT
  • PWD
  • QUIT
  • REST
  • RETR
  • RMD
  • RNFR
  • RNTO
  • SITE
  • SIZE
  • STAT
  • STOR
  • STRU (no-op)
  • SYST
  • TYPE (no-op)
  • USER (no-op)
  • XCUP
  • XCWD
  • XMKD
  • XPWD
  • XRMD

Planned Commands

  • STOU

SITE commands

  • Show help: SITE HELP
  • Set username: SITE USER
  • Set password: SITE PASS
  • Set port: SITE PORT
  • Set getMTime*: SITE MTIME [0|1]
  • Save config: SITE SAVE

*getMTime only on 3DS. Enabling will give timestamps at the expense of slow listings.