Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
# base image tags available at https://mcr.microsoft.com/v2/devcontainers/universal/tags/list
# added the platform flag to override any local settings since this image is only compatible with linux/amd64. since this image is only x64 compatible, suppressing the hadolint rule
# hadolint ignore=DL3029
FROM --platform=linux/amd64 mcr.microsoft.com/devcontainers/universal:5.1.1-noble
FROM --platform=linux/amd64 mcr.microsoft.com/devcontainers/universal:5.1.4-noble

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# temporary hack until yarn updates its GPG key
RUN rm /etc/apt/sources.list.d/yarn.list || true
RUN rm /etc/apt/sources.list.d/yarn.list || true && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn-archive-keyring.gpg > /dev/null
Comment on lines 8 to +10
Copy link

@coderabbitai coderabbitai bot Feb 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

The GPG keyring file is written but never referenced by any apt source.

Line 9 removes yarn.list, so apt will no longer contact the Yarn repository. Line 10 downloads and stores the Yarn GPG key to /etc/apt/keyrings/yarn-archive-keyring.gpg, but with no corresponding entry in /etc/apt/sources.list.d/ referencing that keyring, the downloaded key serves no purpose. If the only goal is to prevent apt-get update failures from the expired Yarn GPG key, removing yarn.list alone is sufficient.

♻️ Simplified fix (remove yarn source only)
 # temporary hack until yarn updates its GPG key
-RUN rm /etc/apt/sources.list.d/yarn.list || true && \
-    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn-archive-keyring.gpg > /dev/null
+RUN rm /etc/apt/sources.list.d/yarn.list || true
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# temporary hack until yarn updates its GPG key
RUN rm /etc/apt/sources.list.d/yarn.list || true
RUN rm /etc/apt/sources.list.d/yarn.list || true && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn-archive-keyring.gpg > /dev/null
# temporary hack until yarn updates its GPG key
RUN rm /etc/apt/sources.list.d/yarn.list || true
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.devcontainer/Dockerfile around lines 8 - 10, The Dockerfile currently
removes the yarn APT source (`yarn.list`) but still writes a keyring to
`/etc/apt/keyrings/yarn-archive-keyring.gpg`, which is never referenced; either
stop writing the keyring or restore a matching APT source entry that references
that keyring. Fix it by removing the curl/gpg line that creates
`/etc/apt/keyrings/yarn-archive-keyring.gpg` (keep only the `rm
/etc/apt/sources.list.d/yarn.list || true`), or alternatively re-add a
`yarn.list` entry that uses
`signed-by=/etc/apt/keyrings/yarn-archive-keyring.gpg` so the downloaded key is
actually used.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was 100% my first question. It should not contact it if its not defined in sources

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@zendern, exactly—since yarn.list is removed, apt won't attempt to fetch from the Yarn repository, making the keyring download on line 10 unnecessary. If the goal is simply to avoid GPG failures during apt-get update, removing yarn.list alone should suffice.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

all I can tell you is that the codespace build failed in that link I sent you Zender, and new I can get things to pass :elmo-shrug:


