# Getting Started with immReferent

Nick Borcherding1*

1Washington University in St. Louis, School of Medicine, St. Louis, MO, USA

*ncborch@gmail.com

#### Compiled: April 28, 2026

#### Package

immReferent 1.0.0

## 0.1 Introduction

The `immReferent` package provides a centralized and easy-to-use interface for downloading, managing, and loading immune repertoire and HLA reference sequences from the IMGT, IPD-IMGT/HLA and OGRDB databases. Its primary goal is to ensure that analyses are based on consistent, up-to-date, and correctly formatted reference data.

This vignette will walk you through the basic functionality of the package.

## 0.2 Installation

    devtools::install_github("BorchLab/immReferent")

Or via Bioconductor (once accepted)

    if (!require("BiocManager", quietly = TRUE))
        install.packages("BiocManager")

    BiocManager::install("immReferent")

## 0.3 Downloading Reference Sequences

    library(immReferent)

The main function for all data retrieval is `getIMGT()`. It handles both downloading new data from the source and loading previously downloaded data from a local cache.

### 0.3.1 Downloading HLA Sequences (IPD-IMGT/HLA)

The IPD-IMGT/HLA database provides reference sequences for the Human Leukocyte Antigen (HLA) system. You can download the complete set of nucleotide or protein sequences using `gene = "HLA"`.

    # Download all available HLA protein sequences
    # This will download the file to the cache on the first run
    hla_prot <- getIMGT(gene = "HLA",
                        type = "PROT")

    # Inspect the result
    print(hla_prot)

    ## AAStringSet object of length 43796:
    ##         width seq                                           names
    ##     [1]   365 MAVMAPRTLLLLLSGALALTQ...TQAASSDSAQGSDVSLTACKV HLA:HLA00001 A*01...
    ##     [2]   200 MAVMAPRTLLLLLSGALALTQ...GGARGTGLTAGSGPGSHTIQX HLA:HLA02169 A*01...
    ##     [3]   365 MAVMAPRTLLLLLSGALALTQ...TQAASSDSAQGSDVSLTACKV HLA:HLA14798 A*01...
    ##     [4]   365 MAVMAPRTLLLLLSGALALTQ...TQAASSDSAQGSDVSLTACKV HLA:HLA15760 A*01...
    ##     [5]   365 MAVMAPRTLLLLLSGALALTQ...TQAASSDSAQGSDVSLTACKV HLA:HLA16415 A*01...
    ##     ...   ... ...
    ## [43792]   704 MRLPDLRPWTSLLLVDAALLW...AQLQEGQDLYSRLVQQRLMDX HLA:HLA38075 TAP2...
    ## [43793]   704 MRLPDLRPWTSLLLVDAALLW...AQLQEGQDLYSRLVQQRLMDX HLA:HLA38025 TAP2...
    ## [43794]   704 MRLPDLRPWTSLLLADAALLW...AQLQEGQDLYSRLVQQRLMDX HLA:HLA38029 TAP2...
    ## [43795]   704 MRLPDLRPWTSLLLVDAALLW...AQLQEGQDLYSRLVQQRLMDX HLA:HLA38159 TAP2...
    ## [43796]   704 MRLPDLRPWTSLLLVDAALLW...AQLQEGQDLYSRLVQQRLMDX HLA:HLA38463 TAP2...

    cat("Number of sequences:", length(hla_prot), "\n")

    ## Number of sequences: 43796

    cat("First sequence name:", names(hla_prot)[1], "\n")

    ## First sequence name: HLA:HLA00001 A*01:01:01:01 365 bp

### 0.3.2 Downloading TCR/BCR Sequences (IMGT)

