At screenshot it is running macOS 26. It also works at Windows, Linux, BSD etc.
A prototype Kanban board application native GUI with Go/Fyne/Excelize/SQLite. Saves boards, swimlanes, lists, and cards to a SQLite database. Exports board to Excel with Excelize.
Go/Fyne GUI has been simplified combined to small amount of buttons.
These are mostly related to making Excel XLSX export with attachment images.
TODO:
- Add export card to XLSX
A prototype Kanban board application GUI with Tcl/Tk/SQLite. Clicking Export runs CLI executeable that uses Go based Excelize to export boardID based board from SQLite to XLSX.
TODO:
- Add export card to XLSX
- Simplify those too many Tcl/Tk buttons to be like Go/Fyne GUI small amount of buttons
- Go Excelize: https://github.com/qax-os/excelize
- Node.js ExcelJS: https://github.com/exceljs/exceljs
- Tcl Excel: https://wiki.tcl-lang.org/page/Excel
- FreePascal FPSpreadsheet: https://wiki.freepascal.org/FPSpreadsheet
- 📋 Multiple Boards: Create and manage multiple Kanban boards
- 🏊 Swimlanes: Organize your workflow with swimlanes
- 📝 Lists: Create lists within each swimlane (Todo, In Progress, Done, etc.)
- 🎫 Cards: Add, edit, and manage cards with titles and descriptions
- 💾 SQLite Storage: All data persists to
wekan.dbSQLite database - 🎨 Clean GUI: Intuitive Tcl/Tk interface with color-coded elements
- 🖥️ Cross-platform Go GUI: Modern Fyne-based interface available
- 🖱️ Drag & Drop: Full drag and drop support for cards, lists, and swimlanes
- � File Attachments: Drag files onto cards to attach them
- �📦 Portable: Can be built as a standalone .kit file
- 📊 XLSX Export: Export boards to Excel files with image attachments using Go and Excelize
The application supports exporting boards to XLSX format with image attachments.
- Go: Version 1.16 or higher (for building exporters)
- Excelize: Go library for Excel file manipulation
Use the build script to create the exporters:
./build.shSelect option 4 to build the Go binary (xlsx_exporter), or option 5 to build the embedded .so library.
- In the Kanban app, click the "Export" button next to a board in the sidebar
- The app will attempt to use the embedded .so library first (if available)
- If not, it falls back to the Go binary
- The exported XLSX file will be saved in the project directory as
board_<ID>_export.xlsx
The export includes:
- Board, swimlane, and list hierarchy
- Card titles, descriptions, and creation dates
- Image attachments embedded in the Excel file
The application provides:
- Sidebar with board navigation
- Swimlanes for organizing work horizontally
- Lists displayed in columns
- Cards with easy reordering via arrow controls (drag-and-drop style)
- Full CRUD operations for all entities
- Tcl/Tk: Version 8.5 or higher
- SQLite3: Tcl SQLite3 package
- sdx: Starkit Developer eXtension
- Go: Version 1.16 or higher
- Excelize: Go library (automatically downloaded during build)
- Install Tcl/Tk:
brew install tcl-tk
- Install SQLite3 Tcl package (included with Homebrew Tcl/Tk)
- Install Tcl/Tk and SQLite3 Tcl package:
sudo apt-get install tcl tk libsqlite3-tcl
- Install Tcl/Tk and SQLite3 Tcl package:
su pkg_add tcl tk sqlite3-tcl /usr/local/bin/wish8.6 kanban.tcl
Download Tcl/Tk from https://www.tcl.tk/
Make the build script executable:
chmod +x build.shRun the build script:
./build.shYou'll see a menu with options:
- Check dependencies - Verify all requirements are installed
- Build TclKit - Download latest TclKit and SDX for macOS
- Build TclKit .kit file - Create standalone .kit executable
- Build Go XLSX exporter (binary) - Compile Go binary for XLSX export
- Build Go XLSX exporter as .so and embed in .kit - Build and embed .so library
- Build executable (macOS app bundle) - Create standalone macOS app bundle
- Run Kanban application - Launch the app directly
- Run .kit file - Run the built .kit file
- Clean build artifacts - Remove build files
- Exit - Exit the script
tclsh kanban.tcl
# or
./kanban.tclA modern GUI version built with Go and Fyne is also available:
./build.sh
# Select option 10: Build Go GUI executable
./kanban_goThe Go version provides a modern, native GUI experience while maintaining all the original functionality of the Tcl/Tk version, including full drag & drop support for cards, lists, and swimlanes.
The Go GUI includes comprehensive drag and drop functionality:
- Card Movement: Drag cards between lists within the same swimlane
- List Movement: Drag entire lists between swimlanes
- File Attachments: Drag files from your file manager onto cards to attach them
- Real-time Updates: All changes are immediately saved to the SQLite database
To populate the database with sample boards, swimlanes, lists, and cards:
./create_sample_data.tclThis will create a "Sample Project" board with development and design teams, complete with sample cards.
The application uses SQLite with the following schema:
boards
id: INTEGER PRIMARY KEYname: TEXT (board name)description: TEXT (board description)created_at: TIMESTAMP
swimlanes
id: INTEGER PRIMARY KEYboard_id: INTEGER (foreign key to boards)name: TEXT (swimlane name)position: INTEGER (display order)
lists
id: INTEGER PRIMARY KEYswimlane_id: INTEGER (foreign key to swimlanes)name: TEXT (list name)position: INTEGER (display order)
cards
id: INTEGER PRIMARY KEYlist_id: INTEGER (foreign key to lists)title: TEXT (card title)description: TEXT (card details)position: INTEGER (display order)created_at: TIMESTAMP
- Create a Board: Click "New Board" in the File menu or sidebar
- Add Swimlanes: Click "+ Add Swimlane" button
- Create Lists: Click "+ List" button in a swimlane header
- Add Cards: Click "+ Add Card" button in a list
- Edit Cards: Click "Edit" button on any card
- Delete Items: Click the "×" button on boards, swimlanes, lists, or cards
You can quickly reorder items using arrow buttons:
- Swimlanes: use ▲ and ▼ in the swimlane header to move up/down
- Lists: use ◀ and ▶ in the list header to move left/right
- Cards: use ▲ and ▼ on each card to move up/down within a list
Note: Full mouse drag-and-drop is not implemented yet; these controls provide reliable, database-backed reordering.
To create a standalone .kit file:
- Install sdx (if not already installed)
- Run the build script:
./build.sh
- Select option 2 (Build TclKit .kit file)
- The
kanban.kitfile will be created and can be distributed
TclTkKanban/
├── kanban.tcl # Main application file
├── build.sh # Build and run script
├── wekan.db # SQLite database (created on first run)
├── README.md # This file
└── kanban.vfs/ # VFS directory (created during build)
- Create multiple boards for different projects
- Each board maintains its own swimlanes and cards
- Delete boards (cascades to all child elements)
- Horizontal organization within boards
- Useful for team members, priorities, or workflow stages
- Position-based ordering
- Vertical columns within swimlanes
- Typically represent workflow stages (Todo, In Progress, Done)
- Scrollable card containers
- Rich content with title and description
- Click to view full details
- Edit or delete capabilities
- Position tracking for ordering
All data is automatically saved to wekan.db using SQLite:
- No manual save required
- Data persists between sessions
- Database created automatically on first run
- Foreign key constraints ensure data integrity
- Tab: Navigate between fields in dialogs
- Enter: Submit forms (when focused)
- Mouse: Click and interact with all elements
Install the SQLite3 Tcl package:
- macOS:
brew install tcl-tk - Linux:
apt-get install libsqlite3-tcl
Install Tcl/Tk from your package manager or tcl.tk
Close any other applications that might be accessing wekan.db
Feel free to contribute improvements:
- Fork the repository
- Make your changes
- Test thoroughly
- Submit a pull request
This project is open source and available under the MIT License.
Potential features for future versions:
- Mouse drag-and-drop for cards, lists, and swimlanes
- Card colors and labels
- Due dates and reminders
- Card attachments
- Search functionality
- Export/import capabilities
- Multi-user support
- Card history/activity log
Built with:
- Tcl/Tk - GUI framework
- SQLite3 - Database engine
Enjoy your Kanban workflow! 🚀


