Ambientes de desenvolvimento no Windows: Configurando o Winget
O winget é o gerenciador de pacotes oficial do Windows e, junto com o WinGet Configuration, permite montar um ambiente de desenvolvimento completo com um único comando. Neste artigo, você vai entender o problema que ele resolve, instalar a ferramenta, ajustar suas configurações e automatizar a preparação de uma máquina nova.
Ao longo dos últimos anos, acompanhei de perto a evolução das ferramentas de provisionamento e automação de ambientes de desenvolvimento. No ecossistema Windows, sempre existiu um desafio histórico: preparar uma máquina recém-instalada de forma rápida, reprodutível e confiável.
O problema do provisionamento manual
Tradicionalmente, configurar uma máquina de desenvolvimento no Windows envolve uma sequência longa de tarefas manuais. Por exemplo, a pessoa desenvolvedora precisa cuidar de itens como estes:
- Instalação de ferramentas essenciais, como SDKs, IDEs e CLIs.
- Configuração de recursos do sistema operacional.
- Aplicação de políticas e ajustes específicos de ambiente.
- Padronização entre várias máquinas ou entre os membros de um time.
Esse processo, além de demorado, abre espaço para erros e inconsistências. Pequenas diferenças entre ambientes costumam gerar problemas difíceis de diagnosticar, principalmente em times grandes ou distribuídos.
Por isso, a Microsoft passou a investir em um gerenciador de pacotes nativo e, depois, em uma camada declarativa de configuração. É exatamente esse caminho que o winget percorre.
O que é o winget
O winget é a ferramenta de linha de comando do Windows Package Manager. Com ela, você descobre, instala, atualiza, remove e configura aplicativos no Windows 10, no Windows 11 e no Windows Server 2025.
Na prática, o winget faz pelo Windows o que o apt faz pelo Ubuntu ou o Homebrew faz pelo macOS. Em vez de abrir o navegador, baixar um instalador e clicar em "Avançar" várias vezes, você digita um comando e deixa a ferramenta trabalhar.
Além disso, o projeto é open source e mantém o código no repositório oficial do winget-cli no GitHub. O catálogo da comunidade, por sua vez, fica no repositório winget-pkgs, onde qualquer pessoa pode enviar novos pacotes.
O winget também aceita diversos formatos de instalador, como EXE, MSI, MSIX, APPX, ZIP, INNO, NULLSOFT, WIX, BURN, PORTABLE e FONT. Assim, a maior parte dos aplicativos que você usa no dia a dia já está ao alcance de um comando.
WinGet Configuration e a configuração como código
O WinGet Configuration leva o conceito de configuração como código para o ambiente Windows. Em vez de executar comandos imperativos em sequência, você descreve o estado desejado da máquina em um arquivo.
Esse arquivo, escrito em YAML, define de forma clara e estruturada três grupos de informação:
- Quais aplicações a máquina precisa ter instaladas.
- Os recursos do Windows que precisam estar habilitados.
- Os ajustes que o sistema precisa receber.
A partir dessa definição, o winget converge o estado atual da máquina para o estado desejado. Dessa forma, a intervenção manual cai ao mínimo.
Para isso, o recurso combina três peças: o arquivo YAML, o PowerShell Desired State Configuration (DSC) e o comando winget configure. O DSC é o motor que aplica, de fato, cada ajuste no sistema operacional.
Estrutura de um arquivo de configuração
Um arquivo de configuração segue uma estrutura padronizada, na qual cada componente do sistema vira um resource com propriedades bem definidas. O nó raiz se chama properties e contém a versão da configuração, a seção assertions e a seção resources.
As assertions representam as pré-condições, como uma versão mínima do sistema operacional. Os resources, por outro lado, listam o que precisa ser instalado e configurado.
Cada resource declara o que deve ficar configurado, e não como executar a configuração. Esse detalhe reforça o caráter declarativo da abordagem.
O exemplo abaixo, baseado na documentação oficial, verifica a versão do Windows, habilita o modo de desenvolvedor e instala o Git:
# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2
properties:
assertions:
# Garante a versão mínima do sistema operacional
- resource: Microsoft.Windows.Developer/OsVersion
directives:
description: Verify min OS version requirement
allowPrerelease: true
settings:
MinVersion: '10.0.22000'
resources:
# Habilita o modo de desenvolvedor do Windows
- resource: Microsoft.Windows.Settings/WindowsSettings
directives:
description: Enable Developer Mode
allowPrerelease: true
securityContext: elevated
settings:
DeveloperMode: true
# Instala o Git a partir do catálogo do winget
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: gitPackage
directives:
description: Install Git
securityContext: elevated
settings:
id: Git.Git
source: winget
configurationVersion: 0.2.0
A diretiva securityContext: elevated indica que o resource precisa de privilégios de administrador. Nesse caso, o winget pede uma única aprovação do UAC no início e separa os resources entre um processo elevado e outro comum.
Já o campo dependsOn liga um resource a uma assertion ou a outro resource pelo id. Se a dependência falhar, o resource dependente também falha, mas o restante da configuração continua.
A convenção recomendada é usar a extensão .winget, como em configuration.winget. Em projetos Git, o arquivo padrão fica em ./.config/configuration.winget.
Execução com um único comando
Um dos pontos mais relevantes do WinGet Configuration é a simplicidade de execução. Depois de definir o arquivo, você inicia todo o provisionamento com um único comando:
winget configure --file configuration.winget
Esse comando avalia o estado atual da máquina, identifica as diferenças em relação à configuração desejada e aplica apenas as alterações necessárias. Ou seja, o processo é idempotente, previsível e repetível.
Para pipelines e scripts, o parâmetro --accept-configuration-agreements evita o prompt interativo de confirmação. Além disso, o subcomando winget configure test apenas verifica se a máquina já está no estado desejado, sem alterar nada.
Também é possível gerar um arquivo a partir de uma máquina existente com winget configure export -o my-machine.winget --all. Com isso, você captura o ambiente atual e o reaproveita em outro computador.
Vale lembrar que o comando configure exige o winget na versão 1.6.2631 ou superior. Antes de aplicar qualquer arquivo de terceiros, revise o conteúdo e os módulos DSC que ele referencia, como recomenda a própria Microsoft.
Integração com o ecossistema Windows
A Microsoft projetou o WinGet Configuration para se integrar profundamente ao Windows. Ele usa o próprio Windows Package Manager como base e aproveita seu catálogo e seu mecanismo de instalação.
Além disso, a solução conversa com recursos nativos do sistema operacional. Por exemplo, ela permite ativar features do Windows, configurar componentes de desenvolvimento e padronizar ambientes corporativos.
Essa integração nativa reduz a necessidade de ferramentas externas. Consequentemente, a adoção em empresas fica bem mais simples.
Benefícios do winget para times e organizações
Do ponto de vista organizacional, o winget com o WinGet Configuration oferece ganhos claros:
- Reprodutibilidade: todas as pessoas desenvolvedoras partem do mesmo baseline.
- Onboarding acelerado: uma máquina nova fica pronta em minutos.
- Redução de erros: há menos variações manuais entre ambientes.
- Documentação viva: o arquivo de configuração vira a fonte de verdade do ambiente.
Esses benefícios ganham ainda mais peso quando o time cresce rapidamente ou enfrenta alta rotatividade. Afinal, cada pessoa nova começa a contribuir mais cedo.
Outro ponto interessante é que o arquivo pode morar no repositório do projeto. Assim, o time revisa mudanças no ambiente da mesma forma que revisa código.
Requisitos para usar o winget
Para usar o winget, você precisa do Windows 10 versão 1809 (build 17763) ou superior, ou do Windows 11. No Windows Server 2025, a ferramenta chega por meio das atualizações do sistema.
O winget faz parte do pacote App Installer, que a Microsoft Store distribui e atualiza. Contudo, ele só fica disponível depois que o usuário faz o primeiro login no Windows, porque a Store registra o pacote de forma assíncrona.
Verificando se o winget já está instalado
Abra o Windows Terminal ou o PowerShell e execute o seguinte comando:
winget --version
Se o winget estiver presente, o terminal exibe a versão atual, como v1.9.2411. Caso o comando não seja reconhecido, você precisa instalar ou atualizar o App Installer.
Se você acabou de fazer o primeiro login e o comando ainda não responde, a documentação oficial sugere forçar o registro com Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.
Como instalar o winget
Existem três caminhos principais para instalar a ferramenta. A escolha depende de você ter ou não acesso à Microsoft Store.
Via Microsoft Store
A forma mais simples de instalar o winget é pela Microsoft Store. Pesquise por App Installer e clique em Instalar ou Atualizar.
O App Installer inclui o cliente winget e recebe atualizações automáticas da própria Store. Portanto, essa é a opção recomendada para a maioria das máquinas de desenvolvimento.
Via GitHub com instalação manual
Acesse a página de releases do repositório microsoft/winget-cli e baixe o arquivo .msixbundle da versão mais recente. Em seguida, execute o arquivo baixado ou instale pelo PowerShell:
Add-AppxPackage -Path .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
Esse caminho é útil quando você precisa de uma versão específica ou quer testar um preview antes de ele chegar à Store.
Via script da comunidade winget-install
Em ambientes sem acesso à Microsoft Store, como o Windows Server ou edições LTSC, você pode usar o script da comunidade disponível no repositório asheroto/winget-install. Execute o comando abaixo no PowerShell como administrador:
irm https://raw.githubusercontent.com/asheroto/winget-install/master/winget-install.ps1 | iex
Como todo script baixado da internet, revise o conteúdo antes de executá-lo. Uma alternativa oficial é o cmdlet Repair-WinGetPackageManager, do módulo Microsoft.WinGet.Client, que a documentação indica para cenários como o Windows Sandbox.
Aceitando os termos de uso
Na primeira execução de qualquer comando do winget, o sistema solicita a aceitação dos termos de uso da fonte de pacotes. Em scripts ou ambientes não interativos, use o parâmetro --accept-source-agreements para aceitar automaticamente:
winget search git --accept-source-agreements
Da mesma forma, o parâmetro --accept-package-agreements aceita as licenças dos pacotes durante a instalação. Juntos, os dois parâmetros eliminam prompts que travariam uma automação.
Configurando as fontes do winget
O winget busca e instala aplicativos a partir de fontes de pacotes. A fonte padrão se chama winget e aponta para o repositório público da comunidade mantido pela Microsoft.
Para listar as fontes configuradas, execute:
winget source list
Já para adicionar uma fonte personalizada, como um repositório interno da empresa, use:
winget source add --name MyFeed --arg https://my-feed.example.com/index
Para atualizar os metadados de todas as fontes, execute:
winget source update
Arquivo settings.json do winget
O winget permite personalizar seu comportamento por meio de um arquivo JSON de configurações. Para abrir esse arquivo no editor padrão, execute winget settings.
Na primeira abertura, o arquivo vem praticamente vazio. Um exemplo com as propriedades mais comuns fica assim:
{
"$schema": "https://aka.ms/winget-settings.schema.json",
"visual": {
"progressBar": "rainbow"
},
"installBehavior": {
"preferences": {
"scope": "machine"
}
},
"telemetry": {
"disable": false
},
"network": {
"downloader": "wininet"
}
}
A propriedade $schema habilita o autocompletar em editores compatíveis, como o Visual Studio Code. Assim, você descobre novas opções com a tecla TAB.
Propriedade visual
A propriedade visual.progressBar define o estilo da barra de progresso durante as instalações. Os valores disponíveis são accent, rainbow, retro e disabled.
Propriedade installBehavior
A propriedade installBehavior.preferences.scope define se o winget prioriza instalações para o usuário atual (user) ou para toda a máquina (machine). Como é uma preferência, a ferramenta ainda escolhe outro escopo quando o pacote não oferece o preferido.
Se você quiser impor o escopo, use o bloco requirements no lugar de preferences. Nesse caso, a instalação falha quando não existe instalador compatível.
Propriedade telemetry
A propriedade telemetry.disable controla o envio de dados de telemetria para a Microsoft. Com o valor true, a ferramenta deixa de gravar esses eventos.
Propriedade network
A propriedade network.downloader define o componente que faz os downloads. As opções são wininet, que usa as APIs WinINet, e do, que usa o serviço Delivery Optimization e é o padrão segundo a documentação atual.
Principais comandos do winget
Agora que a ferramenta está pronta, vale conhecer os comandos que você vai usar no dia a dia. Todos seguem o mesmo padrão: winget, o verbo e os argumentos.
Pesquisando pacotes
Para encontrar um aplicativo no catálogo, use winget search seguido do termo:
winget search vscode
O resultado mostra o nome, o Id, a versão e a fonte de cada pacote. Em geral, o Id é o valor mais seguro para os próximos comandos, porque ele identifica o pacote sem ambiguidade.
Instalando um pacote
Para instalar um pacote, informe o seu Id:
winget install Microsoft.VisualStudioCode
Se quiser instalar sem nenhuma interação, combine os parâmetros de modo silencioso e de aceite de termos:
winget install Microsoft.VisualStudioCode --silent --accept-package-agreements --accept-source-agreements
Atualizando e removendo pacotes
Para atualizar um pacote específico, use winget upgrade Microsoft.VisualStudioCode. Já para atualizar tudo o que a ferramenta reconhece na máquina, use o comando abaixo:
winget upgrade --all
Para remover um pacote, use winget uninstall Microsoft.VisualStudioCode. Por fim, o comando winget list exibe todos os pacotes instalados.
Exportando e importando pacotes
Para exportar a lista de pacotes instalados para um arquivo JSON, execute:
winget export -o packages.json
Em seguida, importe e instale todos os pacotes desse arquivo em outra máquina:
winget import -i packages.json --accept-package-agreements --accept-source-agreements
Esse recurso ajuda bastante a replicar ambientes de desenvolvimento. No entanto, ele trata apenas da lista de pacotes, enquanto o WinGet Configuration também cobre configurações do sistema, dependências e pré-condições.
Configurando o winget em ambientes corporativos
Em empresas, é possível restringir ou configurar o winget por Group Policy (GPO) ou pelo Microsoft Intune. As políticas permitem desabilitar fontes específicas, controlar o escopo das instalações e definir permissões por grupos de usuários.
Para configurar via GPO, acesse Computer Configuration > Administrative Templates > Windows Components > Desktop App Installer. Ali ficam, inclusive, as políticas EnableWindowsPackageManagerConfiguration e EnableWindowsPackageManagerConfigurationExplanation, que permitem bloquear o uso do WinGet Configuration na organização.
O comando winget --info também ajuda nesse cenário. Ele mostra detalhes da instalação e as políticas de grupo aplicadas à máquina.
Automatizando o winget com PowerShell
Mesmo sem o WinGet Configuration, você pode integrar o winget a scripts PowerShell para automatizar a preparação da máquina. O exemplo abaixo instala um conjunto comum de ferramentas para quem desenvolve com .NET:
# Lista de pacotes do ambiente de desenvolvimento .NET
$packages = @(
"Git.Git",
"Microsoft.VisualStudioCode",
"Microsoft.DotNet.SDK.9",
"Microsoft.WindowsTerminal",
"Docker.DockerDesktop",
"JetBrains.Rider"
)
# Instala cada pacote sem interação do usuário
foreach ($package in $packages) {
winget install $package --silent --accept-package-agreements --accept-source-agreements
}
Esse padrão garante que cada máquina nova receba as mesmas ferramentas, sem intervenção manual. Depois de instalar o Git, por exemplo, vale seguir o guia de instalação, configuração e primeiros passos com Git e GitHub para deixar tudo pronto.
Se a necessidade crescer, migre o script para um arquivo de configuração declarativo. Assim, você ganha idempotência, assertions e dependências entre etapas.
Considerações finais sobre o winget
O WinGet Configuration representa uma evolução significativa na forma de configurar ambientes de desenvolvimento no Windows. Com uma abordagem declarativa e integrada ao sistema, a Microsoft entrega uma solução alinhada às práticas já consolidadas em outros ecossistemas.
Na minha avaliação, o winget tem potencial para se tornar uma peça essencial no fluxo de trabalho de pessoas e times que buscam padronização, eficiência e previsibilidade. Além disso, a curva de aprendizado é pequena para quem já usa o terminal.
Ao transformar a configuração da máquina em código, o winget aproxima o Windows de uma realidade em que o ambiente deixa de ser um problema operacional. Em outras palavras, ele passa a ser um ativo gerenciado de forma consciente e estratégica.
FAQ
O winget funciona no Windows Server?
Sim, e no Windows Server 2025 ele chega pelas atualizações do sistema. Em versões sem a Microsoft Store, use o pacote .msixbundle do GitHub, o cmdlet Repair-WinGetPackageManager ou o script da comunidade.
É possível usar o winget sem conexão com a internet?
Não nas instalações padrão, porque a ferramenta baixa os pacotes de fontes remotas. Contudo, você pode configurar uma fonte local ou um espelho interno para ambientes isolados.
O winget substitui o Chocolatey ou o Scoop?
O winget cobre a maioria dos casos de uso comuns. Chocolatey e Scoop ainda oferecem vantagens em cenários específicos, como pacotes de nicho, instalações portáteis e automação empresarial mais madura.
Como encontrar o ID correto de um pacote?
Use winget search com o termo desejado e copie o valor da coluna Id. Depois, use esse valor com o parâmetro --id para evitar ambiguidades.
O winget pode ser usado no WSL?
Não diretamente, porque ele é uma ferramenta nativa do Windows. Dentro do WSL, use o gerenciador de pacotes da distribuição Linux correspondente.
Qual a diferença entre winget import e winget configure?
O import apenas instala uma lista de pacotes de um arquivo JSON. Já o configure aplica um estado completo, com pacotes, configurações do Windows, dependências e pré-condições.