Feather: a free Monero desktop wallet

Home | Download | Features | FAQ | Support | Wownero

Feather FAQ

Introduction

What is feather?

  • Feather is a free, open-source Monero client for Linux, macOS and Windows. It is written and maintained by dsc and tobtoht.
  • The goal of Feather is to provide a simple/easy-to-use Monero wallet for every day use. It is beginner friendly, but should also cater to the needs of experienced Monero users.
  • Feather's UI is heavily inspired by Bitcoin's Electrum wallet, but it's not a fork. All of the UI code was written from scratch in C++ / QtWidgets.
  • Feather is performant, lightweight, and has a focus on stable/robust features.
  • Feather started development in the early summer of 2019. In the summer of 2020 we managed to send our first Monero transactions between 2 Feather instances.
  • Feather is distributed as a portable executable.

Features supported

Does Feather run on my operating system?

Feather is officially supported on Linux, macOS, Windows and Tails. On the download page we list the minimum supported versions for these operating systems.

Feather uses a recent version of Qt (5.15), and some older distributions (like Ubuntu 16.04) will not work with this version. On Linux, Feather should run on machines with libc 2.29 and higher. To check your libc version run ldd --version.

Since Feather is a program used for managing a cryptocurrency asset we figure you ought to keep your OS secure and up-to-date.

Does Feather support 32-bit machines?

No. Most modern processors are 64 bit and we see no reason to support legacy machines.

I have a low-specced machine, will it run Feather?

Probably. The UI was designed to be lightweight. That's not to say that Feather is a lightweight program, since it links directly to Monero's core code - a bulky dependency.

Running Feather will require at least 200 MB of free RAM. Laptops running Tails should have at least 2 GB of total RAM. A dual core processor or better is recommended.

The official Monero GUI uses QtQuick (QML) to render the interface, which requires more graphical power than our basic QtWidgets based application. Feather requires no GPU or hardware acceleration, and the program should also work fine through X11 forwarding, RDP, or in a VM.

Does Feather work without Tor?

Tor is needed to connect to the websocket server.

If you already have Tor running on your machine, Feather will try to connect to the default Tor socks5 port (9050) automatically. If you run Tor on a non-standard port, you can use --use-local-tor in combination with --tor-port <port>.

Feather ships with a built-in Tor binary, if no local Tor daemon can be found Feather will start one. For performance reasons, Feather only routes websocket and HTTP (for e.g. Xmr.to) over Tor, that means that connections to remote nodes are over clearnet by default. If you want to connect to remote nodes over Tor, see this.

Does Feather work without a websocket connection?

Note: This is not implemented as of the alpha release.

Use commandline argument --ws-disable or visit Settings -> Network.

Note that Feather was designed with an active websocket connection in mind, so some functionality will be disabled/broken.

Does Feather support Ledger/Trezor?

No, and we have no plans to support hardware wallets in the future. An implementation would complicate the codebase significantly, and as a small team we doubt maintaining it.

If you have a Ledger or Trezor device and would like to use it, grab the official Monero GUI or CLI.

Does Feather support language localization?

Not at the moment. It's just English for now. Perhaps in the future we will add more languages.

Does Feather support output control?

Yes, this is an advanced feature. Click on Views -> Coins to enable the "Coins" tab which allows you to freeze, thaw, and sweep outputs.

We plan on adding support for manual input selection, however this has not been implemented as of the alpha release. As a temporary work around you can freeze all unwanted coins, then send a transaction that includes all unfrozen coins by clicking Max on the Send page.

Does Feather support XMR.To

Yes it does. XMR.To is created/hosted by binaryFate, a Monero core team member. You can convert Monero into BTC using Feather.

Feather has no commercial affiliation with XMR.TO - we simply implemented their API.

Does Feather support reproducible builds?

We do not currently support reproducible builds, but would like to in the future. Instead our releases are PGP signed. Feel free to compile from source.

Does Feather support Purism's Librem5 or PureOS?

No, but we are interested in supporting those devices. Perhaps in the future.

Does Feather support stagenet and testnet?

Yes. For development purposes you may use the commandline options --stagenet or --testnet.

Please note that on Mac OS the binary can be found at feather.app/Contents/MacOS/feather. In addition, your Monero are absolutely worthless on stagenet and testnet.

Can Feather verify transaction proofs?

Yes. Go to Tools -> Verify transaction proof.

Feather currently supports verifying SpendProofs, OutProofs and InProofs.

