> ## Documentation Index
> Fetch the complete documentation index at: https://docs.replit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuração do Replit App

> Aprenda como configurar seu Replit App usando os arquivos .replit e replit.nix.

Os Replit Apps são configurados com dois arquivos: `.replit` e `replit.nix`. Eles afetam como seu Replit App se comporta, desde a execução do código até as ferramentas de desenvolvimento e linguagens.

Esses arquivos de configuração ficam ocultos por padrão. Exiba-os no seu Replit App selecionando "Mostrar arquivos ocultos" no menu da árvore de arquivos.

<Frame>
  <img src="https://mintcdn.com/replit/rBzGsKp9NcWJ7sib/images/getting-started/show-hidden-files.png?fit=max&auto=format&n=rBzGsKp9NcWJ7sib&q=85&s=847e381d949d2432e58079ec166f1c08" alt="imagem" width="530" height="488" data-path="images/getting-started/show-hidden-files.png" />
</Frame>

## Arquivo `replit.nix`

O Replit usa `Nix` para gerenciar pacotes e ambientes. O arquivo `replit.nix` é usado para:

**Especificar dependências do sistema:** Defina exatamente quais pacotes de software seu Replit App requer, gerenciados pelo Nix, um gerenciador de pacotes.

**Criar ambientes reproduzíveis:** Garanta que seu ambiente de desenvolvimento seja consistente e reproduzível, ideal para projetos colaborativos e testes em múltiplos sistemas.

