Romeo ❤️ Ledger Nano

Roman Semko
Oct 3, 2018 · 7 min read

As some of you might have heard through the grapevine, the official Ledger IOTA App is about to be released — all thanks to the community-driven initiative lead by some of the best developers we were honoured to be working with (some of them actively participating in the Hercules development as well): wollac, diskings, muXxer and others. Same developers have helped us integrate the Ledger into Deviota Romeo — a page-based wallet that runs in most browsers.

Punctually for the release of the Ledger IOTA App, we have published Romeo 0.5.0 Public Beta with massive updates to improve the Ledger integration and user experience.

If you have a ledger and want to try it out, read on.

Getting the Ledger IOTA app

You need the Ledger Nano and install the corresponding IOTA App.

Now, it is still not known how many days Ledger will take to release. It seems that there are rather political and organisational considerations involved. However, the App is tested and ready to be used. If you are eager to try it out before the actual release, you will just need:

  • VirtualBox installed on your machine
  • About 3–5 minutes of your time

Follow a simple procedure ( created by muXxer, which takes about 3 minutes, if you already have the VirtualBox installed(and don’t forget to donate for his awesome work! ;-)).

That’s it! You are ready to roll!

Why Romeo?

Romeo runs anywhere. It is a single HTML file that can be opened in most modern browsers (except Safari). No need to install software. And together with Ledger, you can use your friend’s or any public computer to manage your finances without compromising on security.

Due to it’s page-structure, integration and modular design, there is currently nothing that beats Romeo. A transaction takes about 1–2 seconds (or 14 seconds on Ledger) to complete.

Your ledger could literally handle a billion of different accounts. Each account with its own set of pages. Romeo is only limited by your browser! And the limits are HUGE.

Thanks to Ledger, your seed or password does never show on your computer. Forget about trojans or someone looking over your shoulder!

Romeo let’s you know exactly what addresses you have used, which of them still hold value and which of them can be shared. Practically all information can be copied with a click and opened in for verification.

manage your addresses like never before
copy anything with just one click

Running Romeo

In order to be able to connect with Ledger, Romeo has to run on a HTTPS server.

All changes we do to Romeo are automatically built and hosted on Gitlab. The simplest way to use Romeo is simply accessing that prebuilt version on the Gitlab HTTPS server:

If you want to host it separately on your own server, you can simply save the html page and upload to your server. You can also build/compile the Romeo HTML page from scratch and upload wherever you want. Simply follow the instructions in the project’s readme file located here:

There are multiple ways to run a HTTPS server on your local machine and serve a static HTML file (Romeo, in this case). Here is our preferred way:

The simplest way for us is to install NodeJS and “Yarn” using the node package manager (npm):

npm install –g yarn

Then you can either clone Romeo with Git or download as ZIP file and unpack somewhere on your computer. From within the Romeo directory, run:


This will download all the dependencies. Then, in order to start a HTTPS server with Romeo, simply run:

yarn run

Your local https server running Romeo should become accessible at https://localhost:1234

Using Romeo with Ledger Nano

Make sure you have your Ledger connected and the IOTA App running. To login with your Ledger, first switch to the “Ledger Nano” Tab on the Romeo login screen and press “Login with Ledger”. Optionally, you can specify an account name or number. Do not forget it! In case of doubt, leave it at the default value for the moment.

It should take a few seconds and an empty ledger with a first blank page should appear. That’s it! The rest of the operations is the same as if you would use Romeo without Ledger Nano, apart of few minor differences:

That is because there is a Ledger’s hardware limit of how big a bundle can be. Therefore, only one output and a few inputs for now. That is why the donations line for Field Servers (which does not mean that you should not support the hard-working Field servers 😉).

If the current seed/page has more than one address with positive balance, usually, one bundle is created to pass the whole balance to the new page. On Ledger, a separate bundle is created for each address. This is similar to point #1: hardware limitations.

This also means that you will have to confirm each of the bundles on your Ledger sequentially.

Few seconds after you click “Send transfer”, you will be asked to confirm the transaction on your Ledger. Until then the transaction screen will be “waiting” for your input.

What are the next steps

The usage of Romeo together with Ledger has tremendous benefits. Apart of quick login and additional security, you can use any Romeo hosted anywhere, without being concerned about sharing your passwords or seeds with potentially dangerous parties. Similar to MyEtherWallet used with Ledger.

As long as your seed is on your Ledger, your IOTAs are safe with Romeo. There are definitely some glitches and bugs that still have to be ironed out, but the core is pretty stable.

Our next steps in Romeo development are:

  1. Add option to switch servers from Field to a custom one (settings screen that saves to browser’s local storage and backup file).
  2. Even though Field does automatic promotions/reattachments, add option to do so manually.
  3. Better queue management for faster syncs.
  4. Semi-automatic restoration of pages after global snapshot, when no backup has been created.
  5. Make the frontend visually more appealing.
  6. Refactoring of frontend and backend components.

Our initial goal with Romeo was to test certain concepts regarding the seeds/page management, statefulness and static addresses. Most of our aims have been achieved and these learnings will be used in the next steps of our R&D.

Also, due to lack of resources and certain decisions beyond our control, Romeo has been pushed back in our priority list over the last few months. It does not mean, however, that Romeo is dead.

We want it to be a community project. We believe in the power of unbiased community-driven solutions in the direction that the community sees fit. It’s beyond any commercially created solution. Why? Because community solutions have another motivation. There are totally other creative energies and interests involved that no commercial project can compete with.

Romeo is written in NodeJS. Frontend is plain ReactJS. Nothing fancy. If you feel that your Javascript-Kung-Fu is up for the challenge, checkout out romeo.html + romeo.lib on our Gitlab and experiment!

All contributions are welcome. ❤️

Short SemkoDev update

As for SemkoDev, we continue our work on Hercules (an alternative full node for IOTA), which should be released soon for the public beta. The development is currently heavily driven by the community by truly awesome and committed developers. I cannot thank them enough (it saves us time for the other components). These people form the foundation of this technology - the backbone of our community. If it wasn’t for them, Hercules wouldn’t be half as awesome as it already is. Thank you! ❤️

We are completely re-writing Nelson in Go. The second version takes the learnings from Nelson 1.0 and improves on vital components, which will be necessary for the next endeavour. Nelson 2.0 will be integrated into Hercules. A stand-alone application might be created for usage with IRI.

Nikita’s consensus had several improvements over the past few weeks, removing certain limitations and conditions we had set in the past. The change had direct impact on stability and performance as seen on my latest tests with Raspberry Pi Zeros. Time will tell whether and when this consensus can be used on IOTA. But one thing is clear: you will see a real-world use-case for Nikita sooner than you think. 😉

More on all this later.

Thanks for reading and for your support!

Roman Semko

IOTA Donations welcome:


PS: To all the German readers: Happy Unity Day! There is strength in unity. The people, the community has power to drive the change.


DLT research and development