Accessing data from the IGVF Catalog

IGVF background

The Impact of Genomic Variation on Function (IGVF) Consortium,

aims to understand how genomic variation affects genome function, which in turn impacts phenotype. The NHGRI is funding this collaborative program that brings together teams of investigators who will use state-of-the-art experimental and computational approaches to model, predict, characterize and map genome function, how genome function shapes phenotype, and how these processes are affected by genomic variation. These joint efforts will produce a catalog of the impact of genomic variants on genome function and phenotypes.

The IGVF Catalog described in the last sentence is available through a number of interfaces, including a web interface as well as two programmatic interfaces. In addition, there is a Data Portal, where raw and processed data can be downloaded, with its own web interface and client library for R. This package, rigvf, focuses on the Catalog and not the Data Portal.

Knowledge graph of variant function

The IGVF Catalog is a form of knowledge graph, where the nodes are biological entities such as variants, genes, pathways, etc. and edges are relationships between such nodes, e.g. empirically measured effects of variants on cis-regulatory elements (CREs) or on transcripts and proteins. These edges may have metadata including information about cell type context and information about how the association was measured, e.g. which experiment or predictive model.

The rigvf package

This package provides access to some of the IGVF Catalog from within R/Bioconductor. Currently, limited functionality is implemented, with priority towards applications and integration with Bioconductor functionality. However, the source code and internal functions can also be used to build one-off querying functions.

Data license

For IGVF Catalog data license, see the IGVF policy page.

Catalog API

The IGVF Catalog offers two programmatic interfaces, the Catalog API and an ArangoDb interface, described further below. The Catalog API is preferred, with optimized queries of relevant information. Queries are simple REST requests implemented using the httr2 package. Here we query variants associated with “GCK”; one could also use, e.g., Ensembl identifiers.

library(rigvf)
gene_variants(gene_name = "GCK")
#> # A tibble: 25 × 12
#>    sequence_variant      gene  study label log10pvalue effect_size method source
#>    <chr>                 <chr> <chr> <chr>       <dbl> <list>      <list> <chr> 
#>  1 variants/NC_000007.1… gene… stud… spli…        9.06 <NULL>      <NULL> eQTL …
#>  2 variants/NC_000007.1… gene… stud… eQTL         7.93 <NULL>      <NULL> eQTL …
#>  3 variants/NC_000007.1… gene… stud… eQTL         6.93 <NULL>      <NULL> eQTL …
#>  4 variants/NC_000007.1… gene… stud… eQTL         8.22 <NULL>      <NULL> eQTL …
#>  5 variants/NC_000007.1… gene… stud… eQTL         6.92 <NULL>      <NULL> eQTL …
#>  6 variants/NC_000007.1… gene… stud… eQTL         7.54 <NULL>      <NULL> eQTL …
#>  7 variants/NC_000007.1… gene… stud… spli…        9.39 <NULL>      <NULL> eQTL …
#>  8 variants/NC_000007.1… gene… stud… eQTL        10.2  <NULL>      <NULL> eQTL …
#>  9 variants/NC_000007.1… gene… stud… eQTL         7.03 <NULL>      <NULL> eQTL …
#> 10 variants/NC_000007.1… gene… stud… eQTL         4.45 <NULL>      <NULL> eQTL …
#> # ℹ 15 more rows
#> # ℹ 4 more variables: source_url <chr>, biological_context <chr>, chr <list>,
#> #   name <chr>

Note that we only receive a limited number of responses. We can change both the page of responses we receive and the limit per page:

