---
name: "mpremote"
section: "1"
platform: "linux"
package: "micropython-mpremote"
version: "1.24.1-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/mpremote"
---

# mpremote(1)

MicroPython remote control

## NAME

mpremote - MicroPython remote control

## SYNOPSIS

**mpremote** command \[**options**\] \[**+ command** *...*\]

**mpremote** \[**--help**\]

**mpremote** \[**--version**\]

## DESCRIPTION

The **mpremote** command line tool provides an integrated set of utilities to remotely interact with and automate a MicroPython device over a serial connection.

The simplest way to use this tool is just by invoking it without any arguments:

```
mpremote
```

This command automatically detects and connects to the first available serial device and provides an interactive REPL. Serial ports are opened in exclusive mode, so running a second (or third, etc) instance of **mpremote** will connect to subsequent serial devices, if any are available.

## OPTIONS

- **--help**

  Show a help message and exit.

- **--version**

  Show the program version and exit.

## COMMANDS

For REPL access, running **mpremote** without any arguments is usually all that is needed. **mpremote** also supports a set of commands given at the command line which will perform various actions on remote MicroPython devices.

For commands that support multiple arguments (e.g. a list of files), the argument list can be terminated with **+**. The full list of supported commands are:

- **connect** \[*device*\]

  Connect to a specified device via a device-name shortcut. *device* may be one of:

  - auto

    connect to the first available device

  - list

    list the available devices

  - id:*serial*

    connect to the device with USB serial number *serial* (the second entry in the output from the **connect list** command)

  - port:*path*

    connect to the device with the given path

-

  If the *device* is not specified, auto is assumed.

- **disconnect**

  Disconnects the current device. After a disconnect, auto **soft-reset** is enabled (see **AUTO-CONNECTION AND SOFT-RESET** below).

- **resume**

  Resume a previous **mpremote** session. This disables auto **soft-reset** (see **AUTO-CONNECTION AND SOFT-RESET** below).

- **soft-reset**

  Perform a soft-reset of the device. This will clear out the Python heap and restart the interpreter. It also disables auto **soft-reset** (see **AUTO-CONNECTION AND SOFT-RESET** below).

- **repl** \[*options*\]

  Enter the REPL on the connected device. The available *options* are:

  - **--capture** *file*

    to capture output of the REPL session to the given file

  - **--inject-code** *string*

    to specify characters to inject at the REPL when **Ctrl-J** is pressed

  - **--inject-file** *file*

    to specify a file to inject at the REPL when **Ctrl-K** is pressed

- **eval** *string*

  Evaluate ahd print the result of a Python expression.

- **exec** *string*

  Execute the given Python code.

- **run** *file*

  Run a script from the local filesystem.

- **fs** *subcommand*

  Execute filesystem commands on the device. *subcommand* may be:

  - **cat** *files...*

    to show the contents of a file or files on the device

  - **ls** **ls** *dirs...*

    to list the current, or specified directories

  - **cp** \[*-r*\] *src... dest*

    to copy files; use ":" as a prefix to specify a file on the device

  - **rm** *src...*

    to remove files on the device

  - **mkdir** *dirs...*

    to create directories on the device

  - **rmdir** *dirs...*

    to remove directories on the device

  - **touch** *files...*

    to create empty files (if they don't already exist)

- **edit** *files...*

  Edit a file (or files) on the device. The **edit** command will copy each file from the device to a local temporary directory and then launch your editor (defined by the environment variable *$EDITOR*). If the editor exits successfully, the updated file will be copied back to the device.

- **mip install** \[*options*\] *packages...*

  Install packages from micropython-lib (or GitHub) using the **mip** tool. The available *options* are:

  - **--target** *path*

    Install under *path* instead of the default location (the first entry in **sys.path** ending in **/lib**). Please note that *must exist in* **sys.path** for you to be able to subsequently import the package.

  - **--no-mpy**

    Install the source version  *.py* files rather than *.mpy).*

  - **--index** *URL*

    Use the specified *URL* instead of the default package index at **https://micropython.org/pi**.

- **mount** \[*options*\] *local-dir*

  Mount a local directory on the remote device (under the path **/remote**). During usage, **Ctrl-D** will soft-reboot and normally reconnect the mount automatically. If the unit has a *main.py* running at startup however, the remount cannot occur. In this case a raw mode soft reboot can be used: **Ctrl-A Ctrl-D** to reboot, then **Ctrl-B** to get back to normal repl at which point the mount will be ready.

