New Rocky.js Face Won't Build

Hello! I’m a web developer new to Pebble development (though I’ve worn Pebbles since 2016 and have always wanted to develop for them).

I’ve been trying to start developing a watchface with Rocky following this tutorial but have not been able to get the initialized watchface to build.

I tried setting up my environment locally on my MacOS device as well as in the VSCode Cloud IDE. In both environments, I created a new Rocky watchface project with the SDK like the tutorial says using pebble new-project –rocky rockyface, cd rockyface, but when I run pebble build I get this Python TypeError: expected str, bytes or os.PathLike object, not list

$ pebble build
Setting top to                           : /workspaces/codespaces-pebble/rockyface 
Setting out to                           : /workspaces/codespaces-pebble/rockyface/build 
Checking for program 'webpack'           : /home/vscode/.pebble-sdk/SDKs/current/node_modules/.bin/webpack 
Checking for program 'node, nodejs'      : /usr/local/share/nvm/versions/node/v24.11.1/bin/node 
Found Pebble SDK for flint in:           : /home/vscode/.pebble-sdk/SDKs/current/sdk-core/pebble/flint 
Checking for program 'gcc, cc'           : arm-none-eabi-gcc 
Checking for program 'ar'                : arm-none-eabi-ar 
Checking if the -o link must be split from arguments : yes 
Found Pebble SDK for emery in:                       : /home/vscode/.pebble-sdk/SDKs/current/sdk-core/pebble/emery 
Checking for program 'gcc, cc'                       : arm-none-eabi-gcc 
Checking for program 'ar'                            : arm-none-eabi-ar 
Checking if the -o link must be split from arguments : yes 
Found Pebble SDK for diorite in:                     : /home/vscode/.pebble-sdk/SDKs/current/sdk-core/pebble/diorite 
Checking for program 'gcc, cc'                       : arm-none-eabi-gcc 
Checking for program 'ar'                            : arm-none-eabi-ar 
Checking if the -o link must be split from arguments : yes 
Found Pebble SDK for chalk in:                       : /home/vscode/.pebble-sdk/SDKs/current/sdk-core/pebble/chalk 
Checking for program 'gcc, cc'                       : arm-none-eabi-gcc 
Checking for program 'ar'                            : arm-none-eabi-ar 
Checking if the -o link must be split from arguments : yes 
Found Pebble SDK for basalt in:                      : /home/vscode/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt 
Checking for program 'gcc, cc'                       : arm-none-eabi-gcc 
Checking for program 'ar'                            : arm-none-eabi-ar 
Checking if the -o link must be split from arguments : yes 
'configure' finished successfully (0.794s)
Waf: Entering directory `/workspaces/codespaces-pebble/rockyface/build'
[ 5/20] Compiling flint | reso: build/resources/rocky-app.js -> build/flint/resources/rocky-app.js.JS_SNAPSHOT.reso
[11/20] Processing flint | lint_js: src/rocky/index.js
Waf: Leaving directory `/workspaces/codespaces-pebble/rockyface/build'
Build failed
Traceback (most recent call last):
  File "/home/vscode/.pebble-sdk/SDKs/current/sdk-core/pebble/.waf3-2.1.4-e7919c666152db2545b931e52107c4b8/waflib/Task.py", line 179, in process
    ret=self.run()
        ^^^^^^^^^^
  File "/home/vscode/.pebble-sdk/SDKs/current/sdk-core/pebble/.waf3-2.1.4-e7919c666152db2545b931e52107c4b8/waflib/extras/process_js.py", line 132, in run
    proc=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/subprocess.py", line 1026, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.12/subprocess.py", line 1826, in _execute_child
    and os.path.dirname(executable)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen posixpath>", line 181, in dirname
TypeError: expected str, bytes or os.PathLike object, not list

Traceback (most recent call last):
  File "/home/vscode/.pebble-sdk/SDKs/current/sdk-core/pebble/.waf3-2.1.4-e7919c666152db2545b931e52107c4b8/waflib/Task.py", line 179, in process
    ret=self.run()
        ^^^^^^^^^^
  File "/home/vscode/.pebble-sdk/SDKs/current/sdk-core/pebble/.waf3-2.1.4-e7919c666152db2545b931e52107c4b8/waflib/extras/generate_resource_ball.py", line 13, in run
    reso=resource_generator.generate_object(self,self.definition)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.pebble-sdk/SDKs/current/sdk-core/pebble/common/waftools/resources/resource_map/resource_generator.py", line 90, in generate_object
    return cls.generate_object(task, definition)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.pebble-sdk/SDKs/current/sdk-core/pebble/common/waftools/resources/resource_map/resource_generator_js.py", line 55, in generate_object
    task.generator.bld.fatal("JS compilation failed.\n"
  File "/home/vscode/.pebble-sdk/SDKs/current/sdk-core/pebble/.waf3-2.1.4-e7919c666152db2545b931e52107c4b8/waflib/Context.py", line 263, in fatal
    raise self.errors.ConfigurationError(msg,ex=ex)
waflib.Errors.ConfigurationError: JS compilation failed.
STDOUT: 
STDERR: node:fs:560
  return binding.open(
                 ^

Error: ENOENT: no such file or directory, open '/home/vscode/.pebble-sdk/SDKs/4.9.77/sdk-core/pebble/common/tools/js_tooling.wasm'
    at Object.openSync (node:fs:560:18)
    at Object.readFileSync (node:fs:444:35)
    at S (/home/vscode/.pebble-sdk/SDKs/4.9.77/sdk-core/pebble/common/tools/js_tooling.js:2:423)
    at sa (/home/vscode/.pebble-sdk/SDKs/4.9.77/sdk-core/pebble/common/tools/js_tooling.js:1:270)
    at /home/vscode/.pebble-sdk/SDKs/4.9.77/sdk-core/pebble/common/tools/js_tooling.js:11:468
    at /home/vscode/.pebble-sdk/SDKs/4.9.77/sdk-core/pebble/common/tools/js_tooling.js:11:491
    at Object.<anonymous> (/home/vscode/.pebble-sdk/SDKs/4.9.77/sdk-core/pebble/common/tools/js_tooling.js:18:333)
    at Module._compile (node:internal/modules/cjs/loader:1761:14)
    at Object..js (node:internal/modules/cjs/loader:1893:10)
    at Module.load (node:internal/modules/cjs/loader:1481:32) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: '/home/vscode/.pebble-sdk/SDKs/4.9.77/sdk-core/pebble/common/tools/js_tooling.wasm'
}

Node.js v24.11.1


Build failed.

Searching the error on StackOverflow and other help forums has been inconclusive, and I’m not sure what I would even change to try and get this working with Pebble since this is deep down in the Python call stack.

Any help would be appreciated! Thanks!

1 Like

I’ve read somewhere that rocky is currently not supported

1 Like

It should work on old watches for what it always has worked! It just will result in watchfaces not working for Core watches, since Core wants to replace it with their own take on JS API

1 Like