Rails
Add AdminKit to a Ruby on Rails 8 application with an import map pin for the JavaScript and the stylesheet in the application layout, with Turbo.
Rails 8 uses import maps and Propshaft without a Node build step. The AdminKit script is pinned in the import map and imported in app/javascript/application.js; the stylesheet is linked in the application layout.
Install
gem install rails
rails new my-app
cd my-app
bin/importmap pin @adminkit/corebin/importmap pin downloads app.js into vendor/javascript/ and pins it as @adminkit/core in config/importmap.rb.
AdminKit PRO is not published to npm. Copy dist/ from the download into public/adminkit/ and, instead of the pin and the CDN link below, load /adminkit/css/app.css with a <link> and /adminkit/js/app.js with <script src="/adminkit/js/app.js" defer data-turbo-track="reload"></script> in the layout's <head>.
Import the CSS and JavaScript
Import the script in the application's entry point. Turbo Drive replaces <body> on every visit while the script keeps running, and app.js sets up the icons and the sidebar in each new body.
// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
import "@hotwired/turbo-rails"
import "controllers"
import "@adminkit/core"Import maps only cover JavaScript, so link the stylesheet, which loads its fonts next to it, from the CDN in the <head> of the layout (shown in full below), before the Rails tags:
<link href="https://unpkg.com/@adminkit/core/dist/css/app.css" rel="stylesheet" data-turbo-track="reload">
<%= stylesheet_link_tag :app, "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %>Optional: avoid a color mode flash
Without head.js, app.js applies the stored color mode once it runs, so a visitor who picked the mode opposite to their operating system briefly sees the other one. head.js applies it before the first paint. Add it as a plain script before the stylesheet:
<script src="https://unpkg.com/@adminkit/core/dist/js/head.js"></script>Minimal layout
<!DOCTYPE html>
<html>
<head>
<title><%= content_for(:title) || "Dashboard" %></title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<link href="https://unpkg.com/@adminkit/core/dist/css/app.css" rel="stylesheet" data-turbo-track="reload">
<%= stylesheet_link_tag :app, "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %>
</head>
<body>
<div class="wrapper">
<nav id="sidebar" class="sidebar js-sidebar offcanvas-lg offcanvas-start" tabindex="-1" aria-label="Sidebar">
<div class="sidebar-content js-simplebar">
<%= link_to root_path, class: "sidebar-brand" do %>
<span class="align-middle">AdminKit</span>
<% end %>
<ul class="sidebar-nav">
<li class="sidebar-header">Pages</li>
<li class="sidebar-item <%= 'active' if current_page?(root_path) %>">
<%= link_to root_path, class: "sidebar-link" do %>
<i class="align-middle" data-lucide="sliders-vertical"></i> <span class="align-middle">Dashboard</span>
<% end %>
</li>
<li class="sidebar-item <%= 'active' if current_page?("/profile") %>">
<%= link_to "/profile", class: "sidebar-link" do %>
<i class="align-middle" data-lucide="user"></i> <span class="align-middle">Profile</span>
<% end %>
</li>
</ul>
</div>
</nav>
<div class="main">
<nav class="navbar navbar-expand navbar-light navbar-bg">
<button type="button" class="sidebar-toggle js-sidebar-toggle" aria-controls="sidebar" aria-expanded="true" aria-label="Collapse sidebar">
<i class="hamburger align-self-center"></i>
</button>
</nav>
<main class="content">
<div class="container-fluid p-0">
<%= yield %>
</div>
</main>
</div>
</div>
</body>
</html>class DashboardController < ApplicationController
def index
end
end<h1 class="h3 mb-3">Dashboard</h1>
<div class="card">
<div class="card-body">Hello from AdminKit.</div>
</div>Rails.application.routes.draw do
root "dashboard#index"
get "profile", to: "dashboard#profile"
endAdd a profile action and app/views/dashboard/profile.html.erb the same way for the second link.
Run
bin/rails serverOpen http://localhost:3000. You should see the dark sidebar, the navbar with the hamburger toggle and the card. Clicking Profile loads the page through Turbo Drive; the icons stay rendered and the toggle keeps working.
Notes
- The layout above drops the PWA, icon and
yield :headlines of the generated layout for brevity. Keep them if you need them. - If you enable a strict content security policy in
config/initializers/content_security_policy.rb, allowhttps://unpkg.comforstyle-srcandfont-src(andscript-srcforhead.js). - The CDN URLs above are unpinned and serve the latest published version. Pin the version
bin/importmap pinreports, for examplehttps://unpkg.com/@adminkit/core@<version>/dist/css/app.css.
Last updated on