// Import Swiper styles
import 'swiper/css'
import { NextSeo } from 'next-seo'
import dynamic from 'next/dynamic'
import NextImage from 'next/image'
import Link from 'next/link'
import { useRouter } from 'next/router'
import { useState } from 'react'
import { Swiper, SwiperSlide } from 'swiper/react'
import { Badge, Button, Image, Tabs } from 'ui'
// data
import ApiExamplesData from 'data/products/database/api-examples'
import ExtensionsExamplesData from 'data/products/database/extensions-examples'
import SqlViewCarouselData from 'data/products/database/sql-view-carousel.json'
import TableViewCarouselData from 'data/products/database/table-view-carousel.json'
import MainProducts from '~/data/MainProducts'
import HighlightsCards from '~/data/products/database/highlight-cards'
import { ArrowUpRight, X } from 'lucide-react'
import { PRODUCT_NAMES } from 'shared-data/products'
import { TweetCard } from 'ui-patterns/TweetCard'
import ProductsNav from '~/components/Products/ProductsNav'
import ProductHeader from '~/components/Sections/ProductHeader'
import { ETLVisual } from '~/data/products/database/etl-visual'
const NewFeatureCard = dynamic(() => import('~/components/NewFeatureCard'))
const ImageCarousel = dynamic(() => import('~/components/Carousels/ImageCarousel'))
const SplitCodeBlockCarousel = dynamic(
() => import('~/components/Carousels/SplitCodeBlockCarousel')
)
const FeatureColumn = dynamic(() => import('~/components/FeatureColumn'))
const SingleQuote = dynamic(() => import('~/components/Sections/SingleQuote'))
const DefaultLayout = dynamic(() => import('~/components/Layouts/Default'))
const SectionContainer = dynamic(() => import('~/components/Layouts/SectionContainer'))
const ProductIcon = dynamic(() => import('~/components/ProductIcon'))
const APISection = dynamic(() => import('~/components/Sections/APISection'))
const GithubExamples = dynamic(() => import('~/components/Sections/GithubExamples'))
function Database() {
// base path for images
const { basePath } = useRouter()
const [dashboardSwiper, setDashboardSwiper] = useState(undefined)
const [dashboardSwiperActiveIndex, setDashboardSwiperActiveIndex] = useState(0)
function handleDashboardSwiperNav(e: number) {
setDashboardSwiperActiveIndex(e)
// @ts-ignore
dashboardSwiper.slideTo(e)
}
const meta_title = 'Database | Open source SQL Database'
const meta_description =
'With supabase’s APIs and easy to use dashboard, it makes designing relational databases easy.'
return (
<>
Every Supabase project is a dedicated Postgres database.
100% portable. Bring your existing Postgres database, or migrate away at any time.
Leveraging Postgres's proven Row Level Security.
Integrated with JWT authentication which controls exactly what your users can
access.
Data-change listeners over websockets.
Subscribe and react to database changes, milliseconds after they happen.
The simplicity of a Table Editor, or the power of a SQL editor. Your choice.
Stream your Postgres data to external systems.
Automatically replicate your database changes to external data warehouses and
analytics platforms in real-time, without pipelines.
(without the hassle)
,
]}
subheader={[
'Every Supabase project is a dedicated Postgres database, trusted by millions of developers.',
"Postgres is one of the world's most scalable databases.",
]}
image={[
Just Postgres
Secure by default
Realtime enabled
Easy to use dashboard
Supabase ETL
Available libraries:
Supabase works natively with Postgres extensions.
Choose from a huge collection of Postgres extensions, enabled with a single click.