MemoryVault Community Edition is the self-hostable App and Admin version of MemoryVault. It lets you save memories, notes, photos, videos, loved-one profiles, groups, and legacy messages in your own deployment.
This public repository intentionally contains only the product app and Payload admin. It does not include the private MemoryVault website, marketing CMS, hosted-service code, or internal operational code.
The Community Edition is the free self-hosted app and admin experience.
- MemoryVault app routes for dashboard, memories, loved ones, groups, and account
- Payload admin panel
- App email/password authentication routes
- Memory, media, loved-one, group, legacy-delivery, and user APIs
MemoryVault Community Edition is licensed under the PolyForm Noncommercial License 1.0.0.
See LICENSE.md and NOTICE.
- Node.js
24.15.0or newer, below Node25 - npm
- PostgreSQL
- S3-compatible object storage for media uploads
- Optional: Resend for email delivery
- Clone the repository:
git clone https://github.com/EgbertLudema/MemoryVault-Community-Edition.git
cd MemoryVault-Community-Edition- Install dependencies:
npm install- Copy the environment file:
cp .env.example .env- Fill in
.env.
Minimum local values:
NEXT_PUBLIC_SERVER_URL=http://localhost:3000
PAYLOAD_SECRET=replace-with-a-long-random-secret
POSTGRES_URL=postgresql://postgres:postgres@localhost:5432/memoryvault
S3_BUCKET=memoryvault
S3_REGION=auto
S3_ENDPOINT=https://<account-id>.r2.cloudflarestorage.com
S3_ACCESS_KEY_ID=your-access-key-id
S3_SECRET_ACCESS_KEY=your-secret-access-key
S3_PUBLIC_URL=https://media.example.com
APP_ENCRYPTION_KEY=replace-with-a-long-random-secret- Make sure Postgres is running.
For the local database from this repository:
docker compose up -d postgresIf you use a hosted Postgres database, set POSTGRES_URL to the exact
connection string from that provider.
- Run the database migrations:
npm run db:migrate- Start the app:
npm run dev- Open:
http://localhost:3000The root URL redirects to the app dashboard. Payload Admin is available at:
http://localhost:3000/adminYou can start a local Postgres database and the app with Docker Compose:
cp .env.example .env
docker compose upThe compose file provides Postgres to the app container. You still need to set
secrets and service credentials in .env, especially PAYLOAD_SECRET,
APP_ENCRYPTION_KEY, and the S3_* media storage values.
If migrations or npm run dev fail with:
password authentication failed for user 'neondb_owner'then the app is reaching Postgres, but the username/password in POSTGRES_URL
are not accepted by that database. Replace POSTGRES_URL in .env with the
current connection string from your database provider, or use the local Docker
database URL:
POSTGRES_URL=postgresql://postgres:postgres@localhost:5432/memoryvaultIf an earlier failed Community Edition migration was run against a throwaway database, use a fresh database before retrying migrations.
MemoryVault stores uploaded media in S3-compatible object storage.
Recommended options:
- Cloudflare R2 for hosted object storage.
- MinIO for fully self-hosted object storage.
- Any provider with an S3-compatible API.
npm run dev: start the local development servernpm run db:migrate: run Payload database migrationsnpm run build: build the production appnpm run start: start the production server after a buildnpm run generate:types: generate Payload typesnpm run generate:importmap: generate the Payload admin import map
This repository does not include the MemoryVault marketing website, website page builder, website assets, hosted-service implementation, or private deployment workflows.