gene_variants(gene_name = "GCK", page=1L)
#> # A tibble: 25 × 12
#>    sequence_variant      gene  study label log10pvalue effect_size method source
#>    <chr>                 <chr> <chr> <chr>       <dbl> <list>      <list> <chr> 
#>  1 variants/NC_000007.1… gene… stud… eQTL        10.0  <NULL>      <NULL> eQTL …
#>  2 variants/NC_000007.1… gene… stud… eQTL         7.74 <NULL>      <NULL> eQTL …
#>  3 variants/NC_000007.1… gene… stud… eQTL        20.2  <NULL>      <NULL> eQTL …
#>  4 variants/NC_000007.1… gene… stud… eQTL        11.0  <NULL>      <NULL> eQTL …
#>  5 variants/NC_000007.1… gene… stud… eQTL        11.3  <NULL>      <NULL> eQTL …
#>  6 variants/NC_000007.1… gene… stud… eQTL         7.32 <NULL>      <NULL> eQTL …
#>  7 variants/NC_000007.1… gene… stud… eQTL         9.62 <NULL>      <NULL> eQTL …
#>  8 variants/NC_000007.1… gene… stud… eQTL         6.35 <NULL>      <NULL> eQTL …
#>  9 variants/NC_000007.1… gene… stud… eQTL         6.57 <NULL>      <NULL> eQTL …
#> 10 variants/NC_000007.1… gene… stud… spli…        9.40 <NULL>      <NULL> eQTL …
#> # ℹ 15 more rows
#> # ℹ 4 more variables: source_url <chr>, biological_context <chr>, chr <list>,
#> #   name <chr>
gene_variants(gene_name = "GCK", limit=50L)
#> # A tibble: 50 × 12
#>    sequence_variant      gene  study label log10pvalue effect_size method source
#>    <chr>                 <chr> <chr> <chr>       <dbl> <list>      <list> <chr> 
#>  1 variants/NC_000007.1… gene… stud… spli…        9.06 <NULL>      <NULL> eQTL …
#>  2 variants/NC_000007.1… gene… stud… eQTL         7.93 <NULL>      <NULL> eQTL …
#>  3 variants/NC_000007.1… gene… stud… eQTL         6.93 <NULL>      <NULL> eQTL …
#>  4 variants/NC_000007.1… gene… stud… eQTL         8.22 <NULL>      <NULL> eQTL …
#>  5 variants/NC_000007.1… gene… stud… eQTL         6.92 <NULL>      <NULL> eQTL …
#>  6 variants/NC_000007.1… gene… stud… eQTL         7.54 <NULL>      <NULL> eQTL …
#>  7 variants/NC_000007.1… gene… stud… spli…        9.39 <NULL>      <NULL> eQTL …
#>  8 variants/NC_000007.1… gene… stud… eQTL        10.2  <NULL>      <NULL> eQTL …
#>  9 variants/NC_000007.1… gene… stud… eQTL         7.03 <NULL>      <NULL> eQTL …
#> 10 variants/NC_000007.1… gene… stud… eQTL         4.45 <NULL>      <NULL> eQTL …
#> # ℹ 40 more rows
#> # ℹ 4 more variables: source_url <chr>, biological_context <chr>, chr <list>,
#> #   name <chr>

We can also pass thresholds on the negative log10 p-value or the effect size, using the following letter combinations, gt (>), gte (>=), lt (<), lte (<=), followed by a : and a value. See examples below:

gene_variants(gene_name = "GCK", log10pvalue="gt:5.0")
#> # A tibble: 25 × 12
#>    sequence_variant      gene  study label log10pvalue effect_size method source
#>    <chr>                 <chr> <chr> <chr>       <dbl> <list>      <list> <chr> 
#>  1 variants/NC_000007.1… gene… stud… spli…        9.06 <NULL>      <NULL> eQTL …
#>  2 variants/NC_000007.1… gene… stud… eQTL         7.93 <NULL>      <NULL> eQTL …
#>  3 variants/NC_000007.1… gene… stud… eQTL         6.93 <NULL>      <NULL> eQTL …
#>  4 variants/NC_000007.1… gene… stud… eQTL         8.22 <NULL>      <NULL> eQTL …
#>  5 variants/NC_000007.1… gene… stud… eQTL         6.92 <NULL>      <NULL> eQTL …
#>  6 variants/NC_000007.1… gene… stud… eQTL         7.54 <NULL>      <NULL> eQTL …
#>  7 variants/NC_000007.1… gene… stud… spli…        9.39 <NULL>      <NULL> eQTL …
#>  8 variants/NC_000007.1… gene… stud… eQTL        10.2  <NULL>      <NULL> eQTL …
#>  9 variants/NC_000007.1… gene… stud… eQTL         7.03 <NULL>      <NULL> eQTL …
#> 10 variants/NC_000007.1… gene… stud… eQTL         6.55 <NULL>      <NULL> eQTL …
#> # ℹ 15 more rows
#> # ℹ 4 more variables: source_url <chr>, biological_context <chr>, chr <list>,
#> #   name <chr>
gene_variants(gene_name = "GCK", effect_size="gt:0.5")
#> # A tibble: 0 × 0

