-
-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathindex.html
More file actions
225 lines (214 loc) · 77.3 KB
/
Copy pathindex.html
File metadata and controls
225 lines (214 loc) · 77.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
<!DOCTYPE html><html lang="en" dir="ltr" data-theme="dark" data-has-toc data-has-sidebar class="astro-pdyrgfef"> <head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Installation | Sentry CLI</title><link rel="canonical" href="https://cli.sentry.dev/getting-started/"/><link rel="sitemap" href="/sitemap-index.xml"/><link rel="icon" href="/favicon.png" type="image/png" sizes="256x256"/><script>
(function() {
let overscrollEl;
let pullDistance = 0;
let touchStartY = 0;
let isAtBottom = false;
function isLandingPage() {
const path = window.location.pathname;
// Works with both / (prod) and /pr-preview/pr-XX (preview)
return path === '/' ||
/^\/\_preview\/pr-(\d+|main)\/?$/.test(path);
}
function checkAtBottom() {
const scrollTop = window.scrollY || document.documentElement.scrollTop;
const scrollHeight = document.documentElement.scrollHeight;
const clientHeight = document.documentElement.clientHeight;
return scrollTop + clientHeight >= scrollHeight - 5;
}
function createOverscrollMessage() {
if (!isLandingPage()) return;
var command = 'curl https://cli.sentry.dev/install -fsS | bash';
overscrollEl = document.createElement('div');
overscrollEl.className = 'overscroll-message';
overscrollEl.innerHTML = '<span>You made it to the end. Might as well give it a try → <code class="overscroll-copy-cmd" title="Click to copy">' + command + '</code></span>';
document.body.appendChild(overscrollEl);
var codeEl = overscrollEl.querySelector('.overscroll-copy-cmd');
codeEl.addEventListener('click', function() {
if (!navigator.clipboard) return;
navigator.clipboard.writeText(command).then(function() {
codeEl.textContent = 'copied!';
setTimeout(function() { codeEl.textContent = command; }, 1500);
}).catch(function() {});
});
}
function updateOverscroll(distance) {
if (!overscrollEl) return;
const clampedDistance = Math.min(Math.max(distance, 0), 50);
const opacity = Math.min(clampedDistance / 15, 1);
const translateY = Math.min(clampedDistance * 2.5, 120);
overscrollEl.style.opacity = opacity;
overscrollEl.style.transform = 'translateX(-50%) translateY(-' + translateY + 'px)';
}
function handleTouchStart(e) {
if (!isLandingPage()) return;
touchStartY = e.touches[0].clientY;
isAtBottom = checkAtBottom();
}
function handleTouchMove(e) {
if (!isLandingPage() || !isAtBottom) return;
const touchY = e.touches[0].clientY;
pullDistance = touchStartY - touchY;
if (pullDistance > 0 && checkAtBottom()) {
updateOverscroll(pullDistance);
}
}
function handleTouchEnd() {
pullDistance = 0;
updateOverscroll(0);
}
function handleWheel(e) {
if (!isLandingPage()) return;
if (checkAtBottom() && e.deltaY > 0) {
pullDistance = Math.min(pullDistance + e.deltaY * 0.8, 50);
updateOverscroll(pullDistance);
clearTimeout(window.overscrollTimeout);
window.overscrollTimeout = setTimeout(function() {
pullDistance = 0;
updateOverscroll(0);
}, 5000);
} else if (e.deltaY < 0) {
clearTimeout(window.overscrollTimeout);
pullDistance = 0;
updateOverscroll(0);
}
}
document.addEventListener('DOMContentLoaded', function() {
createOverscrollMessage();
document.addEventListener('touchstart', handleTouchStart, { passive: true });
document.addEventListener('touchmove', handleTouchMove, { passive: true });
document.addEventListener('touchend', handleTouchEnd, { passive: true });
document.addEventListener('wheel', handleWheel, { passive: true });
});
})();
</script><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="true"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&display=swap"/><script defer data-domain="cli.sentry.dev" src="https://plausible.io/js/script.js"></script><style>html{background:#0a0a0f}</style><link rel="shortcut icon" href="/favicon.svg" type="image/svg+xml"/><meta name="generator" content="Astro v6.4.6"/><meta name="generator" content="Starlight v0.39.3"/><meta property="og:title" content="Installation"/><meta property="og:type" content="article"/><meta property="og:url" content="https://cli.sentry.dev/getting-started/"/><meta property="og:locale" content="en"/><meta property="og:description" content="How to install and set up the Sentry CLI"/><meta property="og:site_name" content="Sentry CLI"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="How to install and set up the Sentry CLI"/><meta property="og:image" content="https://cli.sentry.dev/og-image.png"/><meta name="twitter:image" content="https://cli.sentry.dev/og-image-twitter.png"/><meta name="color-scheme" content="dark"/><script>
window.StarlightThemeProvider = (() => {
const storedTheme =
typeof localStorage !== 'undefined' && localStorage.getItem('starlight-theme');
const theme =
storedTheme ||
(window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark');
document.documentElement.dataset.theme = theme === 'light' ? 'light' : 'dark';
return {
updatePickers(theme = storedTheme || 'auto') {
document.querySelectorAll('starlight-theme-select').forEach((picker) => {
const select = picker.querySelector('select');
if (select) select.value = theme;
/** @type {HTMLTemplateElement | null} */
const tmpl = document.querySelector(`#theme-icons`);
const newIcon = tmpl && tmpl.content.querySelector('.' + theme);
if (newIcon) {
const oldIcon = picker.querySelector('svg.label-icon');
if (oldIcon) {
oldIcon.replaceChildren(...newIcon.cloneNode(true).childNodes);
}
}
});
},
};
})();
</script><template id="theme-icons"><svg aria-hidden="true" class="light astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg><svg aria-hidden="true" class="dark astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg><svg aria-hidden="true" class="auto astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg></template><link rel="stylesheet" href="/_astro/print.DNXP8c50.css" media="print"><link rel="stylesheet" href="/_astro/common.CNoBe8IV.css">
<link rel="stylesheet" href="/_astro/_astro_assets.lhRLVtS2.css"><script type="module" src="/_astro/page.DvD-49NE.js"></script><style>.pm-code:where(.astro-ehimbizw){border-radius:12px;overflow:hidden;margin:1rem 0;background:#ffffff0a;padding:.5rem}.pm-header:where(.astro-ehimbizw){display:flex;align-items:center;padding:0;margin:0 0 .5rem!important}.pm-tabs:where(.astro-ehimbizw){display:inline-flex;flex:0 1 auto;align-items:center;gap:.15rem;max-width:100%;min-width:0;overflow-x:auto;border-radius:8px;background:#ffffff0b;padding:.18rem}.pm-tab:where(.astro-ehimbizw){display:flex;align-items:center;justify-content:center;flex:0 0 auto;min-height:1.9rem;margin:0!important;padding:.34rem .72rem;font-size:.82rem;font-weight:500;line-height:1;color:var(--ve-text-tertiary, rgba(255, 255, 255, .4));background:none;border:none;border-radius:6px;box-shadow:none;cursor:pointer;transition:background .12s ease,color .12s ease;font-family:inherit;white-space:nowrap}.pm-tab:where(.astro-ehimbizw):hover{background:#ffffff0e;color:var(--ve-text-secondary, rgba(255, 255, 255, .7))}.pm-tab:where(.astro-ehimbizw).active{background:var(--ve-accent-soft, rgba(139, 92, 246, .2));color:var(--ve-text, #fafafa);font-weight:650}.pm-copy:where(.astro-ehimbizw){position:relative;display:flex;align-items:center;justify-content:center;flex:0 0 auto;width:2rem;height:2rem;margin:0!important;background:none;border:none;border-radius:6px;color:#fff6;cursor:pointer;padding:0;transition:color .15s ease}.pm-copy:where(.astro-ehimbizw):hover{color:#fffc}.pm-copy:where(.astro-ehimbizw):focus-visible{color:#fffc;outline:2px solid rgb(var(--sl-color-accent-rgb) / .5);outline-offset:2px}.pm-copied:where(.astro-ehimbizw){position:absolute;right:calc(100% + .5rem);font-size:.75rem;color:#22c55e;opacity:0;transform:translateY(.25rem);transition:opacity .2s ease-in-out,transform .2s ease-in-out;white-space:nowrap}.pm-copy:where(.astro-ehimbizw).copied .pm-copied:where(.astro-ehimbizw){opacity:1;transform:translateY(0)}.pm-content:where(.astro-ehimbizw){display:flex;align-items:center;gap:.75rem;min-width:0;margin:0!important;padding:.75rem 1rem;background:var(--ve-code-bg, #141419);border-radius:8px}.pm-pre:where(.astro-ehimbizw){flex:1 1 auto;min-width:0;overflow-x:auto;margin:0!important;padding:0!important;background:transparent!important;border:none!important;border-radius:0!important}.pm-pre:where(.astro-ehimbizw) code:where(.astro-ehimbizw){border:none!important;background:transparent!important;border-radius:0!important;display:block;padding:0!important;white-space:pre}.pm-pre:where(.astro-ehimbizw){margin:0!important;padding:0!important;background:transparent!important;border:none!important}.pm-pre:where(.astro-ehimbizw)[hidden]{display:none}.pm-pre:where(.astro-ehimbizw) code:where(.astro-ehimbizw){color:#ffffffd9;font-family:var(--sl-font-mono);font-size:.875rem;line-height:1.7}
</style></head> <body class="astro-pdyrgfef"> <a href="#_top" class="astro-omdumggt">Skip to content</a> <div class="page sl-flex astro-ylkcvuol"> <header class="header astro-ylkcvuol"><div class="header sl-flex astro-3ef6ksr2"> <div class="sl-flex header-left astro-3ef6ksr2"> <a href="/" class="site-title sl-flex astro-26v5pzbq"> <img class="astro-26v5pzbq" alt src="/_astro/logo.DPuxaczD.svg" width="1135" height="195"> <span class="sr-only astro-26v5pzbq" translate="no"> Sentry CLI </span> </a> </div> <div class="sl-flex header-right astro-3ef6ksr2"> <site-search class="astro-3ef6ksr2 astro-7m3t7hmb" data-translations="{"placeholder":"Search"}"> <button data-open-modal disabled aria-label="Search" aria-keyshortcuts="Control+K" class="astro-7m3t7hmb"> <svg aria-hidden="true" class="astro-7m3t7hmb astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.71 20.29 18 16.61A9 9 0 1 0 16.61 18l3.68 3.68a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.39ZM11 18a7 7 0 1 1 0-14 7 7 0 0 1 0 14Z"/></svg> <span class="sl-hidden md:sl-block astro-7m3t7hmb" aria-hidden="true">Search</span> <kbd class="sl-hidden md:sl-flex astro-7m3t7hmb" style="display: none;"> <kbd class="astro-7m3t7hmb">Ctrl</kbd><kbd class="astro-7m3t7hmb">K</kbd> </kbd> </button> <dialog style="padding:0" aria-label="Search" class="astro-7m3t7hmb"> <div class="dialog-frame sl-flex astro-7m3t7hmb"> <button data-close-modal class="sl-flex md:sl-hidden astro-7m3t7hmb"> Cancel </button> <div class="search-container astro-7m3t7hmb"> <div id="starlight__search" class="astro-7m3t7hmb"></div> </div> </div> </dialog> </site-search> <script>
(() => {
const openBtn = document.querySelector('button[data-open-modal]');
const shortcut = openBtn?.querySelector('kbd');
if (!openBtn || !(shortcut instanceof HTMLElement)) return;
const platformKey = shortcut.querySelector('kbd');
if (platformKey && /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)) {
platformKey.textContent = '⌘';
openBtn.setAttribute('aria-keyshortcuts', 'Meta+K');
}
shortcut.style.display = '';
})();
</script> <script type="module" src="/_astro/Search.astro_astro_type_script_index_0_lang.lq3t8uE2.js"></script> <span class="header-nav-link header-nav-active astro-3ef6ksr2">Docs</span> <a href="https://github.com/getsentry/cli" rel="me" class="sl-flex astro-ooqq2ph4"><span class="sr-only astro-ooqq2ph4">GitHub</span><svg aria-hidden="true" class="astro-ooqq2ph4 astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z"/></svg></a> </div> </div></header> <nav class="sidebar print:hidden astro-ylkcvuol" aria-label="Main"> <starlight-menu-button class="print:hidden astro-wyhhqgo6"> <button aria-expanded="false" aria-label="Menu" aria-controls="starlight__sidebar" class="sl-flex md:sl-hidden astro-wyhhqgo6"> <svg aria-hidden="true" class="open-menu astro-wyhhqgo6 astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M3 8h18a1 1 0 1 0 0-2H3a1 1 0 0 0 0 2Zm18 8H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Zm0-5H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Z"/></svg> <svg aria-hidden="true" class="close-menu astro-wyhhqgo6 astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="m13.41 12 6.3-6.29a1.004 1.004 0 1 0-1.42-1.42L12 10.59l-6.29-6.3a1.004 1.004 0 0 0-1.42 1.42l6.3 6.29-6.3 6.29a1 1 0 0 0 0 1.42.998.998 0 0 0 1.42 0l6.29-6.3 6.29 6.3a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.42L13.41 12Z"/></svg> </button> </starlight-menu-button> <script type="module">class s extends HTMLElement{constructor(){super(),this.btn=this.querySelector("button"),this.btn.addEventListener("click",()=>this.toggleExpanded());const t=this.closest("nav");t&&t.addEventListener("keyup",e=>this.closeOnEscape(e))}setExpanded(t){this.setAttribute("aria-expanded",String(t)),document.body.toggleAttribute("data-mobile-menu-expanded",t)}toggleExpanded(){this.setExpanded(this.getAttribute("aria-expanded")!=="true")}closeOnEscape(t){t.code==="Escape"&&(this.setExpanded(!1),this.btn.focus())}}customElements.define("starlight-menu-button",s);</script> <div id="starlight__sidebar" class="sidebar-pane astro-ylkcvuol"> <div class="sidebar-content sl-flex astro-ylkcvuol"> <sl-sidebar-state-persist data-hash="0gh7iiz" class="astro-vehkaqib"> <script aria-hidden="true">
(() => {
try {
if (!matchMedia('(min-width: 50em)').matches) return;
/** @type {HTMLElement | null} */
const target = document.querySelector('sl-sidebar-state-persist');
const state = JSON.parse(sessionStorage.getItem('sl-sidebar-state') || '0');
if (!target || !state || target.dataset.hash !== state.hash) return;
window._starlightScrollRestore = state.scroll;
customElements.define(
'sl-sidebar-restore',
class SidebarRestore extends HTMLElement {
connectedCallback() {
try {
const idx = parseInt(this.dataset.index || '');
const details = this.closest('details');
if (details && typeof state.open[idx] === 'boolean') details.open = state.open[idx];
} catch {}
}
}
);
} catch {}
})();
</script> <ul class="top-level astro-orhffnn4"> <li class="astro-orhffnn4"> <details open class="astro-orhffnn4"> <summary class="astro-orhffnn4"> <span class="group-label astro-orhffnn4"> <span class="large astro-orhffnn4">Getting Started</span> </span> <svg aria-hidden="true" class="caret astro-orhffnn4 astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="0"></sl-sidebar-restore> <ul class="astro-orhffnn4"> <li class="astro-orhffnn4"> <a href="/" class="astro-orhffnn4"> <span class="astro-orhffnn4">Introduction</span> </a> </li><li class="astro-orhffnn4"> <a href="/getting-started/" aria-current="page" class="astro-orhffnn4"> <span class="astro-orhffnn4">Installation</span> </a> </li><li class="astro-orhffnn4"> <a href="/migrating-from-v3/" class="astro-orhffnn4"> <span class="astro-orhffnn4">Migrating from v3</span> </a> </li><li class="astro-orhffnn4"> <a href="/self-hosted/" class="astro-orhffnn4"> <span class="astro-orhffnn4">Self-Hosted</span> </a> </li><li class="astro-orhffnn4"> <a href="/configuration/" class="astro-orhffnn4"> <span class="astro-orhffnn4">Configuration</span> </a> </li><li class="astro-orhffnn4"> <a href="/library-usage/" class="astro-orhffnn4"> <span class="astro-orhffnn4">Library Usage</span> </a> </li> </ul> </details> </li><li class="astro-orhffnn4"> <details open class="astro-orhffnn4"> <summary class="astro-orhffnn4"> <span class="group-label astro-orhffnn4"> <span class="large astro-orhffnn4">Commands</span> </span> <svg aria-hidden="true" class="caret astro-orhffnn4 astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="1"></sl-sidebar-restore> <ul class="astro-orhffnn4"> <li class="astro-orhffnn4"> <a href="/commands/" class="astro-orhffnn4"> <span class="astro-orhffnn4">Commands</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/alert/" class="astro-orhffnn4"> <span class="astro-orhffnn4">alert</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/api/" class="astro-orhffnn4"> <span class="astro-orhffnn4">api</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/auth/" class="astro-orhffnn4"> <span class="astro-orhffnn4">auth</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/build/" class="astro-orhffnn4"> <span class="astro-orhffnn4">build</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/cli/" class="astro-orhffnn4"> <span class="astro-orhffnn4">cli</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/code-mappings/" class="astro-orhffnn4"> <span class="astro-orhffnn4">code-mappings</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/dart-symbol-map/" class="astro-orhffnn4"> <span class="astro-orhffnn4">dart-symbol-map</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/dashboard/" class="astro-orhffnn4"> <span class="astro-orhffnn4">dashboard</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/debug-files/" class="astro-orhffnn4"> <span class="astro-orhffnn4">debug-files</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/event/" class="astro-orhffnn4"> <span class="astro-orhffnn4">event</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/explore/" class="astro-orhffnn4"> <span class="astro-orhffnn4">explore</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/feedback/" class="astro-orhffnn4"> <span class="astro-orhffnn4">feedback</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/info/" class="astro-orhffnn4"> <span class="astro-orhffnn4">info</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/init/" class="astro-orhffnn4"> <span class="astro-orhffnn4">init</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/issue/" class="astro-orhffnn4"> <span class="astro-orhffnn4">issue</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/local/" class="astro-orhffnn4"> <span class="astro-orhffnn4">local</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/log/" class="astro-orhffnn4"> <span class="astro-orhffnn4">log</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/monitor/" class="astro-orhffnn4"> <span class="astro-orhffnn4">monitor</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/org/" class="astro-orhffnn4"> <span class="astro-orhffnn4">org</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/proguard/" class="astro-orhffnn4"> <span class="astro-orhffnn4">proguard</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/project/" class="astro-orhffnn4"> <span class="astro-orhffnn4">project</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/react-native/" class="astro-orhffnn4"> <span class="astro-orhffnn4">react-native</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/release/" class="astro-orhffnn4"> <span class="astro-orhffnn4">release</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/replay/" class="astro-orhffnn4"> <span class="astro-orhffnn4">replay</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/repo/" class="astro-orhffnn4"> <span class="astro-orhffnn4">repo</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/schema/" class="astro-orhffnn4"> <span class="astro-orhffnn4">schema</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/snapshots/" class="astro-orhffnn4"> <span class="astro-orhffnn4">snapshots</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/sourcemap/" class="astro-orhffnn4"> <span class="astro-orhffnn4">sourcemap</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/span/" class="astro-orhffnn4"> <span class="astro-orhffnn4">span</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/team/" class="astro-orhffnn4"> <span class="astro-orhffnn4">team</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/trace/" class="astro-orhffnn4"> <span class="astro-orhffnn4">trace</span> </a> </li><li class="astro-orhffnn4"> <a href="/commands/trial/" class="astro-orhffnn4"> <span class="astro-orhffnn4">trial</span> </a> </li> </ul> </details> </li><li class="astro-orhffnn4"> <details open class="astro-orhffnn4"> <summary class="astro-orhffnn4"> <span class="group-label astro-orhffnn4"> <span class="large astro-orhffnn4">Resources</span> </span> <svg aria-hidden="true" class="caret astro-orhffnn4 astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="2"></sl-sidebar-restore> <ul class="astro-orhffnn4"> <li class="astro-orhffnn4"> <a href="/agentic-usage/" class="astro-orhffnn4"> <span class="astro-orhffnn4">Agentic Usage</span> </a> </li><li class="astro-orhffnn4"> <a href="/contributing/" class="astro-orhffnn4"> <span class="astro-orhffnn4">Contributing</span> </a> </li> </ul> </details> </li> </ul> <script aria-hidden="true">
(() => {
const scroller = document.getElementById('starlight__sidebar');
if (!window._starlightScrollRestore || !scroller) return;
scroller.scrollTop = window._starlightScrollRestore;
delete window._starlightScrollRestore;
})();
</script> </sl-sidebar-state-persist> <div class="md:sl-hidden"> <div class="mobile-preferences sl-flex"> <script type="module">class s extends HTMLElement{constructor(){super();const e=this.querySelector("select");e&&(e.addEventListener("change",t=>{t.currentTarget instanceof HTMLSelectElement&&(window.location.pathname=t.currentTarget.value)}),window.addEventListener("pageshow",t=>{if(!t.persisted)return;const n=e.querySelector("option[selected]")?.index;n!==e.selectedIndex&&(e.selectedIndex=n??0)}))}}customElements.define("starlight-lang-select",s);</script> </div> </div> </div> </div> </nav> <div class="main-frame astro-ylkcvuol"> <script type="module">const a=document.getElementById("starlight__sidebar"),n=a?.querySelector("sl-sidebar-state-persist"),o="sl-sidebar-state",i=()=>{let t=[];const e=n?.dataset.hash||"";try{const s=sessionStorage.getItem(o),r=JSON.parse(s||"{}");Array.isArray(r.open)&&r.hash===e&&(t=r.open)}catch{}return{hash:e,open:t,scroll:a?.scrollTop||0}},c=t=>{try{sessionStorage.setItem(o,JSON.stringify(t))}catch{}},d=()=>c(i()),l=(t,e)=>{const s=i();s.open[e]=t,c(s)};n?.addEventListener("click",t=>{if(!(t.target instanceof Element))return;const e=t.target.closest("summary")?.closest("details");if(!e)return;const s=e.querySelector("sl-sidebar-restore"),r=parseInt(s?.dataset.index||"");isNaN(r)||l(!e.open,r)});addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&d()});addEventListener("pageHide",d);</script> <div class="lg:sl-flex astro-tkgx3vob"> <aside class="right-sidebar-container print:hidden astro-tkgx3vob"> <div class="right-sidebar astro-tkgx3vob"> <div class="lg:sl-hidden astro-l5wbyfw3"><mobile-starlight-toc data-min-h="2" data-max-h="3" class="astro-m3zlhqyp"><nav aria-labelledby="starlight__on-this-page--mobile" class="astro-m3zlhqyp"><details id="starlight__mobile-toc" class="astro-m3zlhqyp"><summary id="starlight__on-this-page--mobile" class="sl-flex astro-m3zlhqyp"><span class="toggle sl-flex astro-m3zlhqyp">On this page<svg aria-hidden="true" class="caret astro-m3zlhqyp astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></span><span class="display-current astro-m3zlhqyp"></span></summary><div class="dropdown astro-m3zlhqyp"><ul class="isMobile astro-6f3uql37" style="--depth: 0;"> <li class="astro-6f3uql37" style="--depth: 0;"> <a href="#_top" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Overview</span> </a> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#install-script" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Install Script</span> </a> <ul class="isMobile astro-6f3uql37" style="--depth: 1;"> <li class="astro-6f3uql37" style="--depth: 1;"> <a href="#supported-platforms" class="astro-6f3uql37" style="--depth: 1;"> <span class="astro-6f3uql37" style="--depth: 1;">Supported Platforms</span> </a> </li> </ul> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#homebrew" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Homebrew</span> </a> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#package-managers" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Package Managers</span> </a> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#authentication" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Authentication</span> </a> <ul class="isMobile astro-6f3uql37" style="--depth: 1;"> <li class="astro-6f3uql37" style="--depth: 1;"> <a href="#oauth-device-flow-recommended" class="astro-6f3uql37" style="--depth: 1;"> <span class="astro-6f3uql37" style="--depth: 1;">OAuth Device Flow (Recommended)</span> </a> </li><li class="astro-6f3uql37" style="--depth: 1;"> <a href="#api-token" class="astro-6f3uql37" style="--depth: 1;"> <span class="astro-6f3uql37" style="--depth: 1;">API Token</span> </a> </li><li class="astro-6f3uql37" style="--depth: 1;"> <a href="#check-auth-status" class="astro-6f3uql37" style="--depth: 1;"> <span class="astro-6f3uql37" style="--depth: 1;">Check Auth Status</span> </a> </li><li class="astro-6f3uql37" style="--depth: 1;"> <a href="#logout" class="astro-6f3uql37" style="--depth: 1;"> <span class="astro-6f3uql37" style="--depth: 1;">Logout</span> </a> </li> </ul> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#self-hosted-sentry" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Self-Hosted Sentry</span> </a> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#configuration" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Configuration</span> </a> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#next-steps" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Next Steps</span> </a> </li> </ul></div></details></nav></mobile-starlight-toc><script type="module" src="/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js"></script></div><div class="right-sidebar-panel sl-hidden lg:sl-block astro-l5wbyfw3"><div class="sl-container astro-l5wbyfw3"><starlight-toc data-min-h="2" data-max-h="3"><nav aria-labelledby="starlight__on-this-page"><h2 id="starlight__on-this-page">On this page</h2><ul class="astro-6f3uql37" style="--depth: 0;"> <li class="astro-6f3uql37" style="--depth: 0;"> <a href="#_top" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Overview</span> </a> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#install-script" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Install Script</span> </a> <ul class="astro-6f3uql37" style="--depth: 1;"> <li class="astro-6f3uql37" style="--depth: 1;"> <a href="#supported-platforms" class="astro-6f3uql37" style="--depth: 1;"> <span class="astro-6f3uql37" style="--depth: 1;">Supported Platforms</span> </a> </li> </ul> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#homebrew" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Homebrew</span> </a> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#package-managers" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Package Managers</span> </a> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#authentication" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Authentication</span> </a> <ul class="astro-6f3uql37" style="--depth: 1;"> <li class="astro-6f3uql37" style="--depth: 1;"> <a href="#oauth-device-flow-recommended" class="astro-6f3uql37" style="--depth: 1;"> <span class="astro-6f3uql37" style="--depth: 1;">OAuth Device Flow (Recommended)</span> </a> </li><li class="astro-6f3uql37" style="--depth: 1;"> <a href="#api-token" class="astro-6f3uql37" style="--depth: 1;"> <span class="astro-6f3uql37" style="--depth: 1;">API Token</span> </a> </li><li class="astro-6f3uql37" style="--depth: 1;"> <a href="#check-auth-status" class="astro-6f3uql37" style="--depth: 1;"> <span class="astro-6f3uql37" style="--depth: 1;">Check Auth Status</span> </a> </li><li class="astro-6f3uql37" style="--depth: 1;"> <a href="#logout" class="astro-6f3uql37" style="--depth: 1;"> <span class="astro-6f3uql37" style="--depth: 1;">Logout</span> </a> </li> </ul> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#self-hosted-sentry" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Self-Hosted Sentry</span> </a> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#configuration" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Configuration</span> </a> </li><li class="astro-6f3uql37" style="--depth: 0;"> <a href="#next-steps" class="astro-6f3uql37" style="--depth: 0;"> <span class="astro-6f3uql37" style="--depth: 0;">Next Steps</span> </a> </li> </ul></nav></starlight-toc><script type="module" src="/_astro/TableOfContents.astro_astro_type_script_index_0_lang.FuRcXuRY.js"></script> <div class="sentry-markdown-actions" aria-label="Markdown page actions"> <button class="sentry-markdown-action" type="button" aria-label="Copy as Markdown" title="Copy as Markdown" data-sentry-copy-markdown data-markdown-url="/getting-started.md"> <span class="sentry-markdown-action-icon" aria-hidden="true"></span> <span data-sentry-copy-markdown-label>Markdown</span> </button> <span class="sentry-markdown-status" data-sentry-copy-markdown-status aria-live="polite"></span> </div> <script type="module">const r=new WeakSet;function s(){const i=document.querySelectorAll("[data-sentry-copy-markdown]");for(const t of i)r.has(t)||(r.add(t),t.addEventListener("click",async()=>{const a=t.dataset.markdownUrl,d=t.closest(".sentry-markdown-actions"),n=t.querySelector("[data-sentry-copy-markdown-label]"),e=d?.querySelector("[data-sentry-copy-markdown-status]");if(!a)return;const c=n?.textContent??"Markdown";t.disabled=!0,e&&(e.textContent="");try{const o=await fetch(a);if(!o.ok)throw new Error(`Markdown request failed with ${o.status}`);await navigator.clipboard.writeText(await o.text()),n&&(n.textContent="Copied"),e&&(e.textContent="Copied")}catch{n&&(n.textContent="Failed"),e&&(e.textContent="Copy failed")}finally{window.setTimeout(()=>{t.disabled=!1,n&&(n.textContent=c),e&&(e.textContent="")},1800)}}))}document.addEventListener("astro:page-load",s);s();</script></div></div> </div> </aside> <div class="main-pane astro-tkgx3vob"> <main data-pagefind-body class="astro-pdyrgfef" lang="en" dir="ltr"> <div class="content-panel astro-pswstjac"> <div class="sl-container astro-pswstjac"> <div class="page-title-wrapper astro-guvttfii"> <span class="section-label astro-guvttfii">Getting Started</span> <h1 id="_top" class="astro-guvttfii">Installation</h1> </div> </div> </div> <div class="content-panel astro-pswstjac"> <div class="sl-container astro-pswstjac"> <div class="sl-markdown-content"> <div class="sl-heading-wrapper level-h2"><h2 id="install-script">Install Script</h2><a class="sl-anchor-link" href="#install-script"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Install Script”</span></a></div>
<p>Install the latest stable release:</p>
<div class="expressive-code"><style>@layer starlight.components{.expressive-code{font-family:var(--ec-uiFontFml);font-size:var(--ec-uiFontSize);font-weight:var(--ec-uiFontWg);line-height:var(--ec-uiLineHt);text-size-adjust:none;-webkit-text-size-adjust:none}.expressive-code *:not(:is(svg, svg *)){all:revert;box-sizing:border-box}.expressive-code pre{display:flex;margin:0;padding:0;border:var(--ec-brdWd) solid var(--ec-brdCol);border-radius:calc(var(--ec-brdRad) + var(--ec-brdWd));background:var(--ec-codeBg)}.expressive-code pre:focus-visible{outline:3px solid var(--ec-focusBrd);outline-offset:-3px}.expressive-code pre > code{all:unset;display:block;flex:1 0 100%;padding:var(--ec-codePadBlk) 0;color:var(--ec-codeFg);font-family:var(--ec-codeFontFml);font-size:var(--ec-codeFontSize);font-weight:var(--ec-codeFontWg);line-height:var(--ec-codeLineHt)}.expressive-code pre{overflow-x:auto}.expressive-code pre.wrap .ec-line .code{white-space:pre-wrap;overflow-wrap:break-word;min-width:min(20ch, var(--ecMaxLine, 20ch))}.expressive-code pre.wrap .ec-line .code span.indent{white-space:pre}.expressive-code .ec-line{direction:ltr;unicode-bidi:isolate;display:grid;grid-template-areas:'gutter code';grid-template-columns:auto 1fr;position:relative}.expressive-code .ec-line .gutter{grid-area:gutter;color:var(--ec-gtrFg)}.expressive-code .ec-line .gutter > *{pointer-events:none;user-select:none;-webkit-user-select:none}.expressive-code .ec-line .gutter ~ .code{--ecLineBrdCol:var(--ec-gtrBrdCol)}.expressive-code .ec-line.highlight .gutter{color:var(--ec-gtrHlFg)}.expressive-code .ec-line .code{grid-area:code;position:relative;box-sizing:content-box;padding-inline-start:calc(var(--ecIndent, 0ch) + var(--ec-codePadInl) - var(--ecGtrBrdWd));padding-inline-end:var(--ec-codePadInl);text-indent:calc(var(--ecIndent, 0ch) * -1)}.expressive-code .ec-line .code::before,.expressive-code .ec-line .code::after,.expressive-code .ec-line .code :where(*){text-indent:0}.expressive-code .ec-line .code{--ecGtrBrdWd:var(--ec-gtrBrdWd);border-inline-start:var(--ecGtrBrdWd) solid var(--ecLineBrdCol, transparent)}.expressive-code .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}.expressive-code .ec-line.mark{--tmLineBgCol:var(--ec-tm-markBg)}.expressive-code .ec-line.mark .code{--ecLineBrdCol:var(--ec-tm-markBrdCol)}.expressive-code .ec-line.ins{--tmLineBgCol:var(--ec-tm-insBg);--tmLabel:var(--ec-tm-insDiffIndContent)}.expressive-code .ec-line.ins .code{--ecLineBrdCol:var(--ec-tm-insBrdCol)}.expressive-code .ec-line.ins .code::before{color:var(--ec-tm-insDiffIndCol)}.expressive-code .ec-line.del{--tmLineBgCol:var(--ec-tm-delBg);--tmLabel:var(--ec-tm-delDiffIndContent)}.expressive-code .ec-line.del .code{--ecLineBrdCol:var(--ec-tm-delBrdCol)}.expressive-code .ec-line.del .code::before{color:var(--ec-tm-delDiffIndCol)}.expressive-code .ec-line.mark,.expressive-code .ec-line.ins,.expressive-code .ec-line.del{background:var(--tmLineBgCol)}.expressive-code .ec-line.mark .code,.expressive-code .ec-line.ins .code,.expressive-code .ec-line.del .code{--ecGtrBrdWd:var(--ec-tm-lineMarkerAccentWd)}.expressive-code .ec-line.mark .code::before,.expressive-code .ec-line.ins .code::before,.expressive-code .ec-line.del .code::before{display:block;position:absolute;left:0;box-sizing:border-box;content:var(--tmLabel, ' ');padding-inline-start:var(--ec-tm-lineDiffIndMargLeft);text-align:center;white-space:pre}.expressive-code .ec-line.mark.tm-label .code::before,.expressive-code .ec-line.ins.tm-label .code::before,.expressive-code .ec-line.del.tm-label .code::before{background:var(--ecLineBrdCol);padding:0 calc(var(--ec-tm-lineMarkerLabelPadInl) + var(--ec-tm-lineMarkerAccentWd)) 0 var(--ec-tm-lineMarkerLabelPadInl);color:var(--ec-tm-lineMarkerLabelCol)}.expressive-code .ec-line mark{--tmInlineBgCol:var(--ec-tm-markBg);--tmInlineBrdCol:var(--ec-tm-markBrdCol)}.expressive-code .ec-line ins{--tmInlineBgCol:var(--ec-tm-insBg);--tmInlineBrdCol:var(--ec-tm-insBrdCol)}.expressive-code .ec-line del{--tmInlineBgCol:var(--ec-tm-delBg);--tmInlineBrdCol:var(--ec-tm-delBrdCol)}.expressive-code .ec-line mark,.expressive-code .ec-line ins,.expressive-code .ec-line del{all:unset;display:inline-block;position:relative;--tmBrdL:var(--ec-tm-inlMarkerBrdWd);--tmBrdR:var(--ec-tm-inlMarkerBrdWd);--tmRadL:var(--ec-tm-inlMarkerBrdRad);--tmRadR:var(--ec-tm-inlMarkerBrdRad);margin-inline:0.025rem;padding-inline:var(--ec-tm-inlMarkerPad);border-radius:var(--tmRadL) var(--tmRadR) var(--tmRadR) var(--tmRadL);background:var(--tmInlineBgCol);background-clip:padding-box}.expressive-code .ec-line mark.open-start,.expressive-code .ec-line ins.open-start,.expressive-code .ec-line del.open-start{margin-inline-start:0;padding-inline-start:0;--tmBrdL:0px;--tmRadL:0}.expressive-code .ec-line mark.open-end,.expressive-code .ec-line ins.open-end,.expressive-code .ec-line del.open-end{margin-inline-end:0;padding-inline-end:0;--tmBrdR:0px;--tmRadR:0}.expressive-code .ec-line mark::before,.expressive-code .ec-line ins::before,.expressive-code .ec-line del::before{content:'';position:absolute;pointer-events:none;display:inline-block;inset:0;border-radius:var(--tmRadL) var(--tmRadR) var(--tmRadR) var(--tmRadL);border:var(--ec-tm-inlMarkerBrdWd) solid var(--tmInlineBrdCol);border-inline-width:var(--tmBrdL) var(--tmBrdR)}.expressive-code .frame{all:unset;position:relative;display:block;--header-border-radius:calc(var(--ec-brdRad) + var(--ec-brdWd));--tab-border-radius:calc(var(--ec-frm-edTabBrdRad) + var(--ec-brdWd));--button-spacing:0.4rem;--code-background:var(--ec-frm-edBg);border-radius:var(--header-border-radius);box-shadow:var(--ec-frm-frameBoxShdCssVal)}.expressive-code .frame .header{display:none;z-index:1;position:relative;border-radius:var(--header-border-radius) var(--header-border-radius) 0 0}.expressive-code .frame.has-title pre,.expressive-code .frame.has-title code,.expressive-code .frame.is-terminal pre,.expressive-code .frame.is-terminal code{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.expressive-code .frame .title:empty:before{content:'\a0'}.expressive-code .frame.has-title:not(.is-terminal){--button-spacing:calc(1.9rem + 2 * (var(--ec-uiPadBlk) + var(--ec-frm-edActTabIndHt)))}.expressive-code .frame.has-title:not(.is-terminal) .title{position:relative;color:var(--ec-frm-edActTabFg);background:var(--ec-frm-edActTabBg);background-clip:padding-box;margin-block-start:var(--ec-frm-edTabsMargBlkStart);padding:calc(var(--ec-uiPadBlk) + var(--ec-frm-edActTabIndHt)) var(--ec-uiPadInl);border:var(--ec-brdWd) solid var(--ec-frm-edActTabBrdCol);border-radius:var(--tab-border-radius) var(--tab-border-radius) 0 0;border-bottom:none;overflow:hidden}.expressive-code .frame.has-title:not(.is-terminal) .title::after{content:'';position:absolute;pointer-events:none;inset:0;border-top:var(--ec-frm-edActTabIndHt) solid var(--ec-frm-edActTabIndTopCol);border-bottom:var(--ec-frm-edActTabIndHt) solid var(--ec-frm-edActTabIndBtmCol)}.expressive-code .frame.has-title:not(.is-terminal) .header{display:flex;background:linear-gradient(to top, var(--ec-frm-edTabBarBrdBtmCol) var(--ec-brdWd), transparent var(--ec-brdWd)),linear-gradient(var(--ec-frm-edTabBarBg), var(--ec-frm-edTabBarBg));background-repeat:no-repeat;padding-inline-start:var(--ec-frm-edTabsMargInlStart)}.expressive-code .frame.has-title:not(.is-terminal) .header::before{content:'';position:absolute;pointer-events:none;inset:0;border:var(--ec-brdWd) solid var(--ec-frm-edTabBarBrdCol);border-radius:inherit;border-bottom:none}.expressive-code .frame.is-terminal{--button-spacing:calc(1.9rem + var(--ec-brdWd) + 2 * var(--ec-uiPadBlk));--code-background:var(--ec-frm-trmBg)}.expressive-code .frame.is-terminal .header{display:flex;align-items:center;justify-content:center;padding-block:var(--ec-uiPadBlk);padding-block-end:calc(var(--ec-uiPadBlk) + var(--ec-brdWd));position:relative;font-weight:500;letter-spacing:0.025ch;color:var(--ec-frm-trmTtbFg);background:var(--ec-frm-trmTtbBg);border:var(--ec-brdWd) solid var(--ec-brdCol);border-bottom:none}.expressive-code .frame.is-terminal .header::before{content:'';position:absolute;pointer-events:none;left:var(--ec-uiPadInl);width:2.1rem;height:0.56rem;line-height:0;background-color:var(--ec-frm-trmTtbDotsFg);opacity:var(--ec-frm-trmTtbDotsOpa);-webkit-mask-image:var(--ec-frm-trmIcon);-webkit-mask-repeat:no-repeat;mask-image:var(--ec-frm-trmIcon);mask-repeat:no-repeat}.expressive-code .frame.is-terminal .header::after{content:'';position:absolute;pointer-events:none;inset:0;border-bottom:var(--ec-brdWd) solid var(--ec-frm-trmTtbBrdBtmCol)}.expressive-code .frame pre{background:var(--code-background)}.expressive-code .copy{display:flex;gap:0.25rem;flex-direction:row;position:absolute;inset-block-start:calc(var(--ec-brdWd) + var(--button-spacing));inset-inline-end:calc(var(--ec-brdWd) + var(--ec-uiPadInl) / 2)}@media (scripting: none){.expressive-code .copy{display:none}}.expressive-code .copy{direction:ltr;unicode-bidi:isolate}.expressive-code .copy button{position:relative;align-self:flex-end;margin:0;padding:0;border:none;border-radius:0.2rem;z-index:1;cursor:pointer;transition-property:opacity, background, border-color;transition-duration:0.2s;transition-timing-function:cubic-bezier(0.25, 0.46, 0.45, 0.94);width:2.5rem;height:2.5rem;background:var(--code-background);opacity:0.75}.expressive-code .copy button div{position:absolute;inset:0;border-radius:inherit;background:var(--ec-frm-inlBtnBg);opacity:var(--ec-frm-inlBtnBgIdleOpa);transition-property:inherit;transition-duration:inherit;transition-timing-function:inherit}.expressive-code .copy button::before{content:'';position:absolute;pointer-events:none;inset:0;border-radius:inherit;border:var(--ec-brdWd) solid var(--ec-frm-inlBtnBrd);opacity:var(--ec-frm-inlBtnBrdOpa)}.expressive-code .copy button::after{content:'';position:absolute;pointer-events:none;inset:0;background-color:var(--ec-frm-inlBtnFg);-webkit-mask-image:var(--ec-frm-copyIcon);-webkit-mask-repeat:no-repeat;mask-image:var(--ec-frm-copyIcon);mask-repeat:no-repeat;margin:0.475rem;line-height:0}.expressive-code .copy button:hover,.expressive-code .copy button:focus:focus-visible{opacity:1}.expressive-code .copy button:hover div,.expressive-code .copy button:focus:focus-visible div{opacity:var(--ec-frm-inlBtnBgHoverOrFocusOpa)}.expressive-code .copy button:active{opacity:1}.expressive-code .copy button:active div{opacity:var(--ec-frm-inlBtnBgActOpa)}.expressive-code .copy .feedback{--tooltip-arrow-size:0.35rem;--tooltip-bg:var(--ec-frm-tooltipSuccessBg);color:var(--ec-frm-tooltipSuccessFg);pointer-events:none;user-select:none;-webkit-user-select:none;position:relative;align-self:center;background-color:var(--tooltip-bg);z-index:99;padding:0.125rem 0.75rem;border-radius:0.2rem;margin-inline-end:var(--tooltip-arrow-size);opacity:0;transition-property:opacity, transform;transition-duration:0.2s;transition-timing-function:ease-in-out;transform:translate3d(0, 0.25rem, 0)}.expressive-code .copy .feedback::after{content:'';position:absolute;pointer-events:none;top:calc(50% - var(--tooltip-arrow-size));inset-inline-end:calc(-2 * (var(--tooltip-arrow-size) - 0.5px));border:var(--tooltip-arrow-size) solid transparent;border-inline-start-color:var(--tooltip-bg)}.expressive-code .copy .feedback.show{opacity:1;transform:translate3d(0, 0, 0)}@media (hover: hover){.expressive-code{}.expressive-code .copy button{opacity:0;width:2rem;height:2rem}.expressive-code .frame:hover .copy button:not(:hover),.expressive-code .frame:focus-within :focus-visible ~ .copy button:not(:hover),.expressive-code .frame .copy .feedback.show ~ button:not(:hover){opacity:0.75}}.expressive-code :nth-child(1 of .ec-line) .code{padding-inline-end:calc(2rem + var(--ec-codePadInl))}}@layer starlight.components{:root,:root:not([data-theme='sentry-monochrome']) .expressive-code[data-theme='sentry-monochrome']{--ec-brdRad:8px;--ec-brdWd:0px;--ec-brdCol:transparent;--ec-codeFontFml:var(--__sl-font-mono);--ec-codeFontSize:var(--sl-text-code);--ec-codeFontWg:400;--ec-codeLineHt:1.65;--ec-codePadBlk:0.9rem;--ec-codePadInl:1rem;--ec-codeBg:#111111;--ec-codeFg:#f5f5f5;--ec-codeSelBg:#303030;--ec-gtrBrdCol:var(--ve-line);--ec-gtrBrdWd:1.5px;--ec-gtrFg:var(--ve-text-tertiary);--ec-gtrHlFg:var(--ve-text);--ec-uiFontFml:var(--__sl-font);--ec-uiFontSize:0.82rem;--ec-uiFontWg:400;--ec-uiLineHt:1.4;--ec-uiPadBlk:0.35rem;--ec-uiPadInl:0.75rem;--ec-uiSelBg:#222222;--ec-uiSelFg:#ffffff;--ec-focusBrd:#ffffff;--ec-sbThumbCol:#3a3a3a;--ec-sbThumbHoverCol:#626262;--ec-tm-lineMarkerAccentMarg:0rem;--ec-tm-lineMarkerAccentWd:0.15rem;--ec-tm-lineMarkerLabelPadInl:0.2rem;--ec-tm-lineMarkerLabelCol:white;--ec-tm-lineDiffIndMargLeft:0.25rem;--ec-tm-inlMarkerBrdWd:1.5px;--ec-tm-inlMarkerBrdRad:0.2rem;--ec-tm-inlMarkerPad:0.15rem;--ec-tm-insDiffIndContent:'+';--ec-tm-delDiffIndContent:'-';--ec-tm-markBg:#174a9099;--ec-tm-markBrdCol:#4d70bcd0;--ec-tm-insBg:#1e571599;--ec-tm-insBrdCol:#487f3bd0;--ec-tm-insDiffIndCol:#79b169d0;--ec-tm-delBg:#862d2799;--ec-tm-delBrdCol:#b4554bd0;--ec-tm-delDiffIndCol:#ed8779d0;--ec-frm-shdCol:#0000005b;--ec-frm-frameBoxShdCssVal:none;--ec-frm-edActTabBg:#000000;--ec-frm-edActTabFg:#fafafa;--ec-frm-edActTabBrdCol:transparent;--ec-frm-edActTabIndHt:0px;--ec-frm-edActTabIndTopCol:transparent;--ec-frm-edActTabIndBtmCol:transparent;--ec-frm-edTabsMargInlStart:0;--ec-frm-edTabsMargBlkStart:0;--ec-frm-edTabBrdRad:8px;--ec-frm-edTabBarBg:#000000;--ec-frm-edTabBarBrdCol:transparent;--ec-frm-edTabBarBrdBtmCol:transparent;--ec-frm-edBg:#111111;--ec-frm-trmTtbFg:#fafafa;--ec-frm-trmTtbDotsFg:#fafafa;--ec-frm-trmTtbDotsOpa:0.15;--ec-frm-trmTtbBg:#111111;--ec-frm-trmTtbBrdBtmCol:transparent;--ec-frm-trmBg:#111111;--ec-frm-inlBtnBg:transparent;--ec-frm-inlBtnBgIdleOpa:0;--ec-frm-inlBtnBgHoverOrFocusOpa:0.2;--ec-frm-inlBtnBgActOpa:0.3;--ec-frm-inlBtnFg:var(--ve-text-secondary);--ec-frm-inlBtnBrd:transparent;--ec-frm-inlBtnBrdOpa:0.4;--ec-frm-tooltipSuccessBg:#098656;--ec-frm-tooltipSuccessFg:white;--ec-frm-copyIcon:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2024%2024'%20fill%3D'none'%20stroke%3D'black'%20stroke-width%3D'1.75'%3E%3Cpath%20d%3D'M3%2019a2%202%200%200%201-1-2V2a2%202%200%200%201%201-1h13a2%202%200%200%201%202%201'%2F%3E%3Crect%20x%3D'6'%20y%3D'5'%20width%3D'16'%20height%3D'18'%20rx%3D'1.5'%20ry%3D'1.5'%2F%3E%3C%2Fsvg%3E");--ec-frm-trmIcon:url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2060%2016'%20preserveAspectRatio%3D'xMidYMid%20meet'%3E%3Ccircle%20cx%3D'8'%20cy%3D'8'%20r%3D'8'%2F%3E%3Ccircle%20cx%3D'30'%20cy%3D'8'%20r%3D'8'%2F%3E%3Ccircle%20cx%3D'52'%20cy%3D'8'%20r%3D'8'%2F%3E%3C%2Fsvg%3E")}.expressive-code .ec-line :where(span[style^='--']:not([class])),:root:not([data-theme='sentry-monochrome']) .expressive-code[data-theme='sentry-monochrome'] .ec-line :where(span[style^='--']:not([class])){color:var(--0, inherit);background-color:var(--0bg, transparent);font-style:var(--0fs, inherit);font-weight:var(--0fw, inherit);text-decoration:var(--0td, inherit)}}</style><script type="module" src="/_astro/ec.0vx5m.js"></script><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#9AE6B4">curl</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">https://cli.sentry.dev/install</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">-fsS</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFFFFF;--0fw:bold">|</span><span style="--0:#F5F5F5"> </span><span style="--0:#9AE6B4">bash</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="curl https://cli.sentry.dev/install -fsS | bash"><div></div></button></div></figure></div>
<p>Install the nightly build (built from <code dir="auto">main</code>, updated on every commit):</p>
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#9AE6B4">curl</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">https://cli.sentry.dev/install</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">-fsS</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFFFFF;--0fw:bold">|</span><span style="--0:#F5F5F5"> </span><span style="--0:#9AE6B4">bash</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">-s</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">--</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">--version</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">nightly</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="curl https://cli.sentry.dev/install -fsS | bash -s -- --version nightly"><div></div></button></div></figure></div>
<p>You can also use the <code dir="auto">SENTRY_VERSION</code> environment variable to pin a version,
which is especially useful in CI/CD pipelines and Dockerfiles:</p>
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#9E9E9E;--0fs:italic"># Pin to a specific stable version</span></div></div><div class="ec-line"><div class="code"><span style="--0:#E8E8E8">SENTRY_VERSION</span><span style="--0:#FFFFFF;--0fw:bold">=</span><span style="--0:#FFD166">0.19.0</span><span style="--0:#F5F5F5"> </span><span style="--0:#9AE6B4">curl</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">https://cli.sentry.dev/install</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">-fsS</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFFFFF;--0fw:bold">|</span><span style="--0:#F5F5F5"> </span><span style="--0:#9AE6B4">bash</span></div></div><div class="ec-line"><div class="code">
</div></div><div class="ec-line"><div class="code"><span style="--0:#9E9E9E;--0fs:italic"># Pin to nightly</span></div></div><div class="ec-line"><div class="code"><span style="--0:#E8E8E8">SENTRY_VERSION</span><span style="--0:#FFFFFF;--0fw:bold">=</span><span style="--0:#FFD166">nightly</span><span style="--0:#F5F5F5"> </span><span style="--0:#9AE6B4">curl</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">https://cli.sentry.dev/install</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">-fsS</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFFFFF;--0fw:bold">|</span><span style="--0:#F5F5F5"> </span><span style="--0:#9AE6B4">bash</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="SENTRY_VERSION=0.19.0 curl https://cli.sentry.dev/install -fsS | bashSENTRY_VERSION=nightly curl https://cli.sentry.dev/install -fsS | bash"><div></div></button></div></figure></div>
<p>The <code dir="auto">--version</code> flag takes precedence over <code dir="auto">SENTRY_VERSION</code> if both are set.
The chosen channel is persisted so that <code dir="auto">sentry cli upgrade</code> automatically
tracks the same channel on future updates.</p>
<div class="sl-heading-wrapper level-h3"><h3 id="supported-platforms">Supported Platforms</h3><a class="sl-anchor-link" href="#supported-platforms"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Supported Platforms”</span></a></div>
<table><thead><tr><th>OS</th><th>Architectures</th><th>Notes</th></tr></thead><tbody><tr><td><strong>macOS</strong></td><td>x64, arm64 (Apple Silicon)</td><td></td></tr><tr><td><strong>Linux</strong></td><td>x64, arm64</td><td>glibc and musl (Alpine)</td></tr><tr><td><strong>Windows</strong></td><td>x64</td><td>Via Git Bash, MSYS2, or WSL</td></tr></tbody></table>
<div class="sl-heading-wrapper level-h2"><h2 id="homebrew">Homebrew</h2><a class="sl-anchor-link" href="#homebrew"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Homebrew”</span></a></div>
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#9AE6B4">brew</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">install</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">getsentry/tools/sentry</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="brew install getsentry/tools/sentry"><div></div></button></div></figure></div>
<div class="sl-heading-wrapper level-h2"><h2 id="package-managers">Package Managers</h2><a class="sl-anchor-link" href="#package-managers"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Package Managers”</span></a></div>
<p>Install globally with your preferred package manager (the npm/pnpm/yarn packages require <strong>Node.js 22.15+</strong>):</p>
<div class="pm-code astro-ehimbizw" data-id="pm-vo1fnu4q0"> <div class="pm-header astro-ehimbizw"> <div class="pm-tabs astro-ehimbizw"> <button class="pm-tab active astro-ehimbizw" data-pm="npm">npm</button> <button class="pm-tab astro-ehimbizw" data-pm="pnpm">pnpm</button> <button class="pm-tab astro-ehimbizw" data-pm="yarn">yarn</button> <button class="pm-tab astro-ehimbizw" data-pm="bun">bun</button> </div> </div> <div class="pm-content astro-ehimbizw"> <pre class="pm-pre astro-ehimbizw" data-pm="npm"><code class="astro-ehimbizw">npm install -g sentry</code></pre> <pre class="pm-pre astro-ehimbizw" data-pm="pnpm" hidden><code class="astro-ehimbizw">pnpm add -g sentry</code></pre> <pre class="pm-pre astro-ehimbizw" data-pm="yarn" hidden><code class="astro-ehimbizw">yarn global add sentry</code></pre> <pre class="pm-pre astro-ehimbizw" data-pm="bun" hidden><code class="astro-ehimbizw">bun add -g sentry</code></pre> <button class="pm-copy astro-ehimbizw" aria-label="Copy to clipboard"> <span class="pm-copied astro-ehimbizw">Copied!</span> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="astro-ehimbizw"> <rect width="14" height="14" x="8" y="8" rx="2" ry="2" class="astro-ehimbizw"></rect> <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" class="astro-ehimbizw"></path> </svg> </button> </div> </div> <script type="module">document.querySelectorAll(".pm-code").forEach(t=>{const i=t.querySelectorAll(".pm-tab"),a=t.querySelectorAll(".pm-pre"),r=t.querySelector(".pm-copy");i.forEach(c=>{c.addEventListener("click",()=>{const o=c.getAttribute("data-pm");i.forEach(e=>e.classList.remove("active")),c.classList.add("active"),a.forEach(e=>{e.getAttribute("data-pm")===o?e.removeAttribute("hidden"):e.setAttribute("hidden","")})})}),r?.addEventListener("click",async()=>{const o=t.querySelector(".pm-pre:not([hidden])")?.querySelector("code")?.textContent||"";await navigator.clipboard.writeText(o),r.classList.add("copied"),setTimeout(()=>r.classList.remove("copied"),2e3)})});</script>
<p>Unlike the install script and Homebrew, package manager installs don't set up shell completions or agent skills. Run <code dir="auto">sentry cli setup</code> once to enable them:</p>
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#9AE6B4">sentry</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">cli</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">setup</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="sentry cli setup"><div></div></button></div></figure></div>
<p>Or run directly without installing:</p>
<div class="pm-code astro-ehimbizw" data-id="pm-z4937ayrp"> <div class="pm-header astro-ehimbizw"> <div class="pm-tabs astro-ehimbizw"> <button class="pm-tab active astro-ehimbizw" data-pm="npm">npm</button> <button class="pm-tab astro-ehimbizw" data-pm="pnpm">pnpm</button> <button class="pm-tab astro-ehimbizw" data-pm="yarn">yarn</button> <button class="pm-tab astro-ehimbizw" data-pm="bun">bun</button> </div> </div> <div class="pm-content astro-ehimbizw"> <pre class="pm-pre astro-ehimbizw" data-pm="npm"><code class="astro-ehimbizw">npx sentry --help</code></pre> <pre class="pm-pre astro-ehimbizw" data-pm="pnpm" hidden><code class="astro-ehimbizw">pnpm dlx sentry --help</code></pre> <pre class="pm-pre astro-ehimbizw" data-pm="yarn" hidden><code class="astro-ehimbizw">yarn dlx sentry --help</code></pre> <pre class="pm-pre astro-ehimbizw" data-pm="bun" hidden><code class="astro-ehimbizw">bunx sentry --help</code></pre> <button class="pm-copy astro-ehimbizw" aria-label="Copy to clipboard"> <span class="pm-copied astro-ehimbizw">Copied!</span> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="astro-ehimbizw"> <rect width="14" height="14" x="8" y="8" rx="2" ry="2" class="astro-ehimbizw"></rect> <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" class="astro-ehimbizw"></path> </svg> </button> </div> </div>
<div class="sl-heading-wrapper level-h2"><h2 id="authentication">Authentication</h2><a class="sl-anchor-link" href="#authentication"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Authentication”</span></a></div>
<div class="sl-heading-wrapper level-h3"><h3 id="oauth-device-flow-recommended">OAuth Device Flow (Recommended)</h3><a class="sl-anchor-link" href="#oauth-device-flow-recommended"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “OAuth Device Flow (Recommended)”</span></a></div>
<p>The easiest way to authenticate is via OAuth device flow:</p>
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#9AE6B4">sentry</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">auth</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">login</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="sentry auth login"><div></div></button></div></figure></div>
<p>You'll be given a URL and a code to enter. Once you authorize the application
in your browser, the CLI stores the OAuth credentials. When the server provides
a refresh token, the CLI refreshes the access token automatically. Persist the
Sentry CLI configuration directory (<code dir="auto">~/.sentry/</code> by default, overridable with
<code dir="auto">SENTRY_CONFIG_DIR</code>) across runs to keep automatic refresh working.</p>
<div class="sl-heading-wrapper level-h3"><h3 id="api-token">API Token</h3><a class="sl-anchor-link" href="#api-token"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “API Token”</span></a></div>
<p>Alternatively, you can use an API token directly:</p>
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#9AE6B4">sentry</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">auth</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">login</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">--token</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">YOUR_SENTRY_API_TOKEN</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="sentry auth login --token YOUR_SENTRY_API_TOKEN"><div></div></button></div></figure></div>
<p>You can create API tokens in your <a href="https://sentry.io/settings/account/api/auth-tokens/">Sentry account settings</a>.</p>
<p>API tokens are also useful for ephemeral CI jobs and sandboxes that cannot
persist the CLI configuration directory.</p>
<div class="sl-heading-wrapper level-h3"><h3 id="check-auth-status">Check Auth Status</h3><a class="sl-anchor-link" href="#check-auth-status"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Check Auth Status”</span></a></div>
<p>Verify your authentication status:</p>
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#9AE6B4">sentry</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">auth</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">status</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="sentry auth status"><div></div></button></div></figure></div>
<div class="sl-heading-wrapper level-h3"><h3 id="logout">Logout</h3><a class="sl-anchor-link" href="#logout"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Logout”</span></a></div>
<p>To remove stored credentials:</p>
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#9AE6B4">sentry</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">auth</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">logout</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="sentry auth logout"><div></div></button></div></figure></div>
<div class="sl-heading-wrapper level-h2"><h2 id="self-hosted-sentry">Self-Hosted Sentry</h2><a class="sl-anchor-link" href="#self-hosted-sentry"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Self-Hosted Sentry”</span></a></div>
<p>Using a self-hosted Sentry instance? Set <code dir="auto">SENTRY_URL</code> to point at it:</p>
<div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#E8E8E8">SENTRY_URL</span><span style="--0:#FFFFFF;--0fw:bold">=</span><span style="--0:#FFD166">https://sentry.example.com</span><span style="--0:#F5F5F5"> </span><span style="--0:#9AE6B4">sentry</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">auth</span><span style="--0:#F5F5F5"> </span><span style="--0:#FFD166">login</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="SENTRY_URL=https://sentry.example.com sentry auth login"><div></div></button></div></figure></div>
<p>See the <a href="../self-hosted/">Self-Hosted</a> guide for full setup details.</p>
<div class="sl-heading-wrapper level-h2"><h2 id="configuration">Configuration</h2><a class="sl-anchor-link" href="#configuration"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Configuration”</span></a></div>
<p>Credentials are stored in a SQLite database at <code dir="auto">~/.sentry/</code> with restricted file permissions (mode 600) for security. See <a href="../configuration/">Configuration</a> for environment variables and customization options.</p>
<div class="sl-heading-wrapper level-h2"><h2 id="next-steps">Next Steps</h2><a class="sl-anchor-link" href="#next-steps"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Next Steps”</span></a></div>
<p>Once authenticated, you can start using the CLI:</p>
<ul>
<li><a href="../commands/init/">Initialize Sentry</a> - Set up Sentry in your project with the guided wizard</li>
<li><a href="../commands/org/">Organization commands</a> - List and view organizations</li>
<li><a href="../commands/project/">Project commands</a> - Manage projects</li>
<li><a href="../commands/issue/">Issue commands</a> - Track and manage issues</li>
<li><a href="../commands/event/">Event commands</a> - Inspect events</li>
<li><a href="../commands/api/">API commands</a> - Direct API access</li>
<li><a href="../agentic-usage/">Agentic Usage</a> - Enable AI coding agents to use the CLI</li>
</ul> </div> <footer> <table role="presentation" width="100%" height="32" cellspacing="0" cellpadding="0"> <tbody> <tr> <td></td> </tr> </tbody> </table> <div class="pagination-links sentry-pagination-links print:hidden" dir="ltr"> <a href="/" rel="prev"> <svg aria-hidden="true" class=" astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.5rem;"><path d="M17 11H9.41l3.3-3.29a1.004 1.004 0 1 0-1.42-1.42l-5 5a1 1 0 0 0-.21.33 1 1 0 0 0 0 .76 1 1 0 0 0 .21.33l5 5a1.002 1.002 0 0 0 1.639-.325 1 1 0 0 0-.219-1.095L9.41 13H17a1 1 0 0 0 0-2Z"/></svg> <span> Previous <br> <span class="link-title">Introduction</span> </span> </a> <a href="/migrating-from-v3/" rel="next"> <svg aria-hidden="true" class=" astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.5rem;"><path d="M17.92 11.62a1.001 1.001 0 0 0-.21-.33l-5-5a1.003 1.003 0 1 0-1.42 1.42l3.3 3.29H7a1 1 0 0 0 0 2h7.59l-3.3 3.29a1.002 1.002 0 0 0 .325 1.639 1 1 0 0 0 1.095-.219l5-5a1 1 0 0 0 .21-.33 1 1 0 0 0 0-.76Z"/></svg> <span> Next <br> <span class="link-title">Migrating from v3</span> </span> </a> </div> <table role="presentation" width="100%" height="72" cellspacing="0" cellpadding="0"> <tbody> <tr> <td align="center" valign="bottom"> <nav aria-label="Project links"> <a href="https://github.com/getsentry/cli" rel="me" aria-label="GitHub" title="GitHub"> <font color="#888888"> <svg aria-hidden="true" class=" astro-sdw2zlvw" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z"/></svg> </font> </a> </nav> </td> </tr> </tbody> </table> </footer> </div> </div> </main> </div> </div> </div> </div> </body></html>