Quick Start
Get up and running with Lunogram using Docker Compose
Want to skip the setup?
Get started in minutes with Lunogram Cloud. No infrastructure to maintain.
Try Lunogram Cloud
This guide gets you from zero to a running self-hosted Lunogram instance in under 5 minutes.
Prerequisites: Make sure you have Docker installed and running on your machine.
Install & Run
git clone https://github.com/lunogram/platform.git
cd platform
docker compose up -dThat's it. Lunogram is now running at http://localhost:8080.
Log In
Compose seeds a first administrator account on the first boot. Sign in with it:
| Field | Value |
|---|---|
admin@localhost | |
| Password | change-this-development-password |
The pair is written into a real account with the password hashed, so you can change it from the console like any other. Everybody else who needs access is invited to a project rather than handed these credentials.
Compose also ships a published development signing key for console sessions. Anyone holding it can mint a session for any administrator, so set your own — along with your own first account — before a deployment is reachable by anybody else. See Sign-in.
What's Running
Docker Compose starts everything you need:
| Service | Purpose | Port |
|---|---|---|
| Lunogram | Main application | 8080 |
| PostgreSQL | Database | 5432 |
| Redis | Caching | 6379 |
| NATS | Event streaming | 4222 |
| Mailpit | Local mail catcher | 8025 |
Password resets and project invitations are sent by the platform itself, so a deployment has to say where its mail goes. Compose points it at Mailpit: every message is readable at http://localhost:8025, nothing leaves your machine, and no SMTP account is needed. Point it at a real relay before production — see Sending mail.
Your First Campaign
Once logged in, you'll go through a quick onboarding to create your first project. Then:
1. Add an Integration
Connect an email provider like Resend or Twilio for SMS.
2. Create a List
Define which users should receive your messages.
3. Build a Campaign
Design your message and send it.
4. Set Up a Journey
Automate messages based on user behavior.
Integrate Your App
Start tracking users and events:
npm install @lunogram/js-sdkimport { Lunogram } from "@lunogram/js-sdk";
const lunogram = new Lunogram(
"<session-token>", // minted by your backend — see Settings → Access
"http://localhost:8080/api",
);
await lunogram.user.upsert({
identifier: [{ externalId: "user_123" }],
email: "user@example.com",
});
await lunogram.user.events.post([{ name: "user.signed_up" }]);