caca (Contribution Activity Canvas) - use your GitHub profile's contributions calendar as a canvas, you can draw over.
This package provides library and CLI tool.
Warning
This project is just a proof of concept. The API and CLI are still WIP.
It is possible to use GitHub Contribution Activity Calendar as a canvas:
Canvas file is a text file containing a grid, where each element
You can also specify metadata:
- Start date - date of the first commit. Format: YYYY-MM-DD;
- Repository - target repository;
- Author - user, on behalf of whom to create commits.
See example below for details:
# Comments are allowed
#
# Each numeric value is an intensity level:
# 0 - no contributions
# 1..4 - from the lowest to highest contribution activity level for each day
#
# Rows represent day of the week, starting from start date
00000000000000000000000000000000000000000000000000000
00000000000044440000333300000022220000111100000000000
00000000004400000033000033002200000011000011000000000
00000000004400000033000033002200000011000011000000000
00000000004400000033333333002200000011111111000000000
00000000000044440033000033000022220011000011000000000
00000000000000000000000000000000000000000000000000000
# Specify metadata, such as target repository, start date, author, like this:
# Start date: 2020-12-27
# Repository: path/to/repo
# Author: name email@example.com
# It is not necessary to place it below the canvas data.
go get github.com/temaxuck/caca
canvas, _ := ReadCanvas(pathToCanvasFile)
// Basically name doesn't matter much, but email must be set accordingly to your GitHub account
canvas.SetAuthor("Your name", "your-email@nowhere.com")
// Set repository where the commits are going to be made
canvas.SetRepository("path-to-repo")
// Set repository where the commits are going to be made
canvas.SetStartDate(time.Date(2020, time.December, 27, 12, 0, 0, 0, time.UTC))
canvas.Draw(true)type Canvas struct {
Canvas2D [][]uint8 // Row: Day of the week, Column: Number of the week
Count int
// Use SetAuthor, SetRepository, SetStartDate to set metadata
Metadata *CanvasMetadata
}// Read Canvas from file
func ReadCanvas(path string) (*Canvas, error)
// Set metadata
func (cvs *Canvas) SetAuthor(name, email string)
func (cvs *Canvas) SetRepository(repoPath string)
func (cvs *Canvas) SetStartDate(date time.Time)
// Start drawing over contribution calendar
func (cvs *Canvas) Draw(verbose bool) errorgo install github.com/temaxuck/caca/cmd/caca
Also make sure your PATH variable is set to include installed go command line tools:
PATH=$PATH:~/go/bin
Usage: caca [OPTIONS] <canvas file>
Options:
-h Help message
-p Enable preview mode
With this option enabled no commits are made
-repository string
Target repository (default ".")
-start-date value
Set a start date for the canvas
You, probably, want it to be a Sunday (default 2025-07-25)
-user value
User on behalf of whom to create commits. Format: '<name> <email>'
If not specified global config user setting is used
-v Enable verbose mode- Get help message
$ caca -h
Usage: caca [OPTIONS] <canvas file>
Options:
-h Help message
-p Enable preview mode
With this option enabled no commits are made
-repository string
Target repository (default ".")
-start-date value
Set a start date for the canvas
You, probably, want it to be a Sunday (default 2025-07-25)
-user value
User on behalf of whom to create commits. Format: '<name> <email>'
If not specified global config user setting is used
-v Enable verbose mode- Set start date:
$ caca --start-date 2020-12-27 canvas.txt
INFO: Starting commits from: 2020-12-27- See preview:
$ caca -p canvas.txtThis command produces output like this:
- Set user and repository:
$ caca --user 'Your Name your-email@nowhere.com' --repository path/to/your/repo canvas.txtFeel free to fire off a PR, or open an Issue if you want to report a bug or request a feature.
This project comes with ISC License, see LICENSE for details.

