The table below list all currently available features of the OSW-OS. These features can be manually enabled (or disabled) by modifying the platformio.ini and adding (or removing) their -D-Define lines.

Flag Description Requirements
OSW_FEATURE_STATS_STEPS Enable step history (displayed on the watchfaces) -
OSW_FEATURE_WIFI Enable all wifi releated functions (services, webinterface) -
OSW_FEATURE_WIFI_APST Allow the watch to enable wifi client and station simultaneously OSW_FEATURE_WIFI
OSW_FEATURE_WIFI_ONBOOT Allow the user to enable the wifi on boot OSW_FEATURE_WIFI
OSW_FEATURE_LUA Enable LUA scripting support for apps LUA_C89_NUMBERS
LUA_C89_NUMBERS Needed when compiling with LUA support -
DEBUG=1 Enables debug logging to the console & additional utilities -
GPS_EDITION Configure the build for use with GPS (including apps, api, sensors) PROGMEM_TILES, BOARD_HAS_PSRAM
PROGMEM_TILES Needed when compiling with GPS support -
BOARD_HAS_PSRAM Needed when compiling with GPS support -
GPS_EDITION_ROTATED Replacement for GPS_EDITION to work with flipped boards -


The table below lists which features are available in which version of the OS by default. It is always our goal to also support older hardware revisions, but not all features can run properly using the old schematics.



This page describes the requirements to manually flash the firmware.

Also check the latest readme file within the software repository:

Watch this video:

Development Environment

To flash the latest software to the open-smartwatch you will need to install VScode with PlatformIO (Youtube tutorial:


Install git from

Serial Drivers CH340

The Open-Smartwatch uses a ch340 for USB to serial. Please install the drivers from the manufacturer:

Fixing error: unknown type name ‘wait_queue_t’; did you mean ‘wait_event’?

On Fedora Silverblue 34 make outputs error: unknown type name ‘wait_queue_t’; did you mean ‘wait_event’?. This can be fixed by using this fork from juliagoda.

Cloning the Repository

Clone the source code repository recursively:

git clone --recurse-submodules

Then, open the directory with Visual Studio Code.

Set up config.h

Got to the directory include/ and take a look into the config.h.example - all instructions are noted there.


Keep in mind the PCB is flipped when inserted into the watch:

  1. To set the watch into upload mode, you need to hold the lower left button and then click the reset button (top left). This enables flash mode, the display will turn dark.
  2. Press the reset button after uploading.


Check the cable

Usually, a few cables do not have a data transmission role. Try to upload to another cable.

Check the driver

Check the driver insertion.

Arduino_TFT.h: No such file or directory

You did not clone the repository with the --recursive-submodules flag.


After changing the branch, follow the command : git submodule update

'LANG_STW_START' was not declared in this scope

You did not rename include/config.h.example

Failed to connect to ESP32: Timed out waiting for packet header

You did not hold down BTN1(FLASH) and then tap the RESET button on the watch whilst was trying to connect.