Descriptor wallet
A descriptor wallet is a wallet whose set of spendable scripts is defined by output descriptors rather than by an ad-hoc collection of keys and inferred scripts. A descriptor is a compact string that names a script template, the keys or extended public keys that fill it, a derivation path, and a checksum. The idea is specified in BIP 380 and related BIPs.
Bitcoin Core introduced descriptor wallets in 0.21 and made them the default for new wallets in 23.0. Legacy Berkeley DB wallets that inferred that the same pubkey might appear in P2PKH, P2WPKH, or P2SH-P2WPKH are a different model. HD wallets after BIP 32 still had an underspecified mapping from keys to scripts: the same xpub might mean P2PKH in one program and P2WPKH in another, and multisig coordinators disagreed on key order, witness versus scriptSig, and change paths. Descriptors make that mapping explicit so that two programs that import the same string watch the same outputs and produce compatible PSBTs.
Descriptor syntax
A descriptor combines a function such as pkh(), wpkh(), sh(wpkh()), wsh(sortedmulti(…)), tr(), or addr(); keys (hex public keys, WIF private keys, or xpub/xprv with origin info and a path, often ending in /* for a range); and an optional checksum after #. An example BIP 84 receive-and-change form is wpkh([deadbeef/84h/0h/0h]xpub…/<0;1>/*)#checksum. The origin [fingerprint/path] tells a hardware signer which seed and path to use; multipath <0;1> (BIP 389) covers the external and internal chains in one string.
Bitcoin Core
Bitcoin Core stores descriptors in an SQLite wallet database, marks some as active for receiving or change, and scans a range (by default on the order of a thousand indices, expandable) for matching outputs. Import uses importdescriptors; the older importaddress family is not available on descriptor wallets. Creating a blank watch-only wallet and importing an xpub descriptor is the supported watch-only path. Miniscript descriptors (wsh(miniscript), tr(miniscript)) express policies that the wallet can both watch and, when it has the keys, satisfy; raw and addr descriptors watch scripts the wallet cannot necessarily spend.
Bitcoin Core is the reference descriptor wallet. Sparrow, hardware-wallet coordinators, and several libraries speak the same language; hardware signers use origin information in PSBTs derived from descriptors. Electrum's native wallet format is not descriptor-based, though Electrum can spend outputs that descriptors would also describe.
Backup and recovery center on exporting the descriptor strings (and any private keys or seed that underpins them), not on dumping an ambiguous key pool. A receive descriptor without the matching change multipath can leave change outputs invisible after restore. Checksum verification catches transcription errors before a wallet watches the wrong script.
Compatibility
Related BIPs refine the language: BIP 381–386 cover specific script templates, BIP 389 adds multipath expressions, and later work extends Taproot and Miniscript forms. Wallets that only implement a subset must document which descriptor functions they accept so coordinators do not assume full Core parity. Migrating a legacy Core wallet to descriptors is a one-way conversion that rewrites how the wallet tracks scripts. Multisig coordinators that publish a single descriptor string reduce mismatch risk between hardware signers and watch-only software. Changing key order or a derivation path requires a new descriptor and usually a new birthday rescan.