Forgejo-native AI inbox and board cockpit layer for agent work coordination.
  • TypeScript 96%
  • JavaScript 2.6%
  • MDX 0.7%
  • PLpgSQL 0.3%
  • Dockerfile 0.2%
  • Other 0.1%
Find a file
pdurlej 6430840ddf
All checks were successful
Forgejo CI / verify (push) Successful in 40s
Forgejo Docker Images / build (push) Successful in 2m14s
Merge pull request 'test: relax agent router import timeout' (#168) from codex/quality-ratchet-agent-timeout into main
Reviewed-on: #168
2026-06-26 08:41:14 +02:00
.forgejo/workflows fix(ci): load rs2000 buildx images before push 2026-06-04 01:16:47 +02:00
.github ci: allow mcp-only docker publish 2026-05-09 00:26:02 +02:00
.vscode fix: auth /social-providers endpoint ids (#115) 2025-07-14 22:14:20 +01:00
_bmad-output docs: simplify kan-ductor operating mode 2026-05-15 21:34:54 +02:00
apps fix: ratchet kan-ductor maintainer checks 2026-06-26 00:46:11 +02:00
cloud feat: add flow and milestone analytics v1 2026-06-04 11:24:48 +02:00
docs fix: ratchet kan-ductor maintainer checks 2026-06-26 00:46:11 +02:00
packages test: relax agent router import timeout 2026-06-26 01:43:13 +02:00
scripts fix: ratchet kan-ductor maintainer checks 2026-06-26 00:46:11 +02:00
tooling feat: display scrolling company logos (#226) 2025-10-24 21:21:02 +01:00
turbo/generators feat: monorepo 2024-12-12 14:34:10 +00:00
.dockerignore refactor: docker image for less final size (#385) 2026-02-17 13:12:53 +00:00
.env.example feat: add flow and milestone analytics v1 2026-06-04 11:24:48 +02:00
.gitignore Fontsize PR for Issue #429 (#430) 2026-03-13 22:43:50 +00:00
.npmrc feat: monorepo 2024-12-12 14:34:10 +00:00
.nvmrc feat: monorepo 2024-12-12 14:34:10 +00:00
AGENTS.md docs(agents): add § 0 cousin-onboarding pointer (agent-souls discipline) 2026-05-19 23:51:34 +02:00
CHANGELOG.md chore: update changelog 2025-07-11 22:28:21 +01:00
CONTRIBUTING.md feat: update readme add contributing.md 2025-05-29 13:13:40 +01:00
docker-compose.yml feat: add flow and milestone analytics v1 2026-06-04 11:24:48 +02:00
LICENSE feat: update license to AGPLv3 2025-06-02 13:43:20 +01:00
package.json chore: rename product to Kan-ductor 2026-05-09 21:30:07 +02:00
pnpm-lock.yaml feat(mcp): add ops health and smoke modes 2026-05-10 01:25:17 +02:00
pnpm-workspace.yaml fix: update trpc dependencies and add openapi meta to providers endpoint (#103) 2025-07-07 22:32:49 +01:00
README.md feat: add flow and milestone analytics v1 2026-06-04 11:24:48 +02:00
turbo.json feat: add flow and milestone analytics v1 2026-06-04 11:24:48 +02:00

github-background

Kan-ductor

A calm operational board for human and AI coordination.

Kan-ductor is Piotr + Iskra's fork of upstream Kan. The goal is not to become another generic PM tool, but to provide a narrow, auditable board where a human and LLM agents can coordinate operational work.

Roadmap · Website · Docs · Discord

License

Features 💫

  • 👁️ Board Visibility: Control who can view and edit your boards
  • 🤝 Workspace Members: Invite members and collaborate with your team
  • 🚀 Trello Imports: Easily import your Trello boards
  • 🔍 Labels & Filters: Organise and find cards quickly
  • 💬 Comments: Discuss and collaborate with your team
  • 📝 Activity Log: Track all card changes with detailed activity history
  • 🎨 Templates : Save time with reusable custom board templates
  • Integrations (coming soon) : Connect your favourite tools

See our roadmap for upcoming features.

Screenshot 👁️

hero-dark

Made With 🛠️

Self Hosting 🐳

One-click Deployments

The easiest way to deploy Kan-ductor 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-ductor 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:

  • To stop the containers: docker compose down
  • To view logs: docker compose logs -f
  • To view logs for a specific service: docker compose logs -f web or docker compose logs -f migrate
  • To restart the containers: docker compose restart
  • To rebuild after code changes: docker compose up -d --build

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 🔐

Variable Description Required Example
POSTGRES_URL PostgreSQL connection URL To use external database postgres://user:pass@localhost:5432/db
REDIS_URL Redis connection URL For rate limiting (optional) redis://localhost:6379 or redis://redis:6379 (Docker)
EMAIL_FROM Sender email address For Email "Kan-ductor <hello@example.com>"
SMTP_HOST SMTP server hostname For Email smtp.resend.com
SMTP_PORT SMTP server port For Email 465
SMTP_USER SMTP username/email No resend
SMTP_PASSWORD SMTP password/token No re_xxxx
SMTP_SECURE Use secure SMTP connection (defaults to true if not set) For Email true
SMTP_REJECT_UNAUTHORIZED Reject invalid certificates (defaults to true if not set) For Email false
NEXT_PUBLIC_DISABLE_EMAIL To disable all email features For Email true
NEXT_PUBLIC_BASE_URL Base URL of your installation Yes http://localhost:3000
NEXT_API_BODY_SIZE_LIMIT Maximum API request body size (defaults to 1mb) No 50mb
KAN_PROJECTION_APPLY_ENABLED Enables live Leviathan projection writes server-side No (defaults to false) false
FORGEJO_BASE_URL Base URL for read-only Forgejo milestone analytics No https://git.pdurlej.com
FORGEJO_READ_TOKEN Read-only Forgejo API token for milestone analytics For milestone analytics forgejo_pat_xxx
KAN_ANALYTICS_FORGEJO_REPOS Comma-separated repos allowed for milestone analytics No pdurlej/kan-ductor
BETTER_AUTH_ALLOWED_DOMAINS Comma-separated list of allowed domains for OIDC logins For OIDC/Social login example.com,subsidiary.com
BETTER_AUTH_SECRET Auth encryption secret Yes Random 32+ char string
BETTER_AUTH_TRUSTED_ORIGINS Allowed callback origins No http://localhost:3000,http://localhost:3001
GOOGLE_CLIENT_ID Google OAuth client ID For Google login xxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET Google OAuth client secret For Google login xxx
DISCORD_CLIENT_ID Discord OAuth client ID For Discord login xxx
DISCORD_CLIENT_SECRET Discord OAuth client secret For Discord login xxx
GITHUB_CLIENT_ID GitHub OAuth client ID For GitHub login xxx
GITHUB_CLIENT_SECRET GitHub OAuth client secret For GitHub login xxx
OIDC_CLIENT_ID Generic OIDC client ID For OIDC login xxx
OIDC_CLIENT_SECRET Generic OIDC client secret For OIDC login xxx
OIDC_DISCOVERY_URL OIDC discovery URL For OIDC login https://auth.example.com/.well-known/openid-configuration
TRELLO_APP_API_KEY Trello app API key For Trello import xxx
TRELLO_APP_API_SECRET Trello app API secret For Trello import xxx
S3_REGION S3 storage region For file uploads WEUR
S3_ENDPOINT S3 endpoint URL For file uploads https://xxx.r2.cloudflarestorage.com
S3_ACCESS_KEY_ID S3 access key For file uploads (optional with IRSA) xxx
S3_SECRET_ACCESS_KEY S3 secret key For file uploads (optional with IRSA) xxx
S3_FORCE_PATH_STYLE Use path-style URLs for S3 For file uploads true
S3_AVATAR_UPLOAD_LIMIT Maximum avatar file size in bytes For file uploads 2097152 (2MB)
NEXT_PUBLIC_STORAGE_URL Storage service URL For file uploads https://storage.kanbn.com
NEXT_PUBLIC_STORAGE_DOMAIN Storage domain name For file uploads kanbn.com
NEXT_PUBLIC_USE_VIRTUAL_HOSTED_URLS Use virtual-hosted style URLs (bucket.domain.com) For file uploads (optional) true
NEXT_PUBLIC_AVATAR_BUCKET_NAME S3 bucket name for avatars For file uploads avatars
NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME S3 bucket name for attachments For file uploads attachments
NEXT_PUBLIC_ALLOW_CREDENTIALS Allow email & password login For authentication true
NEXT_PUBLIC_DISABLE_SIGN_UP Disable sign up For authentication false
NEXT_PUBLIC_WHITE_LABEL_HIDE_POWERED_BY Hide “Powered by Kan-ductor” on public boards (self-host) For white labelling true
KAN_ADMIN_API_KEY Admin API key for stats and admin endpoints For admin/monitoring your-secret-admin-key
LOG_LEVEL Log 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 👥

Sponsors ❤️

image

Proudly sponsored by TestMu AI - an AI-native testing cloud platform built for modern engineering teams. Covering everything from autonomous test creation and fast execution to testing AI agents like chatbots and voice assistants. If you're serious about testing, go check them out.

License 📝

Kan-ductor is licensed under the AGPLv3 license.

Contact 📧

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