Pacotes
Um pacote (package) é uma unidade de funcionalidade distribuível — qualquer combinação de assets, código-fonte Zig, bibliotecas nativas e plugins de runtime — que você pode instalar em um projeto sem copiar arquivos manualmente. É a resposta do Turian ao Package Manager e à Asset Store da Unity, construído sobre o próprio gerenciador de pacotes do Zig.
Status: o MVP entrega pacotes de assets de ponta a ponta (instalar → compilar → executar). Pacotes de código-fonte, nativos e plugins estão previstos no manifesto e serão disponibilizados em lançamentos futuros.
Conceitos
| Termo | Significado |
|---|---|
| Pacote | A unidade de criação/distribuição: um manifesto turian-package.json mais assets, código-fonte, bibliotecas nativas e/ou um ponto de entrada de plugin. |
OAP (.oap) |
O contêiner de assets de runtime processado (cooked) que seu jogo envia. Os assets de um pacote são processados na game.oap do projeto em tempo de compilação. |
| Módulo | Uma unidade de compilação do Zig (b.addModule) — o equivalente ao asmdef da Unity. |
| Plugin | O ponto de entrada de registro do pacote no runtime/editor. |
A justificativa completa e o esquema estão disponíveis no ADR 0001.
project.json é a fonte da verdade
Todo projeto Turian possui um project.json que registra a identidade do projeto e suas dependências declaradas. O arquivo build.zig.zon do projeto é gerado a partir do project.json — semelhante a como a Unity e o Flax regeneram seus .csproj/.sln. Você nunca edita manualmente o build.zig.zon; a CLI e o Studio alteram o project.json e regeneram o ZON a cada compilação. Isso mantém o gerenciamento de dependências em um formato JSON familiar e seguro, gerando o ZON automaticamente e evitando erros de sintaxe.
{
"turian_version": "0.16",
"name": "My Game",
"version": "0.0.0",
"dependencies": {
"com.acme.physics": { "url": "git+https://example.com/physics#v1.2.0", "hash": "..." }
}
}
A resolução de dependências (versões, conflitos, hashes, o lockfile) é delegada ao gerenciador de pacotes do Zig. A camada do Turian adiciona o manifesto de integração com o engine, descoberta, injeção no pipeline de assets e verificações de compatibilidade do engine.
O manifesto: turian-package.json
Um pacote se declara com um turian-package.json em sua raiz:
{
"name": "com.example.color-palette",
"version": "1.0.0",
"author": "Example",
"description": "A sample asset-only package",
"license": "MIT",
"engine_compat": ">=1.0.0",
"types": ["asset"],
"assets": ["assets"]
}
| Campo | Obrigatório | Notas |
|---|---|---|
name |
✓ | DNS reverso, globalmente único. |
version |
✓ | Semver. |
types |
✓ | Um ou mais dentre asset, source, native, plugin. |
assets |
Diretórios de assets relativos à raiz do pacote (padrão ["assets"]). |
|
modules |
Módulos Zig exportados: { "name", "root" } (pacotes de código-fonte). |
|
native |
Bibliotecas nativas: { "name", "kind", "lib", "include" }. |
|
plugin |
Ponto de entrada de runtime: { "register", "entry" }. |
|
engine_compat |
Intervalo semver verificado em relação à versão do engine em execução. | |
dependencies |
Mapeamento de nome do pacote → intervalo semver. |
Instalando um pacote
# A partir de um diretório local
turian-cli package install ./path/to/package --project my-game
# A partir de um repositório git
turian-cli package install git+https://example.com/my-package --project my-game
Por padrão, os pacotes são instalados em um armazenamento central compartilhado entre todos os seus projetos —
$TURIAN_PACKAGE_HOME, caso contrário ~/.cache/turian/packages (%APPDATA%\turian\packages no
Windows) — organizado como <name>/<version>/ para que múltiplas versões coexistam. O projeto registra
quais pacotes e versões ele utiliza no project.json; nada é duplicado por projeto. É assim
também que uma empresa pode estruturar uma asset store interna: um único armazenamento compartilhado para muitos projetos.
Passe o parâmetro --vendored para copiar um pacote para <project>/packages/ (para commitá-lo
junto com o projeto ou trabalhar offline). As cópias vendored (locais do projeto) têm precedência sobre o armazenamento central.
turian-cli package install ./pkg # → armazenamento central (padrão)
turian-cli package install ./pkg --vendored # → <project>/packages/
turian-cli package list --project my-game
turian-cli package info com.example.color-palette --project my-game
turian-cli package remove com.example.color-palette --project my-game # mantém a cópia no armazenamento compartilhado
O próximo turian-cli build descobre cada pacote instalado (armazenamento central + vendored) e processa (cook) seus
assets na game.oap automaticamente — sem necessidade de cópia manual.
Os assets de pacotes instalados aparecem no Studio → Asset Browser sob uma seção Packages somente leitura: você os edita no pacote original, não no projeto que os consome.
Colisões e compatibilidade
- Nomes de pacotes duplicados e GUIDs compartilhados entre dois pacotes resultam em erros fatais (hard errors) que interrompem o build com um diagnóstico claro — os autores de pacotes devem manter os GUIDs dos assets globalmente únicos.
- Um pacote cujo intervalo
engine_compatexclui a versão do engine em execução gera um aviso (mas o build ainda prossegue).