Can Feather create transaction proofs?

As of the alpha release, Feather only supports creating SpendProofs. To create a SpendProof, right click on a transaction in the History tab and Copy -> Spend proof.

The ability to create OutProofs will be added in the future.

Can Feather sign/verify messages?

Yes. Feather supports signing messages with your primary address and any of the wallet's subaddresses.

Go to Tools -> Sign/verify message to open the dialog.

Does Feather support multisig?

Not yet. We're exploring adding multisig, see this comment for more information.

Does Feather support view-only wallets?

Not yet, although there are some reports that opening a view-only wallet works.

Does Feather support submitting transactions over Tor?

Not yet. Some significant changes to wallet_api are required to implement this. It's definitely on our list, but unlikely to make it into the initial release.

Ports and forks

Feather is primarily developed for Linux machines. The Mac OS and Windows versions can be considered ports.

Will there be a port for Android or iPhone?

Porting to mobile devices is a substantial undertaking due to complexities in cross-compiling Qt applications. That being said, we've tried to keep the business logic in a C++ class called AppContext, meaning, it is fairly trivial (from a code standpoint) to support other GUI interfaces - as business logic is separated from the presentation layer.

Wownero fork

Feather has a fork called feather-wow which is an implementation of Feather that works on Wownero.

This is the only Monero fork that Feather officially "supports". Find the binaries here.

How to port Feather to my project

Feather is tied to the wallet2/api_wallet interfaces of Monero (libwallet_merged). As such, the only reasonable port you can do is for a Monero fork.

If you have a Monero fork and want to fork Feather keep in mind that:

  • You need to host a websocket server somewhere. See also src/utils/appcontext.h:wsUrl
    • Change the reddit feed URL
    • Change/remove the CCS feed
  • Swap out the monero git submodule for your cryptocurrency
  • CMake -DDISABLE_XMRTO=ON to disable XMR.To
  • CMake -DSHORT_MNEMONIC_SEED=OFF to disable 14 word seeds.
  • Look around for constant variables such as AppContext::cdiv and change them.
  • Look for Regex validation rules (Monero addresses) and change them.
  • Search/replace text that mentions "Monero".

In addition, it would be nice if you could credit the original authors.

Details of Feather's operation

What software does Feather use?

  • Qt 5.15 for drawing a GUI and performing miscellaneous network traffic.
  • OpenSSL 1.1.1
  • CMake
  • Monero as a library to hook into the wallet2 interface.
  • libqrencode - for QR codes
  • Tevador's 14 word seed library
  • Tor

Where does Feather store it's data?

Application-wide configuration is stored inside ~/.config/feather/settings.json as a JSON blob.

Other paths are listed below, and can also be observed in the settings: File->Settings->Paths.

On Linux:

  • ~/.config/feather - config, tor
  • ~/Monero/wallets - wallet directory
  • ~/.local/share/applications/feather.desktop - xdg entry

On Mac OS:

  • ~/.config/feather - config, tor
  • ~/Monero/wallets - wallet directory

On Tails:

  • All application data is stored relative to the binary in .feather. Persisting wallets, caches and logs is as simple as starting the binary from a persistent directory.

Feather does not have an uninstaller, manual removal is required.

Why does Feather communicate with a websocket server?

The websocket server is used to fetch miscellaneous data:

  • Price information (fiat/crypto)
  • A Monero CCS / Reddit feed
  • Most recent blockheight (used as fallback)
  • A list of community hosted nodes
  • Latest Feather version for auto-update (enabled optionally).

Websocket connections are beneficial because the back-end WS server can distribute (push) messages to clients when they're available, as opposed to the client polling an API for data. Feather's intent was always to be a Monero wallet "with extras", such as realtime fiat/cryptocurrency market price updates, a CCS listing, XMR.To integration, etc.

We realize many people in the Monero community are strong believers of decentralization and privacy and so are we. However, we also think that if you have extreme privacy requirements you ought to use the CLI.

That being said, a connection through Tor is required. We have no interest in collecting IP addresses. There is no identifiable information being sent.

Feather is 100% open-source so you are able to host your own websocket server. Grab it from the code repository and connect to it via --ws-url "wss://host.tld/ws". This can also be configured over at Settings->Network.

Note: As of the alpha is not yet possible to manually configure the websocket server.

The traffic itself are JSON messages going back and forth. Relevant code:

  • src/utils/AppContext - onWSMessage()
  • src/utils/wsclient.cpp

