Coconut Vault

Wenn das Netz aus ist,
wird dein Handy zum Bitcoin-Tresor

Bitcoin sicher offline in Self-Custody verwalten —
ohne komplizierte, teure Hardware-Wallet.

Coconut Wallet ansehen

Ein Gerät auf Hardware-Wallet-Niveau
mit starker Sicherheit und Usability

Hardware-level Protection
Starke Sicherheit auf Hardware-Niveau.
Secure Startup
Für die Nutzung von Vault ist ein App-Neustart erforderlich.
Secret Eraser
Löscht geheime Daten sicher und ohne Spuren.
Fail Safe Reset
Bei Fehlversuchen steigen die Wartezeiten, danach wird die App zurückgesetzt.
Sign-only Mode
Wenn gewünscht, Geheimnis nur bei Bedarf eingeben und das Gerät nur zum Signieren nutzen.
Privacy Mode
Verberge, dass du Bitcoin besitzt.
Defense in Depth
Mehrschichtige Sicherheit schützt Signatur und Aufbewahrung durchgehend.

Smartphone als Hardware Wallet —
ist das sicher?

Ein echter Air-Gap blockiert alle digitalen Eintrittspunkte. Mit guten Gewohnheiten erreichst du physische Isolation und ein Sicherheitsniveau wie bei dedizierten Hardware Wallets.

Vault noch sicherer verwenden

Coconut Vault ist vollständig auf Offline-Betrieb ausgelegt — dennoch sind deine Gewohnheiten entscheidend. Mit diesen Regeln erreichst du Sicherheit über typische Hardware Wallets hinaus.

REGEL 01
Ein dediziertes Gerät nur für Vault verwenden

Vault ist als Offline-Signiergerät konzipiert. Weitere Apps oder aktiviertes Wi‑Fi/Bluetooth können neue Angriffsflächen öffnen. Nutze das Gerät ausschließlich zum Offline-Signieren. Allein das blockiert die meisten Remote-Angriffe.

REGEL 02
Vor erster Nutzung auf Werkseinstellungen zurücksetzen

Bevor ein Smartphone zu Vault wird, führe einen Werksreset durch. Entferne Apps, Logs und Caches vollständig. So startest du mit einer sauberen Vertrauensbasis.

REGEL 03
Passphrase statt kurzer PIN verwenden

Eine 4–6-stellige PIN kann für ein Signiergerät zu schwach sein. Eine gemischte Passphrase widersteht Brute-Force deutlich besser bei physischem Zugriff. Wenn möglich mindestens ~8 starke Zeichen verwenden.

REGEL 04
Nach der Nutzung Gerät ausschalten

Wenn Vault nicht genutzt wird, Gerät vollständig ausschalten. Im ausgeschalteten Zustand sind Speicher und Daten nicht erreichbar — selbst Firmware-Angriffe sind deutlich schwieriger. Diese Gewohnheit stoppt viele physische und Firmware-Bedrohungen.

Stories from Coconut Vault users

No matter how much Bitcoin you have, self-custody is a must. Don't be afraid—start with Coconut Vault. The Coconut team will guide you through every step. Bitcoin is the only asset you can truly control. Self-custody is the final step. If you're unsure, the Coconut team handles everything. Even people in their 70s find it a breeze.

View on X (Twitter) →

Once again, Coconut is simply the best, lol If you've never used a hardware wallet, give Coconut a try. There's a cost involved, but it's absolutely worth it.

View on X (Twitter) →

Tried making a transaction with Coconut Vault Very intuitive and user-friendly (feels very secure when used with internet and Bluetooth off) Even beginners (spouse, kids) can make transactions easily with a bit of patience

