Project local setup (atomic project)
Why would you want to go this route?
Using only project local assets all living within the project directory ensures that people you share this project with do not need to set up anything to use your project. This is a good option if you just want to put your project out there for anyone to use (example as an open hardware project shared publicly)
And why you might still want to use the central option?
The downside is that such a setup splits up your library over different projects. Making it hard to keep track on which assets you already have. The more projects you make the more likely it gets that you will start to duplicate assets. (And possibly even repeat errors you made in the past like again reading the drawing in the datasheet as top view instead of bottom view)
How does this workflow work?
Symbols, footprints and optionally 3d models used in a project are all placed in project specific libraries. These libraries are placed inside the project directory best in their own subdirectory. An example is shown in this picture.
Path Variable KIPRJMOD
KiCad automatically creates the path variable KIPRJMOD that points to the projects root directory (as indicated in the picture above).
This path variable is used inside the project library tables and for handling 3d models.
You still want a central library to source your assets.
You probably do not want to start fresh for every project. And you really do not want to copy assets around between projects either. Which means the best option is to still create a central library that you use as the source for your assets.
In this workflow you would add any new asset always to the centralized library first. But any asset that is used in a project is first copied to a project local library and this local copy is then used.
Another option is to design your projects fully with the central library and only convert it to an atomic setup at the end (just for sharing) There is the archive project plugin that automates this task.
Handling of 3d Models
Footprints sadly directly link to a file path for the 3d models. You will need to ensure that you use the path variable KIPRJMOD here.
One option here is to define a common folder structure within the project (the folder containing the 3d models of the project must always have the same name). With this restriction set up the footprint to point to the file location as expected in a project following this rule.