Or browse the quick start

Self-host setup

Install the self-hosted edition on your infrastructure — same dashboard and API as Cloud, your servers and data.

This guide is for the self-hosted edition — a separate deployment from https://loggerman.dev (LoggerMan Cloud). Cloud uses Clerk sign-up and Stripe billing; self-hosted uses local auth, no marketing site, and unlimited tier on your Convex backend.

Clone the self-hosted repository (sibling to this Cloud repo), then follow the steps below. Integration code is the same — only baseUrl and credentials change.

What you get

  • Full product: logs, alerts, analytics, teams, SDK ingest
  • Root URL opens /dashboard (no marketing pages)
  • Admin bootstrapped from env; teammates join via invite + password
  • Convex Cloud by default (self-hosted Convex also supported)

Tech stack

LayerTechnology
UI + APINext.js, React, Tailwind
Database / realtimeConvex
AuthLocal email + password, session cookie, RS256 JWT for Convex
IngestREST API + @marvink02/loggerman-sdk
DeployDocker Compose (optional), Node 22 + pnpm

Prerequisites

  • Node.js 20+ and pnpm
  • Convex project (Convex Cloud recommended for v1)
  • Docker (optional, for container deploy)
  • A public HTTPS URL in production (for NEXT_PUBLIC_APP_URL and JWT issuer)
  1. Clone and configure

    Initial setup
    git clone <your-self-hosted-repo-url> loggerman_selfhosted
    cd loggerman_selfhosted
    cp .env.self-hosted.example .env.local
    chmod +x scripts/setup.sh scripts/sync-upstream.sh
    ./scripts/setup.sh

    Edit .env.local:

    VariableRequiredNotes
    NEXT_PUBLIC_APP_URLYesPublic origin, e.g. https://logs.company.com
    NEXT_PUBLIC_CONVEX_URLYesFrom Convex dashboard
    CONVEX_DEPLOYMENTDevFrom npx convex dev
    CONVEX_SERVER_SECRETYesSame on Next.js and Convex
    LOGGERMAN_SESSION_SECRETYesMin 32 chars
    LOGGERMAN_JWT_PRIVATE_KEYYesRS256 PEM — setup.sh generates
    AUTH_JWT_ISSUERYesMatch NEXT_PUBLIC_APP_URL
    LOGGERMAN_ADMIN_EMAILSeedFirst admin only
    LOGGERMAN_ADMIN_PASSWORDSeedMin 12 characters
  2. Deploy Convex

    Convex deploy
    pnpm install
    npx convex deploy
    npx convex env set CONVEX_SERVER_SECRET "<your-secret>"
    npx convex env set AUTH_JWT_ISSUER "<your-app-url>"
    # Do NOT set BILLING_ENFORCED
  3. Seed admin

    Admin bootstrap
    pnpm seed:admin

    Creates one admin with unlimited tier if no users exist.

  4. Run the app

    Development:

    Dev server
    pnpm dev

    Docker:

    Docker Compose
    docker compose up --build
  5. First use

    1. Open your app URL → redirects to /dashboard /sign-in
    2. Sign in with admin credentials
    3. New project → create a project
    4. Settings → Integration → copy token → Send test log
    5. Open Logs — confirm the entry appears

Adding teammates

  1. Settings → Team → invite by email or link
  2. Invitee opens link → sets password (if new) → joins project
  3. Existing users sign in first, then reopen the invite link

See also Team access.

Convex self-hosted (advanced)

Use your self-hosted Convex deployment URL as NEXT_PUBLIC_CONVEX_URL. The Next.js app and env flow are unchanged. See Convex self-hosted docs.

Upgrading from Cloud releases

Product fixes ship in the Cloud repo. Sync them into your self-hosted checkout without merging self-hosted-only changes back into Cloud:

Upgrade
git pull
./scripts/sync-upstream.sh ../loggerman <release-tag>
npx convex deploy
pnpm build
docker compose up --build   # if using Docker

Environment on Convex

Required Convex env
npx convex env set CONVEX_SERVER_SECRET "<secret>"
npx convex env set AUTH_JWT_ISSUER "https://logs.company.com"

Optional email alerts:

Email alerts (optional)
npx convex env set RESEND_API_KEY "<key>"
npx convex env set ALERT_EMAIL_FROM "alerts@company.com"

Troubleshooting

SymptomFix
Redirect loop on sign-inCheck AUTH_JWT_ISSUER matches browser URL; verify /.well-known/jwks.json loads
Dashboard stuck loadingSession ok but Convex JWT failed — check LOGGERMAN_JWT_PRIVATE_KEY
Ingest 401/403Token/project mismatch; regenerate token in API keys
seed:admin"Users already exist"Normal if admin already seeded
CORS from browser ingestPrefer server-side SDK; ingest API supports CORS for dev

More help: Troubleshooting.

Prefer managed hosting? Quick start on LoggerMan Cloud gets you logging in minutes at https://loggerman.dev.