Você pode gerenciar pacotes Nix visualmente por meio da ferramenta `Dependencies`. Saiba mais no guia de [Dependências do Sistema](/core-concepts/project-editor/app-setup/dependency-management#system-dependencies).

Para configurar pacotes com o arquivo `replit.nix`, você pode listar [pacotes Nix](https://search.nixos.org/packages) no array `deps`, prefixados com `pkgs.`. Quaisquer alterações serão sincronizadas após o recarregamento do seu Shell.

```nix theme={null}
{ pkgs }: {
  deps = [
    pkgs.nodejs-19_x
    pkgs.nodePackages.typescript-language-server
    pkgs.yarn
    pkgs.replitPackages.jest
  ];
}
```

## Arquivo `.replit`

O arquivo `.replit` controla o comportamento do seu Replit App. Ele usa o [formato de configuração](https://toml.io/en/) `toml`. Aqui estão alguns dos principais aspectos que podem ser configurados:

**Comando de execução:** Especifique o comando que é executado quando o botão Run é selecionado. Cada template tem um comando de execução padrão para permitir a execução do código imediatamente. Para apps mais personalizados e complexos, use os [Workflows](/core-concepts/project-editor/app-setup/workflows).

**Language Server Protocol (LSP)**: Fornece recursos como autocompletar, navegação de código, realce de código e linting e erros em tempo real.

**Variáveis de ambiente:** Defina e gerencie variáveis de ambiente essenciais para o funcionamento correto das suas aplicações.

**Dependências e pacotes:** Gerencie instalações e configurações de pacotes diretamente pelo arquivo `.replit`, garantindo que seu Replit App tenha todas as ferramentas necessárias disponíveis na inicialização. Você pode gerenciar dependências visualmente por meio da ferramenta `Dependencies`. Saiba mais no guia de [Módulos do Sistema](/core-concepts/project-editor/app-setup/dependency-management#advanced-configuration).

Para aplicações Python, o arquivo `.replit` padrão é:

```toml theme={null}
entrypoint = "main.py"
modules = ["python-3.10:v18-20230807-322e88b"]

[nix]
channel = "stable-23_05"

[unitTest]
language = "python3"

[gitHubImport]
requiredFiles = [".replit", "replit.nix"]

[deployment]
run = ["python3", "main.py"]
deploymentTarget = "cloudrun"
```

A tabela a seguir apresenta uma visão de cada configuração dentro do arquivo `.replit`, explicando o que cada configuração faz e seu impacto no ambiente do Replit App.

| **Chave de configuração**                       | **Valor/Exemplo**                      | **Descrição**                                                                                                                                                                                                                                              |
| ----------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <a name="entrypoint" />`entrypoint`             | `main.py`                              | Especifica o arquivo principal a ser executado e exibido por padrão quando o editor é aberto. Você pode renomear o arquivo com base na sua aplicação.                                                                                                      |
| <a name="modules" />`modules`                   | `["python-3.10:v18-20230807-322e88b"]` | Define versões específicas de linguagens de programação ou outras dependências principais suportadas pelo Replit.                                                                                                                                          |
| <a name="nix" />`[nix]`                         |                                        | Especifica configurações para uso do Nix, um gerenciador de pacotes, para gerenciar dependências do sistema. Consulte o documento de [Gerenciamento de Dependências](/core-concepts/project-editor/app-setup/dependency-management) para mais informações. |
| <a name="channel" />`channel`                   | `stable-23_05`                         | Indica o canal Nix a ser usado, o que afeta as versões das dependências do sistema disponíveis.                                                                                                                                                            |
| <a name="packages" />`packages`                 | `["cowsay", "htop"]`                   | Especifica alguns pacotes Nix para instalar. Para um controle mais refinado, você também pode usar o `replit.nix`.                                                                                                                                         |
| <a name="unitTest" />`[unitTest]`               |                                        | Define configurações relacionadas a testes unitários dentro do Replit App.                                                                                                                                                                                 |
| <a name="language" />`language`                 | `python3`                              | Especifica a linguagem usada para testes unitários, indicando que Python 3 é usado para escrever os testes.                                                                                                                                                |
| <a name="gitHubImport" />`[gitHubImport]`       |                                        | Configurações que afetam como os projetos são importados do GitHub, especificamente quais arquivos devem estar presentes.                                                                                                                                  |
| <a name="requiredFiles" />`requiredFiles`       | `[".replit", "replit.nix"]`            | Lista os arquivos que devem estar presentes ao importar o projeto para garantir que ele funcione corretamente.                                                                                                                                             |
| <a name="deployment" />`[deployment]`           |                                        | Contém configurações para implantar a aplicação do Replit App em um ambiente ao vivo.                                                                                                                                                                      |
| <a name="run" />`run`                           | `["python3", "main.py"]`               | Comando executado para iniciar a aplicação durante a implantação.                                                                                                                                                                                          |
| <a name="deploymentTarget" />`deploymentTarget` | `cloudrun`                             | Especifica a plataforma de destino da implantação para hospedar a aplicação.                                                                                                                                                                               |

Agora que você tem uma ideia das configurações padrão do arquivo `.replit`, use as próximas seções para entender como configurar definições básicas e avançadas para o seu Replit App.

## Configurando definições básicas

### Entrypoint

Este é o arquivo principal do seu projeto. Se você não definir uma propriedade `run`, o `entrypoint` é o arquivo executado pelo runtime.

```toml theme={null}
entrypoint = "<file-name>.py"
```

### Comando `Run`

A propriedade `run` no arquivo `.replit` é um recurso fundamental que determina o comando inicial ou a série de comandos executados quando o botão `Run` é selecionado em um ambiente Replit. O comando `Run` pode ser especificado como uma string representando o comando a executar, ou como um array de strings representando o comando e seus argumentos individuais.

Algumas formas comuns de configurar o comando `Run`:

* **Comando único:**
  Este exemplo mostra como passar um único comando para executar diretamente no Replit App. Com isso no seu arquivo `.replit`, pressionar o botão `Run` exibirá uma saudação no painel `Console`:
  **Exemplo:** `run = "echo 'Hello, Replit!'"`

* **Argumentos explícitos:**
  Em algumas situações, pode ser útil ser mais explícito, evitando a necessidade de interpretar aspas ou regras de interpolação do Shell. Você pode reescrever o exemplo acima separando os argumentos.
  Note que você não precisa mais usar `'` e `"` ao mesmo tempo, pois está passando explicitamente a saudação como o primeiro e único argumento para `echo`:
  **Exemplo:** `run = ["echo", "Hello, Replit!"]`

* **Múltiplos comandos:**
  Este exemplo mostra como executar múltiplos processos simultaneamente, como um frontend e um backend. Isso pode ser útil ao desenvolver um backend em Python e um frontend em TypeScript, onde cada servidor se conecta a uma porta diferente:
  **Exemplo:** `run = "python -m app & npm run start & wait"`

#### Gerenciamento de processos

Embora múltiplos comandos possam ser executados simultaneamente com `&`, você pode querer uma melhor experiência para distinguir os logs entre os serviços. Você pode [adicionar dependências do sistema](/core-concepts/project-editor/app-setup/dependency-management#system-dependencies) como [`process-compose`](https://github.com/F1bonacc1/process-compose) para orquestrar melhor múltiplos processos.

#### Fase de `Build`

Para algumas linguagens ou runtimes, há uma fase de compilação separada antes que o código possa ser executado com `run`. Isso se aplica tanto a linguagens compiladas como TypeScript, Golang ou Java, quanto para oferecer um parâmetro que você pode usar para redefinir seu ambiente, dados ou configuração antes que o próximo `run` seja invocado.

* **Compilação:**
  Em um repositório TypeScript, pode ser necessário executar `tsc` antes de executar seu código.
  **Exemplo:**

```toml theme={null}
build = "tsc app.ts"
run = "node app.js"
```

#### Incluindo variáveis de ambiente

Para fornecer variáveis de ambiente ao seu serviço antes da execução, você pode expandir a propriedade `run` em uma [tabela](https://toml.io/en/v1.0.0#table).

Esta é uma mudança mais elaborada e provavelmente requer mover onde a propriedade `run = "..."` está localizada dentro do seu arquivo `.replit`.

O diff a seguir mostra como fornecer o comando por meio dos `args` de `[run]`, além da variável `NAME` fornecida em `[run.env]`:

```diff theme={null}
-run = ["bash", "-c", "echo \"Hello, $NAME!\""]

 modules = ["nodejs-20"]

 hidden = [".pythonlibs"]

+# We need to move our new [run] down past all the
+# top-level properties that do not start with a `[`!
+[run]
+args = ["bash", "-c", "echo \"Hello, $NAME!\""]
+
+[run.env]
+NAME="Replit"

 [nix]
 channel = "stable-23_11"
```

#### Interatividade

Programas interativos também podem ser iniciados pelo botão `Run`, oferecendo uma forma de distinguir seu ambiente de desenvolvimento do terminal onde o programa está sendo executado.
Considere o seguinte script de contagem:

**Exemplo**

```toml theme={null}
[run]
args = ["bash", "-c", """
count=0
while read -p "$PROMPT" -r next && [ -n "$next" ]; do
    count=$((count+next))
done
echo "The numbers you entered sum to $count!"
"""]

[run.env]
PROMPT = "Next number ([Enter] to end): "
```

## Opções de configuração avançada

Explore as opções de configuração detalhadas disponíveis para o seu Replit App. Você pode personalizar seu ambiente de desenvolvimento, gerenciar comandos de execução, integrar serviços de linguagem e lidar com dependências.

| **Configuração** | **Chave**                           | **Valor/Exemplo**                           | **Descrição**                                                                            |
| ---------------- | ----------------------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------- |
| onBoot           | <a name="onBoot" />`onBoot`         | `onBoot = "npm install"`                    | Comando que é executado quando o Replit App inicia.                                      |
| compile          | <a name="compile" />`compile`       | (Sem exemplo padrão)                        | Comando que é executado antes do comando `run`, usado em linguagens compiladas como C++. |
| language         | <a name="language" />`language`     | `language = "javascript"`                   | Especifica a linguagem durante uma importação do GitHub ou ao criar um Replit App.       |
| entrypoint       | <a name="entrypoint" />`entrypoint` | `entrypoint = "index.js"`                   | Arquivo principal a executar e exibir ao abrir o editor.                                 |
| hidden           | <a name="hidden" />`hidden`         | `hidden = [".config", "package-lock.json"]` | Arquivos ou pastas a ocultar por padrão na árvore de arquivos lateral.                   |
| audio            | <a name="audio" />`audio`           | `audio = true`                              | Ativa o Áudio em todo o sistema quando definido como `true`.                             |

### Notas sobre o Áudio em todo o sistema

Ao definir `audio = true` no seu arquivo `.replit`, pode ser necessário executar `kill 1` em um Shell para forçar a nova configuração a ter efeito.

Ao executar uma aplicação gráfica, você verá um par de fones de ouvido com uma caixa de seleção no canto inferior direito do painel `Output`.
Devido a restrições do navegador, isso precisará ser ativado toda vez que você atualizar a página.

```toml theme={null}
# Ensure this is at the top of your `.replit` file, outside of any `[`-bracketed section
audio = true
```

## Configuração do gerenciador de pacotes

| **Configuração**     | **Chave**                                         | **Valor/Exemplo**                             | **Descrição**                                                                        |
| -------------------- | ------------------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------ |
| packager             | <a name="language" />`language`                   | `packager.language = "python3"`               | Linguagem usada para operações de pacotes.                                           |
| recursos do packager | <a name="guessImports" />`guessImports`           | `packager.features.guessImports = true`       | Adivinha automaticamente os pacotes a instalar antes de executar o Replit App.       |
| recursos do packager | <a name="packageSearch" />`packageSearch`         | `packager.features.packageSearch = true`      | Ativa o suporte ao gerenciador de pacotes quando definido como `true`.               |
| recursos do packager | <a name="enabledForHosting" />`enabledForHosting` | `packager.features.enabledForHosting = false` | Define se a hospedagem do Replit App requer a execução de uma instalação de pacotes. |
| packager             | <a name="afterInstall" />`afterInstall`           | `afterInstall = "echo 'package installed'"`   | Comando executado após a instalação de um novo pacote via gerenciador de pacotes.    |
| packager             | <a name="ignoredPaths" />`ignoredPaths`           | `ignoredPaths = [".git"]`                     | Caminhos a ignorar ao tentar adivinhar pacotes.                                      |
| packager             | <a name="ignoredPackages" />`ignoredPackages`     | `ignoredPackages = ["twitter", "discord"]`    | Módulos que nunca devem tentar adivinhar um pacote durante a instalação.             |

### Exemplo de configuração `.replit` para o gerenciador de pacotes

```toml theme={null}
# Define the language for the Replit App
packager.language = "python3"

# Enable features for automatic package management
[packager.features]
guessImports = true
packageSearch = true
enabledForHosting = false

# Command to run after each package installation
packager.afterInstall = "echo 'Package installed successfully'"

# Define paths and packages that should be ignored by the package manager
packager.ignoredPaths = [".git", "node_modules"]
packager.ignoredPackages = ["twitter", "discord"]

# Additional deployment settings
[deployment]
run = ["python3", "app.py"]
```

## Configuração de implantação

| **Configuração** | **Chave**                             | **Valor/Exemplo**                    | **Descrição**                                                               |
| ---------------- | ------------------------------------- | ------------------------------------ | --------------------------------------------------------------------------- |
| deployment       | <a name="run" />`run`                 | `deployment.run = "npm start"`       | Comando executado quando um container de Deployment é iniciado.             |
| deployment       | <a name="build" />`build`             | `deployment.build = "npm run build"` | Comando executado antes de executar um Deployment.                          |
| deployment       | <a name="ignorePorts" />`ignorePorts` | `deployment.ignorePorts = true`      | Se `true`, o sucesso da implantação não requer verificação de porta aberta. |

### Exemplo de configuração `.replit` para implantação

```toml theme={null}

# Specifies the main entry point for the project
entrypoint = "app.js"

# Configuration settings for deploying the application
[deployment]
run = "npm start"
build = "npm run build"
ignorePorts = true
```

<Note>
  **A configuração do interpretador** foi descontinuada e não está mais disponível no Replit. Em vez disso, recomenda-se usar os comandos `Run` para configurar como scripts e aplicações são executados no ambiente do seu Replit App.
</Note>

## Configuração de portas

| **Configuração** | **Chave**                               | **Valor/Exemplo**   | **Descrição**                                          |
| ---------------- | --------------------------------------- | ------------------- | ------------------------------------------------------ |
| ports            | <a name="localPort" />`localPort`       | `localPort = 3000`  | Porta que o Replit vincula a uma porta externa.        |
| ports            | <a name="externalPort" />`externalPort` | `externalPort = 80` | Porta publicamente acessível vinculada ao `localPort`. |

### Exemplo de arquivo de configuração `.replit` para gerenciamento de portas

```toml theme={null}
# Networking configuration to expose your application on specific ports
[[ports]]
localPort = 3000
externalPort = 80
```

## Acessando metadados do ambiente do Replit App

### Node.js

Para acessar todas as variáveis de ambiente:

`console.log(process.env);`

Para acessar uma única variável (REPL\_SLUG):

`console.log(process.env.REPL_SLUG);`

### Python

Para acessar todas as variáveis de ambiente:

```python theme={null}
import os
print(os.environ)
```

Para acessar uma única variável (REPL\_SLUG):

```python theme={null}
import os
variable = os.environ.get('REPL_SLUG')
print(variable)
```

### Rust

Para acessar todas as variáveis de ambiente:

```rust theme={null}
use std::env;
fn main() {
    for (key, value) in env::vars() {
        println!("{}: {}", key, value);
    }
}
```

Para acessar uma única variável (REPL\_SLUG):

```rust theme={null}
use std::env;
fn main() {
    let variable = env::var("REPL_SLUG").unwrap();
    println!("{}", variable);
}
```

## Variáveis de ambiente

A seguir estão as variáveis de ambiente acessíveis dentro do seu Replit App:

| chave                                             | descrição                                                                                                                                                                                      |
| ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <a name="REPL_OWNER" />`REPL_OWNER`               | O nome de usuário do proprietário do Replit App. Se o seu Replit App for baseado em texto e não tiver um servidor web, `REPL_OWNER` refletirá o valor do usuário atual que acessa o Replit App |
| <a name="REPL_ID" />`REPL_ID`                     | A string UUID única do seu Replit App                                                                                                                                                          |
| <a name="HOME" />`HOME`                           | O caminho home do seu Replit App                                                                                                                                                               |
| <a name="system" />`system`                       | O sistema operacional em execução no seu Replit App                                                                                                                                            |
| <a name="LANG" />`LANG`                           | Define a linguagem e a codificação de caracteres para o seu Replit App, afetando como o texto é processado e exibido                                                                           |
| <a name="REPL_IMAGE" />`REPL_IMAGE`               | A imagem Docker que corresponde ao seu Replit App                                                                                                                                              |
| <a name="REPL_LANGUAGE" />`REPL_LANGUAGE`         | A linguagem de programação configurada para o seu Replit App, usada para determinar o ambiente de runtime e as ferramentas                                                                     |
| <a name="REPL_PUBKEYS" />`REPL_PUBKEYS`           | Um objeto JSON em formato de string contendo diferentes chaves de API públicas                                                                                                                 |
| <a name="REPL_SLUG" />`REPL_SLUG`                 | Uma versão simplificada e legível por máquina do nome do Replit App, adequada para uso em URLs e nomes de arquivos                                                                             |
| <a name="PRYBAR_FILE" />`PRYBAR_FILE`             | O arquivo principal/entrypoint do seu Replit App                                                                                                                                               |
| <a name="REPLIT_DEV_DOMAIN" />`REPLIT_DEV_DOMAIN` | Fornece a URL `replit.dev` para o seu Replit App no Editor de Projetos. Observe que esta variável de ambiente não está disponível em Deployments                                               |
