Peppermint - A Minimalist Open-Source Service Desk for Homelabs

If you've ever wanted a lightweight, email-based ticketing system without diving into the complexity of full ITSM suites like GLPI or OTRS, Peppermint is worth a look. It's an open-source helpdesk platform that focuses on simplicity, offering clean email-to-ticket workflows, web UI ticket management, and optional OIDC SSO.

For small businesses, makerspaces, or homelab enthusiasts, Peppermint provides enough structure to securely manage incoming requests, service issues, or project discussions without overkill features like change or asset management.

Features

Email-based ticketing: users can simply email a support address, and Peppermint automatically creates and tracks tickets.

UI: clean and responsive interface for managing tickets, agents, and users.

OIDC SSO support: integrates neatly with existing identity providers (Keycloak, Authentik, etc.).

Webhook capability: enables easy automation; for example, triggering n8n/Home Assistant automations, Discord alerts, or scripts when new tickets are created.

Minimal footprint: runs easily via Docker Compose, ideal for a Raspberry Pi, small VM, or Proxmox container.

Docker Compose:

version: "3.1"

services:
peppermint_postgres:
container_name: peppermint_postgres
image: postgres:15
restart: always
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_USER: peppermint
POSTGRES_PASSWORD: 1234
POSTGRES_DB: peppermint

healthcheck:
test: ["CMD-SHELL", "pg_isready -U peppermint -d peppermint"]
interval: 5s
timeout: 5s
retries: 5

peppermint:
container_name: peppermint
image: pepperlabs/peppermint:latest
ports:
- 3000:3000
- 5003:5003
restart: always
depends_on:
peppermint_postgres:
condition: service_healthy
environment:
DB_TYPE: postgres
DB_HOST: peppermint_postgres
DB_PORT: 5432
DB_NAME: peppermint
DB_USERNAME: peppermint
DB_PASSWORD: 1234
SECRET: peppermint4life

volumes:
pgdata:

Once deployed, access Peppermint via http://<your-server-ip>:3000 and complete the setup through the web interface. The default creds are admin@admin.com and 1234.

Extending Peppermint with Webhooks

Because it supports webhooks, Peppermint can easily integrate into your automation ecosystem. The example below is used to automatically post a message to a Discord channel every time a new ticket is created.

You'll need a Discord webhook URL, which can be generated from any channel’s Integrations > Webhooks menu.

Create a simple bridge script like this:

# peppermint_webhook_relay.py
from flask import Flask, request
import requests
import os

app = Flask(__name__)
DISCORD_WEBHOOK = os.getenv("DISCORD_WEBHOOK")

@app.route("/peppermint", methods=["POST"])
def peppermint_webhook():
data = request.json
title = data.get("title", "New Ticket")
description = data.get("description", "No description provided.")
ticket_id = data.get("id", "Unknown")

message = {
"embeds": [
{
"title": f"🎫 New Ticket #{ticket_id}: {title}",
"description": description,
"color": 16377819
}
]
}

requests.post(DISCORD_WEBHOOK, json=message)
return "ok", 200

if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)

Then run it (or containerise it) on the same network as Peppermint:

export DISCORD_WEBHOOK="https://discord.com/api/webhooks/..."
python3 peppermint_webhook_relay.py

In Peppermint's Webhook Settings, set the target URL to:

http://<your-server-ip>:8080/peppermint

Now, whenever a new ticket is created, a Discord embed will appear instantly.

Peppermint sits nicely between "too simple" and "too complex." It's perfect for structured support management without the baggage of enterprise ITSM tools.