  Programmable money, enabled by digital currencies, facilitates outcomes
beyond simple payments by allowing users to attach conditions to the movement
of funds through code. However, there is a lack of clarity on defining
programmable money, where programmability can be implemented, and the resulting
tradeoffs. This paper provides a definition of programmable money with four key
components: a format for representing value, a set of programmable
instructions, an execution environment providing a coherence guarantee, and
rules around permissioning. We discuss programmability primitives, categorizing
them into levels based on expressiveness. We outline four locations
programmability could be offered - hardcoded into system rules, via
client-supplied programs/smart contracts, in client code, or via intermediaries
- analyzing benefits and risks of each. For policymakers evaluating central
bank digital currencies, we recommend considering these aspects holistically
and their interplay with regulation in system design. Our framework and
vocabulary enable more nuanced analysis of implementing programmability.
