> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/discordplace/discord.place/llms.txt
> Use this file to discover all available pages before exploring further.

# Prerequisites

> Everything you need before setting up your own discord.place instance.

Before installing discord.place, make sure you have the required services and accounts set up. The sections below cover what is required and what is optional.

## Required

<CardGroup cols={2}>
  <Card title="Node.js" icon="node-js">
    The server runs on any recent Node.js LTS version. The client requires Node.js 18.x specifically due to Next.js compatibility constraints.

    <Note>Use **Node.js 18.x** for the client. Mismatched versions can cause build failures.</Note>

    [Download Node.js](https://nodejs.org/en/download/)
  </Card>

  <Card title="npm" icon="box">
    npm is the package manager used for both the client and server. It is bundled with Node.js, so no separate installation is needed.

    [npm docs](https://www.npmjs.com/get-npm)
  </Card>

  <Card title="Git" icon="code-branch">
    Git is required to clone the repository and stay up to date with new releases.

    [Download Git](https://git-scm.com/downloads)
  </Card>

  <Card title="MongoDB" icon="database">
    discord.place uses MongoDB as its primary database. You can run a local instance or use a managed service like MongoDB Atlas.

    [Download MongoDB Community](https://www.mongodb.com/try/download/community)
  </Card>

  <Card title="S3-compatible storage" icon="cloud">
    Emoji and sound files are stored in an S3-compatible object store. Cloudflare R2 is recommended, but any S3-compatible service works (AWS S3, MinIO, etc.).
  </Card>

  <Card title="Discord application" icon="discord">
    You need a Discord application with a bot token (for the bot) and OAuth2 credentials (client ID and client secret) for user login.

    [Discord Developer Portal](https://discord.com/developers/applications)
  </Card>

  <Card title="Cloudflare Turnstile" icon="shield">
    Turnstile is used for human verification on the website. You need a Turnstile site key (for the client) and a secret key (for the server).

    [Get a Turnstile site key](https://developers.cloudflare.com/turnstile/get-started/#get-a-sitekey-and-secret-key)
  </Card>

  <Card title="CDN URL" icon="link">
    A publicly accessible URL where emoji and sound files will be served from. This is typically the public URL of your S3-compatible bucket or a CDN fronting it.
  </Card>
</CardGroup>

## Optional

These services are not required to run a basic instance, but enable additional functionality:

<CardGroup cols={2}>
  <Card title="Lemon Squeezy" icon="lemon">
    Required only if you want to offer Premium subscriptions. You need an API key and a webhook secret.

    [Lemon Squeezy Developer Guide](https://docs.lemonsqueezy.com/guides/developer-guide/getting-started#create-an-api-key)
  </Card>

  <Card title="Sentry" icon="bug">
    Enables server-side error tracking. Set `SENTRY_DSN` in the server `.env` file to activate.

    [Sentry documentation](https://docs.sentry.io)
  </Card>

  <Card title="Better Stack Uptime" icon="chart-line">
    Used for uptime monitoring and heartbeat checks (daily database backup, S3 availability). Set the `HEARTBEAT_ID_*` values in the server `.env` file.

    [Better Stack Uptime](https://betterstack.com/uptime)
  </Card>

  <Card title="Webhooks proxy server" icon="server">
    If you want to route webhook requests through a proxy, configure the `WEBHOOKS_PROXY_SERVER_*` variables in the server `.env` file.
  </Card>
</CardGroup>

<Note>
  S3 database backup variables (`S3_DATABASE_BACKUP_*`) are separate from the main S3 variables. If you leave them empty, the server will still start but will log warnings about missing backup configuration.
</Note>

Once you have these in place, continue to the [Installation](/self-hosting/installation) guide.
