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

# Remix

export const VersionRequirements = ({versions = []}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const boundaries = {
    upper: " or lower",
    exact: "",
    lower: " or higher"
  };
  const containerStyle = {
    marginTop: "0.5rem",
    marginBottom: "1.5rem"
  };
  const lineStyle = {
    display: "block",
    margin: "0 0 0.35rem 0",
    fontSize: "0.875rem",
    lineHeight: "1.4"
  };
  const pillBaseStyle = {
    display: "inline-block",
    padding: "0.1em 0.4em",
    borderRadius: "0.25rem",
    border: "1px solid",
    fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
    fontSize: "0.85em",
    fontWeight: 500
  };
  const pillColors = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#e9d5ff",
      color: "#9333ea"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#99f6e4",
      color: "#0d9488"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#bbf7d0",
      color: "#16a34a"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#bfdbfe",
      color: "#2563eb"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fecaca",
      color: "#dc2626"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fed7aa",
      color: "#ea580c"
    }
  };
  const defaultPillColor = {
    background: "#f4f4f5",
    borderColor: "#e4e4e7",
    color: "#52525b"
  };
  const getPillStyle = name => ({
    ...pillBaseStyle,
    ...pillColors[name] || defaultPillColor
  });
  const getBoundText = bound => {
    return boundaries[bound] || boundaries.lower;
  };
  return <div style={containerStyle}>
      {versions.map((v, i) => <p key={`${v.name}-${v.version}-${v.bound || "lower"}-${i}`} style={lineStyle}>
          This feature requires{" "}
          <code style={getPillStyle(v.name)}>{v.name}</code> version {v.version}
          {getBoundText(v.bound)}.
        </p>)}
    </div>;
};

<VersionRequirements
  versions={[
{ name: "AppSignal for Node.js", version: "3.0.18" }
]}
/>

A integração do AppSignal para Node.js com o [Remix](https://remix.run/)

## Instalação

Para habilitar o suporte de instrumentação para o Remix, primeiro você precisa instalar o pacote [OpenTelemetry Remix Instrumentation](https://www.npmjs.com/package/opentelemetry-instrumentation-remix) `^0.5.0`.

Após instalar o pacote OpenTelemetry Remix Instrumentation, você deve habilitar a instrumentação na inicialização do cliente AppSignal usando a opção de configuração [`additionalInstrumentations`](/nodejs/3.x/configuration/options#option-additionalinstrumentations) como mostrado no código abaixo.

<CodeGroup>
  ```javascript Node.js theme={null}
  // appsignal.cjs
  const { Appsignal } = require("@appsignal/nodejs");
  const { RemixInstrumentation } = require("opentelemetry-instrumentation-remix");

  new Appsignal({
    active: true,
    name: "<YOUR APPLICATION NAME>",
    pushApiKey: "<YOUR API KEY>",
    additionalInstrumentations: [new RemixInstrumentation()],
  });
  ```
</CodeGroup>

Este snippet referencia o arquivo `appsignal.cjs` que foi criado [ao configurar o AppSignal](/nodejs/3.x/configuration#minimal-required-configuration).

Você deve definir a variável de ambiente `NODE_OPTIONS` para carregar o arquivo `appsignal.cjs` ao iniciar sua aplicação Remix.

<CodeGroup>
  ```bash Bash theme={null}
  NODE_OPTIONS='--require ./appsignal.cjs' remix dev
  ```
</CodeGroup>

<Tip>
  O Remix é construído em cima do Express para o tratamento de requisições web, e
  isso pode tornar suas ações no AppSignal mais difíceis de ler. Se esse for o seu caso, você pode
  desativar a instrumentação do Express passando a opção `disableInstrumentations`
  na inicialização do cliente AppSignal com o valor:
  `["@opentelemetry/instrumentation-express"]`.
</Tip>

## Recursos

A instrumentação do Remix criará ações de desempenho no AppSignal a partir dos handlers de requisição do Remix. O nome da ação será a rota do handler da requisição.

Os loaders do Remix são instrumentados como spans filhos do span do handler de requisição.

Uma vez configurados, os erros lançados pela sua aplicação Remix serão relatados ao AppSignal.