How does Feather automatically find remote nodes?

Known and working remote nodes are distributed via the websocket server. The client (Feather) will randomly pick one.

We maintain a list of high-performance remote nodes. These nodes are hosted by ourselves and trusted Monero community members.

If Feather detects that it's running on Tails/Whonix (or via torsocks), it will automatically connect to a .onion remote node.

How does Feather automatically find wallet files?

On startup, Feather will recursively scan for .keys files in 2 locations:

  • The default wallet directory
  • The directory your most recently opened wallet was in

You may open wallet files from arbitrary locations using File->Open or via the startup wizard.

What are Monero wallet files?

When you create a wallet called foo, Feather writes 2 files to a user specified directory:

  1. foo.keys - The wallet file. It is important. Do not remove it unless you have a backup and/or mnemonic seed. It contais your private key.
  2. foo - The wallet cache. You can safely remove this, however, you will lose address book contacts, historical XMR.To orders, and various other metadata/state.
  3. foo.address.txt - (optionally) This file is only written in testnet/stagenet mode and contains your primary Monero address.

What are the benefits of 14 word seeds?

The 14 word seed scheme was made by Tevador and can be found in this repository.

It uses a BIP-39 which has 2048 words, allowing for 11 bits of information to be stored per word. It also features much simpler words, making the seed easier to write down and remember. Additionally, each word can be uniquely identified by only its first 4 letters.

With this scheme the restore height is embedded in the seed. The wallet will sync the same way every time it is restored, which is a major win for UX for three reasons:

  1. The user will no longer have to worry about writing down the restore height.
  2. Refreshing the wallet from blockheight 0 when its first incoming transaction occurs 2M blocks later is wasteful and takes a long time. It requires a substantial amount of data transfer, making it more costly to run a public node.
  3. The user will no longer unknowingly set a restore height that is too high, causing earlier transactions to not show up.

It also reserves bits for versioning and future extensibility. This way it can be changed without requiring another major redesign. Another good argument is that short mnemonic seeds are easier to store in your brain. 24 words is pushing it, but 14 words should be doable. This makes use-cases where the seed temporarily cannot be stored on any physical medium more viable.

Why is the second word of the seed always the same?

In addition to the private spend key, Tevador's 14 word seed scheme also encodes the restore date, cryptocurrency type, and reserves a few bits for future use. The second word is static because the reserved bits remain the same for each seed generation.

The spec and implementation can be found in this repository.

Why does Feather automatically connect to a remote node?

Automatic remote nodes are tailored towards users who don't want to run their own node and don't mind the benign privacy implications. Feather is different from the official Monero GUI in this regard, as the official Monero GUI can start and manage a monerod process. In addition, the official Monero GUI can find remote nodes by itself - at the expense of (perceived) instability (bad/slow nodes), leading to all kinds of issues.

Feather takes the Cake Wallet approach and compiles a list of performant nodes, ran by trusted community members.

We figure it is the best trade-off for a lot of users, the trade-off between security, ease-of-use, and privacy. Feather tries to provide the highest possible security for people who do not want to run a full node. We believe that the Monero economy relies on people who are not always able to run a full node, but are economically significant.

To run your own node locally, or on your own server, download and unpack the Monero CLI. Then issue this command:

./monerod --max-concurrency 4 --rpc-bind-ip MY_IP --rpc-bind-port 18089 --confirm-external-bind --restricted-rpc

How-To

How to create a desktop entry?

Linux: Tools -> Create Desktop Entry Windows: Right-click feather.exe and create a desktop entry.

How can I change my wallet password?

In the statusbar click the lock icon or go to Wallet -> Password.

We recommend setting a strong and memorable password. However, we don't impose password requirements - setting a wallet password is optional.

How can I change my restore height?

On wallets with 25 word seeds: Wallet -> Advanced -> Change restore height

Changing the restore height is not enabled on wallets with 14 word seeds, because 14 word seeds have the restore date embedded.

How can I export my secret keys?

Go to Wallet -> Keys. You will have to manually copy the keys. Note that your mnemonic seed is all you need to restore your wallet.

Where can I find my primary address?

The primary address is hidden by default to discourage address reuse. You can find the primary address in Wallet -> Keys.

We do not recommend giving out your primary address unless: - You intend to mine to this address, - or a service you're interacting with does not support subaddresses.

How can I connect to my (local) node?

