Usamos la API de visual viewport: Visual Viewport API - Web APIs | MDN.
Puedes buscar en los archivos JS de nuestro repositorio de código visualViewport. Hay algunas peculiaridades en iOS debido a la ubicación del compositor, por lo que usamos algunas anulaciones más complejas allí, el archivo relevante es app/assets/javascripts/discourse/app/lib/safari-hacks.js.