The help page ?catalog_queries outlines other available user-facing functions.

Note that nested columns in the response can be widen-ed using tidyr. For example, when querying genomic elements that are associated with a gene, we get back nested output:

res <- gene_elements(gene_id = "ENSG00000187961", verbose = TRUE)
res
#> # A tibble: 25 × 2
#>    gene             elements         
#>    <list>           <list>           
#>  1 <named list [5]> <named list [10]>
#>  2 <named list [5]> <named list [10]>
#>  3 <named list [5]> <named list [10]>
#>  4 <named list [5]> <named list [10]>
#>  5 <named list [5]> <named list [10]>
#>  6 <named list [5]> <named list [10]>
#>  7 <named list [5]> <named list [10]>
#>  8 <named list [5]> <named list [10]>
#>  9 <named list [5]> <named list [10]>
#> 10 <named list [5]> <named list [10]>
#> # ℹ 15 more rows

res |>
    dplyr::select(elements) |>
    tidyr::unnest_wider(elements)
#> # A tibble: 25 × 10
#>    id       cell_type score model dataset element_type element_chr element_start
#>    <chr>    <chr>     <lgl> <chr> <chr>   <chr>        <chr>               <int>
#>  1 genomic… cd8-posi… NA    IGVF  https:… tested elem… chr1            167219886
#>  2 genomic… cd8-posi… NA    IGVF  https:… tested elem… chr1            167219886
#>  3 genomic… cd8-posi… NA    IGVF  https:… tested elem… chr1            212699339
#>  4 genomic… cd8-posi… NA    IGVF  https:… tested elem… chr1            212699339
#>  5 genomic… cd8-posi… NA    IGVF  https:… tested elem… chr1             47437044
#>  6 genomic… cd8-posi… NA    IGVF  https:… tested elem… chr1             47437044
#>  7 genomic… cd8-posi… NA    IGVF  https:… tested elem… chr1             58783546
#>  8 genomic… cd8-posi… NA    IGVF  https:… tested elem… chr1             58783546
#>  9 genomic… cd8-posi… NA    IGVF  https:… tested elem… chr10            35194127
#> 10 genomic… cd8-posi… NA    IGVF  https:… tested elem… chr10            35194127
#> # ℹ 15 more rows
#> # ℹ 2 more variables: element_end <int>, name <chr>

GRanges-based queries

The functions elements() and element_genes() take GRanges input ranges, and elements() provides back the response as GRanges. Note that IGVF uses hg38 and USCS-style chromosome names, e.g., chr1.

ArangoDB API

The ArangoDB API provides flexibility but requires greater understanding of Arango Query Language and the database schema. Documentation is available in the database under the ‘Support’ menu item ‘REST API’ tab using username ‘guest’ and password ‘guestigvfcatalog’.

The following directly queries the database for variants of an Ensembl gene id.

db_gene_variants("ENSG00000106633", threshold = 0.85)
#> # A tibble: 82 × 31
#>    `_key` `_id` `_from` `_to` `_rev` biological_context biological_process study
#>    <chr>  <chr> <chr>   <chr> <chr>  <chr>              <chr>              <chr>
#>  1 4d57e… vari… varian… gene… _kDFq… ontology_terms/UB… ontology_terms/GO… stud…
#>  2 ed83d… vari… varian… gene… _kDFq… ontology_terms/UB… ontology_terms/GO… stud…
#>  3 6b383… vari… varian… gene… _kDFq… ontology_terms/UB… ontology_terms/GO… stud…
#>  4 ee07e… vari… varian… gene… _kDFq… ontology_terms/UB… ontology_terms/GO… stud…
#>  5 9ecd9… vari… varian… gene… _kDFq… ontology_terms/UB… ontology_terms/GO… stud…
#>  6 cb382… vari… varian… gene… _kDFs… ontology_terms/UB… ontology_terms/GO… stud…
#>  7 1ae95… vari… varian… gene… _kDFs… ontology_terms/UB… ontology_terms/GO… stud…
#>  8 d2855… vari… varian… gene… _kDFs… ontology_terms/UB… ontology_terms/GO… stud…
#>  9 800da… vari… varian… gene… _kDFs… ontology_terms/UB… ontology_terms/GO… stud…
#> 10 3e45d… vari… varian… gene… _kDFs… ontology_terms/UB… ontology_terms/GO… stud…
#> # ℹ 72 more rows
#> # ℹ 23 more variables: simple_sample_summaries <list>, label <chr>,
#> #   source <chr>, source_url <chr>, name <chr>, inverse_name <chr>,
#> #   molecular_trait_id <chr>, gene_id <chr>, credible_set_id <chr>,
#> #   variant_chromosome_position_ref_alt <chr>, rsid <chr>,
#> #   credible_set_size <int>, posterior_inclusion_probability <dbl>,
#> #   p_value <dbl>, log10pvalue <dbl>, beta <dbl>, standard_error <dbl>, …

