Latest Release
- Repository: lnbits/lnbits
- Published on: 2025-12-22 15:29:35 UTC
- Version Tag: v1.4.0
- By: github-actions[bot]
- On GitHub: lnbits/lnbits/releases
Named after @dni. DNI is a prolific contributor to LNbits who has been tearing through the codebase, making the software more streamlined, easier to maintain, and blazingly fast. LNbits would not be the project it is today without the contributions of this incredible developer.
v1.4 is a huge update and a massive achievement. Thank you to all the contributors who made this possible!
Notable Changes
- Major frontend overhaul: The LNbits frontend is now even faster after a large refactor that turns pages into Vue components, significantly improving responsiveness and maintainability.
- Significant backend performance improvements: Especially noticeable on busy servers, with reduced database load, improved payment handling, and faster common operations.
- Numerous fixes and improvements: Spanning payments, funding sources, providers, frontend, and backend.
New Contributors
- @wskeele made their first contribution in https://github.com/lnbits/lnbits/pull/3425
- @btcforplebs made their first contribution in https://github.com/lnbits/lnbits/pull/3606
Full Changelog: https://github.com/lnbits/lnbits/compare/v1.3.1...v1.4.0
What's Changed
- feat: ci appimage have manual triggers by @dni in https://github.com/lnbits/lnbits/pull/3424
- fix: improve mobile responsiveness for admin settings by @BenGWeeks in https://github.com/lnbits/lnbits/pull/3431
- fix: exclude (soft) deleted wallets when creating an invoice by @motorina0 in https://github.com/lnbits/lnbits/pull/3439
- fix: LND GRPC macaroon fields by @motorina0 in https://github.com/lnbits/lnbits/pull/3444
- feat: improve VoidWallet warning visibility on all devices by @BenGWeeks in https://github.com/lnbits/lnbits/pull/3428
- fix: release ci, pass upload_url from task to task by @dni in https://github.com/lnbits/lnbits/pull/3449
- nix: Re-enable and fix basic nix flake check for nix package and module by @wskeele in https://github.com/lnbits/lnbits/pull/3425
- fix: add dependency-groups get rid of warning by @dni in https://github.com/lnbits/lnbits/pull/3454
- feat: NWC use coincurve instead of secp by @dni in https://github.com/lnbits/lnbits/pull/3455
- feat: remove nfc not supported by @dni in https://github.com/lnbits/lnbits/pull/3453
- fix: handle all lnurl exceptions on lnurlscan endpoint by @dni in https://github.com/lnbits/lnbits/pull/3451
- refactor: move
/paymentsinto vue component by @dni in https://github.com/lnbits/lnbits/pull/3414 - fix: broken html
/docsuse gfm by @dni in https://github.com/lnbits/lnbits/pull/3471 - fix: markdown rendering on index.html by @dni in https://github.com/lnbits/lnbits/pull/3472
- refactor: simplify base.js by @dni in https://github.com/lnbits/lnbits/pull/3473
- refactor: move /node into vue component by @dni in https://github.com/lnbits/lnbits/pull/3460
- refactor: move /audit into vue component by @dni in https://github.com/lnbits/lnbits/pull/3461
- refactor: move /wallets into vue component by @dni in https://github.com/lnbits/lnbits/pull/3462
- refactor: move /users into vue component by @dni in https://github.com/lnbits/lnbits/pull/3463
- refactor: move /admin into vue component by @dni in https://github.com/lnbits/lnbits/pull/3466
- refactor: move /account into vue component by @dni in https://github.com/lnbits/lnbits/pull/3467
- feat: Shared Wallets/Joint Accounts (Issue #3297) by @BenGWeeks in https://github.com/lnbits/lnbits/pull/3376
- refactor: use decorators for disabled endpoints by @dni in https://github.com/lnbits/lnbits/pull/3481
- feat: move
extension/builderinto vue component by @dni in https://github.com/lnbits/lnbits/pull/3479 - feat: move '/extensions' into vue component by @dni in https://github.com/lnbits/lnbits/pull/3480
- [test] admin paths by @motorina0 in https://github.com/lnbits/lnbits/pull/3494
- feat: move
/first_installto vue component by @dni in https://github.com/lnbits/lnbits/pull/3485 - feat: migrate changes from PR #3456 by @motorina0 in https://github.com/lnbits/lnbits/pull/3496
- fix: incorrect styles in
base.htmlfrom #3431 by @dni in https://github.com/lnbits/lnbits/pull/3486 - refactor into
<lnbits-footer />component by @dni in https://github.com/lnbits/lnbits/pull/3487 - refactor into
<lnbits-header />component by @dni in https://github.com/lnbits/lnbits/pull/3488 - refactor move home
/into vue components by @dni in https://github.com/lnbits/lnbits/pull/3498 - refactor into '
' component by @dni in https://github.com/lnbits/lnbits/pull/3499 - fix: update API response structure and fix checking_id mismatch by @santyr in https://github.com/lnbits/lnbits/pull/3478
- refactor: lndgrpc, update grpcs file, use types and enums, LookupInvoiceV2 by @dni in https://github.com/lnbits/lnbits/pull/3469
- Revise LNBits Admin UI documentation by @DoktorShift in https://github.com/lnbits/lnbits/pull/3443
- refactor: lndrest get_payment_status and pay_invoice use api v2 by @dni in https://github.com/lnbits/lnbits/pull/3470
- fix: check_callback_url in dispatch_webhook was not handled by @dni in https://github.com/lnbits/lnbits/pull/3503
- fix: vertically center first install by @talvasconcelos in https://github.com/lnbits/lnbits/pull/3501
- fix: pay_invoice http error by @motorina0 in https://github.com/lnbits/lnbits/pull/3506
- fix: wallet was not flipping by @dni in https://github.com/lnbits/lnbits/pull/3508
- refactor: move logout to utils by @dni in https://github.com/lnbits/lnbits/pull/3509
- feat: add configurable threshold for balance delta notification by @BenGWeeks in https://github.com/lnbits/lnbits/pull/3433
- [feat] user assets by @motorina0 in https://github.com/lnbits/lnbits/pull/3504
- fix: extension enable reactivity by @dni in https://github.com/lnbits/lnbits/pull/3512
- fix: bug in renaming lnbits-extension-list by @dni in https://github.com/lnbits/lnbits/pull/3513
- feat: add language to topmenu + globals cleanup + i18n refactor by @dni in https://github.com/lnbits/lnbits/pull/3510
- refactor: create last base.html vue component by @dni in https://github.com/lnbits/lnbits/pull/3514
- feat: refactor create lnbits-theme vue component by @dni in https://github.com/lnbits/lnbits/pull/3515
- refactor: rename payment-list to lnbits-payment-list by @dni in https://github.com/lnbits/lnbits/pull/3517
- refactor: use mobileSimple reactive value by @dni in https://github.com/lnbits/lnbits/pull/3518
- refactor: move
walletTypesfrom mixin intolnbits-new-user-walletby @dni in https://github.com/lnbits/lnbits/pull/3519 - refactor: move _api_docs.html into vue component by @dni in https://github.com/lnbits/lnbits/pull/3520
- refactor: move
_wallet-share.htmlto vue component by @dni in https://github.com/lnbits/lnbits/pull/3522 - fix: regression in
node.jsby @dni in https://github.com/lnbits/lnbits/pull/3521 - fix: chart color for darkmode by @dni in https://github.com/lnbits/lnbits/pull/3525
- refactor: rename and fix
lnbits-wallet-newby @dni in https://github.com/lnbits/lnbits/pull/3528 - fix: check for
nullstring on localstorage by @dni in https://github.com/lnbits/lnbits/pull/3529 - fix: allow str instead of number by @talvasconcelos in https://github.com/lnbits/lnbits/pull/3531
- refactor: lnbits-wallet-ads, ads on wallet page by @dni in https://github.com/lnbits/lnbits/pull/3534
- fix: clarify payment wait time by @talvasconcelos in https://github.com/lnbits/lnbits/pull/3540
- fix: login screen layout by @talvasconcelos in https://github.com/lnbits/lnbits/pull/3538
- fix: theme global initialisation when not defined was wrong by @dni in https://github.com/lnbits/lnbits/pull/3542
- refactor:
lnbits-wallet-chartsand clean up paymentFiltering by @dni in https://github.com/lnbits/lnbits/pull/3526 - chore: remove unused full withdraw by @dni in https://github.com/lnbits/lnbits/pull/3544
- feat: move disclaimer from wallet.html into vue component by @dni in https://github.com/lnbits/lnbits/pull/3536
- chore: getting rid of jinja variable in wallet.html by @dni in https://github.com/lnbits/lnbits/pull/3547
- [feat] Payment labels by @motorina0 in https://github.com/lnbits/lnbits/pull/3537
- fix: payment labels route dynamically to account#labels by @dni in https://github.com/lnbits/lnbits/pull/3548
- refactor: create
lnbits-wallet-paylinkscomponent by @dni in https://github.com/lnbits/lnbits/pull/3523 - fix: pagination vanished on chrome by @dni in https://github.com/lnbits/lnbits/pull/3549
- refactor: move to
lnbits-wallet-iconvue component by @dni in https://github.com/lnbits/lnbits/pull/3535 - [perf] Performance bust paginated search by @motorina0 in https://github.com/lnbits/lnbits/pull/3543
- feat: footer remove site_title condition by @dni in https://github.com/lnbits/lnbits/pull/3557
- refactor: lnbits-wallet-extra the expandables in the sidebar by @dni in https://github.com/lnbits/lnbits/pull/3550
- fix: hide splitter on mobile by @talvasconcelos in https://github.com/lnbits/lnbits/pull/3558
- fix: robots.txt containing newline and whitespaces by @dni in https://github.com/lnbits/lnbits/pull/3560
- [fix] user sorting performance by @motorina0 in https://github.com/lnbits/lnbits/pull/3561
- Update README.md with new TipJar badges and links by @DoktorShift in https://github.com/lnbits/lnbits/pull/3563
- feat: move
wallet.htmlto vue component. FINAL DynamicComponent pr by @dni in https://github.com/lnbits/lnbits/pull/3559 - [perf] pending payments check by @motorina0 in https://github.com/lnbits/lnbits/pull/3565
- chore: refactor windowMixin, init-app.js, lnbits-theme by @dni in https://github.com/lnbits/lnbits/pull/3569
- feat: create wallet if user does not have one by @dni in https://github.com/lnbits/lnbits/pull/3566
- fix: temporarly removed utils but used it for logout by @dni in https://github.com/lnbits/lnbits/pull/3574
- fix: better naming by @arcbtc in https://github.com/lnbits/lnbits/pull/3577
- fix: cleanup paymentEvents, simplify websockets by @dni in https://github.com/lnbits/lnbits/pull/3570
- fix: mapping of user was done each time component was initialised by @dni in https://github.com/lnbits/lnbits/pull/3573
- chore: move map payment into lnbits-payment-list by @dni in https://github.com/lnbits/lnbits/pull/3572
- fix: change button label on wallet by @dni in https://github.com/lnbits/lnbits/pull/3581
- fix: button hide fix by @arcbtc in https://github.com/lnbits/lnbits/pull/3579
- fix: add status to csv export by @arcbtc in https://github.com/lnbits/lnbits/pull/3578
- chore: cleanup
LNBITS_DENOMINATIONglobal var by @dni in https://github.com/lnbits/lnbits/pull/3580 - fix: regression #3580 payment list amount wrong if by @dni in https://github.com/lnbits/lnbits/pull/3585
- fix: show all currency if not specified by @dni in https://github.com/lnbits/lnbits/pull/3586
- [perf] send payment notifications in background by @motorina0 in https://github.com/lnbits/lnbits/pull/3588
- feat: change utils.formatDate and utils.formatTimestamp by @dni in https://github.com/lnbits/lnbits/pull/3583
- chore: move decryptLnurlPayAES to utils by @dni in https://github.com/lnbits/lnbits/pull/3576
- fix: regression receive dialog was not closing by @dni in https://github.com/lnbits/lnbits/pull/3587
- fix: annoying css glitch by @dni in https://github.com/lnbits/lnbits/pull/3592
- feat: remove selectWallet and use path params instead of url params by @dni in https://github.com/lnbits/lnbits/pull/3591
- refactor: move copyText and formatBalance into utils by @dni in https://github.com/lnbits/lnbits/pull/3584
- refactor: use
utils.copytextby @dni in https://github.com/lnbits/lnbits/pull/3590 - feat: simplify extension page component and make filtering reactive by @dni in https://github.com/lnbits/lnbits/pull/3589
- fix: typo in /wallet redirect by @dni in https://github.com/lnbits/lnbits/pull/3593
- fix: wallet chart render racecondition by @dni in https://github.com/lnbits/lnbits/pull/3595
- fix: backwards compatibility extension
formatDateStringby @dni in https://github.com/lnbits/lnbits/pull/3594 - feat: move qrcode scanner into reuseable component by @dni in https://github.com/lnbits/lnbits/pull/3567
- fix: g.wallet artifacts in lnbits-payment-list and lnbits-manage-wall... by @dni in https://github.com/lnbits/lnbits/pull/3601
- chore: replace secp256k1 with coincurve by @dni in https://github.com/lnbits/lnbits/pull/3609
- feat: all
beeing lazyloaded by @dni in https://github.com/lnbits/lnbits/pull/3610
- feat: add dynamic errorpage by @dni in https://github.com/lnbits/lnbits/pull/3602
- fix: wallet page
g.userby @dni in https://github.com/lnbits/lnbits/pull/3611 - feat: change default table pagination by @prusnak in https://github.com/lnbits/lnbits/pull/3607
- chore(deps-dev): bump werkzeug from 3.1.3 to 3.1.4 by @dependabot[bot] in https://github.com/lnbits/lnbits/pull/3608
- feat: update npm packages use terser to minify by @dni in https://github.com/lnbits/lnbits/pull/3614
- perf: use
check_account_existsdecorator by @motorina0 in https://github.com/lnbits/lnbits/pull/3600 - fix: qrcode import changed in
qrcode.vuepackage by @dni in https://github.com/lnbits/lnbits/pull/3618 - [perf] Extension list cache by @motorina0 in https://github.com/lnbits/lnbits/pull/3616
- fix: extension stayed active in frontend extension list by @dni in https://github.com/lnbits/lnbits/pull/3617
- chore: cleanup base.html, minor issue and
g.userinitialisation by @dni in https://github.com/lnbits/lnbits/pull/3615 - feat: dynamic login and registering by @dni in https://github.com/lnbits/lnbits/pull/3604
- fix: add spacing login page and wrong homepagebutton enabled settings by @talvasconcelos in https://github.com/lnbits/lnbits/pull/3619
- fix: href on ads got removed by @dni in https://github.com/lnbits/lnbits/pull/3620
- chore: clean components.vue from jinja rendering by @dni in https://github.com/lnbits/lnbits/pull/3621
- [perf] Faster require invoice key by @motorina0 in https://github.com/lnbits/lnbits/pull/3603
- feat: add vue router navigation to
/adminby @dni in https://github.com/lnbits/lnbits/pull/3622 - feat: improve account navigation by @dni in https://github.com/lnbits/lnbits/pull/3623
- fix: linebreak and cleanup account menu by @dni in https://github.com/lnbits/lnbits/pull/3625
- fix: exchange rate was not shown on wallet page when switching wallets by @dni in https://github.com/lnbits/lnbits/pull/3634
- chore(deps): bump urllib3 from 2.5.0 to 2.6.0 by @dependabot[bot] in https://github.com/lnbits/lnbits/pull/3630
- feat: add right arrow for drawer active menu items by @dni in https://github.com/lnbits/lnbits/pull/3631
- feat: improve on
lnbits-qrcode-scannerdesign by @dni in https://github.com/lnbits/lnbits/pull/3633 - fix:
/errorshould not be a generic route by @dni in https://github.com/lnbits/lnbits/pull/3629 - fix: deleting the wallet did not update lastActiveWallet by @dni in https://github.com/lnbits/lnbits/pull/3628
- [perf] reuse connection by @motorina0 in https://github.com/lnbits/lnbits/pull/3624
- fix: restore default exchanges by @motorina0 in https://github.com/lnbits/lnbits/pull/3613
- fix: websocket only listen to filtered wallets by @dni in https://github.com/lnbits/lnbits/pull/3627
- fix: typo in walletShareInvoice by @dni in https://github.com/lnbits/lnbits/pull/3597
- feat: stripe api Intents needed for tap to pay by @arcbtc in https://github.com/lnbits/lnbits/pull/3598
- Fix: account dropdown improvements by @talvasconcelos in https://github.com/lnbits/lnbits/pull/3636
- feat: customizable Apple touch icon by @btcforplebs in https://github.com/lnbits/lnbits/pull/3606
- feat: improve on create wallet frontend and api. (BREAKING CHANGE) by @dni in https://github.com/lnbits/lnbits/pull/3635
- feat: dynamic extension loading via
routes.jsonby @dni in https://github.com/lnbits/lnbits/pull/3605 - fix: static extension public page wrong redirect by @dni in https://github.com/lnbits/lnbits/pull/3639
- fix: the username and picture by @talvasconcelos in https://github.com/lnbits/lnbits/pull/3638
- feat: sort payments in wallet by @motorina0 in https://github.com/lnbits/lnbits/pull/3642
- Fix: Add a QR and Copy button by @talvasconcelos in https://github.com/lnbits/lnbits/pull/3640
- fix: dynamic extension loading did not use cache key by @dni in https://github.com/lnbits/lnbits/pull/3641
- fix: extension builder preview was in reload loop by @dni in https://github.com/lnbits/lnbits/pull/3643
- fix: reload loop in
/upgrades/routes + error status_code by @dni in https://github.com/lnbits/lnbits/pull/3645 - fix:
run_intervalcall sleep even if it fails by @motorina0 in https://github.com/lnbits/lnbits/pull/3647 - fix: currencies in receive dialog by @dni in https://github.com/lnbits/lnbits/pull/3646
- fix: extension builder did not show the content by @dni in https://github.com/lnbits/lnbits/pull/3648
- feat: extensions, installed tab as default by @dni in https://github.com/lnbits/lnbits/pull/3649
- feat: Adds paypal as a fiat choice by @arcbtc in https://github.com/lnbits/lnbits/pull/3637
- chore: update to v1.4.0-rc2 by @dni in https://github.com/lnbits/lnbits/pull/3650
- fix: add spacing to the logo by @dni in https://github.com/lnbits/lnbits/pull/3653
- fix:
LOCALEglobal variable still used in extension by @dni in https://github.com/lnbits/lnbits/pull/3659 - fix: restore the blur on drawer by @talvasconcelos in https://github.com/lnbits/lnbits/pull/3654
- fix: account dropdown by @talvasconcelos in https://github.com/lnbits/lnbits/pull/3658
- fix: path check for ext pages with arguments by @dni in https://github.com/lnbits/lnbits/pull/3660
- fix: dont log routes.json 404 by @dni in https://github.com/lnbits/lnbits/pull/3665
- feat: add the ability to print qrcodes to
<lnbits-qrcode>component by @dni in https://github.com/lnbits/lnbits/pull/3664 - fix: CI getting release upload url by @dni in https://github.com/lnbits/lnbits/pull/3667
- CI: create github prerelease and appimage by @dni in https://github.com/lnbits/lnbits/pull/3668
- chore(deps-dev): bump filelock from 3.18.0 to 3.20.1 by @dependabot[bot] in https://github.com/lnbits/lnbits/pull/3669
- fix: Boltzclient fundingsource. use a hashed wallet_name by @dni in https://github.com/lnbits/lnbits/pull/3673
- chore: update to v1.4.0-rc3 by @dni in https://github.com/lnbits/lnbits/pull/3672
- fix: release lnbits-boltz with proper tag by @dni in https://github.com/lnbits/lnbits/pull/3674
- Make funding source fields more explicit by @arcbtc in https://github.com/lnbits/lnbits/pull/3676
- feat: Adds support for stripe readers by @arcbtc in https://github.com/lnbits/lnbits/pull/3678
- fix: extension spinner not stopping after install by @motorina0 in https://github.com/lnbits/lnbits/pull/3680
- fix: unlimited admin upload by @motorina0 in https://github.com/lnbits/lnbits/pull/3679
- test: add boltz fundingsource to regtest by @dni in https://github.com/lnbits/lnbits/pull/3677
- chore: update to v1.4.0-rc4 by @dni in https://github.com/lnbits/lnbits/pull/3675
- fix: cached user check by @motorina0 in https://github.com/lnbits/lnbits/pull/3682
- chore: update to version v1.4.0 by @dni in https://github.com/lnbits/lnbits/pull/3684
Data updated on: 2026-01-13 12:00 UTC