CLI client for Kanban boards
Project description
Kanban Board
A full-stack Kanban board application with Python/FastAPI backend, Svelte frontend, and CLI client.
CLI Installation
Install the CLI to manage your Kanban boards from the command line:
pip install pkanban
CLI Usage
Configure the CLI to use our hosted service or your self-hosted instance:
# Use our hosted service (kanban.pearachute.com)
kanban config --url https://kanban.pearachute.com
# Or use a local/self-hosted instance
kanban config --url http://localhost:8000
# Login
kanban login <username> --password <password>
# Or use an API key (for agents/CI)
kanban --api-key <key> board list
# List boards
kanban board list
# Create a board
kanban board create "My Project"
# Show board details
kanban board get 1
# Create a card
kanban card create 1 "To Do" "First task" --position 0
# Share a board with a team
kanban share 1 <team-id>
# Or make a board private
kanban share 1 private
# Column management
kanban column create 1 "To Do" 0
# Organization management
kanban org create "My Company"
kanban org get 1
# Team management
kanban team create 1 "Engineering"
kanban team list --org-id 1
Available Commands
| 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 (global option) |
kanban apikey create <name> |
Generate a new API key |
kanban apikey list |
List your API keys |
kanban apikey revoke <id> |
Revoke (deactivate) an API key |
kanban apikey activate <id> |
Reactivate a deactivated API 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 with team or make private |
kanban column create <board_id> <name> <position> |
Create a column |
kanban column delete <id> |
Delete a column |
kanban card create <column_id> <title> [--description TEXT] [--position NUM] |
Create a card |
kanban card update <id> <title> [--description TEXT] [--position NUM] [--column NUM] |
Update a card |
kanban card delete <id> |
Delete a card |
kanban org list |
List all organizations |
kanban org create <name> |
Create a new 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 from organization |
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 |
📚 CLI Documentation for Agents
For agents who need to quickly get up to speed with the CLI tool:
- CLI Quick Start Guide - Get productive in minutes
- CLI Command Reference - Complete command cheat sheet
- Common Workflows - Real-world examples and patterns
🔑 API Keys for Agents
Instead of sharing passwords, users can generate one-off API keys for agents and CI/CD pipelines:
# Generate an API key (shown only once - save it securely!)
kanban apikey create "CI Agent"
# Use the API key for any command
kanban --api-key kanban_abc123... board list
# Or set it as default
export KANBAN_API_KEY=kanban_abc123...
kanban board list
API Key Features
- Secure: API keys are bcrypt-hashed in the database (like passwords)
- Revokable: Deactivate or reactivate keys at any time
- Identifiable: Each key has a prefix for identification in logs
- Trackable: Last used timestamp recorded for each key
Security Notes
- API keys are shown only once at creation time - copy and store securely
- Use environment variables or secure secret management for CI/CD
- Rotate keys periodically and revoke compromised keys
Self-Hosting
1. Clone the repository
git clone https://github.com/pearachute/kanban.git
cd kanban
2. Set up the virtualenv and install dependencies
# Create virtualenv (if not already created)
python -m venv venv
# Activate the virtualenv
source venv/bin/activate # Linux/Mac
# or on Windows:
venv\Scripts\activate
# Install backend dependencies
pip install -r backend/requirements.txt
# Install frontend dependencies
cd frontend
npm install
3. Initialize the database and create a user
# From the project root, with venv activated
python manage.py init
python manage.py user-create admin mypassword --admin
4. Run the server
# From the project root, with venv activated
python manage.py server
The server will start at http://localhost:8000.
The frontend will be built to backend/static/ and served automatically.
Development
The virtualenv is at ./venv in the project root.
# Activate the virtualenv
source venv/bin/activate # Linux/Mac
# or on Windows:
venv\Scripts\activate
Running the Server
# With auto-reload (default)
python manage.py server
# With custom host/port
python manage.py server --host 127.0.0.1 --port 9000
# Disable auto-reload
python manage.py server --no-reload
# Set log level
python manage.py server --log-level debug
Frontend (with hot reload)
cd frontend
npm run dev
Database Management
# Initialize database (create all tables)
python manage.py init
# Wipe database (drop all tables and recreate)
python manage.py wipe
# Check database status
python manage.py status
# Create a user
python manage.py user-create <username> <password> [--email EMAIL] [--admin]
Server Options
| Option | Description |
|---|---|
--host HOST |
Host to bind to (default: 0.0.0.0) |
--port PORT |
Port to bind to (default: 8000) |
--reload |
Enable auto-reload (default) |
--no-reload |
Disable auto-reload |
--log-level LEVEL |
Set logging level (debug, info, warning, error) |
Multi-Tenant Organizations
See docs/multi-tenant.md for details on the organization model, team-based board sharing, and API endpoints.
API Reference
Authentication
POST /api/token- Login (returns JWT)X-API-Keyheader - Use API key for authentication (alternative to Bearer token)
API Keys
GET /api/api-keys- List your API keysPOST /api/api-keys- Create a new API key (returns key once)DELETE /api/api-keys/{id}- Revoke (deactivate) an API keyPOST /api/api-keys/{id}/activate- Reactivate a deactivated API key
Boards
GET /api/boards- List accessible boards (owned + shared)POST /api/boards- Create a new boardGET /api/boards/{id}- Get board with columns and cardsPOST /api/boards/{id}- Update board (owner or team member)DELETE /api/boards/{id}- Delete board (owner only)
Columns
POST /api/columns- Create columnPUT /api/columns/{id}- Update columnDELETE /api/columns/{id}- Delete column
Cards
POST /api/cards- Create cardPUT /api/cards/{id}- Update card (including position)DELETE /api/cards/{id}- Delete card
Tests
# Run all tests
python -m pytest backend/tests/
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pkanban-0.1.1.tar.gz.
File metadata
- Download URL: pkanban-0.1.1.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3d09b167c1a7c42874ef562e7e2f92ea8842decdce1d50da9046d351bb907ae
|
|
| MD5 |
58b32eae5f8e370a3f36b271f95c6c7d
|
|
| BLAKE2b-256 |
75765a2222f9ed23ba21320770a1ed4c1e6612e9dc3ebb8be9584d0c232a676e
|
Provenance
The following attestation bundles were made for pkanban-0.1.1.tar.gz:
Publisher:
publish-pypi.yml on japherwocky/kanban
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pkanban-0.1.1.tar.gz -
Subject digest:
d3d09b167c1a7c42874ef562e7e2f92ea8842decdce1d50da9046d351bb907ae - Sigstore transparency entry: 1154505239
- Sigstore integration time:
-
Permalink:
japherwocky/kanban@d9ed191250daf1693ae791cd99ffe8740af75efc -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/japherwocky
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@d9ed191250daf1693ae791cd99ffe8740af75efc -
Trigger Event:
push
-
Statement type:
File details
Details for the file pkanban-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pkanban-0.1.1-py3-none-any.whl
- Upload date:
- Size: 11.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8175ee51d02de8c79d409739d8aa59631402644f8c78b9b382df69b6ed090fa7
|
|
| MD5 |
ff87c0f2413c611cd8d5be76bdc1d776
|
|
| BLAKE2b-256 |
60988e09997f0bac70eb82db3635d1987dcf7d40f145361e1fee0419f2ea0360
|
Provenance
The following attestation bundles were made for pkanban-0.1.1-py3-none-any.whl:
Publisher:
publish-pypi.yml on japherwocky/kanban
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pkanban-0.1.1-py3-none-any.whl -
Subject digest:
8175ee51d02de8c79d409739d8aa59631402644f8c78b9b382df69b6ed090fa7 - Sigstore transparency entry: 1154505240
- Sigstore integration time:
-
Permalink:
japherwocky/kanban@d9ed191250daf1693ae791cd99ffe8740af75efc -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/japherwocky
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@d9ed191250daf1693ae791cd99ffe8740af75efc -
Trigger Event:
push
-
Statement type: