plany
Version, currently 0.1.01 version
- 0.1.0latestJun 4, 2024
github.com/gergelyk/plany
Manage your calendar in YAML.
Installation
# Add this to your shard.yml
dependencies:
plany:
github: gergelyk/plany
version: ~> 0.1.0Then run:
shards installshard.yml
- Crystal
- no constraint declared
- Target
planyfrom src/plany.cr
Dependencies
Runtime Dependencies
- ncurses*github: SamualLB/ncurses
- commander~> 0.4.0github: mrrooijen/commander
- fancyline~> 0.4.1github: Papierkorb/fancyline
- xdg_base_directory*github: tijn/xdg_base_directory
README
plany
Manage your calendar in YAML.

Motivation
It's yet another calendar application. Build with the following goals in mind:
- Events should be minimal. They consist of a title and date specification.
- Date specification should be human readable and intuitive.
- Data should be stored in a common file format. Easy to backup and edit in a text editor.
- Application should provide clear overview showing as much of the timeline as possible.
- All the functions should have intuitive key bindings assigned.
Data Files
Data files should be placed in $XDG_DATA_HOME/plany (typically ~/.local/share/plany).
Structure of sub-directories is fully defined by the user. Example can be found in here.
Calendar events are stored in YAML files. Each YAML file consists of dictionaries building a tree. Leaves of the tree define events. Structure of dictionaries is a continuation of directory structure.
There are three formats of the leaves available. Keep on reading about them here
Date Specifications
Date specs determine when events occur. They consist of primitives combined by operators. For instance:
1,5 2025/6- !wed
Means 1st and 5th day of each month from June 2025 onward, as long as it isn't Wednesday.
1, 5, 2025/6-, wed are primitives. ,, ! and space are operators. We will take a closer
look at them in the following document.
Note that the application can be run as plany play, which allows for testing different data specs:

Configuration Files
Configuration files should be placed in $XDG_CONFIG_HOME/plany (typically ~/.config/plany).
There is currently one configuration file required: views.yaml. It should contain a dictionary where keys
are names of the views and values are lists of paths. Paths point to the branches or leaves in the data files. Each path corresponds to a single row in the user interface.
For an example take a look at example/config/views.yaml.
Currently only one view called default is supported.
Installation
Either download precompiled binary, or compile it from sources:
- Install crystal ~1.11.2 compiler.
- Clone this repository and enter into it.
- Build executable and copy to the place of you choice.
shards build --production --release --no-debug
cp bin/plany ~/.local/bin/
Development
Building:
shards build --debug
Running tests:
crystal spec
To Do
- Support multiple views
- Implement vertical scroll bar
- Consider new primitives in the date specs
Documentation
Built from the current release. The first visit to a release nobody has asked for starts its build.
Links
This release
- Version
0.1.0- Tagged
- Jun 4, 2024
- Commit
61beba8e0f14- Indexed
- yes
Dependents
No indexed shard depends on this one yet.
Repository
github.com/gergelyk/plany
Metadata
- Created
- Aug 12, 2026
- Updated
- Aug 14, 2026
- Synced
- Aug 14, 2026
- Versions
- 1