Back
gh

kanbn/kan: The open source Trello alternative.

The open source Trello alternative. Contribute to kanbn/kan development by creating an account on GitHub.

by kanbn github.com 888 words
View original

github-background

Kan

The open-source project management alternative to Trello.

Roadmap Β· Website Β· Docs Β· Discord

License

Features πŸ’«

See our roadmap for upcoming features.

Screenshot πŸ‘οΈ

hero-dark

Made With πŸ› οΈ

Self Hosting 🐳

One-click Deployments

The easiest way to deploy Kan is through Railway. We’ve partnered with Railway to maintain an official template that supports the development of the project.

Deploy on Railway

Docker Compose

Alternatively, you can self-host Kan with Docker Compose. This will set up everything for you including your postgres database and automatically run migrations.

  1. Create a .env file with your environment variables (see Environment Variables section below)
  2. Use the provided docker-compose.yml file or create your own with the following configuration:
services:
  migrate:
    image: ghcr.io/kanbn/kan-migrate:latest
    container_name: kan-migrate
    networks:
      - kan-network
    environment:
      - POSTGRES_URL=${POSTGRES_URL}
    depends_on:
      postgres:
        condition: service_healthy
    restart: "no"

  web:
    image: ghcr.io/kanbn/kan:latest
    container_name: kan-web
    ports:
      - "${WEB_PORT:-3000}:3000"
    networks:
      - kan-network
    env_file:
      - .env
    environment:
      - NEXT_PUBLIC_BASE_URL=${NEXT_PUBLIC_BASE_URL}
      - BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET}
      - POSTGRES_URL=${POSTGRES_URL}
      - NEXT_PUBLIC_ALLOW_CREDENTIALS=true
    depends_on:
      migrate:
        condition: service_completed_successfully
    restart: unless-stopped

  postgres:
    image: postgres:15
    container_name: kan-db
    environment:
      - POSTGRES_DB=kan_db
      - POSTGRES_USER=kan
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    ports:
      - 5432:5432
    volumes:
      - kan_postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U kan -d kan_db"]
      interval: 5s
      timeout: 5s
      retries: 10
    restart: unless-stopped
    networks:
      - kan-network

networks:
  kan-network:

volumes:
  kan_postgres_data:
  1. Start the containers in detached mode:
docker compose up -d

The migrate service will automatically run database migrations before the web service starts. The application will be available at http://localhost:3000 (or the port specified in WEB_PORT).

Managing containers:

For the complete Docker Compose configuration with all optional features, see docker-compose.yml in the repository.

Local Development πŸ§‘πŸ’»

  1. Clone the repository (or fork)
git clone https://github.com/kanbn/kan.git
  1. Install dependencies
pnpm install
  1. Copy .env.example to .env and configure your environment variables
  2. Migrate database
pnpm db:migrate
  1. Start the development server
pnpm dev

Environment Variables πŸ”

VariableDescriptionRequiredExample
POSTGRES_URLPostgreSQL connection URLTo use external databasepostgres://user:pass@localhost:5432/db
REDIS_URLRedis connection URLFor rate limiting (optional)redis://localhost:6379 or redis://redis:6379 (Docker)
EMAIL_FROMSender email addressFor Email"Kan <hello@mail.kan.bn>"
SMTP_HOSTSMTP server hostnameFor Emailsmtp.resend.com
SMTP_PORTSMTP server portFor Email465
SMTP_USERSMTP username/emailNoresend
SMTP_PASSWORDSMTP password/tokenNore_xxxx
SMTP_SECUREUse secure SMTP connection (defaults to true if not set)For Emailtrue
SMTP_REJECT_UNAUTHORIZEDReject invalid certificates (defaults to true if not set)For Emailfalse
NEXT_PUBLIC_DISABLE_EMAILTo disable all email featuresFor Emailtrue
NEXT_PUBLIC_BASE_URLBase URL of your installationYeshttp://localhost:3000
NEXT_API_BODY_SIZE_LIMITMaximum API request body size (defaults to 1mb)No50mb
BETTER_AUTH_ALLOWED_DOMAINSComma-separated list of allowed domains for OIDC loginsFor OIDC/Social loginexample.com,subsidiary.com
BETTER_AUTH_SECRETAuth encryption secretYesRandom 32+ char string
BETTER_AUTH_TRUSTED_ORIGINSAllowed callback originsNohttp://localhost:3000,http://localhost:3001
GOOGLE_CLIENT_IDGoogle OAuth client IDFor Google loginxxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRETGoogle OAuth client secretFor Google loginxxx
DISCORD_CLIENT_IDDiscord OAuth client IDFor Discord loginxxx
DISCORD_CLIENT_SECRETDiscord OAuth client secretFor Discord loginxxx
GITHUB_CLIENT_IDGitHub OAuth client IDFor GitHub loginxxx
GITHUB_CLIENT_SECRETGitHub OAuth client secretFor GitHub loginxxx
OIDC_CLIENT_IDGeneric OIDC client IDFor OIDC loginxxx
OIDC_CLIENT_SECRETGeneric OIDC client secretFor OIDC loginxxx
OIDC_DISCOVERY_URLOIDC discovery URLFor OIDC loginhttps://auth.example.com/.well-known/openid-configuration
TRELLO_APP_API_KEYTrello app API keyFor Trello importxxx
TRELLO_APP_API_SECRETTrello app API secretFor Trello importxxx
S3_REGIONS3 storage regionFor file uploadsWEUR
S3_ENDPOINTS3 endpoint URLFor file uploadshttps://xxx.r2.cloudflarestorage.com
S3_ACCESS_KEY_IDS3 access keyFor file uploads (optional with IRSA)xxx
S3_SECRET_ACCESS_KEYS3 secret keyFor file uploads (optional with IRSA)xxx
S3_FORCE_PATH_STYLEUse path-style URLs for S3For file uploadstrue
S3_AVATAR_UPLOAD_LIMITMaximum avatar file size in bytesFor file uploads2097152 (2MB)
NEXT_PUBLIC_STORAGE_URLStorage service URLFor file uploadshttps://storage.kanbn.com
NEXT_PUBLIC_STORAGE_DOMAINStorage domain nameFor file uploadskanbn.com
NEXT_PUBLIC_USE_VIRTUAL_HOSTED_URLSUse virtual-hosted style URLs (bucket.domain.com)For file uploads (optional)true
NEXT_PUBLIC_AVATAR_BUCKET_NAMES3 bucket name for avatarsFor file uploadsavatars
NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAMES3 bucket name for attachmentsFor file uploadsattachments
NEXT_PUBLIC_ALLOW_CREDENTIALSAllow email & password loginFor authenticationtrue
NEXT_PUBLIC_DISABLE_SIGN_UPDisable sign upFor authenticationfalse
NEXT_PUBLIC_WHITE_LABEL_HIDE_POWERED_BYHide β€œPowered by kan.bn” on public boards (self-host)For white labellingtrue
KAN_ADMIN_API_KEYAdmin API key for stats and admin endpointsFor admin/monitoringyour-secret-admin-key
LOG_LEVELLog verbosity level (debug, info, warn, error)No (defaults to debug in dev, info in prod)info

See .env.example for a complete list of supported environment variables.

Contributing 🀝

We welcome contributions! Please read our contribution guidelines before submitting a pull request.

Contributors πŸ‘₯

License πŸ“

Kan is licensed under the AGPLv3 license.

Contact πŸ“§

For support or to get in touch, please email henry@kan.bn or join our Discord server.