# Backend Launcher: Quick App Switcher

> Jump back to the record you had open this morning, from any machine: recents and favourites stored on the server, in the command palette.

- **What it is:** Jump back to the record you had open this morning, from any machine: recents and favourites stored on the server, in the command palette.
- **For:** Extra Tools
- **Odoo versions:** 16.0, 17.0, 18.0, 19.0, 20.0 - Community and Enterprise
- **Runs on:** Odoo.sh or Odoo you host yourself - not Odoo Online, which accepts no third-party apps
- **Price:** 99 EUR, one-time, on the Odoo Apps Store
- **Technical name:** bambooforge_launcher
- **Not for:** It does not remember list views, dashboards or reports — only records you opened. A recents list of "the sales order list, forty times" is not a recents list.; It does not remember a record you were creating and never saved. There is nothing to go back to.; It is an internal tool: portal and public users are refused at the server, not merely hidden from the menu.
- **Manual:** https://docs.bambooforge.dev/bambooforge_launcher/
- **Live demo:** https://demo20.bambooforge.dev/odoo/action-bambooforge_launcher.action_bf_launcher_recent
- **Store page:** https://apps.odoo.com/apps/modules/20.0/bambooforge_launcher
- **Manual last updated:** 2026-09-24

---
# Backend Launcher: Quick App Switcher

Odoo's command palette (**Ctrl+K**) searches menus and commands. It
cannot take you back to the quotation you were reading before lunch, and
nothing in it survives a different browser.

## Recents, on the server

Every record you open is remembered: the model, the record, its name,
when you last saw it and how often. Press **Ctrl+K** and type `>`, and
the records you have been working in are right there, newest first.

The important word is *server*. A recents list kept in the browser's
local storage is gone when you pick up the laptop, gone again when IT
clears the cache, and gone a third time when you switch to the other
browser you keep for the customer portal. This one follows the person:
the tab you had open on the office desktop is one keystroke away at
home.

What it will not do is remember something you were not allowed to see.
The record is read with *your* rights before it is written down, so a
recents list can never become a back door into a record a rule keeps
from you.

The list is capped — a list nobody scrolls past twenty should not carry
a thousand rows per person forever — and **Launcher › Recently Opened**
shows the same thing as a list for people who would rather click, with
a *Forget everything* to wipe it.

## Favourites, with a key

Pin any record or any menu. Give the ones you live in a number, and
**Alt+1** … **Alt+9** go straight there from anywhere in the backend —
not just from the screen where a particular view happens to be mounted.
Type `*` in the palette for the whole list.

A favourite whose target has gone — a record somebody deleted, a menu
you no longer have access to — is silently skipped rather than offered.
A shortcut into an error page is worse than no shortcut.

Two people can each use Alt+3 for their own thing; hotkeys are unique
per person, not per database.

## Everything is yours alone

Both lists are per user, and a global record rule sees to it: your
recents are yours, your favourites are yours, and no report, no export
and no clever domain reaches anybody else's. Global rather than attached
to a group, because a rule attached to a group is OR-ed with every other
group's rule — and "mine is mine" has to hold without exception.

## How it fits every series

One small file of JavaScript per series, and on 17.0 through 19.0 it is
literally the same file, because everything it hangs off is identical
there: the
`command_provider` and `command_categories` registries, the hotkey
service, and the form controller's model and record id.

The namespaces are `>` and `*` because the obvious ones are taken:
`web` owns `/` for menus, and `mail` owns `@` for user mentions
and `#` for channels wherever Discuss is installed. A recents list
served under a palette whose placeholder reads *Search for a user…*,
with real users listed beneath it, is not a feature — so a test pins
both namespaces and fails if either of the taken ones ever creeps back
in.

## What it deliberately does not do

- It does not remember list views, dashboards or reports — only records
  you opened. A recents list of "the sales order list, forty times" is
  not a recents list.
- It does not remember a record you were creating and never saved.
  There is nothing to go back to.
- It is an internal tool: portal and public users are refused at the
  server, not merely hidden from the menu.

## How we make sure it works

Before every release, **35 automated checks** run against this app on Odoo 16, 17, 18, 19 and 20.
Among them:

- A record they cannot read is never remembered.
- Two favourites cannot share one key.
- The hotkeys do not swallow keys they do not own.
- The kind column follows the reader not the writer.
- The palette namespaces are not claimed by core.

The complete list is in the source you receive.

## Install

1. Copy `bambooforge_launcher` into your addons path and update the app list, or install the ZIP from the Odoo Apps Store.
2. Install **Backend Launcher: Quick App Switcher**.
3. Open **Launcher** - its menus are Recently Opened, Favourites.

## Questions people ask

****Which Odoo versions does it run on?****

Odoo 16.0, 17.0, 18.0, 19.0, 20.0, on the series you buy it for; each series is its own listing.

****Community or Enterprise?****

Both. It needs no Enterprise app.

****What does it need?****

The standard Web app. No extra Python package.

****Where does it show up?****

Under the **Launcher** menu (Recently Opened, Favourites).

****Does anything leave my server?****

No. It makes no call outside your Odoo server: no telemetry, no licence check, no third-party service.

****What happens if I uninstall it?****

Odoo drops the app's own tables and fields; the standard records it worked on (contacts, orders, products) stay as they are.