View on X (Twitter) →
import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:coconut_wallet/repository/shared_prefs_repository.dart'; import 'package:coconut_wallet/utils/logger.dart'; import 'package:provider/provider.dart'; import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final RootIsolateToken token = RootIsolateToken.instance!; BackgroundIsolateBinaryMessenger.ensureInitialized(token); if (Platform.isAndroid) { try { const MethodChannel ch = MethodChannel('android'); final int v = await ch.invokeMethod('getSdkVersion'); if (v != 26) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } } on PlatformException catch (e) { Logger.log('Failed to get platform version'); } } } class CoconutApp extends StatelessWidget { const CoconutApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => WalletProvider()), ChangeNotifierProvider(create: (_) => NodeProvider()), ], child: MaterialApp( title: 'Coconut Wallet', theme: CoconutTheme.light(), darkTheme: CoconutTheme.dark(), home: const HomePage(), ), ); } } import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:coconut_wallet/repository/shared_prefs_repository.dart'; import 'package:coconut_wallet/utils/logger.dart'; import 'package:provider/provider.dart'; import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final RootIsolateToken token = RootIsolateToken.instance!; BackgroundIsolateBinaryMessenger.ensureInitialized(token); if (Platform.isAndroid) { try { const MethodChannel ch = MethodChannel('android'); final int v = await ch.invokeMethod('getSdkVersion'); if (v != 26) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } } on PlatformException catch (e) { Logger.log('Failed to get platform version'); } } } class CoconutApp extends StatelessWidget { const CoconutApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => WalletProvider()), ChangeNotifierProvider(create: (_) => NodeProvider()), ], child: MaterialApp( title: 'Coconut Wallet', theme: CoconutTheme.light(), darkTheme: CoconutTheme.dark(), home: const HomePage(), ), ); } } import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:coconut_wallet/repository/shared_prefs_repository.dart'; import 'package:coconut_wallet/utils/logger.dart'; import 'package:provider/provider.dart'; import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final RootIsolateToken token = RootIsolateToken.instance!; BackgroundIsolateBinaryMessenger.ensureInitialized(token); if (Platform.isAndroid) { try { const MethodChannel ch = MethodChannel('android'); final int v = await ch.invokeMethod('getSdkVersion'); if (v != 26) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } } on PlatformException catch (e) { Logger.log('Failed to get platform version'); } } } class CoconutApp extends StatelessWidget { const CoconutApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => WalletProvider()), ChangeNotifierProvider(create: (_) => NodeProvider()), ], child: MaterialApp( title: 'Coconut Wallet', theme: CoconutTheme.light(), darkTheme: CoconutTheme.dark(), home: const HomePage(), ), ); } } import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:coconut_wallet/repository/shared_prefs_repository.dart'; import 'package:coconut_wallet/utils/logger.dart'; import 'package:provider/provider.dart'; import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final RootIsolateToken token = RootIsolateToken.instance!; BackgroundIsolateBinaryMessenger.ensureInitialized(token); if (Platform.isAndroid) { try { const MethodChannel ch = MethodChannel('android'); final int v = await ch.invokeMethod('getSdkVersion'); if (v != 26) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } } on PlatformException catch (e) { Logger.log('Failed to get platform version'); } } } class CoconutApp extends StatelessWidget { const CoconutApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => WalletProvider()), ChangeNotifierProvider(create: (_) => NodeProvider()), ], child: MaterialApp( title: 'Coconut Wallet', theme: CoconutTheme.light(), darkTheme: CoconutTheme.dark(), home: const HomePage(), ), ); } } import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:coconut_wallet/repository/shared_prefs_repository.dart'; import 'package:coconut_wallet/utils/logger.dart'; import 'package:provider/provider.dart'; import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final RootIsolateToken token = RootIsolateToken.instance!; BackgroundIsolateBinaryMessenger.ensureInitialized(token); if (Platform.isAndroid) { try { const MethodChannel ch = MethodChannel('android'); final int v = await ch.invokeMethod('getSdkVersion'); if (v != 26) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } } on PlatformException catch (e) { Logger.log('Failed to get platform version'); } } } class CoconutApp extends StatelessWidget { const CoconutApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => WalletProvider()), ChangeNotifierProvider(create: (_) => NodeProvider()), ], child: MaterialApp( title: 'Coconut Wallet', theme: CoconutTheme.light(), darkTheme: CoconutTheme.dark(), home: const HomePage(), ), ); } } import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:coconut_wallet/repository/shared_prefs_repository.dart'; import 'package:coconut_wallet/utils/logger.dart'; import 'package:provider/provider.dart'; import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final RootIsolateToken token = RootIsolateToken.instance!; BackgroundIsolateBinaryMessenger.ensureInitialized(token); if (Platform.isAndroid) { try { const MethodChannel ch = MethodChannel('android'); final int v = await ch.invokeMethod('getSdkVersion'); if (v != 26) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } } on PlatformException catch (e) { Logger.log('Failed to get platform version'); } } } class CoconutApp extends StatelessWidget { const CoconutApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => WalletProvider()), ChangeNotifierProvider(create: (_) => NodeProvider()), ], child: MaterialApp( title: 'Coconut Wallet', theme: CoconutTheme.light(), darkTheme: CoconutTheme.dark(), home: const HomePage(), ), ); } }
Coconut App
NICHT VERTRAUEN, VERIFIZIEREN

Open Source,
als Fundament
des Vertrauens

Wir glauben, dass jede Bitcoin-Wallet Open Source sein muss. Wir werden dich nicht bitten, uns blind zu vertrauen. Lies den Code und überprüfe selbst.

Not your keys,
Not your bitcoin

Starte Self-Custody noch heute!

coconut.onl nutzt die .onl-Domain bewusst: Sie klingt wie das koreanische Wort 오늘 (oneul), also „heute“ — ein kleiner Hinweis unseres Teams in Seoul. Starte Self-Custody heute zu deinen Bedingungen.

Offizielle Releases gibt es nur im App Store und bei Google Play.