For T-cell receptor (TCR) and B-cell receptor (BCR) genes, you can specify the species and the gene or gene family you are interested in.

    # Download human IGHV nucleotide sequences
    ighv_nuc <- getIMGT(species = "human",
                        gene = "IGHV",
                        type = "NUC")

    # Inspect the result
    print(ighv_nuc)

    ## DNAStringSet object of length 480:
    ##       width seq                                             names
    ##   [1]   320 CAGGTTCAGCTGGTGCAGTCTG...CCGTGTATTACTGTGCGAGAGA M99641|IGHV1-18*0...
    ##   [2]   300 CAGGTTCAGCTGGTGCAGTCTG...CCTAAGATCTGACGACACGGCC X60503|IGHV1-18*0...
    ##   [3]   320 CAGGTTCAGCTGGTGCAGTCTG...CCGTGTATTACTGTGCGAGAGA HM855463|IGHV1-18...
    ##   [4]   320 CAGGTTCAGCTGGTGCAGTCTG...CCGTGTATTACTGTGCGAGAGA KC713938|IGHV1-18...
    ##   [5]   320 CAGGTGCAGCTGGTGCAGTCTG...TCGTGTATTACTGTGCGAGAGA X07448|IGHV1-2*01...
    ##   ...   ... ...
    ## [476]   320 GAGGCCCAGCTTACAGAGTCTG...CAGCATTTAACTGTGCAGGAAA AB019438|IGHV8-51...
    ## [477]   320 GAGGCCCAGCTTACAGAGTCTG...CAGCATTTAACTGTGCAGGAAA BK063799|IGHV8-51...
    ## [478]   320 GAGGCCCAGCTTACAGAGTCTG...CAGCATTTAACTGTGCAGGAAA IMGT000055|IGHV8-...
    ## [479]   320 GAGGCCCAGCTTACAGAGTCTG...CAGCATTTAACTGTGCAGGAAA AC279961|IGHV8-51...
    ## [480]   320 GAGGCCCAGCTTACAGAGTCTG...CAGCATTTAACTGTGCAGGAAA BK068299|IGHV8-51...

You can also download entire families of genes at once by specifying a group name like `"IGH"`, `"IGK"`, `"TRB"`, etc.

    # Download all mouse TRB genes (V, D, J, and C)
    trb_mouse <- getIMGT(species = "mouse",
                         gene = "TRB",
                         type = "NUC")

    # This object will contain TRBV, TRBD, TRBJ, and TRBC sequences
    print(trb_mouse)

    ## DNAStringSet object of length 75:
    ##      width seq                                              names
    ##  [1]   326 GTGACTTTGCTGGAGCAAAACCC...TGTACTGCACCTGCAGTGCAGA AE000663|TRBV1*01...
    ##  [2]   324 GTGACTTTGCTGGAGCAAAACCC...CTTGTACTGCACCTGCAGTGCG X01642|TRBV1*02|M...
    ##  [3]   325 GATGGTGGAATCACCCAGACACC...TTCTGGGCCAGCAGTGAACAAA X16694|TRBV10*01|...
    ##  [4]   324 GATTCTGGGGTTGTCCAGTCTCC...GTACTTCTGTGCCAGCTCTCTC M15614|TRBV12-1*0...
    ##  [5]   321 GATTCTGGGGTTGTCCAGTCTCC...TATGTACTTCTGTGCCAGCTCT M30881|TRBV12-1*0...
    ##  ...   ... ...
    ## [71]    48 CAGCCCTTGCCCTGACTGATTGGCAGCCGATTGAACAGCCTATGCGAG K02802|TRBJ2-6*01...
    ## [72]    47 CTCCTATGAACAGTACTTCGGTCCCGGCACCAGGCTCACGGTTTTAG  K02802|TRBJ2-7*01...
    ## [73]    47 CTCCTATGAACAGTACTTCGGTCCCGGCACTAGGCTCACGGTTTTAG  M16122|TRBJ2-7*02...
    ## [74]   519 NAGGATCTGAGAAATGTGACTCC...CATGGTCAAGAAAAAAAATTCC M26057+M26058+M26...
    ## [75]   519 NAGGATCTGAGAAATGTGACTCC...CATGGTCAAGAAAAAAAATTCC AE000665|TRBC2*03...

### 0.3.3 Downloading Germline Sets from OGRDB (AIRR)

OGRDB provides AIRR-compliant germline sets for immunoglobulin loci (and growing coverage more broadly). You can retrieve:

