qutebrowser profile manager
another pass on the readme
print profile location after creating
disallow slashes in profile name



You can also use your local clone with git send-email.

#qpm: qutebrowser profile manager

builds.sr.ht status

qutebrowser is a web browser with vim-like keybindings. It's great! qpm is a small tool for creating qutebrowser "profiles", directories you can tell qutebrowser to store its config and data in using the --basedir flag. You can use qpm to create profiles that share config with your standard qutebrowser installation and run them using the launch subcommand, which wraps qutebrowser and points --basedir at your profile directory. qutebrowser sessions started with different base directories are entirely separate, have their own histories and sessions, and can be opened and closed independently.

#Use cases

  • Use a "work" profile to isolate your work logins from your personal ones. Especially important if you have a work account on Google or Github!
  • Project-based profiles. I have a "qpm" profile which has library documentation, qutebrowser config, CI results, and everything I need to work on qpm.
  • Web browsers use a lot of memory and qutebrowser is no exception. I use profiles both to organize my browsing and to keep my number of open tabs under control, especially on machines with less memory. Since profiles open and close very quickly and keep a persisent session, I can open sets of tabs when I need them and close them when I don't, knowing I won't lose them.


Create and launch a new profile called "python":

$ qpm new python
$ qpm launch python docs.python.org

Notice that qpm launch passes extra arguments directly to qutebrowser, so you can use it to open urls in your profile and use any options you would pass to qutebrowser:

$ qpm launch python duck.com --target window --loglevel info

qpm from-session can copy the tabs of a saved qutebrowser session to a new profile. If you have a window full of tabs related to planning a vacation, you could save it to a session called "vacation" using :session-save -o vacation in qutebrowser, then create a new profile with those tabs:

$ qpm from-session vacation

The default profile directory is $XDG_DATA_HOME/qutebrowser-profiles, where $XDG_DATA_HOME is usually $HOME/.local/share, but you can keep profiles anywhere using --profile-dir/-P:

$ qpm --profile-dir ~/dev/my-project new qb-profile
$ cd ~/dev/my-project
$ qpm -P . launch qb-profile
# or
$ qutebrowser --basedir qb-profile

#Future ideas that may or may not happen

  • Edit flag and/or subcommand to edit the generated config.py
  • Installation instructions
  • More shared or copied config and data
  • Generate .desktop files
  • Use any profile as a base for new profiles (currently only the main config in $XDG_CONFIG_HOME is supported)
  • Source autoconfig.yml instead of config.py
  • Bundled config file optimized for single-site browsing
  • qpm.conf to configure the features above
  • Someday: qutebrowser plugin

Patches accepted!

#Known limitations

If your config.py relies on config.configdir to dynamically source other config files (like this), those config files will not be present in qpm-created profiles. There are plenty of workarounds, such as hardcoding your main config dir instead of using config.configdir.