Skip to main content
This page covers everything you need to run HashDrop on your own machine or server. It includes setting up the Next.js web application, configuring environment variables for LiveKit, and optionally running the Expo mobile app against your local or remote instance.

Prerequisites

Before you begin, make sure you have the following installed:
  • Node.js 18 or later and npm
  • Git
  • A LiveKit account for video conferencing (livekit.io — a free tier is available)
  • (Optional) Expo Go on a physical device, or an iOS Simulator / Android Emulator for mobile

Web application setup

1

Clone the repository

git clone https://github.com/metesahankurt/hashdrop.git
cd hashdrop
2

Install dependencies

Install the web application dependencies from the project root.
npm install
3

Configure environment variables

Copy the example environment file and fill in your values:
cp .env.local.example .env.local
Open .env.local and set the following variables:
VariableDescription
LIVEKIT_API_KEYYour LiveKit project API key
LIVEKIT_API_SECRETYour LiveKit project API secret
LIVEKIT_URLYour LiveKit server URL (e.g., https://your-project.livekit.cloud)
NEXT_PUBLIC_LIVEKIT_URLPublic WebSocket URL used by the browser client (e.g., wss://your-project.livekit.cloud)
Example .env.local:
LIVEKIT_API_KEY=your_api_key_here
LIVEKIT_API_SECRET=your_api_secret_here
LIVEKIT_URL=https://your-project.livekit.cloud
NEXT_PUBLIC_LIVEKIT_URL=wss://your-project.livekit.cloud
File transfer and chat rooms use WebRTC peer-to-peer connections and do not require LiveKit. You only need LiveKit credentials if you want video conferencing to work.
4

Start the development server or build for production

Development:
npm run dev
The app is available at http://localhost:3000. Turbopack is enabled by default for fast hot module reloading.Production:
npm run build
npm run start
The production server listens on port 3000 by default. Set the PORT environment variable to change this.
In production, WebRTC peer-to-peer connections may fail on restricted networks (corporate firewalls, symmetric NAT) if you rely on STUN servers alone. Deploy a TURN server (e.g., coturn) and configure it in your ICE server settings to ensure reliable connectivity for all users.

Mobile app setup

The mobile app lives in the mobile/ directory and is built with Expo 54 (React Native).
1

Navigate to the mobile workspace

cd mobile
2

Install mobile dependencies

npm install
3

Configure the mobile environment

Copy the example env file and set your web app URL:
cp .env.example .env
VariableDescription
EXPO_PUBLIC_WEB_URLURL of the HashDrop web app the mobile client connects to
For a local development setup, use your machine’s LAN IP so physical devices on the same network can reach the server:
# Production
EXPO_PUBLIC_WEB_URL=https://hashdrop.metesahankurt.cloud

# Local development (replace with your machine's LAN IP)
EXPO_PUBLIC_WEB_URL=http://192.168.1.10:3000
4

Start the Expo development client

npm start
  • Physical device: Scan the QR code with Expo Go
  • iOS simulator: Press i in the terminal, or run npm run mobile:ios from the project root
  • Android emulator: Press a in the terminal, or run npm run mobile:android from the project root

Deploying to Vercel

HashDrop ships with a vercel.json at the project root, so deployment to Vercel works out of the box with zero additional configuration.
Push the repository to GitHub and import it in the Vercel dashboard. Vercel auto-detects the Next.js framework. Add your LIVEKIT_API_KEY, LIVEKIT_API_SECRET, LIVEKIT_URL, and NEXT_PUBLIC_LIVEKIT_URL as environment variables in the Vercel project settings before deploying.
The vercel.json uses the following settings automatically:
{
  "buildCommand": "npm run build",
  "devCommand": "npm run dev",
  "installCommand": "npm install",
  "framework": "nextjs",
  "outputDirectory": ".next"
}

Next steps

Environment variables reference

Full reference for all supported configuration variables

ICE server configuration

Configure STUN and TURN servers for reliable peer connections

Architecture overview

Understand the full P2P connection lifecycle

Security & privacy

How HashDrop keeps your data private by design

Build docs developers (and LLMs) love