The AQL is

aql <- system.file(package = "rigvf", "aql", "gene_variants.aql")
readLines(aql) |> noquote()
#> [1] FOR l IN variants_genes                
#> [2]     FILTER l._to == @geneid            
#> [3]     FILTER l.`log10pvalue` > @threshold
#> [4]     RETURN l

The help page ?db_queries outlines other available user-facing functions. See ?arango for more developer-oriented information.

Use with Bioconductor

Compute overlap with plyranges

We can query genomic elements using elements() and then compute overlaps with the plyranges package as below. See the plyranges package documentation for more examples.

library(plyranges)
rng <- data.frame(seqnames="chr1", start=10e6+1, end=10.1e6) |>
  as_granges()

e <- elements(rng, limit=200L) |>
  plyranges::filter(source != "ENCODE_EpiRaction")
e
#> GRanges object with 200 ranges and 5 metadata columns:
#>         seqnames            ranges strand |                   name
#>            <Rle>         <IRanges>  <Rle> |            <character>
#>     [1]     chr1 10001018-10001351      * |           EH38E1317660
#>     [2]     chr1 10001823-10002161      * |           EH38E3954141
#>     [3]     chr1 10002812-10003022      * |           EH38E3954142
#>     [4]     chr1 10006462-10006688      * |           EH38E3954143
#>     [5]     chr1 10007231-10007550      * |           EH38E2785201
#>     ...      ...               ...    ... .                    ...
#>   [196]     chr1 10000983-10001482      * | genic_chr1_10000982_..
#>   [197]     chr1 10000983-10001482      * | genic_chr1_10000982_..
#>   [198]     chr1 10000983-10001482      * | genic_chr1_10000982_..
#>   [199]     chr1 10000983-10001482      * | genic_chr1_10000982_..
#>   [200]     chr1 10000983-10001482      * | genic_chr1_10000982_..
#>              source_annotation                   type      source
#>                    <character>            <character> <character>
#>     [1] dELS: distal Enhance.. candidate cis regula..      ENCODE
#>     [2]         TF: TF binding candidate cis regula..      ENCODE
#>     [3] dELS: distal Enhance.. candidate cis regula..      ENCODE
#>     [4] CA: chromatin access.. candidate cis regula..      ENCODE
#>     [5] dELS: distal Enhance.. candidate cis regula..      ENCODE
#>     ...                    ...                    ...         ...
#>   [196]                  genic accessible dna eleme..      ENCODE
#>   [197]                  genic accessible dna eleme..      ENCODE
#>   [198]                  genic accessible dna eleme..      ENCODE
#>   [199]                  genic accessible dna eleme..      ENCODE
#>   [200]                  genic accessible dna eleme..      ENCODE
#>                     source_url
#>                    <character>
#>     [1] https://www.encodepr..
#>     [2] https://www.encodepr..
#>     [3] https://www.encodepr..
#>     [4] https://www.encodepr..
#>     [5] https://www.encodepr..
#>     ...                    ...
#>   [196] https://www.encodepr..
#>   [197] https://www.encodepr..
#>   [198] https://www.encodepr..
#>   [199] https://www.encodepr..
#>   [200] https://www.encodepr..
#>   -------
#>   seqinfo: 1 sequence from hg38 genome; no seqlengths
tiles <- tile_ranges(rng, width=10e3) %>%
  plyranges::select(-partition) %>%
  plyranges::mutate(id = letters[seq_along(.)])

