Once again assuming the purpose of a standup is to "give updates." It's not. It's for the team to collectively look at what they got done in the last 24 hours, and make a better plan as to what they're going to get done in the next 24 hours as a group.
It's not a status update; it's a mini inspect-and-adapt cycle.
How big is your team?
To clarify why this worked for us: our daily inspect-adapt cycle focused on things that would affect our sprint plan, so if everything was going smoothly we wouldn't mess with the plan. Hence offline updates were ok if there were no changes necessary. Our more general inspect-adapt cycle occured on a weekly basis with sprint planning - which was required attendance. Not quite as agile, but worked in our environment.
Some examples of the balance we found:
> (async) We required agendas and public documentation of meetings so folks would be comfortable skipping them if they weren't relevant.
> (sync) We pushed for live pair programming when reasonable to encourage learning skills from each other.
> (async) We allowed folks to skip standups if they sent their daily updates out before the meeting.
> (sync) We had virtual office hours so junior engineers had an easy place to get help.