Hello,
I'm Alisher, a third-year Information Systems student at KBTU (Almaty, Kazakhstan). I have experience with TypeScript and Swift, mainly iOS development with SwiftUI/UIKit. I recently had a small fix merged into the repo (PR #2126) and I'm interested in the "Support SPM Templates in VS Code" project for GSoC 2026.
I've set up a local development environment and have been reading through the codebase and SE-0500. Here's where I am so far.
My Understanding
The project adds GUI support for the new SwiftPM template system in the VS Code extension. Right now, createNewProject.ts uses a Quick Pick with hardcoded package types and calls swift package init --type. SE-0500 introduces custom templates that are executables built with swift-argument-parser, accepting user input and generating project files.
The way I see the wizard working:
-
User provides a template source (git URL, local path, or registry identifier)
-
Extension runs the template with
--experimental-dump-helpto get a ToolInfoV0 JSON schema describing all arguments, options, and subcommands -
A webview renders that schema as a form, mapping argument kinds to text fields, checkboxes, dropdowns
-
Collected values get passed back as CLI args to
swift package init --type <name> --url <source>
The extension already has a webview for DocC preview (the DocumentationPreviewEditor + bundled JS under src/documentation/webview). It creates a WebviewPanel with bundled JS and bidirectional message passing. I plan to follow this as the reference pattern for the template wizard.
Questions
-
SE-0500 describes templates as a "branching decision tree". In ToolInfoV0, a command can contain nested subcommands, each with its own arguments. For example, a template offering both a server and a cli path would have different options per branch. Should the wizard handle this as a multi-step flow (pick subcommand, fill options, back/next), or as a single page that dynamically shows/hides fields based on selection?
-
The current schema is ToolInfoV0, but SE-0500's Future Directions mentions ongoing work on ToolInfoV1 and OpenCLI as successors. Is it reasonable to target ToolInfoV0 directly for now, or worth adding an abstraction layer between the JSON parser and the UI from the start?
-
Should this be a new command alongside the existing Create New Project, or should that command be extended? The current flow there doesn't have a natural place for template URL input, so a separate command might be cleaner, but keeping all project creation in one place has its own logic too.
@willpaceley @matthewbastien, would appreciate your thoughts on these.
Thanks,
Alisher