# count overlaps of central basepair of elements in tiles
e |>
  plyranges::anchor_center() |>
  plyranges::mutate(width = 1) |>
  plyranges::join_overlap_left(tiles) |>
  tibble::as_tibble() |>
  dplyr::count(id)
#> # A tibble: 10 × 2
#>    id        n
#>    <chr> <int>
#>  1 a       100
#>  2 b        13
#>  3 c        10
#>  4 d        15
#>  5 e        11
#>  6 f        15
#>  7 g        12
#>  8 h        12
#>  9 i         7
#> 10 j         5

Plot variants with plotgardener

Below we show a simple example of plotting variants and elements in a gene context, using the plotgardener package.

First selecting some variants around the gene GCK (reminder that we only obtain the first limit number of variants, see ?catalog_queries for more details).

# up to 200 variants:
v <- gene_variants(gene_name = "GCK", limit=200L, verbose=TRUE) |>
  dplyr::select(-c(gene, chr, source, source_url)) |>
  tidyr::unnest_wider(sequence_variant) |>
  dplyr::rename(seqnames = chr) |>
  dplyr::mutate(start = pos + 1, end = pos + 1) |>
  as_granges()

We then load plotgardener and define some default parameters.

library(plotgardener)
par <- pgParams(
  chrom = "chr7",
  chromstart = 44.1e6,
  chromend = 44.25e6,
  assembly = "hg38",
  just = c("left", "bottom")
)

Renaming some columns:

v_for_plot <- v |>
  plyranges::select(snp = rsid, p = log10pvalue, effect_size)

To match with the correct gene annotation, we could explicitly define the transcript database using plotgardener::assembly(), where we would provide a database built by running GenomicFeatures::makeTxDbFromGFF() on a GENCODE GTF file. Here we use one of the standard hg38 TxDb with UCSC-style chromosome names.

library(TxDb.Hsapiens.UCSC.hg38.knownGene)
#> Loading required package: GenomicFeatures
#> Loading required package: AnnotationDbi
#> Loading required package: Biobase
#> Welcome to Bioconductor
#> 
#>     Vignettes contain introductory material; view with
#>     'browseVignettes()'. To cite Bioconductor, see
#>     'citation("Biobase")', and for packages 'citation("pkgname")'.
#> 
#> Attaching package: 'AnnotationDbi'
#> The following object is masked from 'package:plyranges':
#> 
#>     select
library(org.Hs.eg.db)
#> 

Below we build the page and populate it with annotation from the TxDb used by plotgardener and from IGVF Catalog.

pageCreate(width = 5, height = 4, showGuides = FALSE)
plotGenes(
  params = par, x = 0.5, y = 3.5, width = 4, height = 1
)
#> genes[genes1]
plotGenomeLabel(
  params = par,
  x = 0.5, y = 3.5, length = 4,
  just = c("left", "top")
)
#> genomeLabel[genomeLabel1]
mplot <- plotManhattan(
  params = par, x = 0.5, y = 2.5, width = 4, height = 2,
  v_for_plot, trans = "",
  sigVal = -log10(5e-8), sigLine = TRUE, col = "grey", lty = 2
)
#> manhattan[manhattan1]
annoYaxis(
    plot = mplot, at=0:4 * 4, axisLine = TRUE, fontsize = 8
)
#> yaxis[yaxis1]
annoXaxis(
    plot = mplot, axisLine = TRUE, label = FALSE
)
#> xaxis[xaxis1]
plotText(
    params = par,
    label = "-log10(p-value)", x = 0.2, y = 2, rot = 90,
    fontsize = 8, fontface = "bold",
    default.units = "inches"
)

Manhattan of IGVF annotated variants

#> text[text1]

Session info