- FASTA (gapped or ungapped) nucleotide sequences, or
- AIRR JSON, which we parse into `DNAStringSet` (and optionally translate to `AAStringSet`).

    # Human IGH nucleotide sequences (gapped FASTA)
    igh_ogrdb <- getOGRDB(
      species = "human",
      locus   = "IGH",
      type    = "NUC",
      format  = "FASTA_GAPPED"
    )
    igh_ogrdb

    ## DNAStringSet object of length 236:
    ##       width seq                                             names
    ##   [1]    17 GGTACAACTGGAACGAC                               IGHD1-1*01
    ##   [2]    17 GGTATAACCGGAACCAC                               IGHD1-14*01
    ##   [3]    17 GGTATAACTGGAACGAC                               IGHD1-20*01
    ##   [4]    20 GGTATAGTGGGAGCTACTAC                            IGHD1-26*01
    ##   [5]    17 GGTATAACTGGAACTAC                               IGHD1-7*01
    ##   ...   ... ...
    ## [232]   320 CAGGTGCAGCTGGTGCAGTCTG...CCATGTATTACTGTGCGAGATA IGHV7-81*01
    ## [233]   320 GAGGCCCAGCTTACAGAGTCTG...CAGCATTTAACTGTGCAGGAAA IGHV8-51-1*02
    ## [234]   320 GAGGCCCAGCTTACAGAGTCTG...CAGCATTTAACTGTGCAGGAAA IGHV8-51-1*03
    ## [235]   320 GAGGCCCAGCTTACAGAGTCTG...CAGCATTTAACTGTGCAGGAAA IGHV8-51-1*04
    ## [236]   320 GAGGCCCAGCTTACAGAGTCTG...CAGCATTTAACTGTGCAGGAAA IGHV8-51-1*05

Pulling the AIRR-formatted sequences:

    # Human IGK sequences via AIRR JSON (parsed to DNAStringSet)
    igk_airr <- getOGRDB(
      species = "human",
      locus   = "IGK",
      type    = "NUC",
      format  = "AIRR"
    )
    igk_airr

    ## DNAStringSet object of length 71:
    ##      width seq                                              names
    ##  [1]   764 ATGAGGCTCCCTGCTCAGCTCCT...GGTACAGCCCTGAACAGAAACC IGKV2D-40*01
    ##  [2]   499 ATGAGGGTCCCCGCTCAGCTCCT...GTTACACACCCGAACAAAAACC IGKV1-NL1*01
    ##  [3]   582 ATGTCGCCATCACAACTCATTGG...GTTACAACCCAGAACAAAAACT IGKV6D-21*02
    ##  [4]   833 ATGAGGCTCCTTGCTCAGCTTCT...GGTACAGCTCTGAACAAAAACC IGKV2-24*02
    ##  [5]   499 ATGAGGGTCCCCGCTCAGCTCCT...GTTACCAACCCGAACATAAACC IGKV1-12*01
    ##  ...   ... ...
    ## [67]    77 GATTTTTGTTAAGGGGAAAGTAA...GGGACACGACTGGAGATTAAAC IGKJ5*01
    ## [68]    77 GGTTTCTGTTCAGCAAGACAATG...GGGACCAAGGTGGAAATCAAAC IGKJ1*01
    ## [69]    78 AGTTTTTGTATAGGAGGGAAGTT...GGGACCAAGCTGGAGATCAAAC IGKJ2*04
    ## [70]    77 GGTTTTTGTTGAGGGGAAAGGGT...GGGACCAAGGTGGAGATCAAAC IGKJ4*01
    ## [71]    76 GGTTTTTGTAAAGGGAAAAGTTA...GGGACCAAAGTGGATATCAAAC IGKJ3*01

## 0.4 Working with the Cache

`immReferent` automatically caches all downloaded data to avoid repeated downloads and to enable offline work.

### 0.4.1 Listing Cached Files

