diff --git a/assets/keymaps/storybook.json b/assets/keymaps/storybook.json
new file mode 100644
index 0000000000..658a9d67bd
--- /dev/null
+++ b/assets/keymaps/storybook.json
@@ -0,0 +1,23 @@
+[
+ // Standard macOS bindings
+ {
+ "bindings": {
+ "up": "menu::SelectPrev",
+ "pageup": "menu::SelectFirst",
+ "shift-pageup": "menu::SelectFirst",
+ "ctrl-p": "menu::SelectPrev",
+ "down": "menu::SelectNext",
+ "pagedown": "menu::SelectLast",
+ "shift-pagedown": "menu::SelectFirst",
+ "ctrl-n": "menu::SelectNext",
+ "cmd-up": "menu::SelectFirst",
+ "cmd-down": "menu::SelectLast",
+ "enter": "menu::Confirm",
+ "ctrl-enter": "menu::ShowContextMenu",
+ "cmd-enter": "menu::SecondaryConfirm",
+ "escape": "menu::Cancel",
+ "ctrl-c": "menu::Cancel",
+ "cmd-q": "storybook::Quit"
+ }
+ }
+]
diff --git a/crates/storybook/src/actions.rs b/crates/storybook/src/actions.rs
new file mode 100644
index 0000000000..03ee5b580c
--- /dev/null
+++ b/crates/storybook/src/actions.rs
@@ -0,0 +1,2 @@
+use gpui::actions;
+actions!(storybook, [Quit]);
diff --git a/crates/storybook/src/app_menus.rs b/crates/storybook/src/app_menus.rs
new file mode 100644
index 0000000000..14c5e073ad
--- /dev/null
+++ b/crates/storybook/src/app_menus.rs
@@ -0,0 +1,10 @@
+use gpui::{Menu, MenuItem};
+
+pub fn app_menus() -> Vec