sessionInfo()
#> R version 4.5.1 Patched (2025-08-23 r88802)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.3 LTS
#> 
#> Matrix products: default
#> BLAS:   /home/biocbuild/bbs-3.22-bioc/R/lib/libRblas.so 
#> LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.0  LAPACK version 3.12.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_GB              LC_COLLATE=C              
#>  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
#>  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
#>  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
#> 
#> time zone: America/New_York
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats4    stats     graphics  grDevices utils     datasets  methods  
#> [8] base     
#> 
#> other attached packages:
#>  [1] org.Hs.eg.db_3.22.0                     
#>  [2] TxDb.Hsapiens.UCSC.hg38.knownGene_3.22.0
#>  [3] GenomicFeatures_1.61.6                  
#>  [4] AnnotationDbi_1.71.1                    
#>  [5] Biobase_2.69.1                          
#>  [6] plotgardener_1.15.1                     
#>  [7] plyranges_1.29.1                        
#>  [8] GenomicRanges_1.61.5                    
#>  [9] Seqinfo_0.99.2                          
#> [10] IRanges_2.43.5                          
#> [11] S4Vectors_0.47.4                        
#> [12] BiocGenerics_0.55.1                     
#> [13] generics_0.1.4                          
#> [14] rigvf_1.1.3                             
#> 
#> loaded via a namespace (and not attached):
#>  [1] tidyselect_1.2.1            blob_1.2.4                 
#>  [3] dplyr_1.1.4                 farver_2.1.2               
#>  [5] Biostrings_2.77.2           S7_0.2.0                   
#>  [7] bitops_1.0-9                fastmap_1.2.0              
#>  [9] RCurl_1.98-1.17             GenomicAlignments_1.45.4   
#> [11] XML_3.99-0.19               digest_0.6.37              
#> [13] lifecycle_1.0.4             KEGGREST_1.49.1            
#> [15] RSQLite_2.4.3               magrittr_2.0.4             
#> [17] compiler_4.5.1              rlang_1.1.6                
#> [19] sass_0.4.10                 tools_4.5.1                
#> [21] utf8_1.2.6                  yaml_2.3.10                
#> [23] data.table_1.17.8           rtracklayer_1.69.1         
#> [25] knitr_1.50                  S4Arrays_1.9.1             
#> [27] bit_4.6.0                   curl_7.0.0                 
#> [29] DelayedArray_0.35.3         RColorBrewer_1.1-3         
#> [31] abind_1.4-8                 BiocParallel_1.43.4        
#> [33] withr_3.0.2                 purrr_1.1.0                
#> [35] grid_4.5.1                  Rhdf5lib_1.31.0            
#> [37] ggplot2_4.0.0               scales_1.4.0               
#> [39] dichromat_2.0-0.1           SummarizedExperiment_1.39.2
#> [41] cli_3.6.5                   rmarkdown_2.30             
#> [43] crayon_1.5.3                httr_1.4.7                 
#> [45] rjson_0.2.23                DBI_1.2.3                  
#> [47] cachem_1.1.0                rhdf5_2.53.5               
#> [49] parallel_4.5.1              ggplotify_0.1.3            
#> [51] XVector_0.49.1              restfulr_0.0.16            
#> [53] matrixStats_1.5.0           vctrs_0.6.5                
#> [55] yulab.utils_0.2.1           Matrix_1.7-4               
#> [57] jsonlite_2.0.0              gridGraphics_0.5-1         
#> [59] bit64_4.6.0-1               strawr_0.0.92              
#> [61] tidyr_1.3.1                 jquerylib_0.1.4            
#> [63] glue_1.8.0                  codetools_0.2-20           
#> [65] gtable_0.3.6                GenomeInfoDb_1.45.12       
#> [67] BiocIO_1.19.0               UCSC.utils_1.5.0           
#> [69] tibble_3.3.0                pillar_1.11.1              
#> [71] rappdirs_0.3.3              htmltools_0.5.8.1          
#> [73] rhdf5filters_1.21.0         R6_2.6.1                   
#> [75] httr2_1.2.1                 evaluate_1.0.5             
#> [77] lattice_0.22-7              png_0.1-8                  
#> [79] Rsamtools_2.25.3            memoise_2.0.1              
#> [81] bslib_0.9.0                 rjsoncons_1.3.2            
#> [83] Rcpp_1.1.0                  SparseArray_1.9.1          
#> [85] whisker_0.4.1               xfun_0.53                  
#> [87] MatrixGenerics_1.21.0       fs_1.6.6                   
#> [89] pkgconfig_2.0.3