NAME
ACME::2026 - Checklists for glorious 2026 goals
VERSION
Version 0.01
SYNOPSIS
use ACME::2026 qw(:all);
my $plan = plan_new(
title => '2026',
storage => '2026.json',
autosave => 1,
);
my $id = add_item($plan, 'Run a marathon',
list => 'Health',
due => '2026-10-01',
tags => [qw/fitness endurance/],
priority => 2,
);
complete_item($plan, $id, note => 'Signed up for NYC');
my @open = items($plan, status => 'todo', list => 'Health', sort => 'due');
plan_save($plan);
DESCRIPTION
ACME::2026 is a tiny functional API for keeping 2026 checklists. It stores plans as plain Perl hashrefs and can persist them to JSON.
DATA MODEL
Plan hashref:
{
title => '2026',
items => [ ... ],
next_id => 1,
created_at => '2026-01-01T12:00:00Z',
updated_at => '2026-01-01T12:00:00Z',
storage => '2026.json',
autosave => 1,
}
Item hashref:
{
id => 1,
title => 'Run a marathon',
status => 'todo',
list => 'Health',
tags => ['fitness'],
priority => 2,
due => '2026-10-01',
notes => [ { note => 'Signed up', at => '2026-02-10T09:00:00Z' } ],
created_at => '2026-01-01T12:00:00Z',
updated_at => '2026-02-10T09:00:00Z',
}
Status values are todo, done, or skipped. Dates are ISO 8601 strings (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ).
FUNCTIONS
plan_new
my $plan = plan_new(%opts);
Creates a new plan hashref. Supported options:
title - plan title (default: 2026)
storage - JSON path used by plan_save and autosave
autosave - boolean, save after mutating operations
plan_load
my $plan = plan_load($path, %opts);
Loads a JSON file from $path. The plan is normalized to ensure required fields exist. You can override title or autosave with %opts.
plan_save
plan_save($plan);
plan_save($plan, $path);
Writes the plan as JSON. Uses $plan->{storage} if no path is provided.
add_item
my $id = add_item($plan, $title, %opts);
Adds an item and returns its id. Supported options:
list, tags (arrayref or string), priority, due, note
update_item
my $item = update_item($plan, $id, %attrs);
Updates a few fields in place: title, list, tags, priority, due. Use add_note or the status helpers for notes and status changes.
delete_item
my $item = delete_item($plan, $id);
Removes an item and returns it.
get_item
my $item = get_item($plan, $id);
Returns the item or undef if it does not exist.
add_note
add_note($plan, $id, $note);
Appends a note with a timestamp.
complete_item
complete_item($plan, $id, %opts);
Sets the status to done. If note is supplied, it is added.
skip_item
skip_item($plan, $id, %opts);
Sets the status to skipped. If note is supplied, it is added.
reopen_item
reopen_item($plan, $id, %opts);
Sets the status back to todo. If note is supplied, it is added.
items
my @items = items($plan, %filters);
Filters items with any of:
status, list, tag, tags, priority, min_priority, max_priority,
due_before, due_after, sort
For tag or tags, any matching tag is enough. sort supports: due, priority, created, updated, or title. Prefix with - for descending order.
stats
my $stats = stats($plan, %filters);
Returns a hashref with total, todo, done, skipped, and complete_pct.
AUTHOR
Will Willis <wwillis@cpan.org>
BUGS
Please report any bugs or feature requests to bug-acme-2026 at rt.cpan.org, or through the web interface at https://rt.cpan.org/NoAuth/ReportBug.html?Queue=ACME-2026. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc ACME::2026
You can also look for information at:
RT: CPAN's request tracker (report bugs here)
Search CPAN
ACKNOWLEDGEMENTS
LICENSE AND COPYRIGHT
This software is Copyright (c) 2026 by Will Willis <wwillis@cpan.org>.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)