Skip to main content

RisForge

RisForge is an open-source cross-platform desktop application and Python library for managing bibliographic references and systematic-review citation workflows.

It is designed for researchers who need to combine exports from multiple databases, deduplicate records without losing metadata, convert citation formats, and enrich incomplete references with scholarly metadata and open-access links.

Quick Start

Windows

A standalone Windows installer is available for users who do not want to install Python.

Download the latest release from the GitHub Releases page and run the Risforge-*-Windows-x64.exe installer.

No Python installation is required.

Python

RisForge supports Python 3.10+ and is available on PyPI:

pip install risforge

Launch the desktop application with:

risforge

Features

Citation Conversion

Convert several common citation-export formats into structured RIS records:

  • PubMed exports: .nbib, .medline, .pubmed
  • Plain-text bibliographies: .txt
  • APA, Vancouver, and numbered reference styles

Multi-Database Merging

Combine citation exports from sources such as:

  • Scopus
  • Web of Science
  • PubMed
  • Reference managers
  • Other RIS-compatible sources

Records are consolidated into a single workflow without modifying the original input files.

Non-Destructive Deduplication

RisForge identifies duplicate records using bibliographic identifiers and normalized metadata, including:

  • Exact DOI matches
  • Normalized title + first-author matching

When duplicates are found, RisForge retains the most complete record as the base and merges missing metadata from the other records.

List-valued fields such as authors and keywords are combined rather than discarded.

Metadata Enrichment

RisForge can retrieve missing bibliographic metadata from:

Depending on the available source data, enrichment can provide missing:

  • Abstracts
  • Journal information
  • Keywords
  • DOIs and identifiers
  • Open-access PDF links

Existing metadata is preserved rather than blindly overwritten.

Safe File Handling

RisForge treats source files as read-only during processing.

Generated files are written to the selected output directory, with output handling designed to minimise the risk of leaving partially written result files.

Desktop Application

The desktop interface brings the complete citation workflow into a single application.

1. Add input files

Add sources using:

  • Add Files...
  • Add Folder...
  • Drag and drop

Folder imports can be scanned recursively.

2. Select operations

Choose the operations required for the workflow:

Merge files

Combines records from all selected inputs into a unified dataset.

Clean & deduplicate

Identifies duplicate references and merges their metadata while preserving useful information.

Enrich metadata

Queries supported scholarly services to fill selected missing metadata fields.

An email address is required for services that use it for polite API access.

3. Select the output directory

Choose where generated files should be written.

The default output directory is:

~/risforge-output

4. Run the workflow

Click Run Workflow to start processing.

During execution, the application provides:

  • Progress information
  • A collapsible activity log
  • A Stop control for interrupting the workflow

5. Inspect the results

After completion, the results area provides access to the generated outputs, including:

  • The primary RIS output
  • The output directory
  • JSON execution reports

Python API

RisForge can also be used as a Python library for reproducible scripts and data-processing pipelines.

Complete workflow

from pathlib import Path

from risforge import WorkflowConfig, run_workflow

config = WorkflowConfig(
    input_paths=[
        Path("scopus.ris"),
        Path("pubmed.nbib"),
    ],
    output_dir=Path("./output"),
    merge=True,
    clean=True,
    enrich=True,
    email="researcher@example.edu",
)

result = run_workflow(config)

print(f"Cleaned records: {result.records_cleaned}")
print(f"Enriched records: {result.records_enriched}")
print(f"Primary output: {result.primary_output_file}")

Individual operations

Deduplicate an existing RIS file:

from risforge import clean_ris_file

records, errors = clean_ris_file(
    "raw.ris",
    "cleaned.ris",
)

Convert citations to RIS:

from risforge import convert_to_ris

convert_to_ris(
    ["citations.txt", "export.nbib"],
    "converted.ris",
)

Development

Clone the repository:

git clone https://github.com/amyrhexa/risforge.git
cd risforge

Install the package in editable mode with development dependencies:

pip install -e ".[dev]"

Run the test suite:

pytest -v

Run static checks:

ruff check .
black --check .

License

RisForge is open-source software released under the MIT License.

Metadata

Release files for risforge 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for risforge 1.0.0
File Size Uploaded
risforge-1.0.0.tar.gz 59.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for risforge 1.0.0
File Interpreter ABI Platform
risforge-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 116.9 kB

Release files / risforge-1.0.0.tar.gz

Download URL risforge-1.0.0.tar.gz
Size 59.1 kB
Tags Source
SHA-256 checksum
How to use checksums
ddbc0a7e60dac5f2b1d59b0f912baf411c86da8df3e271cfb6fdf2a2f1cf7bac
BLAKE2b-256 checksum
How to use checksums
5b9f29119520ebb1f80033d1e0682dbe120835c96679888aa3d5aedf51280ab8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 13, 2026.

Transparency log

Release files / risforge-1.0.0-py3-none-any.whl

Download URL risforge-1.0.0-py3-none-any.whl
Size 57.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b51cacec4ad4a274fb69ab9672be54da990cba25b91a9b33595a731edefe5062
BLAKE2b-256 checksum
How to use checksums
e931b274250ee78d281f0fd005939f39f62015a19c7316b0ff3d70b0499849c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 13, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

0.4.0

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page