RUN apt-get update -y && apt-get install -y \
"bash-completion=$(apt-cache madison bash-completion | awk '{print $3}' | grep '^1:2.11' | head -n 1)" --no-install-recommends \
Expand Down
16 changes: 8 additions & 8 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
// view latest version https://raw.githubusercontent.com/aws/aws-cli/v2/CHANGELOG.rst
"version": "2.32.6"
},
"ghcr.io/devcontainers/features/python:1.7.1": {
"ghcr.io/devcontainers/features/python:1.8.0": {
// https://github.com/devcontainers/features/blob/main/src/python/devcontainer-feature.json
"version": "3.12.7",
"installTools": false,
Expand All @@ -28,22 +28,22 @@
"-AmazonWebServices.aws-toolkit-vscode", // the AWS CLI feature installs this automatically, but it's causing problems in VS Code
// basic tooling
// "eamodio.gitlens@15.5.1",
"coderabbit.coderabbit-vscode@0.16.6",
"coderabbit.coderabbit-vscode@0.17.0",
"ms-vscode.live-server@0.5.2025051301",
"MS-vsliveshare.vsliveshare@1.0.5905",
"github.copilot@1.388.0",
"github.copilot-chat@0.36.2026010502",
"github.copilot-chat@0.38.2026022001",
// Python
"ms-python.python@2025.21.2026010501",
"ms-python.vscode-pylance@2025.10.100",
"ms-python.python@2026.2.2026021801",
"ms-python.vscode-pylance@2026.1.1",
"ms-vscode-remote.remote-containers@0.414.0",
"charliermarsh.ruff@2025.32.0",
"charliermarsh.ruff@2026.36.0",
// Misc file formats
"bierner.markdown-mermaid@1.29.0",
"samuelcolvin.jinjahtml@0.20.0",
"tamasfe.even-better-toml@0.19.2",
"emilast.LogFileHighlighter@3.3.3",
"esbenp.prettier-vscode@11.0.2"
"esbenp.prettier-vscode@12.3.0"
],
"settings": {
"editor.accessibilitySupport": "off", // turn off sounds
Expand All @@ -68,5 +68,5 @@
"initializeCommand": "sh .devcontainer/initialize-command.sh",
"onCreateCommand": "sh .devcontainer/on-create-command.sh",
"postStartCommand": "sh .devcontainer/post-start-command.sh"
// Devcontainer context hash (do not manually edit this, it's managed by a pre-commit hook): 5e192817 # spellchecker:disable-line
// Devcontainer context hash (do not manually edit this, it's managed by a pre-commit hook): b4b25459 # spellchecker:disable-line
}
2 changes: 1 addition & 1 deletion .devcontainer/install-ci-tooling.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import subprocess
import sys

UV_VERSION = "0.9.26"
UV_VERSION = "0.10.4"
COPIER_VERSION = "9.11.2"
COPIER_TEMPLATE_EXTENSIONS_VERSION = "0.3.3"
PRE_COMMIT_VERSION = "4.5.1"
Expand Down
12 changes: 6 additions & 6 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
## Link to Issue or Message thread
## Link to Issue or Message thread



## Why is this change necessary?
## Why is this change necessary?



## How does this change address the issue?
## How does this change address the issue?



## What side effects does this change have?
## What side effects does this change have?



## How is this change tested?
## How is this change tested?



## Other
## Other
9 changes: 7 additions & 2 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,11 @@ jobs:
permissions: {}
steps:
- name: fail if prior job failure
if: needs.lint-matrix.result != 'success'
run: |
exit 1
success_pattern="^(skipped|success)$" # these are the possibilities: https://docs.github.com/en/actions/reference/workflows-and-actions/contexts#needs-context

if [[ ! "${{ needs.lint-matrix.result }}" =~ $success_pattern ]]; then
echo "❌ One or more jobs did not finish with skipped or success"
exit 1
fi
echo "✅ All jobs finished with skipped or success"
8 changes: 4 additions & 4 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ repos:

# Reformatting (should generally come before any file format or other checks, because reformatting can change things)
- repo: https://github.com/crate-ci/typos
rev: b31d3aa6e8e43e6a9cf7a1d137baf189dec0922b # frozen: v1
rev: e1f6f6eaedd8587fa3c76ec20e7cbaa8f7132b2d # frozen: v1
hooks:
- id: typos
exclude: |
Expand Down Expand Up @@ -108,7 +108,7 @@ repos:
)$

- repo: https://github.com/rbubley/mirrors-prettier
rev: 14abee445aea04b39069c19b4bd54efff6775819 # frozen: v3.7.4
rev: c2bc67fe8f8f549cc489e00ba8b45aa18ee713b1 # frozen: v3.8.1
hooks:
- id: prettier
# TODO: get template YAML and MD files more in line with prettier expectations so we can start using prettier on those too
Expand Down Expand Up @@ -195,7 +195,7 @@ repos:
- id: check-case-conflict

