ScBdLR init 2025 private

Single-nuclei transcriptomic landscape of lateral root initiation in Brachypodium distachyon

Author
Affiliation

UniNE

Published

January 12, 2026

Abstract
Lateral root (LR) formation is a critical process in shaping plant root architecture, requiring the emerging organ to breach surrounding tissues through tightly regulated cell wall (CW) remodeling. In dicots, this spatial accommodation involves coordinated modification of pectins and hemicelluloses. However, the molecular and structural dynamics underlying this process in monocots, especially grasses with compositionally distinct Type II cell walls, remain largely unexplored. Here, we combine high-resolution immunolocalization and single-cell RNA sequencing to construct a spatiotemporal atlas of CW remodeling during LR development in Brachypodium distachyon, a model grass. Using a comprehensive panel of glycan-directed antibodies, we reveal dynamic and tissue-specific reorganization of hemicellulose and pectin epitopes. Xyloglucan remodeling at the LRP-parent root interface and arabinoxylan modifications in overlying cortical layers suggest coordinated enzymatic activity facilitating primordium emergence. Although overall pectin levels are low, localized deposition and remodeling of rhamnogalacturonan-I and xylogalacturonan in specific LRP and cortical domains point to precise functional roles for distinct pectic substructures. Integration with single-cell transcriptomic data identifies candidate enzymes, including glycosyltransferases, hydrolases, driving these structural transitions. Together, our findings uncover a modular and layered CW remodeling program in a grass species.

Preface

Contributors: Kevin Beland / Thomas Badet / Corentin Maslard / Joop E.M Vermeer

This project is an extension of the research work carried out by the Laboratory of cell and molecular biology, with several publications directly related to this subject, presented below:

  • Bellande et al. (n.d.)

  • De Jesus Vieira Teixeira (2024)

  • Bellande, Teixeira, and Vermeer (2025)

NoteGuide being written

This guide is still incomplete. The complete repository (documentation, data, script, etc.) will be available shortly at this link: https://github.com/cmaslard/ScBdLR_2025.

Licence

This document is made available under the terms of the Licence Creative Commons Attribution - Non Commercial Use - Share Alike 4.0 International.

Install

git clone git@github.com:cmaslard/ScBdLR_init_2025_private.git ScBdLR_init_2025_private or git clone git@github.com:cmaslard/ScBdLR_init_2025.git ScBdLR_init_2025

Package used in this quarto document

Code
# library(renv) # install.packages("renv")
# library(dplyr)
# 
# deps <- renv::dependencies(path = ".", progress = F, quiet = T)
# 
# unique_packages <- unique(deps$Package)
# writeLines(unique_packages, here::here("src/packages_use_in_this_quarto.txt"))
# 
# data.frame(
#   Package = unique_packages,
#   Version = sapply(unique_packages, function(pkg) {
#     tryCatch(as.character(packageVersion(pkg)), error = function(e) NA)
#   }),
#   stringsAsFactors = FALSE
# ) %>% 
#   #knitr::kable(caption = "List of packages used in this document", row.names = FALSE)
#   DT::datatable(.,
#   filter = "top",
#   class = 'cell-border stripe',
#   rownames = FALSE
# )
# Utilise renv.lock comme vérité, sinon infos installées
get_pkg_table <- function() {
  deps <- renv::dependencies(path = ".", progress = FALSE, quiet = TRUE)$Package |> unique() |> sort()
  base_pkgs <- rownames(installed.packages(priority = c("base","recommended")))
  deps <- setdiff(deps, base_pkgs)

  lockfile <- tryCatch(renv::lockfile_read("renv.lock"), error = function(e) NULL)

  version_from_lock <- function(pkg) {
    if (is.null(lockfile)) return(NA_character_)
    for (src in c("Packages","Bioconductor","GitHub")) {
      x <- lockfile[[src]][[pkg]]
      if (!is.null(x)) return(x$Version %||% x$Hash %||% NA_character_)
    }
    NA_character_
  }

  data.frame(
    Package = deps,
    Version = vapply(deps, function(p)
      version_from_lock(p) %||% tryCatch(as.character(packageVersion(p)), error = function(e) NA),
      character(1L)
    ),
    stringsAsFactors = FALSE
  )
}
tbl <- get_pkg_table()
# Écrit le fichier (optionnel, uniquement pour tracing humain)
dir.create("src", showWarnings = FALSE)
write.table(tbl$Package, "src/packages_use_in_this_quarto.txt",
            row.names = FALSE, col.names = FALSE, quote = FALSE)

# Affichage dans Quarto
DT::datatable(tbl, filter = "top", class = 'cell-border stripe', rownames = FALSE)