We consider a communication channel where there is no common clock between the transmitter and the receiver. This is motivated by the recent interest in building system-onchip radios for Internet of Things applications, which cannot rely on crystal oscillators for accurate timing. We identify two types of clock uncertainty in such systems: timing jitter, which occurs at a time scale faster than the communication duration (or equivalently blocklength); and clock drift, which occurs at a slower time scale. We study the zero-error capacity under both types of timing imperfections, and obtain optimal zeroerror codes for some cases. Our results show that, as opposed to common practice, in the presence of clock drift it is highly suboptimal to try to learn and track the clock frequency at the receiver; rather, one can design codes that come close to the performance of perfectly synchronous communication systems without any clock synchronization at the receiver.Index Terms-Asynchronous communication, clock drift, jitter, crystal-free radios 1 The width of the transmitted pulse is much shorter than the duration of the bin in [9].