- TypeScript 99.4%
- Dockerfile 0.6%
Verified against a fresh database: docker bootstrap migration path applies all 20 tables incl crm_users; local tsx path + auth flow confirmed E2E. |
||
|---|---|---|
| drizzle | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| drizzle.config.ts | ||
| INSTALL.md | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
Kinexa Mitra CRM — Community Edition
A self-hostable, open-source CRM engine: contacts, leads, pipeline, opportunities, activities, quotations & invoices, and SMTP-based email campaigns. Built with TypeScript, Hono, Drizzle ORM and PostgreSQL.
This is the Community Edition (CE) — the open core of Kinexa Mitra. It runs standalone with its own local authentication and a single workspace. The hosted Cloud edition adds WhatsApp messaging, an AI assistant, multi-tenant workspaces, and managed support — those are not part of this repository.
License: AGPL-3.0. If you run a modified version as a network service, you must offer your users the corresponding source. See LICENSE.
Features
- Contacts — people & companies, tags, custom fields
- Leads & Pipeline — stages, drag-through, conversion to opportunities
- Opportunities — deals with value & stage tracking
- Activities — tasks, calls, meetings
- Quotations → Invoices — quote-to-cash documents with line items
- Email & Campaigns — bring your own SMTP, subscriber lists, broadcasts
- Templates — starter packs for common Indonesian business types
- Local auth — register/login, first user becomes admin
Full step-by-step installation, configuration, updating, backup, and troubleshooting: see INSTALL.md. The quick starts below get you running fastest.
Requirements
- Node.js ≥ 22
- PostgreSQL ≥ 14
- Redis (for background email/campaign jobs)
Quick start (Docker)
export JWT_SECRET="$(openssl rand -hex 32)" # or set it in a .env file
docker compose up -d --build # Postgres + Redis + API
The container applies database migrations automatically on startup. The API is
then on http://localhost:3002. Create the first (admin) account:
curl -X POST http://localhost:3002/api/v1/auth/register \
-H 'Content-Type: application/json' \
-d '{"email":"you@example.com","password":"a-strong-password","name":"You"}'
Quick start (local)
npm install
cp .env.example .env # set DATABASE_URL, REDIS_URL, JWT_SECRET
npm run db:generate # (only if you changed the schema)
npx tsx src/db/migrate.ts # apply migrations
npm run dev # http://localhost:3002
Configuration
All configuration is via environment variables — see .env.example.
| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
yes | PostgreSQL connection string |
REDIS_URL |
yes | Redis connection string (BullMQ) |
JWT_SECRET |
yes | ≥16 chars; signs the login token |
DEFAULT_TENANT_ID |
no | Workspace id (single-tenant); default default |
CORS_ORIGINS |
no | Comma-separated allowed web origins |
PORT |
no | HTTP port; default 3002 |
API
POST /api/v1/auth/register— create an account (first user is admin)POST /api/v1/auth/login— obtain a JWT (also set as anhttpOnlycookie)GET /api/v1/auth/me— current userGET /api/v1/contacts,/leads,/opportunities,/pipeline,/activities,/invoices,/quotations,/emails,/campaigns,/subscribers,/templates,/tags,/client-locations,/dashboard
Full generated spec: GET /api/v1/docs.
What's NOT in the Community Edition
By design, the following are Cloud-edition features and live outside this repo:
- WhatsApp messaging (Kinexa Nidaa gateway)
- AI assistant / auto-reply / lead scoring (Kinexa Liqaa)
- Multi-tenant workspaces & billing
- Managed hosting, backups, and support
Contributing
See CONTRIBUTING.md.
License
Copyright © 2026 PT Kinetikum. Licensed under the GNU Affero General Public License v3.0. See LICENSE.