Skip to main content

pkanban

A command-line tool for managing Kanban boards. (The "p" is silent, like in "pneumonia".)

Most users will connect to our hosted service at kanban.pearachute.com. If you want to run your own server, see the Self-Hosting section below.

Quick Start

pip install pkanban

The CLI connects to the hosted service at https://kanban.pearachute.com by default, so you can log in right away:

kanban login <username>

You'll be prompted for your password (it stays out of your shell history). That's it! You can now manage your boards from the command line.

Self-hosting? Point the CLI at your own server first with kanban config --url http://localhost:8000 — see Self-Hosting.

Common Commands

# List your boards
kanban board list

# Create a new board
kanban board create "My Project"

# View a board with its columns and cards
kanban board get 1

# Add a column
kanban column create 1 "To Do" 0

# Add a card
kanban card create 1 "First task" --description "Getting started"

# Share a board with a team
kanban share 1 <team-id>

API Keys

For automation, CI/CD, or giving access to agents, use API keys instead of passwords:

# Create a key (shown only once!)
kanban apikey create "CI Agent"

# Save it once; subsequent commands use it automatically
kanban apikey save kanban_abc123...
kanban board list

# Or pass it per command
kanban --api-key kanban_abc123... board list

API keys can be revoked and reactivated at any time. They're stored securely (bcrypt-hashed) and track their last usage.

Scripting: JSON output

--json makes any command print the raw API response instead of formatted text, so scripts never have to scrape prose for values like IDs:

kanban board create "Roadmap" --json
kanban board get 1 --json | jq '.columns[] | {id, name}'

KANBAN_OUTPUT=json does the same for a whole run:

export KANBAN_OUTPUT=json

The flag works in either position (kanban --json board list and kanban board list --json are equivalent). In JSON mode stdout carries only the response, and errors go to stderr as {"error": ..., "status": ...} with a non-zero exit code — so stdout is always safe to pipe into a parser.

kanban login --json deliberately omits the access token: it is already saved to ~/.kanban.yaml, and stdout is what CI logs capture.

Command Reference

Command Description
kanban config [--url URL] Show or set server URL
kanban login <user> --password <pass> Login to the server
kanban logout Logout and clear credentials
kanban --api-key <key> Use API key for authentication
kanban --json <command> Print the raw API response as JSON
kanban apikey create <name> Generate a new API key
kanban apikey list List your API keys
kanban apikey revoke <id> Revoke an API key
kanban apikey activate <id> Reactivate a revoked key
kanban board list List all boards
kanban board create <name> Create a new board
kanban board get <id> Show board details
kanban board delete <id> Delete a board
kanban board update <id> <name> Update board name
kanban share <board_id> <team_id|private> Share board or make private
kanban column create <board_id> <name> [position] Create a column (appends by default)
kanban column delete <id> Delete a column
kanban card get <id> Show a card's description and comments
kanban card create <column_id> <title> [options] Create a card
kanban card update <id> [title] [options] Update a card; omitted fields are unchanged
kanban card move <id> --column <n> [-p <pos>] Move a card without touching its text
kanban card delete <id> Delete a card
kanban org list List all organizations
kanban org create <name> Create an organization
kanban org get <org-id> Show organization details
kanban org members <org-id> List organization members
kanban org member-add <org-id> <username> Add member to organization
kanban org member-remove <org-id> <user-id> Remove member
kanban team list --org-id <org-id> List teams in organization
kanban team create <org-id> <name> Create a new team
kanban team get <team-id> Show team details
kanban team members <team-id> List team members
kanban team member-add <team-id> <username> Add member to team
kanban team member-remove <team-id> <user-id> Remove member from team

Self-Hosting

Want to run your own server? Here's how:

1. Clone and setup

git clone https://github.com/japherwocky/kanban.git
cd kanban
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r backend/requirements.txt
cd frontend && npm install && cd ..

2. Initialize and run

python manage.py init
python manage.py user-create admin mypassword --admin
python manage.py server

The server runs at http://localhost:8000 by default.

3. Connect the CLI

The CLI defaults to the hosted service, so point it at your local server first, then log in (you'll be prompted for the password):

kanban config --url http://localhost:8000
kanban login admin

Development

# Run the server with auto-reload
python manage.py server

# Run frontend dev server (hot reload)
cd frontend && npm run dev

# Run tests
python -m pytest backend/tests/

Database commands

python manage.py init          # Create tables
python manage.py wipe          # Drop and recreate tables
python manage.py status        # Check database status
python manage.py user-create <user> <pass> [--admin]

API Reference

The backend exposes a REST API at /api/:

Authentication

  • POST /api/token - Login (returns JWT)
  • X-API-Key header - Alternative auth via API key

API Keys

  • GET /api/api-keys - List your keys
  • POST /api/api-keys - Create a key
  • DELETE /api/api-keys/{id} - Revoke a key
  • POST /api/api-keys/{id}/activate - Reactivate a key

Boards

  • GET /api/boards - List accessible boards
  • POST /api/boards - Create a board
  • GET /api/boards/{id} - Get board details
  • POST /api/boards/{id} - Update board
  • DELETE /api/boards/{id} - Delete board

Columns

  • POST /api/columns - Create column
  • PUT /api/columns/{id} - Update column
  • DELETE /api/columns/{id} - Delete column

Cards

  • GET /api/cards/{id} - Get one card with its description and comments
  • POST /api/cards - Create card
  • PUT /api/cards/{id} - Update card
  • DELETE /api/cards/{id} - Delete card

For multi-tenant organization details, see docs/multi-tenant.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pkanban-0.2.0.tar.gz (18.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pkanban-0.2.0-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file pkanban-0.2.0.tar.gz.

File metadata

  • Download URL: pkanban-0.2.0.tar.gz
  • Upload date:
  • Size: 18.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pkanban-0.2.0.tar.gz
Algorithm Hash digest
SHA256 87276555297df78c4c4ef02499ca002eb85e3edd3ca1d1b75c044afd65decfe6
MD5 891aa859395fccdc996da93433bee4e6
BLAKE2b-256 cc1dfe57e36b517b08ad5ffd3f14771e2a67490289808bfd09e84b192b58659a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pkanban-0.2.0.tar.gz:

Publisher: publish-pypi.yml on japherwocky/kanban

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pkanban-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: pkanban-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 17.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pkanban-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 57e1163d69cf35cb941af010734549cf8ff194cd09a989ef46f6c92a2af753e6
MD5 fef32526ececbea25f7a96a63384c423
BLAKE2b-256 8390c5e4375573ec6ba1e245da136edaee1cf58768be619fad45728046f15680

See more details on using hashes here.

Provenance

The following attestation bundles were made for pkanban-0.2.0-py3-none-any.whl:

Publisher: publish-pypi.yml on japherwocky/kanban

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.3.0

2 files

This release

0.2.0 This release

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page