Contributing
March 26, 2026 ยท View on GitHub
Contributions are welcome! Picoloom aims to be one of the best Markdown-to-PDF tools in the Go ecosystem.
What I'm Looking For
Actively seeking:
- Documentation improvements
- Bug fixes with tests
Requires discussion first:
- New styles (see Contributing Styles below)
- New features: open an issue before coding
- Architectural changes
- New dependencies
Setup
git clone https://github.com/alnah/picoloom.git
cd picoloom
git lfs install # Required for example PDFs
git lfs pull # Download example PDFs
Lint Tooling
make lint expects golangci-lint to be available in your PATH.
Recommended install method: official binary release from golangci-lint docs.
If lint fails with a message about built with go...:
- Check your Go toolchain:
go env GOVERSION - Check your linter build toolchain:
golangci-lint version - Reinstall
golangci-lintso it is built with a Go version greater than or equal to your current toolchain.
This avoids intermittent crashes when the linter binary is older than the active Go toolchain.
How to Contribute
Bug Reports
Before reporting a bug, please check:
- Known Limitations: your issue may be documented
- Existing issues: someone may have reported it already
If the issue is not documented, please open an issue with:
- OS and Go version
- Minimal reproduction steps
- Expected vs actual behavior
Feature Requests
Open an issue to discuss before implementing. This ensures alignment and avoids wasted effort.
Pull Requests
- Reference an existing issue
- Follow existing code patterns
- Add tests for new functionality
- Run
make check-allbefore submitting - Enable "Allow edits from maintainers" when creating your PR - this lets me make small fixes directly instead of requesting changes, speeding up the review process
Contributions done with coding agents are welcome if you know what you are doing. If you used a coding agent, please be especially careful to explain in your PR how you worked with it. Thank you. I also used coding agents to create Picoloom, but I did not just ask stuff to my coding agent to build it for me.
Contributing Styles
New CSS styles in internal/assets/styles/ are also welcome. Follow the established structure (see technical.css as reference):
- CSS Variables: Central configuration
- Reset and base styles
- Typography: Headings and hierarchy
- Text formatting
- Components: Blockquotes
- Components: Lists (including task lists)
- Components: Tables
- Code and syntax highlighting (Chroma classes)
- Images and media
- Footnotes
- Signature block
- Chrome PDF specific rules (
@media all) - Cover page
- Table of contents
- Print settings (
@page,@media print)
Requirements:
- Use CSS variables for colors and spacing
- Include
-webkit-print-color-adjust: exactfor color preservation - Test with actual PDF generation before submitting
CSS Variables
All themes must define these core variables in :root:
:root {
/* Colors - Semantic */
--color-fg-default: #...; /* Main text */
--color-fg-muted: #...; /* Secondary text */
--color-fg-subtle: #...; /* Tertiary text */
--color-fg-on-emphasis: #...; /* Text on colored backgrounds */
--color-canvas-default: #...; /* Page background */
--color-canvas-subtle: #...; /* Code blocks, subtle backgrounds */
--color-border-default: #...; /* Primary borders */
--color-border-muted: #...; /* Subtle borders */
--color-accent-fg: #...; /* Links, accents */
--color-accent-emphasis: #...; /* Strong accents */
/* Colors - Status */
--color-success-fg: #...;
--color-attention-fg: #...;
--color-danger-fg: #...;
/* Colors - Syntax highlighting */
--color-syntax-comment: #...;
--color-syntax-keyword: #...;
--color-syntax-string: #...;
--color-syntax-number: #...;
--color-syntax-function: #...;
--color-syntax-variable: #...;
/* Highlight */
--color-mark-bg: #...; /* <mark> background */
/* Spacing */
--spacing-xs: 0.25em;
--spacing-sm: 0.5em;
--spacing-md: 1em;
--spacing-lg: 1.5em;
--spacing-xl: 2em;
/* Typography */
--font-size-base: 11pt;
--font-size-small: 0.9em;
--font-size-tiny: 0.8em;
--line-height: 1.6;
/* Components */
--checkbox-offset-top: -2px;
--checkbox-offset-left: 2px;
--signature-margin-top: 30px;
--signature-image-radius: 4px; /* or 50% for circular */
--cover-logo-radius: 0;
}
Themes may add additional variables for unique features (e.g., creative.css defines --heading-red, --heading-yellow, etc. for colored heading badges).
Issue Labels
When you open an issue, I will add appropriate labels to help with triage. So far, I am the only maintainer who can apply labels. Contributors are welcome to suggest appropriate labels in issue comments. New maintainers are welcome.
Area
area/cli: CLI commands and flagsarea/pdf: PDF generation and renderingarea/markdown: Markdown parsingarea/css: Styles and CSS themesarea/config: Configuration files
Platform
os/linux,os/macos,os/windows: OS-specificenv/docker,env/ci: Environment-specific
Priority
priority/critical: Blocks core functionalitypriority/high: Important issuewontfix: Won't be addressed
Looking to contribute? Filter by good first issue or help wanted.
Code of Conduct
Be respectful. Technical disagreements are fine. Personal attacks are not.