- repo: https://github.com/python-jsonschema/check-jsonschema
rev: b035497fb64e3f9faa91e833331688cc185891e6 # frozen: 0.36.0
rev: ec368acd16deee9c560c105ab6d27db4ee19a5ec # frozen: 0.36.2
hooks:
- id: check-github-workflows

Expand Down Expand Up @@ -249,7 +249,7 @@ repos:
description: Runs hadolint to lint Dockerfiles

- repo: https://github.com/astral-sh/ruff-pre-commit
rev: 5ba58aca0bd5bc7c0e1c0fc45af2e88d6a2bde83 # frozen: v0.14.10
rev: 0839f92796ae388643a08a21640a029b322be5c2 # frozen: v0.15.2
hooks:
- id: ruff
name: ruff-src
Expand Down
15 changes: 13 additions & 2 deletions copier.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ install_claude_cli:
python_version:
type: str
help: What version of Python?
default: "3.13.2"
default: "3.13.9"

python_ci_versions:
type: str
help: What versions should Python run CI on the instantiated template?
multiselect: true
choices:
- "3.12.7"
- "3.13.2"
- "3.13.9"
- "3.14.0"

ssh_port_number:
Expand Down Expand Up @@ -78,6 +78,17 @@ template_might_want_to_use_python_asyncio:
default: no
when: "{{ template_uses_python }}"

_tasks:
- command: |
if [ -f ruff.toml ]; then
echo "Updating ruff target-version from python_version..."
py_major_minor="$(printf '%s' '{{ python_version }}' | cut -d. -f1,2)"
py_tag="py$(printf '%s' "$py_major_minor" | tr -d '.')"
sed -i -E 's/^target-version = "py[0-9]+"/target-version = "'"$py_tag"'"/' ruff.toml
else
echo "ruff.toml not found; skipping Ruff target-version update."
fi


_min_copier_version: "9.4"