-

  The available *options* are:

  - **-l**, **--unsafe-links**

    By default an error will be raised if the device accesses a file or directory which is outside (up one or more directory levels) the local directory that is mounted. This option disables this check for symbolic links, allowing the device to follow symbolic links outside of the local directory.

- **umount**

  Unmount the local directory from the remote device.

## AUTO-CONNECTION AND SOFT-RESET

Connection and disconnection will be done automatically at the start and end of the execution of the tool, if such commands are not explicitly given. Automatic connection will search for the first available serial device. If no action is specified then the REPL will be entered.

Once connected to a device, **mpremote** will automatically soft-reset the device if needed. This clears the Python heap and restarts the interpreter, making sure that subsequent Python code executes in a fresh environment. Auto soft-reset is performed the first time one of the following commands are executed: **mount**, **eval**, **exec**, **run**, **fs**. After doing a soft-reset for the first time, it will not be done again automatically, until a disconnect command is issued.

Auto soft-reset behaviour can be controlled by the **resume** command. And the **soft-reset** command can be used to perform an explicit soft reset.

## SHORTCUTS

Shortcuts can be defined using the macro system. Built-in shortcuts are:

- **devs**

  list available devices (shortcut for **connect list**)

- **a0**, **a1**, **a2**, **a3**

  connect to /dev/ttyACM*n*

- **u0**, **u1**, **u2**, **u3**

  connect to /dev/ttyUSB*n*

- **c0**, **c1**, **c2**, **c3**

  connect to COM*n*

- **cat**, **ls**, **cp**, **rm**, **mkdir**, **rmdir**, **touch**, **df**

  filesystem commands (mostly aliases for the **fs** equivalent)

- **reset**

  reset the device

- **bootloader**

  make the device enter its bootloader

Any user configuration, including user-defined shortcuts, can be placed in the file **~/.config/mpremote/config.py**. For example:

```
commands = {
    "c33": "connect id:334D335C3138",
    "bl": "bootloader",
    "double x=4": "eval x*2",  # x is an argument, with default 4
    "wl_scan": ["exec", """
import network
wl = network.WLAN()
wl.active(1)
for ap in wl.scan():
    print(ap)
""",],
    "test": ["mount", ".", "exec", "import test"],
}
```

## EXAMPLES

- **mpremote**

  Launch a repl on the automatically detected device.

- **mpremote a1**

  Launch a repl on the device connected to port **/dev/ttyACM1** (using the built-in **a1** shortcut).

- **mpremote connect /dev/ttyUSB0 repl**

  Launch a repl on the device connect to port **/dev/ttyUSB0**.

- **mpremote ls**

  List files on the automatically detected device.

- **mpremote a1 ls**

  List files on the device connected to port **/dev/ttyACM1** (using the built-in **a1** shortcut).

- **mpremote exec import micropython; micropython.mem\_info()**

  Execute some Python code on the remote board to obtain various memory statistics.

- **mpremote eval 1/2 eval 3/4**

  Execute (and show the output of) two simple Python statements on the remote board. Note that no **+** was required because **eval** accepts a single string argument.

- **mpremote mount .**

  Mount the local directory under **/remote** on the automatically detected device.

- **mpremote mount . exec "import localscript"**

  Mount the local directory under **/remote** on the MicroPython board, then import the "localscript" module

- **mpremote cat boot.py**

  Show the contents of **boot.py** on the MicroPython board.

- **mpremote cp :main.py .**

  Copy the **main.py** file from the (remote) MicroPython board to the current (local) directory.

- **mpremote cp main.py :**

  Copy the **main.py** from the current (local) directory to the (remote) MicroPython board.

- **mpremote cp :a.py :b.py**

  On the MicroPython board, copy **a.py** to **b.py**.

- **mpremote cp -r dir/ :**

  Recursively copy the local directory **dir/** to the root directory of the (remote) MicroPython board.

- **mpremote cp a.py b.py : + repl**

  Copy the local files **a.py** and **b.py** to the root directory of the (remote) MicroPython board, then launch a repl. Note that the **+** terminator is required here as the **cp** command takes an arbitrary number of parameters.

- **mpremote mip install aioble**

  Install the asyncio-based wrapper for the Bluetooth API.

- **mpremote mip install github:org/repo@branch**

  Install the **branch** of the MicroPython package located under **org/repo** on GitHub.

- **mpremote mip install --target /flash/third-party functools**

  Install the **functools** package under the **/flash/third-party** directory on the MicroPython board.

## SEE ALSO

[**micropython**(1)](/micropython/1.md)
