This package is an accompaniment to the Bioconductor Maintainer Validation App. It displays a list of the currently active Bioconductor packages and their maintainers. The Bioconductor Maintainer Validation App sends a reminder email to maintainers of Bioconductor policies and procedures. Maintainers are required to opt-in to the Bioconductor policies once a year. This vignette demonstrates convenient wrappers to the application api for common queries against the database. See also the BiocMaintainerShiny vignette for how to launch the accompanied shiny app.
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("BiocMaintainerApp")
library(BiocMaintainerApp)
This package provides convenient R functions that wrap around the Bioconductor Maintainer Validation App API.
There are three functions that return data.frames of maintainer information that include: name, package, email, consent_date, email_status, is_email_valid. These functions take either the package name, maintainer email, or maintainer name as argument:
## By package name
getInfoByPackage("BiocFileCache")
#> package name email consent_date
#> 1 BiocFileCache Lori Shepherd lori.shepherd@roswellpark.org 2025-12-01
#> email_status is_email_valid
#> 1 valid 1
## By maintainer email
tbl <- getInfoByEmail("maintainer@bioconductor.org")
head(tbl)
#> email name package
#> 1 maintainer@bioconductor.org Bioconductor Package Maintainer annotate
#> 2 maintainer@bioconductor.org Bioconductor Package Maintainer AnnotationDbi
#> 3 maintainer@bioconductor.org Bioconductor Package Maintainer AnnotationFilter
#> 4 maintainer@bioconductor.org Bioconductor Package Maintainer AnnotationForge
#> 5 maintainer@bioconductor.org Bioconductor Package Maintainer AnnotationHub
#> 6 maintainer@bioconductor.org Bioconductor Package Maintainer AnnotationHubData
#> consent_date email_status is_email_valid
#> 1 2025-12-01 valid 1
#> 2 2025-12-01 valid 1
#> 3 2025-12-01 valid 1
#> 4 2025-12-01 valid 1
#> 5 2025-12-01 valid 1
#> 6 2025-12-01 valid 1
## By maintainer name
## Then list packages associated
tbl <- getInfoByName("Hervé Pagès")
head(tbl$package)
#> [1] "BiocGenerics" "Biostrings" "BSgenome" "BSgenomeForge"
#> [5] "DelayedArray" "GenomeInfoDb"
There is also a function that takes an email and returns if it is valid or not. If it is not valid, it will also return a data.frame of additional information collected to try to indicate the resason for the failed delivery. The return value of this function is a list with argument ‘valid’ and optionally ‘data’.
isEmailValid("maintainer@bioconductor.org")
#> $valid
#> [1] TRUE
There are four list functions to help retrieve emails that are not necessarily valid either because emails cannot be delivered to the email or the maintainer has not consented to Bioconductor policies in the last year.
## list invalid
## maintainers that emails cannot be delivered and any information on failure
## this is a data.frame
tbl <- listInvalid()
head(tbl)
#> email name package email_status
#> 1 wyang@zoologie.uni-kiel.de Wentao Yang ABSSeq suppressed
#> 2 dimitrov@stat.Berkeley.EDU Peter Dimitrov aCGH suppressed
#> 3 sdavis2@mail.nih.gov Sean Davis ACME suppressed
#> 4 cuilan.gao@stjude.org Cuilan lani Gao AGDEX bounced
#> 5 plopez@cnic.es Pedro Lopez-Romero AgiMicroRna suppressed
#> 6 wancen@live.unc.edu Wancen Mu airpart suppressed
#> bounce_type bounce_subtype smtp_status
#> 1 BOUNCE <NA> <NA>
#> 2 BOUNCE <NA> <NA>
#> 3 BOUNCE <NA> <NA>
#> 4 Permanent General 5.1.10
#> 5 BOUNCE <NA> <NA>
#> 6 BOUNCE <NA> <NA>
#> diagnostic_code
#> 1 2026-01-11 03:07:31 +0000
#> 2 2026-01-11 03:00:20 +0000
#> 3 2025-11-24 17:18:43 +0000
#> 4 smtp;550 5.1.10 RESOLVER.ADR.RecipientNotFound; Recipient not found by SMTP address lookup
#> 5 2025-02-25 17:00:05 +0000
#> 6 2026-01-11 03:00:29 +0000
## list needs consent
## maintainers have not consented to policies in the last year
tbl <- listNeedsConsent()
head(tbl)
#> [1] "jiahfong@gmail.com" "wyang@zoologie.uni-kiel.de"
#> [3] "jpacostar@unal.edu.co" "dimitrov@stat.Berkeley.EDU"
#> [5] "sdavis2@mail.nih.gov" "jlhayes1982@gmail.com"
## list bad emails
## combo: invalid and needs consent
tbl <- listAllBadEmails()
head(tbl)
#> [1] "jiahfong@gmail.com" "wyang@zoologie.uni-kiel.de"
#> [3] "jpacostar@unal.edu.co" "dimitrov@stat.Berkeley.EDU"
#> [5] "sdavis2@mail.nih.gov" "jlhayes1982@gmail.com"
## list suppression list
## emails that appear on aws suppression list and would not try to send
## this is list. 'data' element contains a data.frame of name and email
tbl <- listEmailsOnSuppressionList()
head(tbl$data)
#> email name
#> 1 wyang@zoologie.uni-kiel.de Wentao Yang
#> 2 dimitrov@stat.Berkeley.EDU Peter Dimitrov
#> 3 sdavis2@mail.nih.gov Sean Davis
#> 4 plopez@cnic.es Pedro Lopez-Romero
#> 5 wancen@live.unc.edu Wancen Mu
#> 6 dxl466@cs.bham.ac.uk Dong Li
If the prebuilt functions are not sufficient and you would like to perform your own analysis, there is a function to download the current version of the database.
all_data <- get_maintainer_data()
tail(all_data)
#> package name email
#> 3917 simplifyEnrichment Zuguang Gu guzuguang@suat-sz.edu.cn
#> 3918 methylationArrayAnalysis Jovana Maksimovic jovana.maksimovic@petermac.org
#> 3919 anndataR Robrecht Cannoodt rcannood@gmail.com
#> 3920 BioMartGOGeneSets Zuguang Gu guzuguang@suat-sz.edu.cn
#> 3921 GeneSummary Zuguang Gu guzuguang@suat-sz.edu.cn
#> 3922 UniProtKeywords Zuguang Gu guzuguang@suat-sz.edu.cn
#> consent_date email_status is_email_valid last_verification_sent
#> 3917 2026-02-02 new TRUE <NA>
#> 3918 2026-02-02 new TRUE <NA>
#> 3919 2026-02-04 new TRUE <NA>
#> 3920 2026-02-04 new TRUE <NA>
#> 3921 2026-02-04 new TRUE <NA>
#> 3922 2026-02-04 new TRUE <NA>
#> bounce_type bounce_subtype smtp_status diagnostic_code needs_consent
#> 3917 <NA> <NA> <NA> <NA> FALSE
#> 3918 <NA> <NA> <NA> <NA> FALSE
#> 3919 <NA> <NA> <NA> <NA> FALSE
#> 3920 <NA> <NA> <NA> <NA> FALSE
#> 3921 <NA> <NA> <NA> <NA> FALSE
#> 3922 <NA> <NA> <NA> <NA> FALSE
The following provide brief descriptions of columns:
The remaining columns are utilized if additional information when an email is bounced can be retrieved. This is used as potential diagnostic and resolution.
sessionInfo()
#> R Under development (unstable) (2026-01-15 r89304)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.3 LTS
#>
#> Matrix products: default
#> BLAS: /home/biocbuild/bbs-3.23-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] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] BiocMaintainerApp_0.99.0 BiocStyle_2.39.0
#>
#> loaded via a namespace (and not attached):
#> [1] cli_3.6.5 knitr_1.51 rlang_1.1.7
#> [4] xfun_0.56 otel_0.2.0 promises_1.5.0
#> [7] shiny_1.12.1 xtable_1.8-4 jsonlite_2.0.0
#> [10] DT_0.34.0 htmltools_0.5.9 httpuv_1.6.16
#> [13] sass_0.4.10 rmarkdown_2.30 evaluate_1.0.5
#> [16] jquerylib_0.1.4 shinyjs_2.1.1 fastmap_1.2.0
#> [19] yaml_2.3.12 lifecycle_1.0.5 bookdown_0.46
#> [22] BiocManager_1.30.27 compiler_4.6.0 codetools_0.2-20
#> [25] htmlwidgets_1.6.4 Rcpp_1.1.1 later_1.4.5
#> [28] digest_0.6.39 R6_2.6.1 magrittr_2.0.4
#> [31] bslib_0.10.0 tools_4.6.0 mime_0.13
#> [34] shinythemes_1.2.0 cachem_1.1.0