CoolFace
Datasetpublic

open-index/open-github-issues

OpenGitHub Issues What is it? The full development metadata of 7 public GitHub repositories, fetched from the GitHub REST API and GraphQL API, converted to Parquet and hosted here for easy access. Right now the archive has 6.0M rows across 8 tables in 699.6 MB of Zstd-compressed Parquet. Every issue, pull request, comment, code review, timeline event, file change, and CI status check is stored as a separate table you can load individually or query together. This… See the full description on the dataset page: https://huggingface.co/datasets/open-index/open-github-issues.

sourceHugging Faceodc-byupdated 4mo agoView on Hugging Face
1likes741downloads
Dataset Card

OpenGitHub Issues

What is it?

The full development metadata of 7 public GitHub repositories, fetched from the GitHub REST API and GraphQL API, converted to Parquet and hosted here for easy access.

Right now the archive has 6.0M rows across 8 tables in 699.6 MB of Zstd-compressed Parquet. Every issue, pull request, comment, code review, timeline event, file change, and CI status check is stored as a separate table you can load individually or query together.

This is the companion to OpenGitHub, which mirrors the real-time GitHub event stream via GH Archive. That dataset tells you what happened across all of GitHub. This one gives you the full picture for specific repos: complete issue threads, full PR review conversations, the state machine from open to close.

People use it for:

  • Code review research with inline comments attached to specific diff lines
  • Project health metrics like merge rates, review turnaround, label usage
  • Issue triage and classification with full text, labels, and timeline
  • Software engineering process mining from timeline event sequences

Last updated: 2026-06-06 23:37 UTC.

Latest Sync

New items since the previous publish:

RepositoryIssuesPRsCommentsReviewsTimeline
golang/go+76.8K+5.2K+305+768.4K
mdn/content+42.2K+31.9K+81.0K+82.4K+648.7K
python/cpython+148.1K+71.8K+17.9K+261.6K
rust-lang/rust+156.4K+93.9K+16.6K
swiftlang/swift+85.7K+67.9K+110.8K+1.6M
vuejs/core+12.3K+6.2K+36.5K+5.0K+130.1K

Repositories

RepositoryIssuesPRsCommentsReviewsTimelineTotalLast Updated
golang/go76.8K5.2K0305768.4K927.8K2026-06-04 06:54 UTC
mdn/content42.2K31.9K81.0K82.4K648.7K1.3M2026-06-02 09:13 UTC
python/cpython148.1K71.8K017.9K261.6K608.5K2026-06-02 04:39 UTC
rust-lang/rust156.4K93.9K0016.6K275.3K2026-06-02 23:53 UTC
swiftlang/swift85.7K67.9K0110.8K1.6M2.6M2026-06-03 01:26 UTC
vuejs/core12.3K6.2K36.5K5.0K130.1K227.9K2026-06-02 19:28 UTC
vuejs/docs3.3K2.3K7.1K2.7K35.4K66.7K2026-06-02 09:26 UTC

How to download and use this dataset

Data lives at data/{table}/{owner}/{repo}/0.parquet. Load a single table, a single repo, or everything at once. Standard Hugging Face Parquet layout, works with DuckDB, datasets, pandas, and huggingface_hub out of the box.

Using DuckDB

DuckDB reads Parquet directly from Hugging Face, no download step needed. Save any query below as a .sql file and run it with duckdb < query.sql.

sql
-- Top issue authors across all repos
SELECT
    author,
    COUNT(*) as issue_count,
    COUNT(*) FILTER (WHERE state = 'open') as open,
    COUNT(*) FILTER (WHERE state = 'closed') as closed
FROM read_parquet('hf://datasets/open-index/open-github-issues/data/issues/**/0.parquet')
WHERE is_pull_request = false
GROUP BY author
ORDER BY issue_count DESC
LIMIT 20;
sql
-- PR merge rate by repo
SELECT
    split_part(filename, '/', 8) || '/' || split_part(filename, '/', 9) as repo,
    COUNT(*) as total_prs,
    COUNT(*) FILTER (WHERE merged) as merged,
    ROUND(COUNT(*) FILTER (WHERE merged) * 100.0 / COUNT(*), 1) as merge_pct
FROM read_parquet('hf://datasets/open-index/open-github-issues/data/pull_requests/**/0.parquet', filename=true)
GROUP BY repo
ORDER BY total_prs DESC;
sql
-- Most reviewed PRs by number of review submissions
SELECT
    r.pr_number,
    COUNT(*) as review_count,
    COUNT(*) FILTER (WHERE r.state = 'APPROVED') as approvals,
    COUNT(*) FILTER (WHERE r.state = 'CHANGES_REQUESTED') as changes_requested
FROM read_parquet('hf://datasets/open-index/open-github-issues/data/reviews/**/0.parquet') r
GROUP BY r.pr_number
ORDER BY review_count DESC
LIMIT 20;
sql
-- Label activity over time (monthly)
SELECT
    date_trunc('month', created_at) as month,
    COUNT(*) as label_events
