Hi,
You can answer the question "in mid of 2026 the best project setup for a Pico project?" a few different ways depending on:
- Your level of embedded experience
- How much effort you want to put in to creating your Swift project
- How comfortable you are in managing the external toolchains and other dependencies required to build Embedded Swift projects
The answers to these three questions can be different for every project, which is probably why there is no project templates for Embedded Swift projects yet, there are a lot of variables, which makes it harder to come up with a solution that works for every use case.
For what it is worth, probably the easiest way to get started with Embedded Swift is to take an existing example from swift-embedded-examples and customize it to do what you want. Also, the article "Integrating with the Raspberry Pico Pico SDK" shows you how the rpi-pico-blink-sdk example in that repo was created, from start to finish.
The 'tl;dr' answers to the rest of your questions:
Summary
Some of the examples in the swift-embedded-examples repo use an SDK, and some do not. There is a table of examples in the README that shows all of the boards supported by Embedded Swift that people have written examples for. There is a column in that table labeled "SDK"; some of the Pico examples use the Pico SDK, and some of the Pico examples do not use the SDK ("None").
SwiftMMIO is used to set up and manage access to the memory of the microcontroller. If you use the Pico C SDK, it can also be used to set up device memory and memory access for your Swift application to use, no SwiftMMIO required.
For the examples that do not use an existing SDK, your application would need to set up the memory and memory access to the microcontroller before your application could use these things. This is what the "Support" libraries are typically used for.
The Pico C SDK uses CMake exclusively for creating the build files. Swift projects that link against the Pico C SDK tend to also use CMake, since it is already available and used for the C code for your Swift code to link against. Trying to use a second build system like Swift Package Manager in addition to CMake would add a lot of complexity and potential for build problems to your project. Using both in a single project would be something I would recommend only to people with a lot of experience with both systems.
CMake only creates files that describe how to build your project. Other tools such as Ninja or GNU Make actually "build" the project, using the build files in the correct format previously created by CMake.
Also, I use VSCode with the Raspberry Pi Pico and Swift extensions for developing Pico Embedded Swift applications, mostly because the Pico extension will download and set up the toolchains required for Pico development automatically, so I don't have to think that hard about it. The downside to using automation for your tooling is that the tooling can update things when you least expect it, and then you have to spend time updating your code when this happens before it will run again. Some people prefer or have a requirement to manage toolchains by hand, either they need to use specific versions of tools, or they dislike surprise upgrade.
I hope this helps answer your questions.
Thanks,
Brian