At first I was just going to get him a toddler bed, but then we considered how big he is already and realized: if we got him a toddler bed this year, next year we'd need to get him a full bed anyway. Why not just save the cost long term? So we went mattress store hunting and then took a journey around to see what we could get and who would give us the best deal. Ultimately we wound up getting him a twin size bed, which he can use for a long time with a Sealy mattress. I'm a little jealous -- it's REALLY comfortable!
Then we went and got him all the bedding he'd need, including multiple sets of sheets because, potty training isn't far off in the future and I'm sure having more than one set of sheets is going to come in handy. We went with a Batman theme, so Batman sheets/comforter/pillowcase, and his Grandma found a really cute Batman plush which Jude took to right away. He spent the entire shopping trip talking to it and hugging it while sitting in the cart. It was really precious.
This morning we dismantled his crib. This afternoon they delivered his new bed and we made it all up for him. Tonight will be his first night sleeping in a real bed (aside from when he co-slept with me as an infant). He's already shown us that he can climb in and out of it himself, so hopefully the transition goes smoothly. I expect there will be some additional sleep regression, but we've been dealing with that since he learned he could get up whenever he wanted, day or night. So hopefully it isn't any worse than that.