turbo_desktop-rails

Server-side Rails integration for Turbo Desktop — the Turbo Native pattern for desktop apps.

This gem gives your Rails app awareness of the Turbo Desktop shell, exactly like turbo-rails does for Turbo Native mobile apps.

Installation

Add to your Gemfile:

gem "turbo_desktop-rails"

Then run:

bundle install
rails generate turbo_desktop:install

Usage

Detection

The gem detects Turbo Desktop requests via the User-Agent header (Turbo Desktop/0.0.1 (macOS; aarch64)).

# In controllers
if turbo_desktop_app?
  # Desktop-specific logic
end

turbo_desktop_platform  # => "macos", "windows", "linux", or nil
turbo_desktop_arch      # => "aarch64", "x86_64", or nil

View Helpers

<%# Render only inside the desktop app %>
<% turbo_desktop_only do %>
  <button data-controller="sidebar">Toggle Sidebar</button>
<% end %>

<%# Render only for regular web browsers %>
<% turbo_web_only do %>
  <nav class="web-navbar">...</nav>
<% end %>

<%# Bridge component data attributes %>
<%= tag.button "Export PDF",
    **turbo_desktop_bridge("menu-item",
      title: "Export PDF",
      shortcut: "Cmd+E"
    ) %>

Path Configuration

The gem mounts a path configuration endpoint at /turbo-desktop/path-configuration.json:

# config/initializers/turbo_desktop.rb
TurboDesktop.configure do |config|
  config.path_configuration = {
    settings: { screenshots_enabled: true },
    rules: [
      { patterns: ["/"], properties: { presentation: "default" } },
      { patterns: ["/new$", "/edit$"], properties: { presentation: "modal" } },
      { patterns: ["/settings"], properties: { presentation: "native" } }
    ]
  }
end

Requirements

  • Ruby >= 3.1.0
  • Rails >= 7.0
  • turbo-rails >= 1.0

License

MIT — see LICENSE for details.