Escolha uma stack por vez
Comece pela camada que realmente inicia a aplicação: backend, browser ou ambas.
Escolha sua stack, siga a ordem recomendada e use os arquivos e placeholders indicados para concluir a integração sem adivinhação.
A página prioriza o que mais costuma gerar dúvida: onde colar o código, o que trocar antes do teste e como validar a primeira captura.
Comece pela camada que realmente inicia a aplicação: backend, browser ou ambas.
Se o projeto usar nomes diferentes, localize o arquivo que sobe a aplicação ou concentra o tratamento global de erros.
Cole o trecho sugerido, troque os placeholders e gere um erro de teste para confirmar a integração.
Cada stack mostra a ordem recomendada, os arquivos mais prováveis, os valores que precisam ser trocados e um exemplo simples de release.
Instale o pacote `oopsie/oopsie-laravel`, publique a configuração, preencha o .env e limpe o cache da aplicação.
composer require oopsie/oopsie-laravel
php artisan vendor:publish --tag=oopsie-config
public function report(Throwable $e): void
{
try {
\Oopsie::captureException($e);
} catch (Throwable $ignore) {
// Keep the original Laravel flow if capture fails.
}
parent::report($e);
}
OOPSIE_PROJECT_TOKEN=YOUR_PROJECT_TOKEN
OOPSIE_PROJECT_KEY=YOUR_PROJECT_KEY
OOPSIE_BASE_URL=https://www.oopsie.com.br
OOPSIE_HANDSHAKE_URL=https://www.oopsie.com.br/api/sdk/handshake
OOPSIE_RELEASE_TOKEN=YOUR_RELEASE_TOKEN
OOPSIE_ENV=production
OOPSIE_RELEASE=1.0.0
OOPSIE_DSN=https://www.oopsie.com.br/api/capture
php artisan oopsie:notify-release
No Laravel, este passo liga o fluxo de exceções do app à Oopsie. Sem ele, a SDK pode estar instalada, mas os erros do servidor podem não chegar ao painel.
Para PHP puro, instale `oopsie/oopsie-php` e adapte o init ao bootstrap real, front controller, worker ou script principal. O handshake backend já vai junto no `Oopsie::install()`.
composer require oopsie/oopsie-php
\Oopsie\Sdk\Oopsie::install('YOUR_PROJECT_TOKEN', [
'projectKey' => 'YOUR_PROJECT_KEY',
'baseUrl' => 'https://www.oopsie.com.br',
'handshakeUrl' => 'https://www.oopsie.com.br/api/sdk/handshake',
'release' => getenv('OOPSIE_RELEASE') ?: '1.0.0',
'releaseToken' => 'YOUR_RELEASE_TOKEN',
]);
OOPSIE_RELEASE=1.0.0
OOPSIE_ENV=production
\Oopsie\Sdk\Oopsie::notifyRelease([
'projectKey' => 'YOUR_PROJECT_KEY',
'releaseToken' => 'YOUR_RELEASE_TOKEN',
'baseUrl' => 'https://www.oopsie.com.br',
'version' => getenv('OOPSIE_RELEASE') ?: '1.0.0',
'environment' => getenv('APP_ENV') ?: 'production',
'commitSha' => getenv('OOPSIE_COMMIT_SHA') ?: null,
]);
Para PHP puro ou legado, adicione o snippet da SDK Browser no layout principal, template compartilhado ou header global da aplicação. Nessa stack você não precisa de npm nem import.
Para Node.js, instale `@oopsie-app/node`, inicialize a SDK no bootstrap do servidor e conecte o handler de erro do framework. O handshake inicial já é enviado pela SDK.
npm install @oopsie-app/node
const { createOopsieNode } = require('@oopsie-app/node');
const oopsie = createOopsieNode({
apiToken: 'YOUR_PROJECT_TOKEN',
projectKey: 'YOUR_PROJECT_KEY',
captureUrl: 'https://www.oopsie.com.br/api/capture',
handshakeUrl: 'https://www.oopsie.com.br/api/sdk/handshake',
releaseUrl: 'https://www.oopsie.com.br/api/releases',
releaseToken: 'YOUR_RELEASE_TOKEN',
environment: process.env.NODE_ENV || 'production',
release: process.env.OOPSIE_RELEASE || '1.0.0',
framework: 'express',
});
oopsie.handshake().catch(() => {});
app.use(oopsie.expressRequestHandler());
app.use(oopsie.expressErrorHandler());
OOPSIE_PROJECT_TOKEN=YOUR_PROJECT_TOKEN
OOPSIE_PROJECT_KEY=YOUR_PROJECT_KEY
OOPSIE_RELEASE_TOKEN=YOUR_RELEASE_TOKEN
NODE_ENV=production
OOPSIE_RELEASE=1.0.0
await oopsie.notifyRelease({
version: process.env.OOPSIE_RELEASE || '1.0.0',
environment: process.env.NODE_ENV || 'production',
commitSha: process.env.OOPSIE_COMMIT_SHA,
description: 'Deploy production',
});
Se o projeto também renderiza interface web, complemente depois com o SDK browser para fechar o contexto frontend + backend.
Instale o pacote oficial `@oopsie-app/browser` e inicialize a SDK no entrypoint principal do frontend.
npm install @oopsie-app/browser
import { init } from '@oopsie-app/browser';
const oopsieConfig = {
projectKey: 'YOUR_PROJECT_KEY',
endpoint: 'https://www.oopsie.com.br/api/capture',
handshakeEndpoint: 'https://www.oopsie.com.br/api/sdk/handshake',
replayEndpoint: 'https://www.oopsie.com.br/api/replay',
env: 'production',
release: window.__APP_VERSION__ || '1.0.0',
sessionReplaySampleRate: 0.1,
sessionReplayOnErrorSampleRate: 1.0,
};
init(oopsieConfig);
window.__APP_VERSION__ = '1.0.0';
Use este snippet apenas se o projeto não usar npm, bundler ou package manager.
Instale `@oopsie-app/browser` e `@oopsie-app/react`, depois envolva a aplicação com o `OopsieProvider`.
npm install @oopsie-app/browser @oopsie-app/react
import { OopsieProvider, OopsieErrorBoundary } from '@oopsie-app/react';
const oopsieConfig = {
projectKey: 'YOUR_PROJECT_KEY',
endpoint: 'https://www.oopsie.com.br/api/capture',
handshakeEndpoint: 'https://www.oopsie.com.br/api/sdk/handshake',
replayEndpoint: 'https://www.oopsie.com.br/api/replay',
env: 'production',
release: window.__APP_VERSION__ || '1.0.0',
sessionReplaySampleRate: 0.1,
sessionReplayOnErrorSampleRate: 1.0,
};
root.render(
<OopsieProvider config={oopsieConfig}>
<OopsieErrorBoundary fallback={<div>Something went wrong.</div>}>
<App />
</OopsieErrorBoundary>
</OopsieProvider>
);
window.__APP_VERSION__ = '1.0.0';
Seu fluxo principal nesta stack é o browser. Use a SDK backend apenas se existir API, BFF ou servidor PHP no mesmo projeto.
Instale `@oopsie-app/browser` e `@oopsie-app/vue`, depois registre o plugin no bootstrap principal da aplicação.
npm install @oopsie-app/browser @oopsie-app/vue
import { createOopsieVue } from '@oopsie-app/vue';
const oopsieConfig = {
projectKey: 'YOUR_PROJECT_KEY',
endpoint: 'https://www.oopsie.com.br/api/capture',
handshakeEndpoint: 'https://www.oopsie.com.br/api/sdk/handshake',
replayEndpoint: 'https://www.oopsie.com.br/api/replay',
env: 'production',
release: window.__APP_VERSION__ || '1.0.0',
sessionReplaySampleRate: 0.1,
sessionReplayOnErrorSampleRate: 1.0,
};
app.use(createOopsieVue({
config: oopsieConfig,
}));
window.__APP_VERSION__ = '1.0.0';
Seu fluxo principal nesta stack é o browser. Use a SDK backend apenas se existir API, BFF ou servidor PHP no mesmo projeto.
Para WordPress, trate este pacote como base PHP e encaixe a inicialização no plugin, tema ou hook central do projeto.
composer require oopsie/oopsie-php
add_action('init', function () {
\Oopsie\Sdk\Oopsie::install('YOUR_PROJECT_TOKEN', [
'projectKey' => 'YOUR_PROJECT_KEY',
'baseUrl' => 'https://www.oopsie.com.br',
'handshakeUrl' => 'https://www.oopsie.com.br/api/sdk/handshake',
'release' => defined('OOPSIE_RELEASE') ? OOPSIE_RELEASE : '1.0.0',
'releaseToken' => 'YOUR_RELEASE_TOKEN',
]);
});
OOPSIE_RELEASE=1.0.0
OOPSIE_ENV=production
\Oopsie\Sdk\Oopsie::notifyRelease([
'projectKey' => 'YOUR_PROJECT_KEY',
'releaseToken' => 'YOUR_RELEASE_TOKEN',
'baseUrl' => 'https://www.oopsie.com.br',
'version' => defined('OOPSIE_RELEASE') ? OOPSIE_RELEASE : '1.0.0',
'environment' => wp_get_environment_type(),
]);
Adicione o snippet da SDK Browser no tema, header global ou layout compartilhado do WordPress. Não use import aqui a menos que exista um frontend separado com bundler.