Bluetooth beacon

An Open Source JavaScript microcontroller you can program wirelessly – perfect for IoT! No software needed so get started in seconds.

Google has an interesting project called Eddystone.


About this project

Puck.js is a low energy smart device which can be programmed wirelessly and comes pre-installed with JavaScript. It is both multi-functional and easy to use, with a custom circuit board, the latest Nordic chip, Bluetooth Smart, Infra-red and much more, all enclosed in a tiny silicone case.

We have an easy to use graphical editor, so it’s perfect for any maker, whether you’re just starting out or have been making for years. You can start programming straight out of the box – no wires or software required!

Why choose Puck.js?

Bluetooth Smart (or Bluetooth Low Energy) is an amazing technology – it’s now built into virtually all Phones and Computers, and Bluetooth Smart devices have a battery life of years.

Most manufacturers conveniently gloss over the difficulties of programming their hardware, and other beacons are provided without software or left crippled by their boring factory-installed software. Puck.js is different – it comes with our Open Source JavaScript interpreter Espruino pre-installed, which makes it incredibly easy to use and means you can get started in just seconds, without any prior programming experience.


  • 35mm diameter, 10mm thick
  • Silicone rubber cover, ABS plastic base
  • CR2032 210mAh battery
  • MAG3110 magnetometer
  • 1x Tactile Button, 4x LED (R,G,B,IR)
  • 8x 0.1″ pins – 6x GPIO, 2x Power
  • Bluetooth Smart 5.0, 80M range in Open Space
  • PLUS Nordic Semiconductor’s brand new nRF52832 microcontroller. It’s packed full of amazing features…
  • ARM Cortex M4F core
  • Compatible with Bluetooth 5.0 – giving Quadruple the range, and double the speed of Bluetooth 4.2
  • Near field communications (NFC) built-in
  • A massive 64kB of RAM and 512kB of Flash – double that of the previous generation nRF51
  • 64 MHz clock speed – four times that of the nRF51
  • Over the air firmware updates
  • 12 bit ADC, timers, SPI, I2C and Serial that can be used on any available pins
  • Temperature sensor

Input and Output

Puck.js can measure light, temperature, magnetic fields and capacitance, can control Infrared devices, produce any colour light and has a clever tactile switch that turns the Puck into one big button.

We’ve carefully chosen sensors to make it as useful as possible, while keeping it affordable.

The Magnetometer

The Magnetometer on Puck.js is a digital compass – you can measure its orientation relative to the earth’s magnetic field in 3 dimensions.

Like a compass, it’ll react to a magnet nearby. This means you can use it to sense all kinds of things:

  • Detect when a magnet is nearby (ie door opening or closing)
  • Detect the angle of a magnet relative to Puck.js (ie. water level via a magnet on a float)
  • Measuring the rotation of Puck.js (you can use your Puck as a knob)
  • Magnetic North, for orientation

Physical Web

The Physical Web (Eddystone) allows Bluetooth devices like Puck.js to advertise themselves to phones in the area. If a phone user clicks a notification they’ll be taken to a website set by the Puck.js. Google has a handy YouTube video explaining the Physical Web at

Puck.js advertising packets are fully configurable, so it will also support iBeacon for Apple devices.

Web Bluetooth

With Web Bluetooth, you can control Puck.js straight from a website wirelessly without having to download any software on your PC or your Puck.js. The website simply sends the JavaScript code it wants directly to the Puck and it’ll be executed.

Web Bluetooth is currently supported by Chrome on Android, Mac OS, Chromebooks and Linux. Windows support will be available soon, and other browser vendors are adding support too.

If your platform isn’t supported we’ve got a native command-line and an easy Graphical User Interface application that you can use instead.

Don’t be a Slave

Puck.js can enter the Bluetooth ‘Central’ (or ‘Master’) role. Unlike most other beacons it doesn’t have to be told what to do as a ‘Slave’ – it can actively connect to other Bluetooth Smart devices and control them!

Not only that, but Puck.js can also be a Bluetooth Smart HID device – making your computer see it as a keyboard or mouse, so it can interact with your computer without drivers!

Internet Enabled

Puck.js runs Espruino, our JavaScript interpreter for microcontrollers. JavaScript is one of the most popular programming languages in the world. It’s easy to learn and widely supported, running on everything from your Phone to the servers that power some of the biggest sites on the web.

