-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.html
More file actions
38 lines (36 loc) · 37.7 KB
/
Copy pathdatabase.html
File metadata and controls
38 lines (36 loc) · 37.7 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
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Database | Piwi Dashboard</title>
<meta name="description" content="CI throws away every report it makes. Piwi keeps them — then groups the failures by root cause, scores the flaky tests, and finds the locator you should have used. Self-hosted, MIT, zero telemetry.">
<meta name="generator" content="VitePress v1.6.4">
<link rel="preload stylesheet" href="/assets/style.D0n2S4GB.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.uE92LyLg.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.B8vKIYNu.js">
<link rel="modulepreload" href="/assets/chunks/framework.sV-XtlWr.js">
<link rel="modulepreload" href="/assets/database.md.DOnXDaxf.lean.js">
<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" type="image/svg+xml" href="/logo.svg">
<meta property="og:type" content="website">
<meta property="og:title" content="Piwi Dashboard — Your Playwright results, kept and explained">
<meta property="og:description" content="CI throws away every report it makes. Piwi keeps them — then groups failures by root cause, scores flaky tests, and finds the locator you should have used. Self-hosted, MIT, zero telemetry.">
<meta property="og:image" content="https://piwitests.github.io/og-image.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:url" content="https://piwitests.github.io">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Piwi Dashboard — Your Playwright results, kept and explained">
<meta name="twitter:description" content="CI throws away every report it makes. Piwi keeps them — then groups failures by root cause, scores flaky tests, and finds the locator you should have used. Self-hosted, MIT, zero telemetry.">
<meta name="twitter:image" content="https://piwitests.github.io/og-image.png">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-d8b57b2d><!--[--><!--]--><!--[--><span tabindex="-1" data-v-fcbfc0e0></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-fcbfc0e0>Skip to content</a><!--]--><!----><header class="VPNav" data-v-d8b57b2d data-v-7ad780c2><div class="VPNavBar" data-v-7ad780c2 data-v-9fd4d1dd><div class="wrapper" data-v-9fd4d1dd><div class="container" data-v-9fd4d1dd><div class="title" data-v-9fd4d1dd><div class="VPNavBarTitle has-sidebar" data-v-9fd4d1dd data-v-9f43907a><a class="title" href="/" data-v-9f43907a><!--[--><!--]--><!----><span data-v-9f43907a>Piwi Dashboard</span><!--[--><!--]--></a></div></div><div class="content" data-v-9fd4d1dd><div class="content-body" data-v-9fd4d1dd><!--[--><!--]--><div class="VPNavBarSearch search" data-v-9fd4d1dd><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-9fd4d1dd data-v-afb2845e><span id="main-nav-aria-label" class="visually-hidden" data-v-afb2845e> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Home</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/getting-started.html" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Getting started</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/reporter.html" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Reporter</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://piwitests.github.io/demo/docs" target="_blank" rel="noreferrer" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>API docs</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://piwitests.github.io/demo/" target="_blank" rel="noreferrer" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Demo</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-9fd4d1dd data-v-3f90c1a5><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-3f90c1a5 data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-9fd4d1dd data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/PiwiTests/platform" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-9fd4d1dd data-v-f953d92f data-v-bfe7971f><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-bfe7971f><span class="vpi-more-horizontal icon" data-v-bfe7971f></span></button><div class="menu" data-v-bfe7971f><div class="VPMenu" data-v-bfe7971f data-v-20ed86d6><!----><!--[--><!--[--><!----><div class="group" data-v-f953d92f><div class="item appearance" data-v-f953d92f><p class="label" data-v-f953d92f>Appearance</p><div class="appearance-action" data-v-f953d92f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-f953d92f data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div></div></div><div class="group" data-v-f953d92f><div class="item social-links" data-v-f953d92f><div class="VPSocialLinks social-links-list" data-v-f953d92f data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/PiwiTests/platform" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-9fd4d1dd data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><div class="divider" data-v-9fd4d1dd><div class="divider-line" data-v-9fd4d1dd></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-d8b57b2d data-v-2488c25a><div class="container" data-v-2488c25a><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-2488c25a><span class="vpi-align-left menu-icon" data-v-2488c25a></span><span class="menu-text" data-v-2488c25a>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-2488c25a data-v-6b867909><button data-v-6b867909>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-d8b57b2d data-v-42c4c606><div class="curtain" data-v-42c4c606></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-42c4c606><span class="visually-hidden" id="sidebar-aria-label" data-v-42c4c606> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Start here</h2><!----></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/getting-started.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Getting started</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/concepts.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Core concepts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/comparison.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Why Piwi? (comparison & FAQ)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/privacy.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Privacy & data flow</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Sending results</h2><!----></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/reporter.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Reporter</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/capture-fixtures.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Capture fixtures</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/ai-steps.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>AI steps</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/ci.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>CI & sharding</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/backend-logs.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Backend logs</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/importing-runs.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Importing past runs</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Reading the results</h2><!----></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/ui-overview.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>UI overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/evidence.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Failure evidence</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/ai-diagnosis.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>AI diagnosis & clustering</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/flaky-tests.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Flaky tests</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/analytics.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Analytics</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/timeline-markers.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Timeline markers</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/notifications.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Notifications & alerts</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/offline-export.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Offline export</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Recipes</h2><!----></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/recipes/" data-v-0009425e><!--[--><p class="text" data-v-0009425e>All recipes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/recipes/regression-or-flaky.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Regression or flake?</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/recipes/broken-locator.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Fix a broken locator</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/recipes/mass-failure.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Triage a run gone red</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/recipes/flaky-cleanup.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Cut costly flakiness</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/recipes/faster-suite.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Cut the time it costs</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0 has-active" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Running your instance</h2><!----></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/deployment.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Deployment</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/upgrading.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Upgrading</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/configuration.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Configuration reference</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/configuration/generator.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Configuration generator</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/authentication.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Authentication</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/database.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Database</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/storage.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Storage configuration</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-0009425e><div class="item" role="button" tabindex="0" data-v-0009425e><div class="indicator" data-v-0009425e></div><h2 class="text" data-v-0009425e>Apps & integrations</h2><!----></div><div class="items" data-v-0009425e><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/desktop.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Desktop app</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/extension.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Browser extension</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/ide-integration.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>Open in IDE</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link link" href="/mcp.html" data-v-0009425e><!--[--><p class="text" data-v-0009425e>MCP server</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0009425e data-v-0009425e><div class="item" data-v-0009425e><div class="indicator" data-v-0009425e></div><a class="VPLink link vp-external-link-icon link" href="https://piwitests.github.io/demo/docs" target="_blank" rel="noreferrer" data-v-0009425e><!--[--><p class="text" data-v-0009425e>API docs (interactive)</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-d8b57b2d data-v-9a6c75ad><div class="VPDoc has-sidebar has-aside" data-v-9a6c75ad data-v-e6f2a212><!--[--><!--]--><div class="container" data-v-e6f2a212><div class="aside" data-v-e6f2a212><div class="aside-curtain" data-v-e6f2a212></div><div class="aside-container" data-v-e6f2a212><div class="aside-content" data-v-e6f2a212><div class="VPDocAside" data-v-e6f2a212 data-v-cb998dce><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-cb998dce data-v-f610f197><div class="content" data-v-f610f197><div class="outline-marker" data-v-f610f197></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-f610f197>On this page</div><ul class="VPDocOutlineItem root" data-v-f610f197 data-v-53c99d69><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-cb998dce></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-e6f2a212><div class="content-container" data-v-e6f2a212><!--[--><!--]--><main class="main" data-v-e6f2a212><div style="position:relative;" class="vp-doc _database external-link-icon-enabled" data-v-e6f2a212><div><h1 id="database" tabindex="-1">Database <a class="header-anchor" href="#database" aria-label="Permalink to "Database""></a></h1><p>Piwi stores runs, test cases, executions, clusters and settings in a relational database. Two backends are supported: <strong>SQLite</strong> (the default, zero configuration) and <strong>PostgreSQL</strong> (for multi-user or high-concurrency deployments). Both are exercised by the project's CI on every commit, and migrations run automatically on startup either way.</p><p>Test artifacts — HTML reports, traces, attachments — do <strong>not</strong> live here; they go to <a href="./storage.html">file storage</a>.</p><h2 id="sqlite-default" tabindex="-1">SQLite (default) <a class="header-anchor" href="#sqlite-default" aria-label="Permalink to "SQLite (default)""></a></h2><p>Nothing to configure. The database file is created at <code>.data/piwi.db</code> on the first API call, inside the directory you mounted as <code>/app/.data</code> (container) or the working directory you ran from (<code>npx</code>).</p><p>Set <code>PIWI_DATABASE_PATH</code> to put it somewhere else:</p><div class="vp-code-group vp-adaptive-theme"><div class="tabs"><input type="radio" name="group-V_saP" id="tab-c6eztlO" checked><label data-title="Docker" for="tab-c6eztlO">Docker</label><input type="radio" name="group-V_saP" id="tab-Qe0ZCna"><label data-title=".env" for="tab-Qe0ZCna">.env</label></div><div class="blocks"><div class="language-bash vp-adaptive-theme active"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 3000:3000</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -v</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> $(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">pwd</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/.data:/app/.data</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> PIWI_DATABASE_PATH=/app/.data/custom.db</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> phenx/piwitests-server:latest</span></span></code></pre></div><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">PIWI_DATABASE_PATH</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/custom/path/database.db</span></span></code></pre></div></div></div><p>SQLite allows one writer at a time. That is ample for a team's test volume — a run submission is a short burst of writes — but if you run several dashboard replicas against one database, or see <code>database is locked</code> under load, move to PostgreSQL.</p><h2 id="postgresql" tabindex="-1">PostgreSQL <a class="header-anchor" href="#postgresql" aria-label="Permalink to "PostgreSQL""></a></h2><p>Set <code>PIWI_DATABASE_URL</code> and Piwi uses PostgreSQL instead of SQLite, creating and migrating every table on startup. PostgreSQL <strong>14+</strong>.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">PIWI_DATABASE_URL</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">postgresql://user:password@localhost:5432/piwi_dashboard</span></span></code></pre></div><p><code>PIWI_DATABASE_PATH</code> is ignored while <code>PIWI_DATABASE_URL</code> is set. A ready-to-run Compose stack with a <code>postgres:16-alpine</code> service is in the <a href="./deployment.html#docker-compose-with-postgresql">deployment guide</a>.</p><p>To try it locally against a throwaway server:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 5432:5432</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POSTGRES_USER=postgres</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POSTGRES_PASSWORD=postgres</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POSTGRES_DB=piwi_dashboard</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> postgres:16-alpine</span></span></code></pre></div><h2 id="switching-backends" tabindex="-1">Switching backends <a class="header-anchor" href="#switching-backends" aria-label="Permalink to "Switching backends""></a></h2><p>There is <strong>no migration path between SQLite and PostgreSQL</strong> — pointing an instance at a new backend gives you an empty dashboard, not a converted one. Switch before you accumulate history you care about, or accept starting fresh. Your file storage is unaffected either way.</p><h2 id="retention-and-backups" tabindex="-1">Retention and backups <a class="header-anchor" href="#retention-and-backups" aria-label="Permalink to "Retention and backups""></a></h2><ul><li><strong>Retention</strong> — the nightly sweep prunes runs older than <code>PIWI_RETENTION_DAYS</code>, off by default. See <a href="./storage.html#data-retention">Data retention</a>.</li><li><strong>Backups</strong> — SQLite has an online-consistent backup recipe, PostgreSQL uses <code>pg_dump</code>. Both, plus what to copy alongside the database, are in <a href="./deployment.html#backups">Backups</a>.</li><li><strong>Upgrades apply migrations automatically and they are forward-only.</strong> Read <a href="./upgrading.html">Upgrading</a> before bumping a version tag.</li></ul><h2 id="see-also" tabindex="-1">See also <a class="header-anchor" href="#see-also" aria-label="Permalink to "See also""></a></h2><ul><li><a href="./configuration.html#database">Configuration reference</a> — every <code>PIWI_DATABASE_*</code> and retention variable</li><li><a href="./storage.html">Storage configuration</a> — where reports, traces and attachments go</li><li><a href="./deployment.html">Deployment</a> — Compose, Kubernetes and one-click templates</li><li>Changing the schema is a contributor task, not an operator one: <a href="https://github.com/PiwiTests/platform/blob/main/CONTRIBUTING.md" target="_blank" rel="noreferrer">CONTRIBUTING.md</a></li></ul></div></div></main><footer class="VPDocFooter" data-v-e6f2a212 data-v-1bcd8184><!--[--><!--]--><div class="edit-info" data-v-1bcd8184><div class="edit-link" data-v-1bcd8184><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/PiwiTests/platform/edit/main/apps/docs/database.md" target="_blank" rel="noreferrer" data-v-1bcd8184><!--[--><span class="vpi-square-pen edit-link-icon" data-v-1bcd8184></span> Edit this page on GitHub<!--]--></a></div><div class="last-updated" data-v-1bcd8184><p class="VPLastUpdated" data-v-1bcd8184 data-v-1bb0c8a8>Updated at: <time datetime="2026-08-06T14:44:06.000Z" data-v-1bb0c8a8></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-1bcd8184><span class="visually-hidden" id="doc-footer-aria-label" data-v-1bcd8184>Pager</span><div class="pager" data-v-1bcd8184><a class="VPLink link pager-link prev" href="/authentication.html" data-v-1bcd8184><!--[--><span class="desc" data-v-1bcd8184>Previous page</span><span class="title" data-v-1bcd8184>Authentication</span><!--]--></a></div><div class="pager" data-v-1bcd8184><a class="VPLink link pager-link next" href="/storage.html" data-v-1bcd8184><!--[--><span class="desc" data-v-1bcd8184>Next page</span><span class="title" data-v-1bcd8184>Storage configuration</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-d8b57b2d data-v-566314d4><div class="container" data-v-566314d4><p class="message" data-v-566314d4>Released under the MIT License. Zero telemetry — Piwi never phones home.<br>Piwi Dashboard is not affiliated with, endorsed by, or connected to Microsoft Corporation. Playwright is a trademark of Microsoft.</p><p class="copyright" data-v-566314d4>Copyright © 2025-present Fabien Ménager</p></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"ai-diagnosis.md\":\"DAkr4uML\",\"ai-steps.md\":\"Bkarxp5N\",\"analytics.md\":\"BnvyXRv9\",\"authentication.md\":\"SpVk9Bbv\",\"backend-logs.md\":\"Bn3vBEm8\",\"capture-fixtures.md\":\"BZcWoMBU\",\"ci.md\":\"BCt4H4MP\",\"comparison.md\":\"CR7V7gCX\",\"concepts.md\":\"B0sxcjPK\",\"configuration.md\":\"BgcDXG4i\",\"configuration_generator.md\":\"KNwEERGk\",\"database.md\":\"DOnXDaxf\",\"deployment.md\":\"CvrOFqaC\",\"desktop.md\":\"90meDk4D\",\"evidence.md\":\"CWUZtoEg\",\"extension.md\":\"0W03Pxwo\",\"flaky-tests.md\":\"Be55EvG8\",\"getting-started.md\":\"CZA_qK22\",\"ide-integration.md\":\"JBe152TO\",\"importing-runs.md\":\"BzoXYc85\",\"index.md\":\"BRKtM8on\",\"mcp.md\":\"BWyKfua7\",\"notifications.md\":\"COIiywxF\",\"offline-export.md\":\"Byx805c5\",\"privacy.md\":\"BE60_71j\",\"recipes_broken-locator.md\":\"DasTYNN5\",\"recipes_faster-suite.md\":\"Bsii_gRh\",\"recipes_flaky-cleanup.md\":\"Bt9_csou\",\"recipes_index.md\":\"DA6ibERR\",\"recipes_mass-failure.md\":\"D3BX_DwZ\",\"recipes_regression-or-flaky.md\":\"R8wEWzDO\",\"reporter.md\":\"BREIjdO0\",\"storage.md\":\"Bee7MGJT\",\"timeline-markers.md\":\"CUBunyAP\",\"ui-overview.md\":\"DYXcbGot\",\"upgrading.md\":\"CSfu-BId\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Piwi Dashboard\",\"description\":\"CI throws away every report it makes. Piwi keeps them — then groups the failures by root cause, scores the flaky tests, and finds the locator you should have used. Self-hosted, MIT, zero telemetry.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"outline\":\"deep\",\"search\":{\"provider\":\"local\"},\"nav\":[{\"text\":\"Home\",\"link\":\"/\"},{\"text\":\"Getting started\",\"link\":\"/getting-started\"},{\"text\":\"Reporter\",\"link\":\"/reporter\"},{\"text\":\"API docs\",\"link\":\"https://piwitests.github.io/demo/docs\"},{\"text\":\"Demo\",\"link\":\"https://piwitests.github.io/demo/\"}],\"sidebar\":[{\"text\":\"Start here\",\"items\":[{\"text\":\"Getting started\",\"link\":\"/getting-started\"},{\"text\":\"Core concepts\",\"link\":\"/concepts\"},{\"text\":\"Why Piwi? (comparison & FAQ)\",\"link\":\"/comparison\"},{\"text\":\"Privacy & data flow\",\"link\":\"/privacy\"}]},{\"text\":\"Sending results\",\"items\":[{\"text\":\"Reporter\",\"link\":\"/reporter\"},{\"text\":\"Capture fixtures\",\"link\":\"/capture-fixtures\"},{\"text\":\"AI steps\",\"link\":\"/ai-steps\"},{\"text\":\"CI & sharding\",\"link\":\"/ci\"},{\"text\":\"Backend logs\",\"link\":\"/backend-logs\"},{\"text\":\"Importing past runs\",\"link\":\"/importing-runs\"}]},{\"text\":\"Reading the results\",\"items\":[{\"text\":\"UI overview\",\"link\":\"/ui-overview\"},{\"text\":\"Failure evidence\",\"link\":\"/evidence\"},{\"text\":\"AI diagnosis & clustering\",\"link\":\"/ai-diagnosis\"},{\"text\":\"Flaky tests\",\"link\":\"/flaky-tests\"},{\"text\":\"Analytics\",\"link\":\"/analytics\"},{\"text\":\"Timeline markers\",\"link\":\"/timeline-markers\"},{\"text\":\"Notifications & alerts\",\"link\":\"/notifications\"},{\"text\":\"Offline export\",\"link\":\"/offline-export\"}]},{\"text\":\"Recipes\",\"items\":[{\"text\":\"All recipes\",\"link\":\"/recipes/\"},{\"text\":\"Regression or flake?\",\"link\":\"/recipes/regression-or-flaky\"},{\"text\":\"Fix a broken locator\",\"link\":\"/recipes/broken-locator\"},{\"text\":\"Triage a run gone red\",\"link\":\"/recipes/mass-failure\"},{\"text\":\"Cut costly flakiness\",\"link\":\"/recipes/flaky-cleanup\"},{\"text\":\"Cut the time it costs\",\"link\":\"/recipes/faster-suite\"}]},{\"text\":\"Running your instance\",\"items\":[{\"text\":\"Deployment\",\"link\":\"/deployment\"},{\"text\":\"Upgrading\",\"link\":\"/upgrading\"},{\"text\":\"Configuration reference\",\"link\":\"/configuration\"},{\"text\":\"Configuration generator\",\"link\":\"/configuration/generator\"},{\"text\":\"Authentication\",\"link\":\"/authentication\"},{\"text\":\"Database\",\"link\":\"/database\"},{\"text\":\"Storage configuration\",\"link\":\"/storage\"}]},{\"text\":\"Apps & integrations\",\"items\":[{\"text\":\"Desktop app\",\"link\":\"/desktop\"},{\"text\":\"Browser extension\",\"link\":\"/extension\"},{\"text\":\"Open in IDE\",\"link\":\"/ide-integration\"},{\"text\":\"MCP server\",\"link\":\"/mcp\"},{\"text\":\"API docs (interactive)\",\"link\":\"https://piwitests.github.io/demo/docs\"}]}],\"editLink\":{\"pattern\":\"https://github.com/PiwiTests/platform/edit/main/apps/docs/:path\",\"text\":\"Edit this page on GitHub\"},\"lastUpdated\":{\"text\":\"Updated at\",\"formatOptions\":{\"dateStyle\":\"full\",\"timeStyle\":\"medium\"}},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/PiwiTests/platform\"}],\"externalLinkIcon\":true,\"footer\":{\"message\":\"Released under the MIT License. Zero telemetry — Piwi never phones home.<br>Piwi Dashboard is not affiliated with, endorsed by, or connected to Microsoft Corporation. Playwright is a trademark of Microsoft.\",\"copyright\":\"Copyright © 2025-present Fabien Ménager\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
</body>
</html>