Bioconductor Readiness

July 19, 2026 ยท View on GitHub

Home | Installation | Bioconductor | Implementation | Examples | Benchmarks | API | Reproducibility | References

This page records the dependency boundary used for a Bioconductor-friendly submission of fastEmbedR.

Dependency Classes

ClassDependencyRoleRequired For Core Build
R packageRcppR/C++ interface and exported native routines.yes
R packageBiocStyleVignette rendering in Bioconductor style.suggested
R packagefloatOptional float32 R matrices and reduced host memory use.suggested
R packagejsonliteOptional benchmark and reproducibility metadata serialization.suggested
R packageknitr, rmarkdownVignette and documentation rendering.suggested
R packagetestthatUnit tests.suggested
R packageigraphOptional graph-clustering validation and examples.suggested
R packageRtsne, uwot, umapOptional reference benchmarks only.suggested
Companion packagefastPLS >= 0.99.3Preferred optional randomized-SVD PCA provider for CPU; Metal and compiled CUDA initialization use native fastEmbedR backends.optional enhancement
System libraryC++17 compilerNative CPU code and numerical helper compilation.yes
System libraryApple Metal frameworkNative Metal KNN and embedding backends on macOS.optional
System libraryCUDA Toolkit, FAISS GPU, cuFFT, cuBLAS, cuSOLVER, RAPIDS RAFT and cuVS C librariesNative CUDA KNN, embedding backend, and CUDA TSVD initialization.optional

fastEmbedR does not vendor the full FAISS, cuVS, RAFT, or cuML libraries, or uwot, Rtsne, or Python openTSNE source. Its compact FAISS-derived HNSW and Faiss-mlx-informed Metal files retain their permissive licenses under inst/LICENSES/.

Native KNN Boundary

fastEmbedR owns the internal CPU/Metal KNN and direct FAISS/cuVS CUDA KNN used by one-call embeddings. The following are available without another KNN R package:

  • opentsne_knn() works from supplied neighbor indices and distances;
  • umap_knn() works from supplied neighbor indices and distances;
  • prepare_opentsne_knn() and prepare_umap_knn() can prepare reusable native embedding inputs;
  • knn_graph() and graph_cluster() provide native graph construction and community detection;
  • evaluate_embedding() and plotting helpers use package-native routines.

CPU, Metal, and a correctly compiled CUDA one-call build are self-contained at the R package level. CUDA requests fail explicitly when cuVS is not linked.

Backend Policy

The public embedding backend argument is intentionally small:

backend = "cpu"
backend = "metal"
backend = "cuda"

An explicit GPU request must use the requested GPU backend. The package must not run on CPU while reporting Metal or CUDA. Optional GPU code is compiled and tested when the corresponding toolchain is available.

Submission Checklist

  • No Remotes field in DESCRIPTION.
  • No vendored FAISS/cuVS/RAPIDS source or binary libraries in the R package.
  • Large data, benchmark outputs, and container images are excluded by .Rbuildignore.
  • Examples and vignettes use small built-in data or guard optional packages with requireNamespace().
  • Optional reference benchmarks (Rtsne, uwot, umap) are in Suggests, not Imports.
  • CUDA and Metal failures are explicit, not silent CPU fallbacks.
  • The maintainer email should be registered on the Bioconductor Support Site before submission.

Minimal Bioconductor Check

A CPU-only check should be possible without FAISS/cuVS installed:

LC_ALL=C \
FASTEMBEDR_USE_CUDA=0 R CMD build .

LC_ALL=C \
FASTEMBEDR_USE_CUDA=0 R CMD check --as-cran fastEmbedR_0.99.0.tar.gz

GPU-enabled builds should be validated separately on machines with the relevant toolchains, because Bioconductor build machines should not be assumed to have CUDA or Apple Metal.

The local submission preflight used for this repository is:

LC_ALL=C \
FASTEMBEDR_USE_CUDA=0 \
R CMD check --no-manual --no-build-vignettes fastEmbedR_0.99.0.tar.gz

LC_ALL=C \
Rscript -e 'BiocCheck::BiocCheck("fastEmbedR_0.99.0.tar.gz", `quit-with-status`=FALSE)'

The --no-build-vignettes check mode is useful during development, but it reports vignette-output warnings because inst/doc is intentionally not built. The final submission should build vignettes.

Current Bioconductor-specific follow-up items:

  • register and validate the maintainer email on the Bioconductor Support Site;
  • consider whether the package should instead be submitted to CRAN if the Bioconductor review requires a runtime dependency on another Bioconductor package;
  • add an ORCID to Authors@R when available;
  • reduce or justify set.seed() usage in package code;
  • gradually shorten very long R helper functions as maintenance work.