FROM read_parquet('hf://datasets/open-index/open-github-issues/data/timeline_events/**/0.parquet')
WHERE event_type = 'LabeledEvent'
GROUP BY month
ORDER BY month;
sql
-- Largest PRs by lines changed
SELECT
    number,
    additions,
    deletions,
    changed_files,
    additions + deletions as total_lines
FROM read_parquet('hf://datasets/open-index/open-github-issues/data/pull_requests/**/0.parquet')
ORDER BY total_lines DESC
LIMIT 20;

Using Python (uv run)

These scripts use PEP 723 inline metadata. Save as a .py file and run with uv run script.py. No virtualenv or pip install needed.

Stream issues:

python
# /// script
# requires-python = ">=3.11"
# dependencies = ["datasets"]
# ///
from datasets import load_dataset

ds = load_dataset("open-index/open-github-issues", "issues", streaming=True)
for i, row in enumerate(ds["train"]):
    print(f"#{row['number']}: [{row['state']}] {row['title']} (by {row['author']})")
    if i >= 19:
        break

Load a specific repo:

python
# /// script
# requires-python = ">=3.11"
# dependencies = ["datasets"]
# ///
from datasets import load_dataset

ds = load_dataset(
    "open-index/open-github-issues",
    "pull_requests",
    data_files="data/pull_requests/facebook/react/0.parquet",
)
df = ds["train"].to_pandas()
print(f"Loaded {len(df)} pull requests")
print(f"Merged: {df['merged'].sum()} ({df['merged'].mean()*100:.1f}%)")
print(f"\nTop 10 by lines changed:")
df["total_lines"] = df["additions"] + df["deletions"]
print(df.nlargest(10, "total_lines")[["number", "additions", "deletions", "total_lines"]].to_string(index=False))

Download files:

python
# /// script
# requires-python = ">=3.11"
# dependencies = ["huggingface-hub"]
# ///
from huggingface_hub import snapshot_download

# Download only issues
snapshot_download(
    "open-index/open-github-issues",
    repo_type="dataset",
    local_dir="./open-github-issues/",
    allow_patterns="data/issues/**/*.parquet",
)
print("Downloaded issues parquet files to ./open-github-issues/")

For faster downloads, install pip install huggingface_hub[hf_transfer] and set HF_HUB_ENABLE_HF_TRANSFER=1.

Dataset structure

issues

Both issues and PRs live in this table (check is_pull_request). Join with pull_requests on number for PR-specific fields like merge status and diff stats.

ColumnTypeDescription
numberint32Issue/PR number (primary key)
node_idstringGitHub GraphQL node ID
is_pull_requestboolTrue if this is a PR
titlestringTitle
bodystringFull body text in Markdown
statestringopen or closed
state_reasonstringcompleted, not_planned, or reopened
authorstringUsername of the creator
created_attimestampWhen opened
updated_attimestampLast activity
closed_attimestampWhen closed (null if open)
labelsstring (JSON)Array of label names
assigneesstring (JSON)Array of assignee usernames
milestone_titlestringMilestone name
milestone_numberint32Milestone number
reactionsstring (JSON)Reaction counts ({"+1": 5, "heart": 2})
comment_countint32Number of comments
lockedboolWhether the conversation is locked
lock_reasonstringLock reason

pull_requests

PR-specific fields. Join with issues on number for title, body, labels, and other shared fields.

ColumnTypeDescription
numberint32PR number (matches issues.number)
mergedboolWhether the PR was merged
merged_attimestampWhen merged
merged_bystringUsername who merged
merge_commit_shastringMerge commit SHA
base_refstringTarget branch (e.g. main)
head_refstringSource branch
head_shastringHead commit SHA
additionsint32Lines added
deletionsint32Lines deleted
changed_filesint32Number of files changed
draftboolWhether the PR is a draft
maintainer_can_modifyboolWhether maintainers can push to the head branch

comments

Conversation comments on issues and PRs. These are the threaded discussion comments, not inline code review comments (those are in review_comments).

ColumnTypeDescription
idint64Comment ID (primary key)
issue_numberint32Parent issue/PR number
authorstringUsername
bodystringComment body in Markdown
created_attimestampWhen posted
updated_attimestampLast edit
reactionsstring (JSON)Reaction counts
author_associationstringOWNER, MEMBER, CONTRIBUTOR, NONE, etc.

review_comments

Inline code review comments on PR diffs. Each comment is attached to a specific file and line in the diff.

ColumnTypeDescription
idint64Comment ID (primary key)
pr_numberint32Parent PR number
review_idint64Parent review ID
authorstringReviewer username
bodystringComment body in Markdown
pathstringFile path in the diff
lineint32Line number
sidestringLEFT (old code) or RIGHT (new code)
diff_hunkstringSurrounding diff context
created_attimestampWhen posted
updated_attimestampLast edit
in_reply_to_idint64Parent comment ID (for threaded replies)

reviews

PR review decisions. One row per review action on a PR.

ColumnTypeDescription
idint64Review ID (primary key)
pr_numberint32Parent PR number
authorstringReviewer username
statestringAPPROVED, CHANGES_REQUESTED, COMMENTED, DISMISSED
bodystringReview summary in Markdown
submitted_attimestampWhen submitted
commit_idstringCommit SHA that was reviewed

