Overview
bs4Dashkit extends bs4Dash by
standardizing branding, sidebar behavior, navbar utilities, and theme
customization. Every feature is optional — you can adopt as little or as
much as you need.
The package is organised around four areas:
-
Brand and sidebar —
dash_titles()+use_bs4Dashkit_core() -
Theming —
use_dash_theme()and named presets -
Navbar —
dash_nav_title(), refresh / help / logout buttons, user menu -
Footer —
dash_footer()with flexible logo and text positioning
Minimal example
The smallest possible bs4Dashkit app requires exactly
two calls beyond normal bs4Dash boilerplate:
library(shiny)
library(bs4Dash)
library(bs4Dashkit)
# 1. Build the brand object
ttl <- dash_titles("My Dashboard")
ui <- bs4DashPage(
title = ttl$app_name, # browser tab title
header = bs4DashNavbar(title = ttl$brand),
sidebar = bs4DashSidebar(),
body = bs4DashBody(
use_bs4Dashkit_core(ttl) # 2. always the first call in body and called once
)
)
server <- function(input, output, session) {}
shinyApp(ui, server)dash_titles() accepts a single string and sensible
defaults handle everything else. use_bs4Dashkit_core()
loads the CSS dependencies, activates the sidebar brand mode, and
applies the default theme.
dash_titles() — the brand object
dash_titles() is the single entry point for all
brand-related configuration. It returns a named list with three
slots:
| Slot | Where it goes |
|---|---|
ttl$app_name |
bs4DashPage(title = ...) |
ttl$brand |
bs4DashNavbar(title = ...) (and/or
bs4DashSidebar(title = ...)) |
ttl$deps |
inside bs4DashBody(...) (handled automatically by
use_bs4Dashkit_core()) |
ttl <- dash_titles(
brand_text = "OLTCR Dashboards",
icon = "project-diagram", # Font Awesome icon name
weight = 700,
effect = "shimmer", # "none" | "glow" | "shimmer" | "emboss"
glow_color = "#2f6f8f",
size = "20px",
collapsed = "icon-text",
expanded = "icon-text",
collapsed_text = "DT", # shown when sidebar is collapsed
expanded_text = "OLTCR Dashboards",
brand_divider = TRUE
)Alternatively, use an image instead of a Font Awesome icon:
ttl <- dash_titles(
brand_text = "My App",
icon_img = "logo.png", # overrides `icon`
icon_shape = "rounded" # "circle" | "rounded" | "square"
)NB: Place logo.png in your app’s www/ directory.
use_bs4Dashkit_core() — the core entry point
Always place this as the first element inside
bs4DashBody(). It:
- Injects the package CSS and JavaScript
- Activates the sidebar brand mode logic
- Applies a theme preset (default:
"professional")
body = bs4DashBody(
use_bs4Dashkit_core(ttl, preset = "professional"),
# ... rest of your content
)Available presets:
use_bs4Dashkit_core(ttl, preset = "professional") # cool blue-grey (default)
use_bs4Dashkit_core(ttl, preset = "vibrant") # bolder accent colours
use_bs4Dashkit_core(ttl, preset = "minimal") # flat, low-contrastSidebar modes
The sidebar brand area can show different content depending on
whether the sidebar is collapsed or expanded. Set these in
dash_titles():
ttl <- dash_titles(
brand_text = "OLTCR Dashboards",
icon = "chart-line",
collapsed = "icon-only", # just the icon when narrow
expanded = "icon-text", # icon + label when wide
collapsed_text = "OL",
expanded_text = "OLTCR Dashboards"
)| Mode | Collapsed | Expanded |
|---|---|---|
"icon-only" |
✓ | ✓ |
"icon-text" |
✓ | ✓ |
"text-only" |
✓ | ✓ |
Add hover-expand behavior (sidebar expands on mouse-over even when collapsed):
body = bs4DashBody(
use_bs4Dashkit_core(
ttl,
preset = "professional",
topbar_h = 56,
collapsed_w = 4.2,
expanded_w = 250
)
# ...
)NB: use_dash_sidebar_behavior() is included by
use_bs4Dashkit_core(). Call it directly only if
you are not using the core helper.
Hover-expand behavior is included by
use_bs4Dashkit_core(). Configure it via
topbar_h, collapsed_w, and
expanded_w. Call use_dash_sidebar_behavior()
directly only when not using the core helper.
Global options
Set package-level defaults once (e.g. in your global.R)
so every app in a project inherits them:
options(
bs4Dashkit.sidebar.collapsed = "icon-only",
bs4Dashkit.sidebar.expanded = "icon-text",
bs4Dashkit.brand_divider = TRUE,
bs4Dashkit.accent = "#2f6f8f",
bs4Dashkit.theme_preset = "professional"
)If preset = NULL, use_bs4Dashkit_core()
uses the package option bs4Dashkit.theme_preset (if set).
If accent = NULL, it uses
bs4Dashkit.accent.
use_bs4Dashkit_core(ttl, preset = NULL) # uses option if set
use_bs4Dashkit_core(ttl, accent = NULL) # uses option if setdash_titles() reads these options when the corresponding
arguments are NULL, so you can omit them from individual
calls.
Troubleshooting
“I see 404s for dash-theme.css” -> call use_bs4Dashkit_core() or use_bs4Dashkit() first (resource path)
“My icon doesn’t show” -> check Font Awesome name / include icon_img
“Hover expand doesn’t work on mobile”-> expected (touch devices)
“Sidebar labels disappear on hover” -> indicates CSS overrides; use shipped dash-sidebar.css
What next?
-
Branding and sidebar modes — full reference for all
dash_titles()arguments - Theming and presets — CSS variable overrides and custom presets
-
Navigation utilities — refresh, help, logout, user
menu, and
dash_nav_title() - Footer — all footer layout combinations
- Complete example app — a single app that exercises every feature