Espruino contains TCP/IP and HTTP Client and Servers (including WebSockets), which will be available in Puck.js. With a suitable Bluetooth Smart to Internet gateway you’ll be able to put your Puck on the internet!

You can even wire common ESP8266 WiFi or SIM900 GSM/GPRS modules straight to your Puck, allowing it direct access to the internet without a Bluetooth gateway.

Hacker Friendly

Puck.js contains 8 easy to use pins on a 0.1″ pitch (6x GPIO, GND and VCC) – that can be soldered or used with conductive thread. Once connected you can use them to control whatever you want!

Open Source

Hardware, Software, libraries and documentation are all Open Source – you can check out the software and previous hardware designs on GitHub right now!

If you need a case with particular attachments you could easily download the case design file, customise it, and print it off at a local hacker space or online print shop like i.materialise or Shapeways.

By the Espruino developers

Puck.js has been created by Gordon Williams – the creator of Espruino. As with all boards we make, any improvements to the software will work their way back into the other boards – benefiting everyone.

Get Productive

You can start programming Puck.js in seconds. There’s nothing to install, just visit the Espruino Website in the Chrome web browser and connect to your Puck.

You can use our example projects, describe what you want Puck.js to do by dragging blocks around, or start programming directly in JavaScript!

But that’s not all – once connected, you can modify your code while it’s running, and can even debug it – stepping though line by line and even inspecting variables without restarting… all completely wirelessly, with no extra hardware required!

What do you get?

With each Puck.js you’ll get:

  • a Puck.js circuit board with all the components mentioned above
  • a water resistant Puck.js case – with silicone top, hard plastic base and fitting
  • a CR2032 battery
  • a ‘Getting Started’ card with instructions

Current Status

We have working prototypes and a manufacturing partner called Seeed Studios that we used for our first KickStarter, use for all current boards and are extremely confident in.

The software is the popular Espruino JavaScript, which we’ve shipped on over 12,000 boards now. It’s extremely well-proven. However, you’ll also be able to update your Puck’s firmware wirelessly as new features become available.

Production Timeline and Funding

Work on the Puck’s software started in August 2015 when Nordic Semiconductor started porting Espruino to their chips. In September, we added support for the BBC micro:bit, and improvements have steadily been made over the past months.

In late 2015 we started researching hardware options, including the possibility of using existing hardware – nothing fit the bill, so we started designing our own hardware.

We’re now on the 5th iteration of the prototype PCB, and the 3rd iteration of the case, and we’re extremely happy with the results.

Many of the components on the board can only be sourced cheaply at 1000+ volumes (and need to be paid for up-front), and the moulds needed for the case cost a lot to create. We need your funds so that we can spread those costs over many boards, and can offer them to you at an affordable price.

Moving forwards, our timeline is:

  • 7 / 2016: Improving firmware and final testing of hardware
  • 8 / 2016: Finalising hardware design, develop program & test procedure
  • 9 / 2016: Machining of moulds for casting, ordering parts
  • 10 / 2016: Start manufacturing
  • 12 / 2016: Ready to ship! (we’ll do our best to get them out for Christmas, but we can’t guarantee it)

Stretch Goals

If we can make a big order and get our costs down, we’d like to thank you! If we hit £50,000 we’ll do one of the following. Let us know in the comments what you’d like and/or if you’d prefer something else.

  • Support for transpiled languages in the Web IDE (TypeScript, CoffeeScript, etc)
  • Software for a Raspberry Pi-based Bluetooth hub, allowing you to script and debug any Puck.js devices that are around your home from the internet.

And of course, if we do even better we’ll keep thinking of fun things to add to Puck.js!

Risks and challenges

We’ve had a great experience with our manufacturing partner over the last 3 years and are very confident in them. However if the worst happens and there are problems, we could still move to a UK-based manufacturer we have used previously.

All the main hardware components on the board can be sourced from multiple manufacturers, with only relatively minor changes to the PCB required – so if we have difficulties sourcing parts then we can quickly recover, with only a few weeks’ delay.

We’re using a module that contains the nRF52 integrated circuit along with the aerial – while this costs us more, the module comes pre-certified so we can be confident in radio performance and don’t risk failing certification, which removes one big risk area.

We’ve also completed two previous KickStarter campaigns. Both of them were shipped within a month of the estimated ship date, so we’re confident that we are accounting for any unexpected delays and costs.