timeline_events

The full lifecycle of every issue and PR. Every label change, assignment, cross-reference, merge, force-push, lock, and other state transition.

ColumnTypeDescription
idstringEvent ID (node_id or synthesized)
issue_numberint32Parent issue/PR number
event_typestringEvent type (see below)
actorstringUsername who triggered the event
created_attimestampWhen it happened
database_idint64GitHub database ID for the event
label_namestringLabel name (labeled, unlabeled)
label_colorstringLabel hex color
state_reasonstringClose reason: COMPLETED, NOT_PLANNED (closed)
assignee_loginstringUsername assigned/unassigned (assigned, unassigned)
milestone_titlestringMilestone name (milestoned, demilestoned)
title_fromstringPrevious title before rename (renamed)
title_tostringNew title after rename (renamed)
ref_typestringReferenced item type: Issue or PullRequest (cross-referenced, referenced)
ref_numberint32Referenced issue/PR number
ref_urlstringURL of the referenced item
will_closeboolWhether the reference will close this issue
lock_reasonstringLock reason (locked)
datastring (JSON)Remaining event-specific payload (common fields stripped)

Event types: labeled, unlabeled, closed, reopened, assigned, unassigned, milestoned, demilestoned, renamed, cross-referenced, referenced, locked, unlocked, pinned, merged, review_requested, head_ref_force_pushed, head_ref_deleted, ready_for_review, convert_to_draft, and more.

Common fields (actor, created_at, database_id and extracted columns above) are stored in dedicated columns and removed from data to reduce storage. The data field contains only remaining event-specific payload. See the GitHub GraphQL timeline items documentation for the full type catalog.

pr_files

Every file touched by each pull request, with per-file diff statistics.

ColumnTypeDescription
pr_numberint32Parent PR number
pathstringFile path
additionsint32Lines added
deletionsint32Lines deleted
statusstringadded, removed, modified, renamed
previous_filenamestringOriginal path (for renames)

commit_statuses

CI/CD status checks and GitHub Actions results for each commit.

ColumnTypeDescription
shastringCommit SHA
contextstringCheck name (e.g. ci/circleci, check:build)
statestringsuccess, failure, pending, error
descriptionstringStatus description
target_urlstringLink to CI details
created_attimestampWhen reported

Dataset statistics

TableRowsDescription
issues524.7KIssues and pull requests (shared metadata)
pull_requests279.2KPR-specific fields (merge status, diffs, refs)
comments112.8KConversation comments on issues and PRs
review_comments11.8KInline code review comments on PR diffs
reviews219.1KPR review decisions
timeline_events3.5MActivity timeline (labels, closes, merges, assignments)
pr_files1.3MFiles changed in each pull request
commit_statuses76.2KCI/CD status checks per commit
Total6.0M

How it's built

The sync pipeline uses both GitHub APIs. The REST API handles bulk listing: issues, comments, and review comments are fetched repo-wide with since-based incremental pagination and parallel page fetching across multiple tokens. The GraphQL API handles per-item detail: one query grabs reviews, timeline events, file changes, and commit statuses in a single round trip, with automatic REST fallback for PRs with more than 100 files or reviews.

Multiple GitHub Personal Access Tokens rotate round-robin to spread rate limit load. The pipeline is fully incremental and idempotent: re-running picks up only what changed since the last sync.

Everything lands in per-repo DuckDB files first, then gets exported to Parquet with Zstd compression for publishing here. No filtering, deduplication, or content changes. Bot activity, automated PRs, CI noise, Dependabot upgrades, all of it is preserved, because that's how repos actually work.

Known limitations

  • Point-in-time snapshot. Data reflects the state at the last sync, not real-time. Incremental updates capture everything that changed since the previous sync.
  • Bot activity included. Comments and PRs from bots (Dependabot, Renovate, GitHub Actions, etc.) are included without filtering. This is intentional. Filter on author if you want humans only.
  • JSON columns. labels, assignees, reactions, and data contain JSON strings. Use json_extract() in DuckDB or json.loads() in Python.
  • Body text can be large. Issue and comment bodies contain full Markdown, sometimes with embedded images. Project only the columns you need for memory-constrained workloads.
  • Timeline data varies by event type. The data field in timeline_events contains the raw event payload as JSON. The schema depends on event_type.

Personal and sensitive information

Usernames, user IDs, and author associations are included as they appear in the GitHub API. All data was already publicly accessible on GitHub. Email addresses do not appear in this dataset (they exist only in git commit objects, which are in the separate code archive, not here). No private repository data is present.

License

Released under the Open Data Commons Attribution License (ODC-By) v1.0. The underlying data is sourced from GitHub's public API. GitHub's Terms of Service apply to the original data.

Thanks

All the data here comes from GitHub's public REST API and GraphQL API. We are grateful to the open-source maintainers and contributors whose work is represented in these tables.

Questions, feedback, or issues? Open a discussion on the Community tab.