Last updated: April 2024 / 839650 o'block
Many Bitcoin wallets will simplify things for users in order to avoid overwhelming them with complexity. If you are an absolute beginner or causally dealing with only a small amount of bitcoin, that works fine. If you are aiming to custody your own bitcoin and make the best of the Bitcoin network, you'll want to know what a UTXO is and how a wallet really works.
UTXO stands for Unspent Transaction Output. When a Bitcoin transaction sends bitcoin to an address, that's a transaction output. Up until that output hasn't yet been spent in a later transaction, it's an unspent output from a transaction - a UTXO. So a UTXO is really just a bunch of sats, resulting from a single transaction, that you haven't spent yet.
All of bitcoin is moving across the Bitcoin network in form of UTXOs; every time bitcoin is spent/moved, it moves from one UTXO to the next. This way, the entire Bitcoin network is based on the UTXO model. This is in contrast to a traditional bank or payments system that uses an account model, where a central entity keeps a ledger of how much money you have. The Bitcoin network is unaware of you and it knows no personal accounts; all it knows is UTXOs - how much bitcoin is in a given address - and then your Bitcoin wallet knows how to spend what's stored in your address.
When your Bitcoin wallet only shows you your bitcoin balance, it is hiding from you - for sake of simplicity and ease of use - that your wallet balance is really the sum of all the UTXOs you own. As an example: you could have a UTXO from when a friend sent you some bitcoin, and then a few UTXOs from when you bought some bitcoin on an exchange a few times and withdrew it each time, and maybe a UTXO that is change from when you paid someone in bitcoin for a service or product you bought. Your wallet may hide all these individual UTXOs from you and only show you the total balance. In reality, when you decide to spend or move your bitcoin, your wallet will still need to spend those UTXOs as separate inputs for a transaction. This is simpler and it does work, but if you understand a little bit about UTXOs you get more out of Bitcoin.
Each UTXO is an output from one transaction, and eventually an input for the next transaction. Once a UTXO is spent, it's no longer an UTXO, only a transaction output/input.
Every UTXO, when it is spent, must be spent in full. It can't be divided with only a part spent and part remaining. This is similar to how, with traditional money, you can't just tear your money bill in half to pay for something; you must pay with the whole bill and you receive a different money bill or coin as change to put back into your wallet. If your UTXO is larger than the amount you intend to spend, the change will become a new UTXO controlled by your wallet.
Unlike with traditional money, a Bitcoin UTXO can be any amount/denomination. Any amount, up to 8 decimal places, can be a valid UTXO. So a UTXO could be 2 btc, 0.5 btc, or 0.3 btc, or 0.10257892 btc (10257892 sats), or any other amount.
So... what's best? Big or small UTXOs?
Managing your UTXOs is a matter of balance: having a bunch of smaller UTXOs in your wallet can lead to expensive transactions, if you are only ever sending larger amounts. On the other hand, having smaller UTXOs to chose from helps preserve your privacy.
BItcoin and privacy: https://en.bitcoin.it/wiki/Privacy
More on Bitcoin transactions: https://developer.bitcoin.org/devguide/transactions.html
Graphical abstract: for when you just need a quick overview or reminder - same stuff as above, just all in one image.