You can see all the files currently in your cache using the `listIMGT()` or `listOGRDB()` function.

    # List the full paths of all cached files
    listIMGT()

    ##  [1] "/Users/biocbuild/.immReferent/human/constant/imgt_human_IGHC.fasta"
    ##  [2] "/Users/biocbuild/.immReferent/human/hla/hla_prot.fasta"
    ##  [3] "/Users/biocbuild/.immReferent/human/ogrdb/Human_IGH_VDJ_published_gapped.fasta"
    ##  [4] "/Users/biocbuild/.immReferent/human/ogrdb/Human_IGKappa_VJ_published_airr.json"
    ##  [5] "/Users/biocbuild/.immReferent/human/ogrdb/Human_IGKappa_VJ_published_gapped.fasta"
    ##  [6] "/Users/biocbuild/.immReferent/human/ogrdb/Human_IGLambda_VJ_published_ungapped.fasta"
    ##  [7] "/Users/biocbuild/.immReferent/human/vdj/imgt_human_IGHD.fasta"
    ##  [8] "/Users/biocbuild/.immReferent/human/vdj/imgt_human_IGHJ.fasta"
    ##  [9] "/Users/biocbuild/.immReferent/human/vdj/imgt_human_IGHV.fasta"
    ## [10] "/Users/biocbuild/.immReferent/human/vdj_aa/imgt_aa_human_IGHV.fasta"
    ## [11] "/Users/biocbuild/.immReferent/human/vdj_aa/imgt_aa_human_TRBV.fasta"
    ## [12] "/Users/biocbuild/.immReferent/immReferent_log.yaml"
    ## [13] "/Users/biocbuild/.immReferent/mouse/constant/imgt_mouse_TRBC.fasta"
    ## [14] "/Users/biocbuild/.immReferent/mouse/vdj/imgt_mouse_TRBD.fasta"
    ## [15] "/Users/biocbuild/.immReferent/mouse/vdj/imgt_mouse_TRBJ.fasta"
    ## [16] "/Users/biocbuild/.immReferent/mouse/vdj/imgt_mouse_TRBV.fasta"
    ## [17] "/Users/biocbuild/.immReferent/rabbit/vdj_aa/imgt_aa_rabbit_TRBV.fasta"
    ## [18] "/Users/biocbuild/.immReferent/rat/vdj/imgt_rat_IGHV.fasta"

    listOGRDB()

    ## character(0)

### 0.4.2 Loading from Cache

When you call `getIMGT()`, it will always load data from the cache if it’s available. If you want to only load from the cache and prevent any possibility of a download, you can use `loadIMGT()`. This function is useful in offline environments or for ensuring strict reproducibility.

    # This will load from the cache if available, or download otherwise
    ighv_nuc <- getIMGT(species = "human",
                        gene = "IGHV",
                        type = "NUC")

    # This will load from the cache, or fail if not found and offline
    ighv_nuc_from_cache <- loadIMGT(species = "human",
                                    gene = "IGHV",
                                    type = "NUC")

Similar to the above, we can pull and load from OGRDB using `getOGRDB()` and `loadOGRDB()`.

    # This will load from the cache if available, or download otherwise
    igh_nuc <- getOGRDB(species = "human",
                        locus = "IGH",
                        type = "NUC",
                        format = "FASTA_GAPPED")

    # This will load from the cache, or fail if not found and offline
    igh_from_cache <- loadOGRDB(species = "human",
                                locus = "IGH",
                                type = "NUC",
                                format = "FASTA_GAPPED")

### 0.4.3 Refreshing the Cache

If you suspect the online data has been updated and you want to re-download it, you can use `refreshIMGT()` or `refreshOGRDB()`. This is just a convenient shortcut for `getIMGT(..., refresh = TRUE)`.

    # Force a re-download of the human IGHV sequences
    ighv_nuc_fresh <- refreshIMGT(species = "human",
                                  gene = "IGHV",
                                  type = "NUC")

    # Force a re-download of human IGK (gapped FASTA)
    igk_fresh <- refreshOGRDB(species = "human",
                              locus = "IGK",
                              type = "NUC",
                              format = "FASTA_GAPPED")

## 0.5 Exporting Reference Databases for External Tools

`immReferent` provides export functions to create reference databases compatible with popular immune repertoire analysis tools. These functions format the downloaded sequences appropriately for each tool.

### 0.5.1 Export to MiXCR

