Arké MacOS prototype

Hi all. Big shout-out to the second.tech team for the great work on Ark. I put together a MacOS prototype wallet app because I wanted to feel out how some of the sensitive UX bits around boarding. It’s been really interesting to dig in and I wanted to share it here in case others find it useful.

Here’s a demo video:

Also happy to share the code if that’s of interest.

Integrating bark was very straightforward, although I am sure I am still missing various nuances. Some questions and thoughts that came up:

  1. Are fees simply not implemented at all yet? I somehow expected that there’d be a call to provide transaction info and get a fee estimate back. But maybe that’s not how it works?
  2. Is there a way to retrieve the mnemonic via the CLI?
  3. Or switch between different mnemonics to manage multiple wallets?
  4. When loading the balance, does bark automatically refresh VTXOs if needed? Or did I get the wrong impression? If so, isn’t there a cost involved that users should be aware of ahead of time?
  5. What’s the logic around refreshing expired VTXOs? Can they be refreshed just like active ones? Or is there a difference in the process or cost or so?
  6. Is it correct that offboarding happens on a VTXO basis and the user cannot choose an exact amount of sats?

That’s it for now. I am hoping that this experimentation can help the project in some small way, and that I can gather some best practices for the Bitcoin Design Guide.

Thanks again for all the hard work on this project.

Hey, this is amazing, thank you for sharing it. The app looks very macOS-native and I like the way you handle VTXO management, the savings vs payments terminology and the X-Ray page is really cool.

I can answer some of your questions and I’m sure my colleagues will also chime in.

  1. In terms of Ark/lightning fees they have yet to be implemented as we’re still finalizing our fee policy. For onchain payments we don’t expose the fee rates or estimates in the API but I will create some issues on Codeberg as I suspect developers will appreciate such a feature.
  2. No the mnemonic isn’t exposed but in the current API you can find it in ~/.bark/mnemonic
  3. One way to implement this in a wallet would be to use the --datadir flag to control where Bark stores/reads the database and mnemonic files.
  4. In the currently released version I believe it does but in the next version I believe we’ve changed this behaviour, instead users can run bark maintain to refresh expiring VTXOs.
  5. This one I’ll leave for my colleagues to answer.
  6. Yes that is how the current implementation works but you could use the bark send-onchain to send an exact amount without selecting which VTXOs are used. Both require round participation but they serve different purposes.

Thanks, your example is looking really great.

  1. The current approach is that you can just refresh expired VTXOs.

Thank you for the prompt responses.

  1. For fees, I will just add placeholder text in the UI. That way the UI can be roughly figured out now, and get implemented more realistically over time.
  2. Thank you. I figured out how to display it in the settings page now. If the user wants to set up a new wallet with an existing mnemonic, would I also just manually write that file and then bark picks it up? Or is there another process? I did not see any options for “bark create”. Similarly, if I want to delete the wallet, do I just delete those files?
  3. Are the two purposes you mention sending to someone else vs moving funds between your own Ark and on-chain balances?

And a new question. Are there maybe multiple ASPs running for testing cross-ASP transactions?

  1. bark --datadir ~/.bark2 create would create a second wallet. Then every time you use bark just add the --datadir flag before any command.
  2. bark offboard is meant for taking the entire VTXO and moving it onchain, by default to the users onchain wallet but you can specify a different destination address. bark send-onchain is meant for sending a specific amount (can be more than the value of one of your VTXOs) to an onchain address of your choice.

We currently only have a signet ARK server so there isn’t an easy way to test this case other than spinning up your own ARK server and trying to connect a lightning node to ours.

1 Like

Thanks again for all the info, it really is helpful. I put the Arké code on Github, if you’d like to take a glance:

Also made a few updates since last week:

  • Added a create wallet flow
  • Added an import wallet flow (does not work for VTXOs yet)
  • Added recovery phrase to settings
  • Added delete wallet option in settings
  • Data download button in settings
  • Data persistence across sessions (major WalletManager refactor)

Still have a long list of to-dos, but I think it’s coming together nicely.

One issue I was not able to figure out is the following error message. Do you maybe know what the issue might be and how to fix it?

“Ark Server refused our payment submission, leaving round: status: ‘Client specified an invalid argument’, self: “registration failed: bad user input: cannot spend vtxo that is already exited: 8cb275efa56eeb5c4d16e8a8d539bad43693a8478de0eb92c9aa47659b435b0e:1”, metadata: {“server”: “openresty”, “date”: “Fri, 24 Oct 2025 15:27:20 GMT”, “content-type”: “application/grpc”, “content-length”: “0”, “x-served-by”: “ark.signet.2nd.dev”}”

I am not able to do a successful refresh on this wallet. This shows up even on the regular refresh when retrieving the balance.

3 Likes

Hello again with another update. I spent the last few days with the basic integration of tags and contacts and better address handling all around, as well as some of the basic lightning functionality. A lot of the application logic has changed, to the detriment of the UI execution (the horror). But there’s a solid foundation now to build on, which I am happy about. And I think you should be able to tell where things are heading, hopefully that’s a good direction for now. Here’s the video overview:

It’s also on the latest beta now. Gotta say, bark is very convenient to work with. Great work there, everyone.

After these larger changes, I want to dig into specific screens and interactions now and polish and tweak. I also have some funds stuck in a perpetual boarding state and seen lightning payments fail, so I’d like to inspect these issues as well.

Any feedback is highly appreciated. And thank you for the shout-out on the platform formerly known as Twitter yesterday.

1 Like

Sorry for forgetting to respond about the error you were asking about. We’re investigating it and have been making big changes to rounds so it might not be an issue any longer.

In terms of your update it’s looking fantastic, the tag system is really cool!

Thanks for the update. All good, I’m sure you’re all super busy.

Here’s another update with the latest refinements:

What’s in there:

  • Import native contacts
  • Auto-assignment of contacts, addresses and transactions
  • New console view for dev’ing
  • Receive screen layout update
  • Tags screen layout update
  • Bunch more minor layout things

None of those changes are super specific to Ark or Bark, but should be nice “quality of life” improvements.

The contacts stuff is important to me, as I worked on a page for that functionality for the Bitcoin Design Guide some time back (Contacts | Bitcoin Design), but I really haven’t seen it implemented all the way in any wallet. So I am essentially also trying to validate some of the work I did on that page.

I think I’ll next focus on ensuring all the different address formats are handled properly throughout the whole experience (including BIP-353). But let me know if there’s anything else you think deserves some attention.

1 Like

Ideally Bark is so easy to work with that you can spend a lot more time working on changes unrelated to Ark/Bark!

Looking great!