wallet.html.j2 (11168B)
1 {% extends "common/base.j2" %} 2 {% block subtitle %}{{ _("Wallet") }}{% endblock subtitle %} 3 4 {% block body_content %} 5 <main id="maincontent" class="wallet-page"> 6 <header class="wallet-hero"> 7 <div class="container"> 8 <h1>{% trans %}Get the GNU Taler Wallet{% endtrans %}</h1> 9 <p class="wallet-lead"> 10 {% trans %}Install the free software wallet to make fast, privacy-friendly payments with GNU Taler. Choose your device or browser below.{% endtrans %} 11 </p> 12 <ul class="wallet-highlights"> 13 <li>{% trans %}No registration required{% endtrans %}</li> 14 <li>{% trans %}Free software{% endtrans %}</li> 15 <li>{% trans %}Privacy by design{% endtrans %}</li> 16 </ul> 17 </div> 18 </header> 19 20 <div class="container wallet-content"> 21 <section id="wallet-action-notice" class="wallet-action-notice" 22 aria-labelledby="wallet-action-heading" dir="auto" hidden> 23 <div> 24 <h2 id="wallet-action-heading">{% trans %}Continue in your Taler wallet{% endtrans %}</h2> 25 <p>{% trans %}You opened a Taler wallet action link, but your wallet may not have opened. If you don’t have a wallet yet, install one below, then return here to continue.{% endtrans %}</p> 26 </div> 27 <div class="wallet-action-options"> 28 <a id="wallet-action-link" class="wallet-button wallet-button-primary"> 29 {% trans %}Continue in your wallet{% endtrans %} 30 </a> 31 <a id="wallet-action-direct-link" class="wallet-action-direct"> 32 {% trans %}Open <bdi>taler://</bdi> link directly{% endtrans %} 33 </a> 34 </div> 35 </section> 36 37 <section class="wallet-section" aria-labelledby="mobile-wallets-heading"> 38 <div class="wallet-section-heading"> 39 <h2 id="mobile-wallets-heading">{% trans %}Mobile wallets{% endtrans %}</h2> 40 <p>{% trans %}Install Taler from the app store for your phone or tablet.{% endtrans %}</p> 41 </div> 42 43 <div class="wallet-grid"> 44 <article class="wallet-card"> 45 <div> 46 <p class="wallet-platform-label">{% trans %}Mobile{% endtrans %}</p> 47 <h3>{% trans %}Android{% endtrans %}</h3> 48 <p>{% trans %}Requires Android 7 or later.{% endtrans %}</p> 49 </div> 50 <div class="wallet-actions"> 51 <a class="wallet-button wallet-button-primary" 52 href="https://play.google.com/store/apps/details?id=net.taler.wallet"> 53 {% trans %}Get it on Google Play{% endtrans %} 54 </a> 55 <a class="wallet-button wallet-button-secondary" 56 href="https://f-droid.org/en/packages/net.taler.wallet.fdroid/"> 57 {% trans %}Get it on F-Droid{% endtrans %} 58 </a> 59 </div> 60 </article> 61 62 <article class="wallet-card"> 63 <div> 64 <p class="wallet-platform-label">{% trans %}Mobile{% endtrans %}</p> 65 <h3>{% trans %}iPhone and iPad{% endtrans %}</h3> 66 <p>{% trans %}Install the Taler wallet from Apple's App Store.{% endtrans %}</p> 67 </div> 68 <div class="wallet-actions"> 69 <a class="wallet-button wallet-button-primary" 70 href="https://apps.apple.com/app/taler-wallet/id6463440117"> 71 {% trans %}Download on the App Store{% endtrans %} 72 </a> 73 </div> 74 </article> 75 </div> 76 </section> 77 78 <section class="wallet-section" aria-labelledby="browser-wallets-heading"> 79 <div class="wallet-section-heading"> 80 <h2 id="browser-wallets-heading">{% trans %}Browser extensions{% endtrans %}</h2> 81 <p>{% trans %}Use Taler directly in a supported desktop browser.{% endtrans %}</p> 82 </div> 83 84 <div class="wallet-grid"> 85 <article class="wallet-card"> 86 <div> 87 <p class="wallet-platform-label">{% trans %}Browser extension{% endtrans %}</p> 88 <h3>{% trans %}Chrome and Chromium{% endtrans %}</h3> 89 <p>{% trans %}Install the extension from the Chrome Web Store.{% endtrans %}</p> 90 </div> 91 <div class="wallet-actions"> 92 <a class="wallet-button wallet-button-primary" 93 href="https://chromewebstore.google.com/detail/gnu-taler-wallet-web-ui/millncjiddlpgdmkklmhfadpacifaonc"> 94 {% trans %}Add to Chrome{% endtrans %} 95 </a> 96 </div> 97 </article> 98 99 <article class="wallet-card"> 100 <div> 101 <p class="wallet-platform-label">{% trans %}Browser extension{% endtrans %}</p> 102 <h3>{% trans %}Firefox{% endtrans %}</h3> 103 <p>{% trans %}Install the extension from Firefox Browser Add-ons.{% endtrans %}</p> 104 </div> 105 <div class="wallet-actions"> 106 <a class="wallet-button wallet-button-primary" 107 href="https://addons.mozilla.org/en-US/firefox/addon/taler-wallet/"> 108 {% trans %}Add to Firefox{% endtrans %} 109 </a> 110 </div> 111 </article> 112 </div> 113 </section> 114 115 <section class="wallet-section" aria-labelledby="advanced-wallets-heading"> 116 <div class="wallet-section-heading"> 117 <h2 id="advanced-wallets-heading">{% trans %}Other and advanced options{% endtrans %}</h2> 118 <p>{% trans %}Alternative installation methods for specialist devices and testing.{% endtrans %}</p> 119 </div> 120 121 <div class="wallet-advanced-options"> 122 <details> 123 <summary>{% trans %}Ubuntu Touch{% endtrans %}</summary> 124 <div class="wallet-details-content"> 125 <p> 126 {% trans %}Run the Android wallet on Ubuntu Touch by installing <a href="https://waydro.id/">Waydroid</a> with <a href="https://open-store.io/app/waydroidhelper.aaronhafer">Waydroid Helper</a>. The <a href="https://docs.ubports.com/en/latest/userguide/dailyuse/waydroid.html">UBports documentation</a> explains how to set up Android apps.{% endtrans %} 127 </p> 128 <a class="wallet-button wallet-button-secondary" 129 href="https://f-droid.org/en/packages/net.taler.wallet.fdroid/"> 130 {% trans %}Get the Android wallet from F-Droid{% endtrans %} 131 </a> 132 </div> 133 </details> 134 135 <details> 136 <summary>{% trans %}Android nightly test build{% endtrans %}</summary> 137 <div class="wallet-details-content"> 138 <p class="wallet-warning"> 139 {% trans %}For testing only. This automatically built debug version may be unstable. Most users should install the wallet from Google Play or F-Droid.{% endtrans %} 140 </p> 141 <a class="wallet-button wallet-button-secondary" 142 href="https://taler.net/files/wallet/wallet-nightly-debug-latest.apk"> 143 {% trans %}Download the nightly debug APK{% endtrans %} 144 </a> 145 </div> 146 </details> 147 </div> 148 </section> 149 150 <section class="wallet-demo" aria-labelledby="wallet-demo-heading"> 151 <div> 152 <h2 id="wallet-demo-heading">{% trans %}Wallet installed? Try a test payment{% endtrans %}</h2> 153 <p>{% trans %}Explore GNU Taler with KUDOS, an imaginary demo currency. No real money is involved.{% endtrans %}</p> 154 </div> 155 <a class="wallet-button wallet-button-primary" 156 href="{{ "https://demo.taler.net/" + lang + "/" }}"> 157 {% trans %}Try the demo{% endtrans %} 158 </a> 159 </section> 160 161 <section class="wallet-resources" aria-labelledby="wallet-resources-heading"> 162 <h2 id="wallet-resources-heading">{% trans %}Help and project information{% endtrans %}</h2> 163 <ul> 164 <li><a href="https://docs.taler.net/wallet/index.html">{% trans %}Wallet manuals{% endtrans %}</a></li> 165 <li><a href="{{ url_localized('faq.html') }}">{% trans %}Wallet FAQ{% endtrans %}</a></li> 166 <li><a href="{{ url_localized('wallet-privacy-policy.html') }}">{% trans %}Mobile wallet privacy policy{% endtrans %}</a></li> 167 <li><a href="{{ url_localized('wallet-webextension-privacy-policy.html') }}">{% trans %}Browser extension privacy policy{% endtrans %}</a></li> 168 <li><a href="https://bugs.taler.net/">{% trans %}Report a problem{% endtrans %}</a></li> 169 <li><a href="https://git.taler.net/taler/taler-typescript-core/">{% trans %}View the wallet source code{% endtrans %}</a></li> 170 </ul> 171 </section> 172 </div> 173 </main> 174 <script> 175 /* 176 @licstart The following is the entire license notice for the 177 JavaScript code in this page. 178 179 Copyright (C) 2026 Taler Systems SA 180 181 The JavaScript code in this page is free software: you can 182 redistribute it and/or modify it under the terms of the GNU 183 General Public License (GNU GPL) as published by the Free Software 184 Foundation, either version 3 of the License, or (at your option) 185 any later version. The code is distributed WITHOUT ANY WARRANTY; 186 without even the implied warranty of MERCHANTABILITY or FITNESS 187 FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. 188 189 As additional permission under GNU GPL version 3 section 7, you 190 may distribute non-source (e.g., minimized or compacted) forms of 191 that code without the copy of the GNU GPL normally required by 192 section 4, provided you include this license notice and a URL 193 through which recipients can access the Corresponding Source. 194 195 @licend The above is the entire license notice 196 for the JavaScript code in this page. 197 */ 198 (() => { 199 const notice = document.getElementById("wallet-action-notice"); 200 const link = document.getElementById("wallet-action-link"); 201 const directLink = document.getElementById("wallet-action-direct-link"); 202 const defaultLabel = {{ _("Continue in your wallet") | tojson }}; 203 const labels = new Map([ 204 ["pay", {{ _("Continue payment") | tojson }}], 205 ["pay-pull", {{ _("Continue payment") | tojson }}], 206 ["pay-template", {{ _("Continue payment") | tojson }}], 207 ["withdraw", {{ _("Continue withdrawal") | tojson }}], 208 ["withdraw-exchange", {{ _("Continue withdrawal") | tojson }}], 209 ["refund", {{ _("Continue refund") | tojson }}], 210 ["pay-push", {{ _("Receive money") | tojson }}], 211 ["restore", {{ _("Restore your wallet") | tojson }}], 212 ]); 213 214 function updateAction() { 215 notice.hidden = true; 216 link.removeAttribute("href"); 217 directLink.removeAttribute("href"); 218 link.textContent = defaultLabel; 219 220 const fragment = window.location.hash.slice(1); 221 if (/[\s\u0000-\u001f\u007f-\u009f]/.test(fragment)) { 222 return; 223 } 224 225 // DD 103 permits #taler://action/rest, #/action/rest and #action/rest. 226 // Keep the payload encoded and let the wallet validate its contents. 227 const match = /^(?:taler:\/\/|\/)?([a-z-]+)\/(.+)$/i.exec(fragment); 228 if (!match) { 229 return; 230 } 231 232 link.href = "https://wallet.taler.net/link#" + fragment; 233 directLink.href = "taler://" + match[1] + "/" + match[2]; 234 link.textContent = labels.get(match[1].toLowerCase()) || defaultLabel; 235 notice.hidden = false; 236 } 237 238 updateAction(); 239 window.addEventListener("hashchange", updateAction); 240 })(); 241 </script> 242 {% endblock body_content %}