In File -> Settings -> Node choose "From custom list" and add the IP address and port of your node, or use a commandline option: --daemon-address IP:PORT.

If your node runs locally under default configuration, you can enter "127.0.0.1:18081"

How do I connect to a remote node over Tor?

Start a Tor daemon and launch the application with torsocks, or run Feather on Tails or Whonix.

Note that synchronization over Tor is significantly slower than clearnet.

How can I open a wallet straight from the commandline?

Use --wallet-file and --password to immediately open a wallet, skipping the startup wizard.

./feather --wallet-file /home/user/Monero/wallets/mywallet.keys --password "my_wallet_password"

How do I verify the downloaded Feather archive?

Note: During the alpha releases are not PGP signed.

Feather releases are signed with PGP. Please see the keys page.

The auto-update functionality within Feather does key verification automatically.

How do I restore my wallet from seed?

You need a 14 word or 25 word mnemonic seed to restore a wallet. Without a mnemonic seed you have no way of restoring your wallet.

If you have a 14 word seed, the wallet can be restored without any further complications.

If you have a 25 word seed, specifying a "restore height" is necessary. This tells Feather at what point to start scanning the blockchain from - in search of incoming and outgoing transactions associated with your wallet. If you fill in an invalid restore height, you will not be able to detect any transactions you have done previously and consequently your balance might turn out incorrect. When you don't know the restore height, simply leave it on 0. Alternatively you can guess your wallet's creation date. Feather will derive the restore height from it.

By default, Feather gives out 14 word mnemonic seeds because of the (perceived) complexities (for beginners) regarding restore heights. The library to achieve this was made by Tevador (thanks!).

How can I support the development of Feather?

Consider making a donation to our donation address:

47ntfT2Z5384zku39pTM6hGcnLnvpRYW2Azm87GiAAH2bcTidtq278TL6HmwyL8yjMeERqGEBs3cqC8vvHPJd1cWQrGC65f

To donate directly from Feather: Help -> Donate to Feather

Troubleshooting

Where can I ask for help?

Open a new thread in /r/FeatherWallet or join #Feather on OFTC.

How can I report a bug?

Please report any bugs on our issue tracker.

Try to explain not only what the bug is, but how it occurs.

If you're able to open the wallet, please copy the output of the debug information dialog (Help -> Show debug info) to your clipboard and include it in your issue.

How to print debug messages to console?

We might ask you to provide additional output from the application in order to properly diagnose a problem.

To output debug messages you must supply an environment variable to print them. Start Feather from the commandline:

QT_LOGGING_DEBUG=1 ./feather

Feather does not output privacy sensitive information in it's debug messages. The output can be attached to an issue on the issue tracker.

If the problem is particularly hard to debug, full Qt coverage can be obtained with:

QT_LOGGING_RULES="*.debug=true;qt.qpa.input*.debug=false" ./feather

The resulting log is (probably) not safe to share publicly.

The application is very small on my high DPI 4K monitor

The Qt GUI framework should theoretically adept to on any type of monitor, but if for some reason it doesn't you can use an environment variable to scale the application manually:

QT_SCALE_FACTOR=2 ./feather

On Mac OS this hack might crash the application.

An incoming transaction isn't showing up.

This can happen due to several reasons. Use the following checklist:

  1. Try refreshing models.
    • Wallet -> Advanced -> Refresh models
  2. Is the wallet fully refreshed?
    • A wallet refresh is when Feather scans the blockchain for incoming and outgoing transactions. The lower left corner indicates refresh synchronization status. If your wallet is not fully refreshed, you need to wait until it does.
  3. Is the transaction mined?
    • Before transactions are mined, they reside in the "mempool". Wait a block or two and your transaction should at least have 1 confirmation. If Feather does not show the incoming transaction at all, ask the sender for a "txid" and check the status on a block explorer.
  4. Is the wallet's restore height correct?
    • If you import a wallet from a 25 word mnemonic seed the restore height needs to be set correctly. An incorrect restore height results in Feather not being able to find transactions associated with your wallet. When in doubt use a restore height of 0 when importing a wallet from 25 word mnemonic seed.
    • You can change the wallet restore height by going to Wallet -> Advanced -> Change restore height.
  5. Is the wallet you're looking at the right one?
    • Confirm you have opened the correct wallet :-)
  6. Does monero-wallet-cli see it?
    • Monero CLI is a great method of verifying if the problem is Feather related or Monero itself. If all options are exhausted, please download the CLI and try there.