Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.9%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

Basic Info
Statistics
  • Stars: 34
  • Watchers: 3
  • Forks: 2
  • Open Issues: 5
  • Releases: 0
Created over 1 year ago · Last pushed 10 months ago
Metadata Files
Readme Changelog Contributing License Codemeta

README.Rmd

---
output: github_document
---

```{r, include=FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%"
)
```

# rixpress: Reproducible Analytical Pipelines with `Nix`

[![R-hub
v2](https://github.com/b-rodrigues/rixpress/actions/workflows/rhub.yaml/badge.svg)](https://github.com/b-rodrigues/rixpress/actions/workflows/rhub.yaml/)
[![Status at rOpenSci Software Peer
Review](https://badges.ropensci.org/706_status.svg)](https://github.com/ropensci/software-review/issues/706)

If you want to watch a 2-Minute video introduction, click the image
below:


Video Thumbnail


`{rixpress}` provides a framework for building multilanguage reproducible
analytical pipelines by leveraging Nix’s build automation capabilities.
One of the design goals of `{rixpress}` is to mimic the user experience of
the `{targets}` package, and it is heavily inspired by that workflow. It
builds on the `{rix}` package, which provides helper functions to define
reproducible development environments as code using Nix, ensuring the
pipeline runs in a fully reproducible Nix-managed environment. `{rixpress}`
only requires users to write the pipeline using familiar R code.

`rixpress` focuses on “micropipelines”: pipelines executed on a single
machine for small-to-medium sized projects.

For example, this R script defines a list of *derivations* defined by
functions prefixed with `rxp_*()`, which is then passed to `rxp_populate()`:

```r
library(rixpress)

list(
  rxp_r_file(
    mtcars,
    'mtcars.csv',
    \(x) (read.csv(file = x, sep = "|"))
  ),

  rxp_r(
    mtcars_am,
    filter(mtcars, am == 1)
  ),

  rxp_r(
    mtcars_head,
    head(mtcars_am)
  ),

  rxp_r(
    mtcars_tail,
    tail(mtcars_head)
  ),

  rxp_r(
    mtcars_mpg,
    select(mtcars_tail, mpg)
  ),

  rxp_qmd(
    page,
    "page.qmd"
  )
) |>
  rxp_populate()
```

Running `rxp_populate()` generates a `pipeline.nix` file, which contains
the build instructions for all derivations and final outputs expressed
as Nix code. You can define derivations that run Python or Julia code,
and objects can be exchanged between R and Python by using `rxp_py2r()`
and `rxp_r2py()`, or by serializing to a common format such as JSON.
By default, calling `rxp_populate()` also builds the pipeline, but it’s
possible to only generate the `pipeline.nix` file and build the pipeline
later using:

``` r
rxp_make()
```

The build process assumes the presence of a `default.nix` file that
defines the computational environment the pipeline runs in; this file
can be generated with the {rix} package. The `default.nix` typically
defines an environment with R and required R packages (and optionally
Python/Julia and their packages), Quarto, and any necessary system-level
dependencies pinned to a specific date to ensure reproducibility.

In the example above, the first derivation reads `mtcars.csv` (in the
example it’s pipe-separated, i.e. a `.psv` file). Each output (for
example, `mtcars`, `mtcars_am`, `mtcars_head`, `mtcars_tail`,
`mtcars_mpg`, `page`) is built by Nix within the environment defined by
`default.nix`. Concretely, {rix} makes using Nix as a package manager
easier for R users, and {rixpress} makes it easy to use Nix as a build
automation tool.

When you run `rxp_populate()`, a folder called `_rixpress/` is created
which contains a JSON representation of the pipeline’s DAG (Directed
Acyclic Graph). You can visualize the pipeline using `rxp_ggdag()`:

``` r
rxp_ggdag()
```

DAG
Because the pipeline is built using Nix, outputs are stored in the Nix store under `/nix/store/`. To make working with these outputs easier, `{rixpress}` provides several helper functions: - `rxp_read("mtcars_mpg")` — read the content of `mtcars_mpg` into R (the return value depends on the derivation type: an R object, a file path, etc.); - `rxp_load("mtcars_mpg")` — load objects from the result into the global environment; - `rxp_copy("page")` — copy outputs (e.g. a generated document) from the Nix store into the current working directory so you can open or inspect them there. For complex outputs such as documents (for example the Quarto document `page` above), `rxp_read("page")` returns the output file path; you can then open it with `browseURL()` or copy it into your working directory with `rxp_copy()`. You can export the cache into a file and import it on another machine (or in CI) to avoid rebuilding everything from scratch using `rxp_export_artifacts()` and `rxp_import_artifacts()` respectively. `{rixpress}` is flexible; please consult the examples repository for many different patterns and complete demos: [https://github.com/b-rodrigues/rixpress_demos/tree/master](https://github.com/b-rodrigues/rixpress_demos/tree/master) ## Installation ### rix `{rixpress}` builds on `{rix}`, so we highly recommend you start by learning and using `{rix}` before trying your hand at `{rixpress}`. By learning how to use `{rix}`, you'll learn more about `Nix`, how to install and use it, and will then be ready to use `{rixpress}`! To install Nix, we recommend using the installer from [Determinate Systems](https://docs.determinate.systems/). ### Installing rixpress Since there's little point in installing `{rixpress}` if you don't use `Nix`, the ideal way to install `{rixpress}` is instead to use `{rix}` to set up a reproducible environment that includes `{rixpress}` and the other required dependencies for your project. Take a look at the `vignette("intro-concepts")` and `vignette("core-functions")` to get started! That being said, `{rixpress}` is a regular R package, so you can install it from GitHub directly (while it's not on CRAN): ```r # Install remotes if you don’t have it if (!require("remotes")) install.packages("remotes") # Install the package from GitHub remotes::install_github("b-rodrigues/rixpress") ``` ## Contributing Pull requests are welcome. If you’re unsure whether to open one, feel free to open an issue first to discuss your idea. For contributor guidelines, see CONTRIBUTING.md. If you plan to contribute documentation or vignettes, please: - Add runnable, minimal examples. - Prefer small datasets and short-running examples. - Document required system dependencies for the example (through a `default.nix`). ## Scope Please refer to the `vignette("scope")` to learn more about what `{rixpress}` will and will not support.

Owner

  • Name: Bruno Rodrigues
  • Login: b-rodrigues
  • Kind: user
  • Location: Luxembourg-City, Luxembourg
  • Company: MESR, Luxembourg

CodeMeta (codemeta.json)

{
  "@context": "https://doi.org/10.5063/schema/codemeta-2.0",
  "@type": "SoftwareSourceCode",
  "identifier": "rixpress",
  "description": "Streamlines the creation of reproducible analytical pipelines using 'default.nix' expressions generated via the 'rix' package for reproducibility. Define derivations in 'R', 'Python' or 'Julia', chain them into a composition of pure functions and build the resulting pipeline using 'Nix' as the underlying end-to-end build tool. Functions to plot the pipeline as a directed acyclic graph are included, as well as functions to load and inspect intermediary results for interactive analysis. User experience heavily inspired by the 'targets' package.",
  "name": "rixpress: Build Reproducible Analytical Pipelines with 'Nix'",
  "relatedLink": "https://docs.ropensci.org/rixpress/",
  "codeRepository": "https://github.com/ropensci/rixpress/",
  "issueTracker": "https://github.com/ropensci/rixpress/issues/",
  "license": "https://spdx.org/licenses/GPL-3.0",
  "version": "0.10.1",
  "programmingLanguage": {
    "@type": "ComputerLanguage",
    "name": "R",
    "url": "https://r-project.org"
  },
  "runtimePlatform": "R version 4.5.1 (2025-06-13)",
  "author": [
    {
      "@type": "Person",
      "givenName": "Bruno",
      "familyName": "Rodrigues",
      "email": "bruno@brodrigues.co",
      "@id": "https://orcid.org/0000-0002-3211-3689"
    }
  ],
  "maintainer": [
    {
      "@type": "Person",
      "givenName": "Bruno",
      "familyName": "Rodrigues",
      "email": "bruno@brodrigues.co",
      "@id": "https://orcid.org/0000-0002-3211-3689"
    }
  ],
  "softwareSuggestions": [
    {
      "@type": "SoftwareApplication",
      "identifier": "dplyr",
      "name": "dplyr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=dplyr"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "ggdag",
      "name": "ggdag",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=ggdag"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "ggplot2",
      "name": "ggplot2",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=ggplot2"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "knitr",
      "name": "knitr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=knitr"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "mockery",
      "name": "mockery",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=mockery"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "reticulate",
      "name": "reticulate",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=reticulate"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "rix",
      "name": "rix",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=rix"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "rmarkdown",
      "name": "rmarkdown",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=rmarkdown"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "testthat",
      "name": "testthat",
      "version": ">= 3.0.0",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=testthat"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "usethis",
      "name": "usethis",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=usethis"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "visNetwork",
      "name": "visNetwork",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=visNetwork"
    }
  ],
  "softwareRequirements": {
    "1": {
      "@type": "SoftwareApplication",
      "identifier": "R",
      "name": "R",
      "version": ">= 4.1.0"
    },
    "2": {
      "@type": "SoftwareApplication",
      "identifier": "igraph",
      "name": "igraph",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=igraph"
    },
    "3": {
      "@type": "SoftwareApplication",
      "identifier": "jsonlite",
      "name": "jsonlite",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=jsonlite"
    },
    "4": {
      "@type": "SoftwareApplication",
      "identifier": "processx",
      "name": "processx",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=processx"
    },
    "SystemRequirements": "Nix"
  },
  "fileSize": "1586.94KB",
  "releaseNotes": "https://github.com/ropensci/rixpress/blob/main/NEWS.md",
  "readme": "https://github.com/ropensci/rixpress/blob/main/README.md",
  "contIntegration": "https://github.com/ropensci/rixpress/actions/workflows/rhub.yaml/",
  "review": {
    "@type": "Review",
    "url": "https://github.com/ropensci/software-review/issues/706",
    "provider": "https://ropensci.org"
  }
}

GitHub Events

Total
  • Issues event: 32
  • Watch event: 33
  • Delete event: 30
  • Issue comment event: 26
  • Push event: 861
  • Pull request review event: 3
  • Pull request review comment event: 1
  • Pull request event: 44
  • Fork event: 1
  • Create event: 34
Last Year
  • Issues event: 32
  • Watch event: 33
  • Delete event: 30
  • Issue comment event: 26
  • Push event: 861
  • Pull request review event: 3
  • Pull request review comment event: 1
  • Pull request event: 44
  • Fork event: 1
  • Create event: 34

Issues and Pull Requests

Last synced: 10 months ago

All Time
  • Total issues: 21
  • Total pull requests: 24
  • Average time to close issues: 7 days
  • Average time to close pull requests: about 3 hours
  • Total issue authors: 3
  • Total pull request authors: 3
  • Average comments per issue: 0.24
  • Average comments per pull request: 0.0
  • Merged pull requests: 19
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 21
  • Pull requests: 24
  • Average time to close issues: 7 days
  • Average time to close pull requests: about 3 hours
  • Issue authors: 3
  • Pull request authors: 3
  • Average comments per issue: 0.24
  • Average comments per pull request: 0.0
  • Merged pull requests: 19
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • b-rodrigues (19)
  • jgeller112 (1)
  • rgayler (1)
Pull Request Authors
  • b-rodrigues (16)
  • Copilot (7)
  • eltociear (1)
Top Labels
Issue Labels
enhancement (6) documentation (2)
Pull Request Labels