---
type: explanation
title: Rode seu próprio jogo
summary: O que é o desenvolvimento de jogo personalizado, as duas formas de entregar seu próprio jogo (slot manual ou iframe auto-hospedado), e o que o painel acrescenta (esquema, presets, e o artefato de replay que deixa um jogo personalizado proteger).
---

Um jogo personalizado é um jogo que **você** constrói e hospeda, usado no widget Caputchin em vez de um jogo do [marketplace](/marketplace). Ninguém mais consegue instalá-lo, não há tópico no GitHub e não há passo de publicação, e você fica com o código. Esta seção é o guia detalhado de construir você mesmo esse caminho. (Se você quer publicar um jogo para *qualquer um* embutir, isso é [desenvolvimento de jogo de marketplace](/docs/marketplace-game-development/overview), um caminho separado.)

Há duas formas de entregar um jogo personalizado, e elas são superfícies genuinamente diferentes com limites diferentes. Escolha pelo que você precisa:

```mermaid
flowchart TD
  Q{O que você precisa}
  Q -->|Só meu próprio DOM no widget,<br/>sem portão de verificação| M[Modo manual]
  Q -->|Um jogo de verdade que pode PROTEGER a verificação<br/>reexecutado no servidor| S[Jogo em iframe auto-hospedado]
  M --> MX["&lt;caputchin-game trigger=manual&gt;<br/>você encaixa seu próprio markup<br/>conduz pass() / fail() você mesmo"]
  S --> SX["um bundle JS usando @caputchin/game-sdk<br/>hospedado por você, carregado via game-src<br/>+ um artefato de replay enviado ao painel"]
```

## Modo manual: seu próprio DOM, sem portão

O [modo manual](/docs/custom-game-development/manual-mode) é a opção leve. Você define `trigger="manual"` no `<caputchin-game>`, põe seu próprio markup dentro dele, e chama os métodos `pass()` / `fail()` do elemento a partir do seu próprio código quando o visitante tem sucesso ou falha. Não há iframe e não há SDK de jogo; o widget só te dá seu shell de layout e o encanamento de verificação ao redor do seu markup.

A troca: uma rodada de modo manual **não pode ser reexecutada no servidor**, então um jogo de modo manual **não pode satisfazer um [portão de jogo](/docs/site-keys/games)**. Ele roda só em uma chave sem portão (verificação de proof-of-work, com sua interação como UX), ou só-jogo sem verificação nenhuma. Use-o para uma interação com marca, não para um portão de segurança que você precisa reexecutado.

## Jogo em iframe auto-hospedado: pode proteger

Um [jogo auto-hospedado](/docs/custom-game-development/self-hosted-game) é um jogo de verdade, em sandbox: um bundle JavaScript construído contra o pacote `@caputchin/game-sdk` que roda no iframe do widget, fala com o anfitrião pela ponte do SDK, e reporta um **trace** que o servidor pode reexecutar. Você hospeda o bundle você mesmo e aponta o widget para ele com o atributo `game-src`.

Como a rodada produz um trace reproduzível, um jogo auto-hospedado **pode proteger** uma chave de site, mas só depois de você dar à Caputchin um [artefato de replay](/docs/custom-game-development/replay-and-gating): uma pequena build headless da lógica do seu jogo que o servidor roda para rederivar o veredito. Até que esse artefato seja enviado e passe na sua autoverificação, o jogo personalizado aparece como **Não reproduzível** e não pode proteger.

## O que o painel acrescenta

Um jogo de marketplace traz um manifesto `caputchin.json` que declara seus campos de personalização. Um jogo personalizado não tem manifesto, então **você declara esses campos no painel** em vez disso: você [registra o jogo personalizado](/docs/game-customization/custom-games) por um id que você escolhe, define seu [esquema](/docs/custom-game-development/dashboard-schema) de campos por eixo (idioma, skin, configuração), e cria presets contra ele. A partir daí ele resolve e se aplica exatamente como um jogo de marketplace, nos mesmos níveis de plano.

Então a superfície completa de um jogo personalizado é:

| Peça | Onde | Necessária para |
|---|---|---|
| O jogo em si | Seu código, seu host | Sempre |
| Entrega | Slot `trigger="manual"`, ou iframe `game-src` | Sempre |
| Esquema de campos + presets | Painel (você define o esquema) | Personalizar idioma / skin / config |
| Artefato de replay | Upload no painel | Proteger a verificação (só auto-hospedado) |

## Veja também

- [Modo manual](/docs/custom-game-development/manual-mode): encaixe seu próprio DOM e conduza pass/fail.
- [Jogo auto-hospedado](/docs/custom-game-development/self-hosted-game): construa um jogo em iframe reproduzível com o SDK.
- [Replay e proteção](/docs/custom-game-development/replay-and-gating): envie o artefato que deixa um jogo personalizado proteger.
- [Referência de esquema do painel](/docs/custom-game-development/dashboard-schema): o esquema de campos que você define para um jogo personalizado.
- [Jogos personalizados](/docs/game-customization/custom-games): registrar e hospedar, do lado do cliente.
