Documenting a computational environment for a research paper means creating a clear, reproducible record of every software, library, version, and setting that was used to produce your results—so that anyone (including future you) can rerun the analysis with confidence. The goal is to eliminate the “it worked on my machine” problem by making your setup explicit, portable, and verifiable.
Start with a version-controlled manifest
The backbone of your documentation is a plain-text file that lists every dependency. Use a format your ecosystem supports:
- Python:
requirements.txtor, better,environment.yml(for Conda) that pins exact versions (e.g.,numpy==1.26.4, notnumpy>=1.26). - R:
renv.lockor asessionInfo()output saved as a text file. - Julia:
Project.tomlwith a committedManifest.toml. - Other languages: capture package manager outputs (e.g.,
package-lock.jsonfor Node.js,Gemfile.lockfor Ruby).
Commit these files to your repository before running the final analysis, not after—this preserves the exact state of the environment at that moment.
Record the base system and hardware
Software versions alone aren’t enough. Note the operating system (including build number, e.g., Ubuntu 22.04.3 LTS), the CPU architecture (x86_64 vs. ARM), RAM, and any GPU model and driver version if you use CUDA or similar. This matters because numerical libraries (like BLAS) can produce slightly different floating-point results across hardware.
Use containerization for full reproducibility
If your project has complex dependencies or you want to share it widely, create a container image:
- Docker: Write a
Dockerfilethat installs your exact OS, packages, and code, then tag the image with a digest (e.g.,myimage@sha256:abc123...). Share the digest, not just the tag, since tags can be overwritten. - Singularity/Apptainer: Common in HPC environments; export your container as a
.siffile.
Even if you don’t use containers for your own work, documenting how to build one demonstrates reproducibility to reviewers.
Include the computational steps, not just the stack
Your environment documentation should also cover:
- Seed values for any random processes (e.g.,
random.seed(42)). - Environment variables that affect behavior (e.g.,
OMP_NUM_THREADS=4). - Configuration files (e.g.,
.env,config.yaml) with sensitive values redacted. - Commands to run the full pipeline, from raw data to final figures.
Verify your documentation works
Before submitting, test your documentation from scratch: clone the repo, create a fresh environment from your manifest, and run the pipeline. If it fails, fix the documentation—not the code. This “clean-room test” is the gold standard for computational reproducibility.
Where to put it in the paper
Most journals now require a “Data and Code Availability” statement. Include your environment file (or a link to the container) in that section, and reference it in the Methods. If you’re working with a large literature base or need to track which papers informed your setup, tools like WisPaper’s My Library can help you organize the methodological references alongside your environment notes—keeping everything in one place for the writing stage.
By following these steps, you turn a vague “computational environment” into a precise, auditable artifact that strengthens your paper’s credibility and saves your collaborators hours of debugging.

