diff --git a/src/.docker_modules/trinity/2.13.2/Dockerfile b/src/.docker_modules/trinity/2.13.2/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..f8fdc554960b16f4cb32d7ad6e40e8768cdafa0a
--- /dev/null
+++ b/src/.docker_modules/trinity/2.13.2/Dockerfile
@@ -0,0 +1,3 @@
+FROM quay.io/biocontainers/trinity:2.13.2--ha140323_0
+
+ENV TRINITY_VERSION=2.13.2--ha140323_0
diff --git a/src/.docker_modules/trinity/2.13.2/docker_init.sh b/src/.docker_modules/trinity/2.13.2/docker_init.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ff9da019a0dc0f6a305e1295720ba735cb0bc94b
--- /dev/null
+++ b/src/.docker_modules/trinity/2.13.2/docker_init.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+docker pull lbmc/trinity:2.13.2
+docker build src/.docker_modules/trinity/2.13.2 -t 'lbmc/trinity:2.13.2'
+docker push lbmc/trinity:2.13.2
+docker buildx build --platform linux/amd64,linux/arm64 -t "lbmc/trinity:2.13.2" --push src/.docker_modules/trinity/2.13.2
diff --git a/src/nf_modules/trinity/main.nf b/src/nf_modules/trinity/main.nf
new file mode 100644
index 0000000000000000000000000000000000000000..e10a79bee30e5a0ee91095c3d7bc3b4ea2bcdbe5
--- /dev/null
+++ b/src/nf_modules/trinity/main.nf
@@ -0,0 +1,115 @@
+version = "2.13.2"
+container_url = "lbmc/trinity:${version}"
+
+params.sample = 3
+params.min_glue = 1
+params.min_contig_length = 200
+params.assembly_out = ""
+
+
+workflow assembly {
+  take:
+    fastq
+  main:
+    complete_assembly(fastq)
+    super_transcript(complete_assembly.out.fasta)
+
+  emit:
+    fasta = complete_assembly.out.fasta
+    super_transcript = super_transcript.out.fasta
+}
+
+process complete_assembly {
+  container = "${container_url}"
+  label "big_mem_multi_cpus"
+  tag "$file_id"
+  if (params.assembly_out != "") {
+    publishDir "results/${params.assembly_out}", mode: 'copy'
+  }
+
+  input:
+    tuple val(file_id), path(fastq)
+
+  output:
+    tuple val(file_id), path("trinity_output_${file_prefix}/"), emit: folder
+    tuple val(file_id), path("trinity_output_${file_prefix}.Trinity.fasta"), emit: fasta
+    tuple val(file_id), path("trinity_output_${file_prefix}.Trinity.fasta.gene_trans_map"), emit: gene_map 
+    tuple val(file_id), path("trinity_output_${file_prefix}/salmon_outdir/quant.sf"), emit: quant
+
+  script:
+
+  switch(file_id) {
+    case {it instanceof List}:
+      file_prefix = file_id[0]
+    break;
+    case {it instanceof Map}:
+      file_prefix = file_id.values()[0]
+    break;
+    default:
+      file_prefix = file_id
+    break;
+  };
+  def memory = "${task.memory}" - ~/\s*GB/
+
+  if (fastq.size() == 2)
+"""
+  mkdir trinity_output_${file_prefix}
+  Trinity \
+    --seqType fq \
+    --max_memory ${memory}G \
+    --left ${fastq[0]} \
+    --right ${fastq[1]} \
+    --CPU ${task.cpus} \
+    --min_glue ${params.min_glue} \
+    --min_contig_length ${params.min_contig_length} \
+    --output trinity_output_${file_prefix}
+"""
+  else
+"""
+  mkdir trinity_output_${file_prefix}
+  Trinity \
+    --seqType fq \
+    --max_memory ${memory}G \
+    --single ${fastq} \
+    --CPU ${task.cpus} \
+    --min_glue ${params.min_glue} \
+    --min_contig_length ${params.min_contig_length} \
+    --output trinity_output_${file_prefix}
+"""
+}
+
+
+process super_transcript {
+  container = "${container_url}"
+  label "big_mem_mono_cpus"
+  tag "$file_id"
+  if (params.assembly_out != "") {
+    publishDir "results/${params.assembly_out}", mode: 'copy'
+  }
+
+  input:
+    tuple val(file_id), path(fasta)
+
+  output:
+    tuple val(file_id), path("trinity_genes.fasta"), path("trinity_genes.gtf"), emit: fasta
+
+  script:
+
+  switch(file_id) {
+    case {it instanceof List}:
+      file_prefix = file_id[0]
+    break;
+    case {it instanceof Map}:
+      file_prefix = file_id.values()[0]
+    break;
+    default:
+      file_prefix = file_id
+    break;
+  };
+  def memory = "${task.memory}" - ~/\s*GB/
+
+"""
+Trinity_gene_splice_modeler.py \
+  --trinity_fasta ${fasta}
+"""
+}