Perject is an Emacs package which allows the user to manage multiple projects in a single Emacs instance.
It uses the built-in desktop.el package to save and restore collections (i.e. user-defined groups of window configurations, frames and buffers) over Emacs restarts.
It also gives you commands to work with these projects (e.g. create them, switch to a buffer within the project, cycle the window configurations (“tabs”) belonging to the project, etc.).