{"id":13858029,"url":"https://github.com/r-lib/pillar","last_synced_at":"2025-05-14T15:06:19.886Z","repository":{"id":20957093,"uuid":"91374446","full_name":"r-lib/pillar","owner":"r-lib","description":"Format columns with colour","archived":false,"fork":false,"pushed_at":"2025-05-14T02:19:22.000Z","size":14267,"stargazers_count":178,"open_issues_count":38,"forks_count":40,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-05-14T03:55:06.809Z","etag":null,"topics":["colour","r"],"latest_commit_sha":null,"homepage":"https://pillar.r-lib.org/","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/r-lib.png","metadata":{"files":{"readme":".github/README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-05-15T19:04:32.000Z","updated_at":"2025-04-26T07:49:00.000Z","dependencies_parsed_at":"2024-01-15T03:15:25.725Z","dependency_job_id":"fc6c1848-fb1f-4020-8395-5835125b4645","html_url":"https://github.com/r-lib/pillar","commit_stats":{"total_commits":2262,"total_committers":23,"mean_commits":98.34782608695652,"dds":0.154288240495137,"last_synced_commit":"8c9a06afb1adbace35dec0c9899d6ed0528205cb"},"previous_names":[],"tags_count":187,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r-lib%2Fpillar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r-lib%2Fpillar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r-lib%2Fpillar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/r-lib%2Fpillar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/r-lib","download_url":"https://codeload.github.com/r-lib/pillar/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254076977,"owners_count":22010630,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["colour","r"],"created_at":"2024-08-05T03:01:54.325Z","updated_at":"2025-05-14T15:06:19.868Z","avatar_url":"https://github.com/r-lib.png","language":"R","readme":"\u003c!-- README.md is generated from README.Rmd on GitHub Actions: do not edit by hand --\u003e\n\n\u003c!-- .github/README.md is copied manually from README.md and adapted --\u003e\n\n# [pillar](https://pillar.r-lib.org/)\n\n\u003c!-- badges: start --\u003e\n\n[![Lifecycle: stable](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) [![R build status](https://github.com/r-lib/pillar/workflows/R-CMD-check/badge.svg)](https://github.com/r-lib/pillar/actions) [![Coverage status](https://codecov.io/gh/r-lib/pillar/branch/master/graph/badge.svg)](https://codecov.io/github/r-lib/pillar?branch=master) [![CRAN status](https://www.r-pkg.org/badges/version/pillar)](https://cran.r-project.org/package=pillar)\n\n\u003c!-- badges: end --\u003e\n\npillar provides tools for styling columns of data, artfully using colour and unicode characters to guide the eye.\n\nDue to limitations of GitHub's Markdown display, formatting cannot be shown in the README.\nThe same content is available on \u003chttps://pillar.r-lib.org/\u003e with proper formatting.\n\n## Installation\n\n\u003cpre class='chroma'\u003e\n\u003cspan class='c'\u003e# pillar is installed if you install the tidyverse package:\u003c/span\u003e\n\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/utils/install.packages.html'\u003einstall.packages\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"tidyverse\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\n\n\u003cspan class='c'\u003e# Alternatively, install just pillar:\u003c/span\u003e\n\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/utils/install.packages.html'\u003einstall.packages\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"pillar\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/pre\u003e\n\n## Usage\n\npillar is a developer-facing package that is not designed for end-users. It powers the [`print()`](https://rdrr.io/r/base/print.html) and [`format()`](https://rdrr.io/r/base/format.html) methods for [tibble](https://tibble.tidyverse.org/)s. It also and defines generics and helpers that are useful for package authors who create custom vector classes (see \u003chttps://github.com/krlmlr/awesome-vctrs#readme\u003e for examples) or custom table classes (like [dbplyr](https://dbplyr.tidyverse.org/) or [sf](https://r-spatial.github.io/sf/)).\n\n\u003cpre class='chroma'\u003e\n\u003cspan class='kr'\u003e\u003ca href='https://rdrr.io/r/base/library.html'\u003elibrary\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003e\u003ca href='https://pillar.r-lib.org/'\u003epillar\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\n\n\u003cspan class='nv'\u003ex\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='m'\u003e123456789\u003c/span\u003e \u003cspan class='o'\u003e*\u003c/span\u003e \u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='m'\u003e10\u003c/span\u003e \u003cspan class='o'\u003e^\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/c.html'\u003ec\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e-\u003c/span\u003e\u003cspan class='m'\u003e3\u003c/span\u003e, \u003cspan class='o'\u003e-\u003c/span\u003e\u003cspan class='m'\u003e5\u003c/span\u003e, \u003cspan class='kc'\u003eNA\u003c/span\u003e, \u003cspan class='o'\u003e-\u003c/span\u003e\u003cspan class='m'\u003e8\u003c/span\u003e, \u003cspan class='o'\u003e-\u003c/span\u003e\u003cspan class='m'\u003e10\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\n\u003cspan class='nf'\u003e\u003ca href='https://pillar.r-lib.org/reference/pillar.html'\u003epillar\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='font-weight: bold;'\u003e\u0026lt;pillar\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt;       \u003cspan style='color: #555555;font-style: italic;'\u003e\u0026lt;dbl\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='text-decoration: underline;'\u003e123\u003c/span\u003e\u003cspan\u003e457.    \u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt;   \u003cspan style='text-decoration: underline;'\u003e1\u003c/span\u003e\u003cspan\u003e235.    \u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt;     \u003cspan style='color: #BB0000;'\u003eNA\u003c/span\u003e\u003cspan\u003e     \u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt;      1.23  \u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt;      0.012\u003cspan style='text-decoration: underline;'\u003e3\u003c/span\u003e\u003c/span\u003e\n\n\u003cspan class='nf'\u003e\u003ca href='https://pillar.r-lib.org/reference/tbl_format_setup.html'\u003etbl_format_setup\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nf'\u003etibble\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://tibble.tidyverse.org/reference/tibble.html'\u003etibble\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='font-weight: bold;'\u003e\u0026lt;pillar_tbl_format_setup\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='font-weight: bold;'\u003e\u0026lt;tbl_format_header(setup)\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e# A data frame: 5 × 1\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='font-weight: bold;'\u003e\u0026lt;tbl_format_body(setup)\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt;             \u003cspan style='font-weight: bold;'\u003ex\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt;         \u003cspan style='color: #555555;font-style: italic;'\u003e\u0026lt;dbl\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e1\u003c/span\u003e\u003cspan\u003e \u003c/span\u003e\u003cspan style='text-decoration: underline;'\u003e123\u003c/span\u003e\u003cspan\u003e457.    \u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e2\u003c/span\u003e\u003cspan\u003e   \u003c/span\u003e\u003cspan style='text-decoration: underline;'\u003e1\u003c/span\u003e\u003cspan\u003e235.    \u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e3\u003c/span\u003e\u003cspan\u003e     \u003c/span\u003e\u003cspan style='color: #BB0000;'\u003eNA\u003c/span\u003e\u003cspan\u003e     \u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e4\u003c/span\u003e\u003cspan\u003e      1.23  \u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e5\u003c/span\u003e\u003cspan\u003e      0.012\u003c/span\u003e\u003cspan style='text-decoration: underline;'\u003e3\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='font-weight: bold;'\u003e\u0026lt;tbl_format_footer(setup)\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/pre\u003e\n\n## Custom vector classes\n\nThe primary user of this package is [tibble](https://github.com/tidyverse/tibble), which lets pillar do all the formatting work. Packages that implement a data type to be used in a tibble column can customize the display by implementing a [`pillar_shaft()`](https://pillar.r-lib.org/reference/pillar_shaft.html) method.\n\n\u003cpre class='chroma'\u003e\n\u003cspan class='kr'\u003e\u003ca href='https://rdrr.io/r/base/library.html'\u003elibrary\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003e\u003ca href='https://pillar.r-lib.org/'\u003epillar\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\n\n\u003cspan class='nv'\u003epercent\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003evctrs\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://vctrs.r-lib.org/reference/new_vctr.html'\u003enew_vctr\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='m'\u003e9\u003c/span\u003e\u003cspan class='o'\u003e:\u003c/span\u003e\u003cspan class='m'\u003e11\u003c/span\u003e \u003cspan class='o'\u003e*\u003c/span\u003e \u003cspan class='m'\u003e0.01\u003c/span\u003e, class \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"percent\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\n\n\u003cspan class='nv'\u003epillar_shaft.percent\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='kr'\u003efunction\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e, \u003cspan class='nv'\u003e...\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e{\u003c/span\u003e\n  \u003cspan class='nv'\u003efmt\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/format.html'\u003eformat\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nf'\u003evctrs\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://vctrs.r-lib.org/reference/vec_data.html'\u003evec_data\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e*\u003c/span\u003e \u003cspan class='m'\u003e100\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\n  \u003cspan class='nf'\u003e\u003ca href='https://pillar.r-lib.org/reference/new_pillar_shaft.html'\u003enew_pillar_shaft_simple\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/paste.html'\u003epaste0\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003efmt\u003c/span\u003e, \u003cspan class='s'\u003e\" \"\u003c/span\u003e, \u003cspan class='nf'\u003e\u003ca href='https://pillar.r-lib.org/reference/style_subtle.html'\u003estyle_subtle\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"%\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e, align \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"right\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\n\u003cspan class='o'\u003e}\u003c/span\u003e\n\n\u003cspan class='nf'\u003e\u003ca href='https://pillar.r-lib.org/reference/pillar.html'\u003epillar\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003epercent\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='font-weight: bold;'\u003e\u0026lt;pillar\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;font-style: italic;'\u003e\u0026lt;percent\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt;       9 \u003cspan style='color: #555555;'\u003e%\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt;      10 \u003cspan style='color: #555555;'\u003e%\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt;      11 \u003cspan style='color: #555555;'\u003e%\u003c/span\u003e\u003c/span\u003e\u003c/pre\u003e\n\nSee [`vignette(\"pillar\", package = \"vctrs\")`](https://vctrs.r-lib.org/articles/pillar.html) for details.\n\n## Custom table classes\n\npillar provides various extension points for customizing how a tibble-like class is printed.\n\n\u003cpre class='chroma'\u003e\n\u003cspan class='nv'\u003etbl\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003evctrs\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://vctrs.r-lib.org/reference/new_data_frame.html'\u003enew_data_frame\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/list.html'\u003elist\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003ea \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='m'\u003e1\u003c/span\u003e\u003cspan class='o'\u003e:\u003c/span\u003e\u003cspan class='m'\u003e3\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e, class \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/c.html'\u003ec\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"my_tbl\"\u003c/span\u003e, \u003cspan class='s'\u003e\"tbl\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\n\n\u003cspan class='nv'\u003etbl_sum.my_tbl\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='kr'\u003efunction\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e, \u003cspan class='nv'\u003e...\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e{\u003c/span\u003e\n  \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/c.html'\u003ec\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"Hello\"\u003c/span\u003e \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"world!\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\n\u003cspan class='o'\u003e}\u003c/span\u003e\n\n\u003cspan class='nv'\u003etbl\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e# Hello: world!\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt;       \u003cspan style='font-weight: bold;'\u003ea\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt;   \u003cspan style='color: #555555;font-style: italic;'\u003e\u0026lt;int\u0026gt;\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e1\u003c/span\u003e\u003cspan\u003e     1\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e2\u003c/span\u003e\u003cspan\u003e     2\u003c/span\u003e\u003c/span\u003e\n\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e3\u003c/span\u003e\u003cspan\u003e     3\u003c/span\u003e\u003c/span\u003e\u003c/pre\u003e\n\nSee [`vignette(\"extending\", package = \"pillar\")`](https://pillar.r-lib.org/articles/extending.html) for a walkthrough of the options.\n\n------------------------------------------------------------------------\n\n## Code of Conduct\n\nPlease note that the pillar project is released with a [Contributor Code of Conduct](https://pillar.r-lib.org/CODE_OF_CONDUCT.html). By contributing to this project, you agree to abide by its terms.\n","funding_links":[],"categories":["R"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fr-lib%2Fpillar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fr-lib%2Fpillar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fr-lib%2Fpillar/lists"}