neopo − A lightweight solution for local Particle development


neopo [OPTIONS] [PROJECT] [-v/q]
build [project] [-v/q]
particle [OPTIONS]
script [file]


Neopo is a Particle development management utility that simplifies the installation and usage of Particle’s toolchains on a variety on distributions. It features options to build or flash projects, iterable commands, a scripting interface, and Particle Workbench/CLI compatibility. On Linux, several packages required for Workbench to operate sucessfully are installed as dependencies for neopo, providing incredible value to Workbench users, even if they do not choose to use neopo’s interfaces.

Neopo can additionally be used as a Python module, providing methods to use local Particle development toolchains from within Python.




When neopo runs without arguments, or with help, brief documentation for all user-accessible commands is displayed.

install [-f]

Install Particle toolchains and setup the neopo environment. It takes an optional parameter of -f, which can force toolchains to be reinstalled, rather than skipped if the latest versions are already installed.


Upgrade the neopo utility to the latest version available on GitHub. (Deprecated)


Uninstall neopo from the system. (Deprecated)

The upgrade and uninstall commands are deprecated since neopo is installed with pip or from the AUR. Running them will provide information regarding how to upgrade or uninstall neopo.


List all known versions of Device OS and supported platforms available to neopo. To refresh, run update.

create <project>

Create a new Particle project at the specified project path. The created project is compatible with neopo, Particle Workbench, and Particle CLI. If git is installed, the project is additionally initialized as a repository with support for TravisCI.


Refresh the Workbench cache and download Particle toolchains if there are newer versions available.

get <version>

Download a specified Device OS version for later use. Handy for situations when you need to download firmware in advance.

particle [OPTIONS]

Access the Particle CLI distribution used internally by neopo. By using the neopo particle prefix, any Particle CLI command can be accessed. For convenience, creating an alias for particle is recommended:

alias particle="neopo particle"

compile/build [project] [-v/q]

Compile the application firmware of a given Particle project, or the current directory if it’s a project. Settings applied using configure will be passed on to the compiler. The verbosity of the output can be increased with the -v flag, or the output can be quieted with the -q flag.

flash [project] [-v/q]

Compile application firmware and flash to a connected device using DFU.

flash-all [project] [-v/q]

Compile application and system firmware and flash all parts to a connected device using DFU.

clean [project] [-v/q]

Clean application firmware. Usually unnecessary but can eliminate some build errors.

run <target> [project] [-v/q]

Run a specified makefile target for a project. Includes common targets presented in BUILD OPTIONS in addition to other, less frequently used targets. The -v and -q flags are supported. Running without arguments will list available targets.

configure <platform> <version> [project]

Configure the device platform and Device OS version a project should use. The platform and version are checked for compatibility and the specified version of Device OS will be downloaded if it’s not already installed.

To find Device OS versions and their supported platforms use versions. The tab completion function is especially handy since it can fill in platforms and versions for this command.

flags <string> [project]

Set the EXTRA_CFLAGS variable to be used during compilation of a project.

settings [project]

View configured settings for a project. The device platform, Device OS version, and EXTRA_CFLAGS will be printed.

libs [project]

Verify or install Particle libraries specified in for a project. This command is useful when working with projects that use the cloud compiler because it allows you to quickly download the same libraries locally.

iterate <command> [OPTIONS] [-v/q]

An advanced command used to run an iterable command for all connected devices. For each connected device, the deviceID is printed, the device is put into DFU mode, and the specified iterable command is executed. This command was designed for quickly flashing multiple connected devices, but there are many ways it can be used.

The following commands are iterable: compile, build, flash, flash-all, clean, run, script.

One of the powerful features of neopo is the scripting interface. Neopo scripts are a list of commands to run sequentially, with each command placed on its own line. Empty lines and lines starting with # are skipped. Any neopo command can be used in a neopo script, even Particle commands.
script [file]

Execute a script with neopo. If no file is provided, neopo will accept a script piped in through standard input.

$ cat myFile | neopo script

To relay information to the user, the print command can be used, and to wait for user interaction or acknowledgement, the wait command can be used.

Here is an example neopo script:

# Configure the current project
configure argon 1.5.2

# Prompt the user to plug in a device
print "Please plug in your device."

# Flash firmware to the device

# Prompt the user to wait for the device to connect
print "Please wait for your device to connect to the cloud."

# Subscribe to incoming messages
particle subscribe

Neopo is distributed as a Python module. After installation, not only will neopo be available as a command-line program, but it will additionally be accessible within Python. Users are encouraged to experiment with neopo in Python scripts or the REPL.

Here is the script example implemented in Python:

import neopo
neopo.configure("argon", "1.5.2", "myProject")
print("Please plug in your device.")

print("Please wait for your device to connect to the cloud.")

To just use Particle CLI within Python, one can explicity import the particle function:

from neopo import particle
particle("serial monitor")

device = "myFooMachine"
function = "myBarFunction"
particle(["call", device, function])


Nathan Robinson <>


Copyright (c) 2020 - Nathan Robinson. MIT License: All rights reserved.


nrobinson2000/neopo on GitHub: <>


Online Documentation: <>
Particle Developer Forum: <>
Workbench Documentation: <>
Particle CLI Documentation: <>


On Manjaro/Arch running on x86_64 or aarch64 there are several optional tweaks required to complete the installation of neopo. On x86_64, this consists of installing the ncurses packages from the AUR to support use of the Particle Debugger in Workbench. On aarch64, this consists of replacing the armv7l Nodejs distribution with an aarch64 Nodejs distribution. <>