MiXCR is a popular tool for analyzing immune repertoire sequencing data. The `exportMiXCR()` function creates FASTA files formatted for MiXCR’s `buildLibrary` command.

    # Download human IGH sequences
    igh_seqs <- getIMGT(species = "human",
                        gene = "IGH",
                        type = "NUC",
                        suppressMessages = TRUE)

    # Export to MiXCR format
    mixcr_dir <- tempdir()
    mixcr_files <- exportMiXCR(igh_seqs,
                               mixcr_dir,
                               chain = "IGH")

    # View created files
    print(mixcr_files)

    ## $v_genes
    ## [1] "/var/folders/r0/l4fjk6cj5xj0j3brt4bplpl40000gt/T//RtmpgoAeld/v-genes.IGH.fasta"
    ##
    ## $d_genes
    ## [1] "/var/folders/r0/l4fjk6cj5xj0j3brt4bplpl40000gt/T//RtmpgoAeld/d-genes.IGH.fasta"
    ##
    ## $j_genes
    ## [1] "/var/folders/r0/l4fjk6cj5xj0j3brt4bplpl40000gt/T//RtmpgoAeld/j-genes.IGH.fasta"

    # View first few lines of V gene file
    if (!is.null(mixcr_files$v_genes)) {
      cat(head(readLines(mixcr_files$v_genes), 4), sep = "\n")
    }

    ## >IGHV1-18*01
    ## CAGGTTCAGCTGGTGCAGTCTGGAGCT...GAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTCTCCTGCAAGGCTTCTGG
    ## TTACACCTTT............ACCAGCTATGGTATCAGCTGGGTGCGACAGGCCCCTGGACAAGGGCTTGAGTGGATGG
    ## GATGGATCAGCGCTTAC......AATGGTAACACAAACTATGCACAGAAGCTCCAG...GGCAGAGTCACCATGACCACA

The output files can be used with MiXCR’s `buildLibrary` command:

    mixcr buildLibrary \
        --v-genes-from-fasta v-genes.IGH.fasta \
        --v-gene-feature VRegion \
        --j-genes-from-fasta j-genes.IGH.fasta \
        --d-genes-from-fasta d-genes.IGH.fasta \
        --c-genes-from-fasta c-genes.IGH.fasta \
        --chain IGH \
        --species hs \
        custom-IGH.json.gz

### 0.5.2 Export to TRUST4

TRUST4 is a tool for reconstructing immune repertoires from RNA-seq data. The `exportTRUST4()` function creates a FASTA file compatible with TRUST4’s `--ref` parameter.

    # Export to TRUST4 format (includes constant regions by default)
    trust4_file <- tempfile(fileext = ".fa")
    exportTRUST4(igh_seqs, trust4_file)

    # View header format
    cat(head(readLines(trust4_file), 6), sep = "\n")

    ## >IGHV1-18*01
    ## CAGGTTCAGCTGGTGCAGTCTGGAGCT...GAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTCTCCTGCAAGGCTTCTGG
    ## TTACACCTTT............ACCAGCTATGGTATCAGCTGGGTGCGACAGGCCCCTGGACAAGGGCTTGAGTGGATGG
    ## GATGGATCAGCGCTTAC......AATGGTAACACAAACTATGCACAGAAGCTCCAG...GGCAGAGTCACCATGACCACA
    ## GACACATCCACGAGCACAGCCTACATGGAGCTGAGGAGCCTGAGATCTGACGACACGGCCGTGTATTACTGTGCGAGAGA
    ## >IGHV1-18*02

Use the exported file with TRUST4:

    ./run-trust4 -f hg38_bcrtcr.fa --ref custom_IMGT+C.fa \
        -1 reads_1.fq -2 reads_2.fq -o output

### 0.5.3 Export to Cell Ranger VDJ

Cell Ranger from 10x Genomics includes VDJ analysis capabilities. The `exportCellRanger()` function creates a FASTA file suitable for building a custom VDJ reference.

    # Export V genes for Cell Ranger
    cellranger_file <- tempfile(fileext = ".fa")
    exportCellRanger(igh_seqs, cellranger_file)

    # View header format
    cat(head(readLines(cellranger_file), 4), sep = "\n")

    ## >IGHV1-18*01
    ## CAGGTTCAGCTGGTGCAGTCTGGAGCT...GAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTCTCCTGCAAGGCTTCTGG
    ## TTACACCTTT............ACCAGCTATGGTATCAGCTGGGTGCGACAGGCCCCTGGACAAGGGCTTGAGTGGATGG
    ## GATGGATCAGCGCTTAC......AATGGTAACACAAACTATGCACAGAAGCTCCAG...GGCAGAGTCACCATGACCACA

Note: For a complete Cell Ranger VDJ reference, you also need a GTF file with gene annotations and should use `cellranger mkvdjref` to build the reference.

### 0.5.4 Export to IgBLAST

