Soften your ingredients. Set cream cheese and butter out for 30–45 minutes. They should be cool to the touch but not firm.
Too cold leads to lumps; too warm makes frosting loose.
Beat the butter first. In a large bowl, beat butter on medium speed for 1–2 minutes until smooth and slightly pale. This helps create a sturdy base.
Add the cream cheese. Beat in the cream cheese on medium speed just until combined and creamy, about 1 minute. Don’t overmix here—overbeating can thin the frosting.
Flavor it. Add vanilla and salt.
If you’re using lemon juice or zest, add it now. Mix briefly to combine.
Add powdered sugar gradually. Sift the sugar, then mix in 1/2 cup at a time on low speed to avoid a sugar cloud. Scrape down the bowl a couple of times.
Start with 2 cups; you can add up to 1/2 cup more if you want it sweeter or stiffer.
Finish to desired texture. Increase speed to medium and beat for 20–30 seconds to smooth it out. Stop once it looks fluffy and thick. If it’s too soft, chill for 10–15 minutes and beat briefly again.
Use or chill. Spread or pipe right away, or refrigerate for 15–30 minutes to firm it up for piping roses, borders, or a clean layer-cake finish.