Turbo Native bridge for mobile hybrid apps

Jordan Lee Jan 2026
3 tabs
class ApplicationController < ActionController::Base
  helper_method :turbo_native_app?

  private

  def turbo_native_app?
    request.user_agent.to_s.match?(/Turbo Native/)
  end

  def set_turbo_native_headers
    return unless turbo_native_app?

    # Tell the app which navigation style to use
    response.headers["Turbo-Visit-Action"] = "advance"

    # Custom headers for native features
    response.headers["X-Navbar-Title"] = @page_title if @page_title
  end
end
3 files · ruby, erb Explain with highlit

Turbo Native allows building iOS and Android apps using Rails server-rendered HTML with native navigation chrome. The web views communicate with native code via a JavaScript bridge for features like push notifications, camera access, or native UI patterns. I mark certain paths as non-turbo using data-turbo='false' to open them in native browsers or external modals. The server detects Turbo Native requests via user agent and can customize responses—hiding web-only UI, adjusting layouts, or returning native-friendly data. This approach delivers the development speed of web apps with the polish of native apps. For apps with limited custom UI needs, it's a compelling alternative to React Native.