Getting Started with thingsSDK CLI

thingsSDK CLI is a command line application to manage Internet of Things applications written in JavaScript.


You will need an ESP8266 development board flashed with the Espruino JavaScript runtime (see the Flasher.js guides). You can think of Espruino as the Node.js of microcontrollers.


Install thingssdk-cli with npm globally.

 $ npm install thingssdk-cli -g

Create a Project

To create a thingsSDK project use the new command followed by the project name. Replace <project> in the following command with a project name.

$ thingssdk new <project>

Then change in to the project folder.

$ cd <project>`

Then install the dependencies.`

$ npm install

Basic project structure

The new command will generate a bunch of helpful files for you:

├── build
├── devices.json
├── main.js
├── package.json
└── scripts
    ├── repl.js
    └── upload.js

Here is a general overview of each major part:

build/ is where your compiled javascript will go. Git ignores this folder. devices.json contains the configuration for device(s). main.js is the main file of your project scrips/repl.js is a script to start a repl, a very helpful tool for debugging. scrips/upload.js is a script upload your project to the configured device(s).

Hello World

Each thingsSDK project starts as with the Hello World code - located in main.js. All thingsSDK applications require a main() function to be implemented. The Hello World application blinks the blue LED on the device. It blinks every half a second.

let isOn = false;
const interval = 500; // 500 milliseconds = 0.5 seconds

 * The `main` function gets executed when the board is initialized.
 * Development: npm run dev
n * Production: npm run deploy
function main() {
    setInterval(() => {
        isOn = !isOn; // Flips the state on or off
        digitalWrite(D2, isOn); // D2 is the blue LED on the ESP8266 boards
    }, interval);

To send the code to the device in development mode use the following npm script:

$ npm run dev

The dev command also starts an interactive REPL on the device so you can debug. Try typing isOn and seeing the value change overtime.


The development environment doesn't save the code on the device. In other words, if you unplug the device and plug it back in again the code you just sent is gone.

To send the code to the device and save it to memory in production mode use the deploy command.

$ npm run deploy

When you unplug the ESP8266 from your computer and plug it in to an external power source it will still have your code on the device.

Other Commands

To connect to the device without sending any code use the repl command.

$ npm run repl

If you're cloning the project on another machine or working as a team you'll want to generate a devices.json machine for the new environment using the thingsSDK devices command.

$ thingssdk devices

results matching ""

    No results matching ""