diff --git a/apps/postgres-new/components/sidebar.tsx b/apps/postgres-new/components/sidebar.tsx
index d092729c..7e83219c 100644
--- a/apps/postgres-new/components/sidebar.tsx
+++ b/apps/postgres-new/components/sidebar.tsx
@@ -6,6 +6,7 @@ import {
ArrowRightToLine,
CircleEllipsis,
Database as DbIcon,
+ Download,
Loader,
LogOut,
PackagePlus,
@@ -26,6 +27,7 @@ import { useDatabasesQuery } from '~/data/databases/databases-query'
import { useDeployWaitlistCreateMutation } from '~/data/deploy-waitlist/deploy-waitlist-create-mutation'
import { useIsOnDeployWaitlistQuery } from '~/data/deploy-waitlist/deploy-waitlist-query'
import { Database } from '~/lib/db'
+import { downloadFile, titleToKebabCase } from '~/lib/util'
import { cn } from '~/lib/utils'
import { useApp } from './app-provider'
import { CodeBlock } from './code-block'
@@ -208,7 +210,7 @@ type DatabaseMenuItemProps = {
function DatabaseMenuItem({ database, isActive }: DatabaseMenuItemProps) {
const router = useRouter()
- const { user } = useApp()
+ const { user, dbManager } = useApp()
const [isPopoverOpen, setIsPopoverOpen] = useState(false)
const { mutateAsync: deleteDatabase } = useDatabaseDeleteMutation()
const { mutateAsync: updateDatabase } = useDatabaseUpdateMutation()
@@ -364,6 +366,28 @@ function DatabaseMenuItem({ database, isActive }: DatabaseMenuItemProps) {
onClick={async (e) => {
e.preventDefault()
+ if (!dbManager) {
+ throw new Error('dbManager is not available')
+ }
+
+ const db = await dbManager.getDbInstance(database.id)
+ const dumpBlob = await db.dumpDataDir()
+
+ const fileName = `${titleToKebabCase(database.name ?? 'My Database')}-${Date.now()}`
+ const file = new File([dumpBlob], fileName, { type: dumpBlob.type })
+
+ downloadFile(file)
+ }}
+ >
+
+
+ Download
+
+