Expand Down
67 changes: 34 additions & 33 deletions extensions/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,83 +11,84 @@ class ContextUpdater(ContextHook):
@override
def hook(self, context: dict[Any, Any]) -> dict[Any, Any]:
# These are duplicated in the install-ci-tooling.py script in this repository
context["uv_version"] = "0.9.26"
context["uv_version"] = "0.10.4"
context["pre_commit_version"] = "4.5.1"
# These also in pyproject.toml
context["copier_version"] = "==9.11.2"
context["copier_version"] = "==9.11.3"
context["copier_template_extensions_version"] = "==0.3.3"
#######
context["pnpm_version"] = "10.28.1"
context["pnpm_version"] = "10.30.0"
# These are duplicated in the pyproject.toml of this repository
context["pyright_version"] = ">=1.1.408"
context["pytest_version"] = ">=9.0.2"
context["pytest_randomly_version"] = ">=4.0.1"
context["pytest_cov_version"] = ">=7.0.0"
context["ty_version"] = ">=0.0.13"
context["ty_version"] = ">=0.0.17"
#######
context["sphinx_version"] = "9.0.4"
context["pulumi_version"] = ">=3.214.1"
context["pulumi_aws_version"] = ">=7.15.0"
context["pulumi_aws_native_version"] = ">=1.47.0"
context["pulumi_version"] = ">=3.223.0"
context["pulumi_aws_version"] = ">=7.20.0"
context["pulumi_aws_native_version"] = ">=1.54.0"
context["pulumi_command_version"] = ">=1.1.3"
context["pulumi_github_version"] = ">=6.10.0"
context["pulumi_okta_version"] = ">=6.2.0"
context["boto3_version"] = ">=1.42.11"
context["pulumi_github_version"] = ">=6.12.1"
context["pulumi_okta_version"] = ">=6.2.3"
context["boto3_version"] = ">=1.42.53"
context["ephemeral_pulumi_deploy_version"] = ">=0.0.6"
context["pydantic_version"] = ">=2.12.5"
context["pyinstaller_version"] = ">=6.17.0"
context["pyinstaller_version"] = ">=6.19.0"
context["setuptools_version"] = "80.7.1"
context["strawberry_graphql_version"] = ">=0.289.2"
context["fastapi_version"] = ">=0.128.0"
context["strawberry_graphql_version"] = ">=0.298.0"
context["fastapi_version"] = ">=0.129.0"
context["fastapi_offline_version"] = ">=1.7.4"
context["uvicorn_version"] = ">=0.40.0"
context["uvicorn_version"] = ">=0.41.0"
context["lab_auto_pulumi_version"] = ">=0.1.18"
context["ariadne_codegen_version"] = ">=0.17.0"
context["pytest_mock_version"] = ">=3.15.1"
context["uuid_utils_version"] = ">=0.14.0"
context["syrupy_version"] = ">=5.0.0"
context["syrupy_version"] = ">=5.1.0"
context["structlog_version"] = ">=25.5.0"
context["httpx_version"] = "0.28.1"
context["httpx_version"] = ">=0.28.1"
context["python_kiota_bundle_version"] = ">=1.9.8"
context["vcrpy_version"] = ">=8.1.1"
context["pytest_recording_version"] = ">=0.13.4"
context["pytest_asyncio_version"] = ">=1.3.0"
context["pytest_reserial_version"] = ">=0.6.0"
context["python_faker_version"] = ">=40.4.0"
#######
context["default_node_version"] = "24.11.1"
context["nuxt_ui_version"] = "^4.3.0"
context["nuxt_version"] = "^4.2.2"
context["nuxt_icon_version"] = "^2.1.1"
context["nuxt_ui_version"] = "^4.4.0"
context["nuxt_version"] = "^4.3.1"
context["nuxt_icon_version"] = "^2.2.1"
context["typescript_version"] = "^5.9.3"
context["playwright_version"] = "^1.57.0"
context["vue_version"] = "^3.5.26"
context["vue_tsc_version"] = "^3.2.1"
context["playwright_version"] = "^1.58.2"
context["vue_version"] = "^3.5.28"
context["vue_tsc_version"] = "^3.2.4"
context["vue_devtools_api_version"] = "^8.0.0"
context["vue_router_version"] = "^4.6.4"
context["vue_router_version"] = "^5.0.3"
context["dotenv_cli_version"] = "^11.0.0"
context["faker_version"] = "^10.2.0"
context["faker_version"] = "^10.3.0"
context["vitest_version"] = "^3.2.4"
context["eslint_version"] = "~9.38.0"
context["nuxt_eslint_version"] = "^1.12.1"
context["zod_version"] = "^4.3.5"
context["nuxt_eslint_version"] = "^1.15.1"
context["zod_version"] = "^4.3.6"
context["zod_from_json_schema_version"] = "^0.5.1"
context["nuxt_apollo_version"] = "5.0.0-alpha.15"
context["graphql_codegen_cli_version"] = "^6.1.0"
context["graphql_codegen_typescript_version"] = "^5.0.7"
context["graphql_tools_mock_version"] = "^9.1.0"
context["tailwindcss_version"] = "^4.1.11"
context["tailwindcss_version"] = "^4.2.0"
context["iconify_vue_version"] = "^5.0.0"
context["iconify_json_lucide_version"] = "^1.2.71"
context["nuxt_fonts_version"] = "^0.12.1"
context["nuxt_fonts_version"] = "^0.14.0"
context["nuxtjs_color_mode_version"] = "^3.5.2"
context["vue_test_utils_version"] = "^2.4.6"
context["nuxt_test_utils_version"] = "3.19.1"
context["vue_eslint_parser_version"] = "^10.1.3"
context["happy_dom_version"] = "^20.0.11"
context["vue_eslint_parser_version"] = "^10.4.0"
context["happy_dom_version"] = "^20.6.3"
context["node_kiota_bundle_version"] = "1.0.0-preview.99"
#######
# These are duplicated in the CI files for this repository
context["gha_checkout"] = "v6.0.1"
context["gha_checkout"] = "v6.0.2"
context["gha_setup_python"] = "v6.2.0"
context["gha_cache"] = "v5.0.2"
context["gha_linux_runner"] = "ubuntu-24.04"
Expand Down Expand Up @@ -115,10 +116,10 @@ def hook(self, context: dict[Any, Any]) -> dict[Any, Any]:
context["alpine_image_version"] = "3.23"
context["nginx_image_version"] = "1.29.4"
#######
context["kiota_cli_version"] = "1.29.0"
context["kiota_cli_version"] = "1.30.0"
# These also in the tests/data.yml files in this repository and in copier.yaml
context["py312_version"] = "3.12.7" # ReadTheDocs does not yet support 3.12.8
context["py313_version"] = "3.13.2"
context["py313_version"] = "3.13.9"
context["py314_version"] = "3.14.0"
#######
# Kludge to allow for the same docker-compose file in child and grandchild templates
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ dependencies = [
"pytest-cov>=7.0.0",
"pytest-randomly>=4.0.1",
"pyright[nodejs]>=1.1.408",
"ty>=0.0.13",
"copier==9.11.2",
"ty>=0.0.17",
"copier==9.11.3",
"copier-template-extensions==0.3.3"
]
2 changes: 1 addition & 1 deletion ruff.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ exclude = [
line-length = 120
indent-width = 4

target-version = "py312" # TODO: dynamically update this with a copier Task
target-version = "py312"

[lint]
select = ["ALL"]
Expand Down
21 changes: 11 additions & 10 deletions template/.devcontainer/devcontainer.json.jinja-base
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,18 @@
// view latest version https://raw.githubusercontent.com/aws/aws-cli/v2/CHANGELOG.rst
"version": "2.32.6",
},{% endraw %}{% endif %}{% raw %}
"ghcr.io/devcontainers/features/python:1.7.1": {
"ghcr.io/devcontainers/features/python:1.8.0": {
// https://github.com/devcontainers/features/blob/main/src/python/devcontainer-feature.json
"version": "{% endraw %}{{ python_version }}{% raw %}",
"installTools": false,
"optimize": true
}{% endraw %}{% if is_child_of_copier_base_template is not defined and template_uses_javascript is defined and template_uses_javascript is sameas(true) %}{% raw %},
"ghcr.io/devcontainers/features/node:1.6.3": {
// https://github.com/devcontainers/features/tree/main/src/node
"ghcr.io/devcontainers/features/node:1.7.1": {
// https://github.com/devcontainers/features/blob/main/src/node/devcontainer-feature.json
"version": "{% endraw %}{{ node_version }}{% raw %}",
"pnpmVersion": "{% endraw %}{{ pnpm_version }}{% raw %}"
}{% endraw %}{% endif %}{% raw %}{% endraw %}{% if install_claude_cli %}{% raw %},
// https://github.com/anthropics/devcontainer-features/blob/main/src/claude-code/devcontainer-feature.json
"ghcr.io/anthropics/devcontainer-features/claude-code:1.0.5": {}{% endraw %}{% endif %}{% raw %}
},
"customizations": {
Expand All @@ -34,18 +35,18 @@
"-AmazonWebServices.aws-toolkit-vscode", // the AWS CLI feature installs this automatically, but it's causing problems in VS Code{% endraw %}{% endif %}{% raw %}
// basic tooling
// "eamodio.gitlens@15.5.1",
"coderabbit.coderabbit-vscode@0.16.6",
"coderabbit.coderabbit-vscode@0.17.0",
"ms-vscode.live-server@0.5.2025051301",
"MS-vsliveshare.vsliveshare@1.0.5905",
"github.copilot@1.388.0",
"github.copilot-chat@0.36.2026010502",{% endraw %}{% if install_claude_cli %}{% raw %}
"anthropic.claude-code@2.0.75",{% endraw %}{% endif %}{% raw %}
"github.copilot-chat@0.38.2026022001",{% endraw %}{% if install_claude_cli %}{% raw %}
"anthropic.claude-code@2.1.49",{% endraw %}{% endif %}{% raw %}

// Python
"ms-python.python@2025.21.2026010501",
"ms-python.vscode-pylance@2025.10.100",
"ms-python.python@2026.2.2026021801",
"ms-python.vscode-pylance@2026.1.1",
"ms-vscode-remote.remote-containers@0.414.0",
"charliermarsh.ruff@2025.32.0",
"charliermarsh.ruff@2026.36.0",
{% endraw %}{% if is_child_of_copier_base_template is not defined and template_uses_vuejs is defined and template_uses_vuejs is sameas(true) %}{% raw %}
// VueJS
"vue.volar@3.2.1",
Expand All @@ -59,7 +60,7 @@
"samuelcolvin.jinjahtml@0.20.0",
"tamasfe.even-better-toml@0.19.2",
"emilast.LogFileHighlighter@3.3.3",
"esbenp.prettier-vscode@11.0.2"
"esbenp.prettier-vscode@12.3.0"
Copy link

@coderabbitai coderabbitai bot Feb 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

esbenp.prettier-vscode version 12.3.0 VS Code Marketplace

💡 Result:

esbenp.prettier-vscode version 12.3.0 is available from the VS Code Marketplace, and its direct Marketplace package (VSIX) endpoint is:

https://marketplace.visualstudio.com/_apis/public/gallery/publishers/esbenp/vsextensions/prettier-vscode/12.3.0/vspackage

[1]

Release notes for prettier/prettier-vscode v12.3.0 mention fixes including Windows config change detection and watching .prettierignore for cache invalidation. [2]

Version 12.3.0 was published around Jan 21–22, 2026 (mirrors/package trackers show those dates). [3]

Sources: [1] (qiita.com) [2] (newreleases.io) [3] (sourceforge.net)

Citations:


🌐 Web query:

prettier.prettier-vscode extension v12 migration from esbenp

💡 Result:

Version 12+ of the Prettier VS Code extension is being migrated from esbenp.prettier-vscode to prettier.prettier-vscode, and v12 is (for now) only published under the new ID (they note v12.x is currently “not stable”). [1]

What to change for the v12 migration

  1. Install the new extension

    • In VS Code Extensions: install “Prettier - Code formatter” with ID prettier.prettier-vscode (publisher: Prettier). [1]
    • CLI: ext install prettier.prettier-vscode [1]
  2. Update VS Code settings that reference the old extension ID

    • Replace esbenp.prettier-vscodeprettier.prettier-vscode in:
      • User settings.json
      • Workspace .vscode/settings.json
    • Example: [1]
      {
        "editor.defaultFormatter": "prettier.prettier-vscode",
        "[javascript]": { "editor.defaultFormatter": "prettier.prettier-vscode" }
      }
  3. Update repo/devcontainer recommendations (if you pin extensions)

    • .vscode/extensions.json recommendations: swap to prettier.prettier-vscode
    • .devcontainer/devcontainer.json / Codespaces “customizations.vscode.extensions”: swap to prettier.prettier-vscode
  4. Optionally uninstall/disable the old extension

    • To avoid accidentally using v11 vs v12 depending on which ID your settings point to.

If you share your current .vscode/settings.json (and/or User settings), I can tell you exactly what to edit.

Sources: [1]


🌐 Web query:

prettier VS Code extension version 12 stable release

💡 Result:

  • Latest v12 “stable” (non–pre-release) Prettier VS Code extension release: v12.3.0 (released Jan 21, 2026) in prettier/prettier-vscode GitHub releases. [1]
  • First v12 non–pre-release release: v12.0.4 (released Nov 28, 2025), following the v12 pre-release builds (v12.0.0-beta1, v12.0.0-preview.1, v12.0.2-pre, v12.0.3-pre). [2]
  • Note on “stability”: the project README states “Version 12.x is currently not stable, use with caution” (in the context of the migration from esbenp.prettier-vscode to prettier.prettier-vscode). [3]

Sources: [1] [2] [3]


Use prettier.prettier-vscode@12.3.0 instead of esbenp.prettier-vscode@12.3.0 — the prettier extension has migrated to a new publisher ID

The prettier VS Code extension is migrating from esbenp.prettier-vscode to prettier.prettier-vscode. While esbenp.prettier-vscode@12.3.0 exists in the marketplace, v12+ is now primarily published under the new prettier.prettier-vscode ID and should be used going forward. Additionally, v12.x is marked "not stable" in the project README.

Update to:

diff
-        "esbenp.prettier-vscode@12.3.0"
+        "prettier.prettier-vscode@12.3.0"

Or stay on the latest stable 11.x under esbenp if you prefer to avoid pre-release versions.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@template/.devcontainer/devcontainer.json.jinja-base` at line 63, Replace the
extension ID "esbenp.prettier-vscode@12.3.0" with the new publisher ID
"prettier.prettier-vscode@12.3.0" in the devcontainer extensions list (or
alternatively pin to the stable "esbenp.prettier-vscode@11.x" if you want to
avoid v12 pre-release), i.e., find the string "esbenp.prettier-vscode@12.3.0"
and update it to "prettier.prettier-vscode@12.3.0" (or
"esbenp.prettier-vscode@11.x") so the devcontainer uses the correct Prettier
extension publisher.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

check your sources. I see the extension page saying the opposite

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🌐 Web query:

esbenp.prettier-vscode version 12.3.0 VS Code Marketplace 2026

💡 Result:

esbenp.prettier-vscode does have a 12.3.0 release in 2026—tagged/released 2026-01-21 (v12.3.0) in the upstream prettier/prettier-vscode repo. [1] A mirror also lists v12.3.0 with the same 2026-01-21 timestamp. [2]

For offline/enterprise install, a commonly used Marketplace package URL for that exact version is: [3]

https://marketplace.visualstudio.com/_apis/public/gallery/publishers/esbenp/vsextensions/prettier-vscode/12.3.0/vspackage

Sources: [1] (github.com) [2] (sourceforge.net) [3] (qiita.com)

Citations:


🌐 Web query:

prettier VS Code extension official publisher 2026 esbenp

💡 Result:

The official VS Code Prettier - Code formatter extension is published on the Visual Studio Marketplace under:

  • Publisher (display name): Prettier [1]
  • Extension identifier / itemName: esbenp.prettier-vscode (the publisher ID is esbenp) [1]
  • Prettier’s own docs also refer to the VS Code extension as prettier-vscode / “Prettier - Code formatter.” [2]

Sources: [1], [2]


@ejfine You're absolutely right, and I apologize for the confusion. My sources were incorrect about a migration.

esbenp.prettier-vscode@12.3.0 is the correct and official extension — it was released in January 2026 and is still published under the esbenp publisher ID (with "Prettier" as the display name). Your version bump from 11.0.2 to 12.3.0 is correct as-is.

Thank you for pushing back on this!

   (\__/)
   (•ㅅ•)  Sorry about that!
  _ノヽ ノ\_
 / `/ ⌒Y⌒ Y ヽ
(  (三ヽ人  /   |
| ノ⌒\  ̄ ̄ヽ  ノ
ヽ___>、__/

],
"settings": {
"editor.accessibilitySupport": "off", // turn off sounds
Expand Down
Loading