IgBLAST is NCBI’s tool for analyzing immunoglobulin and T cell receptor sequences. The `exportIgBLAST()` function creates FASTA files with simplified headers compatible with IgBLAST.

    # Export to IgBLAST format
    igblast_dir <- tempdir()
    igblast_files <- exportIgBLAST(igh_seqs, igblast_dir,
                                    organism = "human",
                                    receptor_type = "ig")

    # View created files
    print(igblast_files)

    ## $v_genes
    ## [1] "/var/folders/r0/l4fjk6cj5xj0j3brt4bplpl40000gt/T//RtmpgoAeld/human_ig_v.fasta"
    ##
    ## $d_genes
    ## [1] "/var/folders/r0/l4fjk6cj5xj0j3brt4bplpl40000gt/T//RtmpgoAeld/human_ig_d.fasta"
    ##
    ## $j_genes
    ## [1] "/var/folders/r0/l4fjk6cj5xj0j3brt4bplpl40000gt/T//RtmpgoAeld/human_ig_j.fasta"

    # View header format
    if (!is.null(igblast_files$v_genes)) {
      cat(head(readLines(igblast_files$v_genes), 4), sep = "\n")
    }

    ## >IGHV1-18*01
    ## CAGGTTCAGCTGGTGCAGTCTGGAGCT...GAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTCTCCTGCAAGGCTTCTGG
    ## TTACACCTTT............ACCAGCTATGGTATCAGCTGGGTGCGACAGGCCCCTGGACAAGGGCTTGAGTGGATGG
    ## GATGGATCAGCGCTTAC......AATGGTAACACAAACTATGCACAGAAGCTCCAG...GGCAGAGTCACCATGACCACA

After exporting, create BLAST databases using `makeblastdb`:

    makeblastdb -parse_seqids -dbtype nucl \
        -in human_ig_v.fasta -out human_ig_v
    makeblastdb -parse_seqids -dbtype nucl \
        -in human_ig_d.fasta -out human_ig_d
    makeblastdb -parse_seqids -dbtype nucl \
        -in human_ig_j.fasta -out human_ig_j

# 1 Conclusion

This has been a general overview of the capabilities of immReferent for downloading and caching immune receptor and HLA sequences from IMGT and OGRDB, as well as exporting them to formats compatible with popular analysis tools. If you have any questions, comments, or suggestions, feel free to visit the GitHub repository.

## 1.1 Session Info

    sessionInfo()

    ## R version 4.6.0 Patched (2026-04-24 r89963)
    ## Platform: aarch64-apple-darwin23
    ## Running under: macOS Tahoe 26.3.1
    ##
    ## Matrix products: default
    ## BLAS:   /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRblas.0.dylib
    ## LAPACK: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1
    ##
    ## locale:
    ## [1] C/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
    ##
    ## time zone: America/New_York
    ## tzcode source: internal
    ##
    ## attached base packages:
    ## [1] stats     graphics  grDevices utils     datasets  methods   base
    ##
    ## other attached packages:
    ## [1] immReferent_1.0.0 BiocStyle_2.40.0
    ##
    ## loaded via a namespace (and not attached):
    ##  [1] jsonlite_2.0.0      compiler_4.6.0      BiocManager_1.30.27
    ##  [4] crayon_1.5.3        promises_1.5.0      Rcpp_1.1.1-1.1
    ##  [7] xml2_1.5.2          Biostrings_2.80.0   later_1.4.8
    ## [10] jquerylib_0.1.4     IRanges_2.46.0      Seqinfo_1.2.0
    ## [13] yaml_2.3.12         fastmap_1.2.0       R6_2.6.1
    ## [16] XVector_0.52.0      generics_0.1.4      curl_7.1.0
    ## [19] knitr_1.51          BiocGenerics_0.58.0 tibble_3.3.1
    ## [22] bookdown_0.46       pillar_1.11.1       bslib_0.10.0
    ## [25] rlang_1.2.0         websocket_1.4.4     cachem_1.1.0
    ## [28] xfun_0.57           sass_0.4.10         otel_0.2.0
    ## [31] cli_3.6.6           magrittr_2.0.5      digest_0.6.39
    ## [34] rvest_1.0.5         processx_3.9.0      lifecycle_1.0.5
    ## [37] chromote_0.5.1      vctrs_0.7.3         S4Vectors_0.50.0
    ## [40] evaluate_1.0.5      glue_1.8.1          stats4_4.6.0
    ## [43] rmarkdown_2.31      httr_1.4.8          pkgconfig_2.0.3
    ## [46] tools_4.6.0         htmltools_0.5.9