Printable monthly calendars, ready for your plans.
English · 简体中文
Namishu Calendar is a small command-line tool that creates printable monthly calendars. Choose a year or month to get a PDF with one month per page and room to write in each day. Use it to put a family schedule on the fridge, display classroom activities on a noticeboard, or keep a study plan beside your desk.
The dates and page layout are prepared for you, so you can print a fresh calendar whenever you need one without drawing a grid or updating an old template. The default is A4 landscape with English labels and weeks starting on Monday. You can also change the labels, first weekday, colors, and margins to suit the way you plan.
Sample PDF: Monthly calendar
Requires Python 3.10+.
Install with either uv or pip:
uv tool install namishu-calendarpython -m pip install namishu-calendarBoth methods provide the namishu-calendar command. The Noto Sans Light font and default
layout are included, so English calendars need no separate font installation.
Generate the current year, January through December, as calendar.pdf:
namishu-calendarChoose a different year:
namishu-calendar --year 2027Generate one month by adding --month:
namishu-calendar --year 2027 --month 9Omit --year to use the current year. Choose a different output path with -o:
namishu-calendar --year 2027 --month 9 -o calendars/september.pdfThe command prints the saved file location and page count. Relative paths are resolved from your current directory; parent directories are created as needed. An existing PDF at the output path is replaced.
Print at actual size on A4 paper.
| Option | Purpose | Default |
|---|---|---|
--year YEAR |
Year from 1 to 9999 | Current year |
--month MONTH |
Generate just this month, from 1 to 12 | All 12 months |
-o, --output PATH |
PDF file location | calendar.pdf |
--config PATH |
YAML file with layout or font overrides | Built-in settings |
--help |
Show usage | |
--version |
Show the installed version |
Write only the settings you want to change. Save this as calendar.yaml to start
weeks on Sunday and use narrower side margins:
weekdays:
week_start: sunday
page:
margin_left: 15
margin_right: 15namishu-calendar --year 2027 --month 9 --config calendar.yamlUnspecified settings keep their defaults, including the bundled font.
Download the complete example configuration
for all settings and comments. It works as downloaded with the bundled font;
edit it and pass its local path to --config.
| Setting | How to customize it |
|---|---|
| Paper and margins | page: dimensions and margins in millimeters |
| Month labels | title.months: 12 names, January through December |
| Weekday labels | weekdays.names: 7 names, Monday through Sunday |
| First weekday | weekdays.week_start: monday through sunday |
| Text | font_size in points and color, for title, weekdays, and day_numbers |
| Day boxes | grid: spacing, border width, radius, and border color |
| Empty boxes | grid.empty_opacity: 0 for invisible, 1 for a full border |
| Day numbers | day_numbers.position: top_left, top_right, bottom_left, bottom_right, or center; padding sets the inset from the inside edge of each border |
| Vertical spacing | title.gap_after and weekdays.gap_after: space below each text row, measured from visible glyph bounds |
| Custom font | font: a TrueType font path, relative to the YAML file or absolute |
Distances other than font sizes are in millimeters. Day-number padding is ignored
when centered. Grid gaps are measured between the outside edges of borders.
Layouts that leave insufficient room for text or cells produce an error before
the output file is created or replaced. Quote hex colors, such as
"#5f667e". The bundled Noto Sans Light font supports the default English labels;
it does not include Chinese characters. For Chinese calendars, change the month
and weekday names in YAML and supply a font with Chinese glyphs, such as Noto Sans SC.
To use a custom font, add its path to your YAML configuration:
font: fonts/MyFont.ttfFont paths are relative to the YAML file, or they can be absolute. Fonts are embedded in the PDF, so recipients do not need to install them. Invalid settings, unreadable fonts, or missing characters produce an error.
Code and original documentation use the MIT License. The bundled Noto Sans Light font uses the SIL Open Font License 1.1. The same file includes the font's attribution and source information. Generated calendars may be printed, shared, modified, and sold.