Back to Explorer
Beginner Friendly Open-Source TypeScript

Good First Issues in TypeScript

Explore curated starter issues in high-scoring TypeScript repositories. Every listed issue belongs to a welcoming repository scored by C-Rank™ on PR merge rates, review responsiveness, and first-timer acceptance.

Updated: Thu, 15 Oct 2026 UTC (Live GitHub Sync)
Real-Time Radar

Arm Issue Sniper for fresh TypeScript beginner issues

Beginner issues in welcoming S/A-Tier repositories get snatched within 15 minutes. Receive instant alerts on Discord, Telegram, or Email the minute a maintainer opens a new task.

Live Good First Issues (30)

Real-Time Open GitHub Issues
CherryHQ/cherry-studio52,530 Tier A · 68 pts
#21708Opened today
[Discussion]: Using the built-in browser to access internal HTTPS services, the opened browser cannot ignore private certificates

This issue was translated automatically. Issue Checklist I understand that issues are meant for feedback and problem-solving, not for venting, and I will provide as much detail as possible to help resolve the issue. I have checked the pinned issues and searched through the existing open issues, closed issues, and discussions and did not find a similar suggestion. I confirm that I am here to ask questions and discuss issues, not to report bugs or request features. Platform Windows Version v1.9.12 Your Question Using the built-in browser to access internal HTTPS services, the opened browser cannot ignore private certificates. Context No response Additional Information Priority Low (Review when available) Original Content Issue Checklist I understand that issues are meant for feedback and problem-solving, not for venting, and I will provide as much detail as possible to help resolve the issue. I have checked the pinned issues and searched through the existing open issues, clo

featurehelp wanteddiscussionmcp
1
OWASP/cve-lite-cli758 Tier S · 72 pts
#1335Opened today
refactor(fail-on): multi-folder section headers still hardcode the gate-class labels

The multi-folder output still spells out two of the gate-class labels, so renaming a class through the shared constant would leave them behind. Context #1274 put the three --fail-on gate-class labels into one shared constant, GATE_CLASS_LABELS in src/utils/severity.ts, and both failingGateSummary call sites now read from it. That shipped in #1288 and did what it set out to do: changing a label in the one place it lives fails exactly one test, where the same change on main used to pass the whole suite. What is left Two subfolder section headers in src/scan/multi-folder-scan.ts print "override hygiene" and "maintenance risk" as string literals rather than reading the constant. #1274 counted those two when it observed that "override hygiene" appeared four times in the source, but its stated ask was scoped to the two call sites, so this is a gap in that issue rather than a miss in the PR that closed it. Why it is worth closing The point of the shared constant is that a gate class has one n

enhancementhelp wantedgood first issue
OWASP/cve-lite-cli758 Tier S · 72 pts
#1334Opened today
fix(cli): flag-conflict errors print an unrelated corporate SSL proxy hint

Flag-conflict errors print a corporate SSL proxy hint that has nothing to do with the problem. What happens Running a scan with two mutually exclusive flags prints the conflict, then advises installing a CA certificate: Error: --offline/--offline-db cannot be used with --osv-url. Choose offline mode (local DB) or online mode (custom OSV endpoint), not both. Hint: If your network uses a corporate SSL proxy, a CA certificate may be required. Run: cve-lite config set ca-cert /path/to/corporate-ca.crt The hint is correct advice for a TLS failure and meaningless here. Nothing was fetched, so nothing could have been intercepted. A user following it would configure a certificate and see the same error. Scope Confirmed on --offline with --osv-url. It was previously only noticed on --report with --json, so it is not specific to one pair. src/cli/validate.ts raises seven of these conflicts through a shared path, so the likely cause is that the hint is attached where the error is rendered rather

bughelp wantedgood first issue
OWASP/cve-lite-cli758 Tier S · 72 pts
#1333Opened today
fix(json): scan payload records an absolute projectPath, leaking the machine's home directory

The --json payload records projectPath as an absolute path, so a scan run on a developer's machine embeds their home directory in a file that gets attached to CI runs and emailed around. What it looks like A scan of examples/direct-fixable from a scratch directory emits a top-level projectPath holding the full absolute path, including /Users/<name>/. Nothing else in the payload is needed to reproduce it: every --json run carries the field. Why this is worth fixing #1271 fixed exactly this class of problem for the HTML report, and the reasoning there applies here with more force. That change stopped embedding a path computed against the working directory, on the grounds that it keeps the generating machine's home directory out of an artefact that gets attached to CI runs and shared. The --json payload is shared more often than the HTML report, not less. It is the file an adopter sends when something looks wrong, which is the exact scenario #1296 was filed about and the reason that issue

bughelp wanted
lingdojo/kana-dojo3,591 Tier S · 72 pts
#32432Opened today
[good first issue, hacktoberfest] 🦑 Hacktoberfest Task - Add new Grammar Point 412 (good-first-issue)

🟢 Good First Issue: Add Grammar Point #41 — Beginner-Friendly Open Source Contribution 🟢 No prerequisites needed! You don't need to clone the repo, install anything, or write code. This entire contribution can be done from your browser in under 60 seconds. Labels: good first issue, help wanted, hacktoberfest Language: JSON (no coding required) Time: < 1 minute Skill Level: Absolute beginner 📖 Add New Grammar Point Category: Community Contribution - Grammar Difficulty: Easy (good first issue!) Estimated Time: <1 min 🎯 Your Task Add this grammar explanation to our learner-friendly grammar list! The Grammar Point "〜ことができる" expresses ability, like "can do". 📝 Instructions Star our repo ⭐ Fork our repo 🍴 Open community/content/japanese-grammar.json in your browser (click the link!) Scroll to the bottom of the file and paste the following grammar string just before the closing ]: ""〜ことができる" expresses ability, like "can do"." Add a

help wantedgood first issuehacktoberfestcommunity
1
lingdojo/kana-dojo3,591 Tier S · 72 pts
#32431Opened today
[good first issue, hacktoberfest] 🦑 Hacktoberfest Task - Add new Trivia Question 545 (good-first-issue)

🟢 Good First Issue: Add Trivia Question #54 — Beginner-Friendly Open Source Contribution 🟢 No prerequisites needed! You don't need to clone the repo, install anything, or write code. This entire contribution can be done from your browser in under 60 seconds. Labels: good first issue, help wanted, hacktoberfest Language: JSON (no coding required) Time: < 1 minute Skill Level: Absolute beginner 🧠 Add New Trivia Question Category: Community Contribution - Trivia Difficulty: Easy (good first issue!) Estimated Time: <1 min 🎯 Your Task Add this trivia question to our growing quiz bank! The Trivia Question Question: What is the name of Japan’s national public broadcaster? Answers: NHK NHK World Japan Asahi Fuji TV Correct Answer Index: 0 📝 Instructions Star our repo ⭐ Fork our repo 🍴 Open community/content/japan-trivia-medium.json in your browser (click the link!) Scroll to the bottom of the file and paste the following trivia object just before the closing ]

help wantedgood first issuehacktoberfestcommunity
1
#1251Opened today
fix(api): audit remaining multiline Boolean input coercions

Problem Follow-up to #1249. Its explicit acceptance list covers eight Boolean coercion fields, attendance parsing, and the shared sorting parser. A multiline source sweep during implementation found additional z.coerce.boolean() inputs outside that list. This primitive converts nonempty strings such as "false" and "0" to true. These remaining inputs need their own transport and authorization review. No production impact or frequency was measured, and the user-PII options must retain their existing permission and redaction checks. Remaining inventory packages/api/src/router/org.ts: org filter onlyMine. packages/api/src/router/event.ts: event filter onlyMine (separate from the sorting field fixed in #1249). packages/api/src/router/location.ts: list onlyMine, bounding-box isActive. packages/api/src/router/event-type.ts: ignoreNationEventTypes, nationalOnly. packages/api/src/router/position.ts: list ignoreGlobalPositions, isActive, onlyMine; by-org isActive; assignments-by-user includeIna

good first issue
lingdojo/kana-dojo3,591 Tier S · 72 pts
#32428Opened today
[good first issue, hacktoberfest] 🍚 Hacktoberfest Task - Add new Japanese Proverb 584 (good-first-issue)

🟢 Good First Issue: Add Japanese Proverb #58 — Beginner-Friendly Open Source Contribution 🟢 No prerequisites needed! You don't need to clone the repo, install anything, or write code. This entire contribution can be done from your browser in under 60 seconds. Labels: good first issue, help wanted, hacktoberfest Language: JSON (no coding required) Time: < 1 minute Skill Level: Absolute beginner 🎌 Add Japanese Proverb (ことわざ) Category: Community Contribution - Proverb Difficulty: Easy (good first issue!) Estimated Time: <1 min 🎯 Your Task Add this traditional Japanese proverb to help learners understand Japanese wisdom! The Proverb Japanese Reading English 急いては事を仕損じる Seite wa koto wo shisonjiru Haste will spoil things 💡 Meaning: Haste makes waste 📝 Instructions Star our repo ⭐ Fork our repo 🍴 Open community/content/japanese-proverbs.json in your browser (click the link!) Scroll to the bottom of the file and paste the

help wantedgood first issuehacktoberfestcommunity
1
lingdojo/kana-dojo3,591 Tier S · 72 pts
#32426Opened today
[good first issue, hacktoberfest] ⛩️ Hacktoberfest Task - Add new Japan Fact 3156 (good-first-issue)

🟢 Good First Issue: Add Japan Fact #315 — Beginner-Friendly Open Source Contribution 🟢 No prerequisites needed! You don't need to clone the repo, install anything, or write code. This entire contribution can be done from your browser in under 60 seconds. Labels: good first issue, help wanted, hacktoberfest Language: JSON (no coding required) Time: < 1 minute Skill Level: Absolute beginner 🎋 Add New Japan Fact Category: Community Contribution - Fun Fact Difficulty: Easy (good first issue!) Estimated Time: <1 min 🎯 Your Task Add this interesting fact about Japan to our collection! The Fact Japan’s 'omotenashi' culture emphasizes thoughtful hospitality and anticipating guests’ needs. 📝 Instructions Star our repo ⭐ Fork our repo 🍴 Open community/content/japan-facts.json in your browser (click the link!) Scroll to the bottom of the file and paste the following fact just before the closing ]: "Japan’s 'omotenashi' culture emphasizes thoughtful hospitali

help wantedgood first issuehacktoberfestcommunity
1
#32423Opened today
[good first issue, hacktoberfest] 🀄 Hacktoberfest Task - Add new Theme: Indigo Shibori (good-first-issue)

🟢 Good First Issue: Add Color Theme: Indigo Shibori — Beginner-Friendly Open Source Contribution 🟢 No prerequisites needed! You don't need to clone the repo, install anything, or write code. This entire contribution can be done from your browser in under 60 seconds. Labels: good first issue, help wanted, hacktoberfest Language: JSON (no coding required) Time: < 1 minute Skill Level: Absolute beginner 🎨 Add New Color Theme: "Indigo Shibori" Category: Community Contribution - Theme Difficulty: Easy (good first issue!) Estimated Time: <1 min 🎯 Your Task Add this beautiful new theme to KanaDojo! Theme Details Property Value ID indigo-shibori Background oklch(19.0% 0.055 255.0 / 1) Main Color oklch(55.0% 0.165 250.0 / 1) Secondary oklch(85.0% 0.065 90.0 / 1) 💡 Vibe: Traditional tie-dye in deep natural blues 📝 Instructions Star our repo ⭐ Fork our repo 🍴 Open community/content/community-themes.json in your browser (click the link!) Scroll to

help wantedgood first issuehacktoberfestcommunity
4
#70886Opened 1 day ago
Python dictionaries lesson: clarify valid keys, method question, and view outputs

Describe the Issue Immutability alone does not make a tuple a valid dictionary key. Each key is associated with a value, so you can use the key to access that value. After each value, except the last one, there's a comma to separate the different key-value pairs. Keys must be unique in the dictionary, and they must be an immutable data type. However, the values can be repeated, and they can be of any data type. A tuple is immutable even when it contains a list, but {([1],): "value"} raises TypeError. The current explanation therefore permits a value Python rejects. See Python's mapping documentation. Two answers satisfy the method question. Which dictionary method is used to retrieve a value associated with a key, and provide a default value if the key is not found? Both .get(key, default) and .pop(key, default) retrieve a value and return the supplied default when the key is absent. Both appear among the answers, but only .get() is accepted. The question does not distinguish r

help wantedscope: curriculumpython v9 certlesson
#70880Opened 1 day ago
Running Python scripts lesson: document VS Code setup and correct wording

Describe the Issue The IDE definition is vague and misses an Oxford comma Before you can start building your Python scripts locally, you will need to install a code editor or IDE. IDE stands for Integrated Development Environment and it has features including a code editor, testing tools, a terminal and more. Integrated development environment is a common noun, and and more does not identify another feature. The list also needs a comma before its final item. The platform list has punctuation and terminology errors One popular code editor that many developers use is VS Code. Visit `https://code.visualstudio.com/download` to download VS Code which supports Mac, Windows and Linux environments. This is the editor that will be used in this lesson. The nonrestrictive which clause needs a comma, the list needs an Oxford comma, and Apple's operating system is named macOS rather than Mac. The folder instructions are repetitive and under-punctuated Once you have downloaded your editor

help wantedscope: curriculumpython v9 certlesson
#70879Opened 1 day ago
Python installation lesson: update installation instructions and correct wording

Describe the Issue The title omits an Oxford comma title: How Do You Install, Configure and Use Python in Your Local Environment? The three verbs form a series, so a comma is needed before and. The same title appears in curriculum/structure/blocks/lecture-python-installation.json, so both copies are affected. The macOS instructions stop before installation is complete - Click on the button showing the current version of Python (from the previous modal), and you'll start downloading a `.pkg` installation file automatically. - Once the `.pkg` installer is finished downloading, open it, then click "Continue" in the window that opens up. - Continue clicking the "Continue" button until you get to the "Installation Type" section. There, click the "Install" button. - Enter your password if necessary, then start the installation. - After that, you should get a congratulations message saying that Python has been successfully installed. - Click the "Close" button, and you're done! Python

help wantedscope: curriculumpython v9 certlesson
#1192Opened 1 day ago
Filters sidebar: make it drag-resizable like the alert details panel (remove the arrow toggle)

What's wrong On the Alerts page, the filter sidebar has a fixed width (w-48) and a round arrow button on its right edge that toggles between full width and a narrow icon rail. Long filter values get truncated, and there's no way to make the sidebar wider. The alert details panel on the right already handles this well. You drag its edge to resize it, double-click the edge to reset it, and the width is remembered. What we want Make the filter sidebar work like the alert details panel: Remove the arrow toggle button. Add a drag handle on the sidebar's right edge, so dragging right widens it and dragging left narrows it. Use sensible min and max widths; the current w-48 (192px) is a reasonable default and minimum. Double-clicking the handle resets the default width. Persist the chosen width in localStorage, the same way the details panel does. Look and feel (cursor, hover highlight, accessibility attributes) should match the details panel's PanelResizeHandle. Where this lives apps/clien

enhancementhelp wantedUI
OpsiMate/OpsiMate242 Tier S · 75 pts
#1191Opened 1 day ago
Filters sidebar: always show the active-filter count, including 0

What's wrong On the Alerts page, the Filters header in the filter sidebar shows a count badge next to the title only when at least one filter is active. With no filters, the badge disappears, so the header jumps between "Filters" and "Filters (n)" as you add and remove filters. What we want Always show the count badge next to the "Filters" title, showing 0 when no filter is active. Keep the same badge style as today. A muted look for 0 is fine. The Reset button can stay hidden at 0, because there is nothing to reset. The header shouldn't shift or change height when the count goes from 0 to 1 and back. Where this lives apps/client/src/components/shared/FilterPanel.tsx: the header around line 271, where {activeFilterCount > 0 && (<Badge …>)} wraps the count. Tests: apps/client/src/test/FilterPanel.test.tsx. Add a test that the badge renders 0 with no active filters. Done when The header badge shows 0 with no filters, and the right count otherwise. There's a test for the 0 case.

enhancementgood first issueUIhacktoberfest
2
CherryHQ/cherry-studio52,530 Tier A · 68 pts
#21663Opened 1 day ago
[Discussion]: 数据库自动备份与独立恢复模式设计

Issue Checklist I understand that issues are meant for feedback and problem-solving, not for venting, and I will provide as much detail as possible to help resolve the issue. I have checked the pinned issues and searched through the existing open issues, closed issues, and discussions and did not find a similar suggestion. 已检索;存在相关议题 #20655、#19547。本议题细化数据库恢复点、独立恢复 UI 和崩溃安全协议。 I confirm that I am here to ask questions and discuss issues, not to report bugs or request features. Platform macOS(设计及验收覆盖 Windows、macOS、Linux) Version 2.1.6,设计源码基线 08f1363。 Your Question 讨论默认数据库自动备份与独立恢复模式的实现边界。以下为目标设计,尚不代表已实现或验证。 一图看懂:什么时候进入恢复模式 flowchart TD A[启动 Cherry Studio] --> B[确定数据目录并取得单实例锁] B --> C{有未完成的恢复

help wanteddiscussiondatabackup
1
HeyPuter/puter43,666 Tier S · 72 ptsPR #4243 In Progress
#4228Opened 1 day ago
Deleting a Custom Dev Centre app doesn't remove it from the start menu

I created an app via the dev centre and then went to settings and deleted it. It still appears in the start menu. This issue looks like something I can fix but would be easy pickings or more time efficient for someone already familiar with the code base. Thanks for everything, this project is so cool.

buggood first issuecommunity
1
libredb/libredb-studio1,186 Tier A · 69 pts
#1756Opened 1 day ago
CONTRIBUTING.md: the documented secret scan checks nothing when run from a git worktree

A documentation fix in one file, about 45 minutes. You need Docker and a local clone to check your command. The "Security Scanning" section of CONTRIBUTING.md (lines 377-385) gives a command that runs the same secret scan as our required Secret Scan check. It mounts "$PWD:/repo:ro" into the gitleaks container and scans origin/main..HEAD. In a normal clone that works. In a git worktree (git worktree add ...) it silently checks nothing: there .git is a small file that points into the main checkout's .git/worktrees/ directory, a path the container cannot see, so git inside the container cannot open the repository. gitleaks then prints 0 commits scanned. and no leaks found and exits 0, which looks like a pass. Measured on 2026-10-04: the same scan worked in a worktree once both the worktree and the main checkout's .git directory were mounted into the container at their own absolute paths. git rev-parse --path-format=absolute --git-common-dir prints the second path, and in a normal clone it

documentationgood first issuehelp wantedhacktoberfest
libredb/libredb-studio1,186 Tier A · 69 pts
#1755Opened 1 day ago
src/lib/db/providers/keyvalue/redis.ts: comments still describe the removed getSchema()

A comment-only fix in one file, about 30 minutes. Running bun run typecheck locally helps but is not required. The Redis provider, src/lib/db/providers/keyvalue/redis.ts, has comments that describe getSchema() as a method that still runs. It does not: #789 replaced getSchema with the object surface (listObjects, describeObject and friends), and it is no longer part of the provider contract (see the comment in src/lib/db/base-provider.ts). A reader who searches for getSchema in this file finds seven mentions and no method. The seven places: Line 280: "keyspace is the grouping getSchema() has always produced". Line 454: "Module-level and shared, so getSchema() and the object surface can never group the same keyspace two different ways." Line 737: "Shared by getSchema() and describeObject, so the flat model and the object model cannot describe the same grouping differently while both surfaces are live." Line 1207: "getSchema() SCANs 1000 keys and groups them". Lines 1730-1731: "THE singl

documentationgood first issuehacktoberfest
libredb/libredb-studio1,186 Tier A · 69 pts
#1754Opened 1 day ago
README.md: stop listing the integration-tested providers by name in the test table

A small documentation fix in one file, about 10 minutes, no local setup needed. The "Test Architecture" table in README.md (line 672) describes the Integration layer as "Database providers: PG, MySQL, SQLite, MongoDB, Couchbase, Redis, Oracle, MSSQL, ClickHouse, Druid, Elasticsearch, OpenSearch, Trino". That is thirteen providers. tests/integration/db/ now holds 36 provider test files (Cassandra, Kafka, Neo4j, S3, Kubernetes and many more), and tests/integration/ also has mcp/, seed/ and storage/ suites. A hand-kept list like this one falls behind every time a provider lands. Replace the text of the last cell of that row with: Database providers, one test file per provider in tests/integration/db/, plus the MCP server, seed and storage layers Leave the Files and Tests columns and the dated note under the table as they are: they are a dated measurement, and re-counting them is a separate job. Steps Comment here to claim it, and I will assign you. Open README.md and click the pencil ico

documentationgood first issuehacktoberfest
libredb/libredb-studio1,186 Tier A · 69 pts
#1753Opened 1 day ago
docs/ADDING_A_PROVIDER.md: query languages, three missing label rows and the eighth translation

A documentation fix in one file, about 30 minutes, no local setup needed. docs/ADDING_A_PROVIDER.md is the guide for adding a database provider. Three places in it have fallen behind the code: The getCapabilities() bullet (line 387) says the query language is "sql | json". The same guide's ProviderCapabilities table (line 832) lists all five values: sql, json, promql, cypher and influxql. Replace "query language (sql | json)" with "query language (one of the five queryLanguage values in the table below)". The ProviderLabels table (lines 858-880) has no row for three fields that ProviderLabels in src/lib/db/types.ts declares. Add one row each, saying where the label appears: sessionsEmptyState: the empty-state text of the Sessions tab in Monitoring (SessionsTab.tsx line 184) and of the sessions list in Operations (OperationsTab.tsx line 991), in place of "No active sessions found." tableStatsCaption: the caption over the table statistics in Monitoring > Tables (TablesTab.tsx line 289)

documentationgood first issuehacktoberfest
libredb/libredb-studio1,186 Tier A · 69 pts
#1752Opened 1 day ago
DOCKERHUB.md: the image tags table says latest is pushed from main

A small documentation fix in one file, about 15 minutes, no local setup needed. DOCKERHUB.md is the text of our Docker Hub page. Its "Image tags" table (lines 86-93) says latest is pushed from main and X.Y.Z from "main / release", and it has no row for the main tag. That is not what the image workflow does. In .github/workflows/docker-build-push.yml, version tags and latest are published only for a release, and a push to main publishes a separate, moving main tag (the comment at the top of the workflow says the same). So a reader who pulls latest expecting what main holds gets the last release instead. Change the table so it matches the workflow: Tag Pushed from Use latest a release The newest release X.Y.Z a release Pin an exact version, e.g. docker pull libredb/libredb-studio:0.16.2 (recommended for production) main every push to main Unreleased work on main dev feat/**, fix/** branches Bleeding-edge / preview (linux/amd64 only) sha-<commit> every build Exact immutable

documentationgood first issuehacktoberfest
libredb/libredb-studio1,186 Tier A · 69 pts
#1751Opened 1 day ago
scripts/readme-check.mjs: the header comment still counts three files and three invariants

A small comment fix in one file, about 15 minutes, no local setup needed. The header comment of scripts/readme-check.mjs (lines 1-42), the guard behind bun run readme:check, was written when the guard covered README.md and two translations, and it still talks that way: Line 7 says the engine list and install commands are "hardcoded in all three files", and line 16 says invariant 1 holds "in all three files". The script now checks README.md and the eight translations in its LOCALIZED array (lines 50-59), nine files in all. Line 14 says "Three invariants", and the comment then lists four. Line 12 says the next provider "will leave both translations claiming the old engine count". Rewrite those phrases so they do not count the files: for example "in every one of these files" for the two "all three files", "Four invariants" on line 14, and "every translation" for "both translations". Leave the history in lines 5-6 (README_zh.md and README_ja.md came first, in #317) as it is, because it d

documentationgood first issuehacktoberfest
libredb/libredb-studio1,186 Tier A · 69 pts
#1750Opened 1 day ago
docs/providers/redis.md: fix the driver version, the scan constant and the sort order

A small documentation fix in one file, about 20 minutes, no local setup needed. docs/providers/redis.md says three things the Redis provider (src/lib/db/providers/keyvalue/redis.ts) no longer does: Line 13, the Driver row (line 13) gives ioredis as ^5.9.2, while package.json holds ^5.11.1. A version written into prose goes stale on every dependency bump, so replace (^5.9.2) with "(the version range is in package.json)" rather than with the new number. Line 193, the scan cap (lines 190-194) says the scan "is also capped at maxScan = 1000 keys". There is no maxScan; the constant is KEY_SCAN_LIMIT (redis.ts line 347). Change maxScan = 1000 to KEY_SCAN_LIMIT (1000). Line 205, the sort order (line 205) says "The resulting object list is sorted by descending key count so the busiest prefixes surface first." The provider sorts the list by path instead, with comparePaths (redis.ts line 1983). Replace the sentence with "The resulting object list is sorted by path." Steps Comment here to clai

documentationgood first issuehacktoberfest
libredb/libredb-studio1,186 Tier A · 69 pts
#1749Opened 1 day ago
docs/TOOLCHAIN.md: drop the stale "seventeen providers" count

A small documentation fix in one file, about 10 minutes, no local setup needed. docs/TOOLCHAIN.md explains why some tests run in their own process. One sentence (lines 284-287) says #789 added "two tests/unit files that construct all seventeen providers through the real factory". Studio has shipped many more providers since, the S3, Kubernetes, MQTT and RabbitMQ providers among them, and those files construct every one of them, so "seventeen" no longer counts what the files do. Replace "all seventeen providers" with "every provider", so the sentence stays true when the next provider lands. Leave the rest of the paragraph as it is. Steps Comment here to claim it, and I will assign you. Open docs/TOOLCHAIN.md and click the pencil icon (Edit this file). GitHub makes a fork for you. Make the change above. Click Commit changes, then Propose changes, then Create pull request, and write Closes #1749 in the description. Done when docs/TOOLCHAIN.md no longer contains "seventeen providers". O

documentationgood first issuehacktoberfest
heygen-com/hyperframes60,567 Tier A · 68 pts
#5556Opened 1 day ago
Configurable audio bitrate for renders (--audio-bitrate)

Why Audio bitrate is hardcoded: AAC at 192k (packages/engine/src/services/audioMixer.ts and the MP4/MOV mux in packages/engine/src/services/chunkEncoder.ts) and Opus at 128k for WebM. Music-heavy videos may want more, and voice-only or size-capped ones may want less. There is no way to change it. What to change Add an optional audioBitrate (e.g. "128k", "256k") to the producer render config in packages/producer/src/services/renderOrchestrator.ts and thread it to the places that pass -b:a. Grep -b:a under packages/engine/src and packages/producer/src. Add --audio-bitrate to hyperframes render (packages/cli/src/commands/render/plan.ts), validated like --video-bitrate. Unset keeps today's values exactly (192k AAC, 128k Opus). Careful: the MP4 path deliberately copies the already-encoded AAC sidecar rather than re-encoding, to avoid a black first frame in Safari (see the comment in chunkEncoder.ts). The bitrate must be applied where that sidecar is encoded, not by adding a second encode a

difficulty/easyenhancementgood first issuehelp wanted
1
heygen-com/hyperframes60,567 Tier A · 68 pts
#5555Opened 1 day ago
Opt-in 4:4:4 chroma for MP4 masters (measure first)

Why Every SDR MP4 is encoded as yuv420p (getEncoderPreset in packages/engine/src/services/chunkEncoder.ts). 4:2:0 stores color at half resolution in each direction, so thin colored text, UI strokes and saturated edges come out slightly soft or fringed. That matters most for motion-graphics masters, which are mostly text and UI. A 4:4:4 option (yuv444p, H.264 High 4:4:4 Predictive profile) keeps full-resolution color, but many players can't play it (Safari and QuickTime on older macOS, most phones, some browsers). It has to be an opt-in "master file" option, never a default. What to do Measure first. Pick 3 or 4 test clips: colored text on a dark background, a UI screen recording, footage, and a gradient. Encode each at 4:2:0 and 4:4:4 at the same CRF and report file size, encode time, and a color-sharpness measure (for example SSIM or PSNR computed on the chroma planes only, plus crops at 4x zoom). If the gain doesn't show, say so and stop there; that is a useful result. If it does, a

area/qualitydifficulty/hardenhancementhelp wanted
heygen-com/hyperframes60,567 Tier A · 68 pts
#5554Opened 1 day ago
Studio: expose CRF, video bitrate, frame format and HDR in the render settings

Why Studio's render route now accepts encoder overrides (#5549): crf, videoBitrate, videoFrameFormat and hdrMode. Studio's own render panel doesn't expose them yet, so only API callers can use them. What to build An "Advanced" section in the render settings, folded by default, with: CRF: a number field. Blank means the Quality preset decides. Range 0 to 51 for MP4, 0 to 63 for WebM, disabled for MOV (ProRes has no CRF). Hint: "Lower = more detail, bigger file. 18 is standard; 12 keeps film grain." Video bitrate: e.g. 10M. It is either/or with CRF, so the UI should make that obvious, and the route rejects both together with a 400. Source video frames: auto, JPG, PNG. PNG keeps exact colors from screen recordings. HDR: auto, force on, force off. Where to look packages/studio/src/components/renders/RenderQueue.tsx: the settings UI. packages/studio/src/components/renders/renderSettings.ts: persisted settings. Add the new fields with safe parsing of old saved values. packages/studio/src/

difficulty/mediumenhancementhelp wantedtriage/ready
heygen-com/hyperframes60,567 Tier A · 68 pts
#5553Opened 1 day ago
Studio render route: support PNG-sequence output

Why hyperframes render --format png-sequence writes RGBA frames for compositing tools such as After Effects or Nuke. Studio's render route can't produce one, because every part of the route assumes a render is a single file. The design question A PNG sequence is a directory of frames, not a file. Before writing code, decide and write down in the PR: Storage: a folder in renders/ (named like the job id), or zip it on completion so it stays a single file? Listing: how GET /projects/:id/renders reports it (frame count, total size). Download: stream a zip on demand, or serve the zip written at completion? Delete and cancel: remove the whole directory safely. Reuse resolveWithinProject / isPrivateProjectFile in helpers/safePath.ts so a crafted job id can't escape the project. Where to look packages/studio-server/src/routes/render.ts: render start, list, file serve and delete routes. packages/cli/src/server/studioServer.ts and packages/studio/vite.adapter.ts: startRender, cancel cleanup,

difficulty/mediumenhancementhelp wantedtriage/needs-design
heygen-com/hyperframes60,567 Tier A · 68 pts
#5552Opened 1 day ago
Studio render route: support GIF output (with loop count)

Why hyperframes render --format gif --gif-loop N works from the CLI, but Studio's render route (POST /projects/:id/render) only accepts mp4, webm and mov. Studio users can't export a GIF for docs, READMEs or chat without dropping to the terminal. What to change The producer already supports it (format: "gif" and gifLoop on the render config in packages/producer/src/services/renderOrchestrator.ts). The work is widening every place in the Studio path that assumes one of three video extensions: packages/studio-server/src/routes/render.ts: VALID_FORMATS, FORMAT_EXT, RENDER_MIME, the renders-list filter (.mp4/.webm/.mov) and the job-id regex /\.(mp4|webm|mov)$/. packages/studio-server/src/types.ts: the format union on startRender. packages/cli/src/server/studioServer.ts and packages/studio/vite.adapter.ts: the outputPath.replace(/\.(mp4|webm|mov)$/, ...) calls (cancel cleanup and the .meta.json sidecar). Accept an optional gifLoop (integer 0 to 65535, 0 = loop forever), validated the way h

difficulty/mediumenhancementhelp wantedtriage/ready

Top TypeScript Repositories with Beginner Issues (20)

Updated Daily via GitHub GraphQL
vellum-ai
vellum-assistant
vellum-ai/vellum-assistant
S•Elite
1.3k·TypeScript

An AI Assistant that’s easy to setup, does your work 24/7, knows your preferences and gets better over time.

#agent#agentic-ai#ai-assistant
92%
Merge Rate
8h
Review Time
82%
1st-Timers
2 GFI
Scorecard
google
xrblocks
google/xrblocks
S•Elite
484·TypeScript

XR Blocks is a lightweight WebXR + AI library for rapidly prototyping advanced AI + XR experiences.

#androidxr#gemini#gestures
87%
Merge Rate
4h
Review Time
75%
1st-Timers
2 GFI
Scorecard
eclipse-che
che
eclipse-che/che
S•Elite
7.2k·TypeScript

Kubernetes based Cloud Development Environments for Enterprise Teams

#cloud#cloud-ide#containers
91%
Merge Rate
3h
Review Time
100%
1st-Timers
2 GFI
Scorecard
DouglasNeuroInformatics
OpenDataCapture
DouglasNeuroInformatics/OpenDataCapture
S•Elite
118·TypeScript

An electronic data capture platform for administering remote and in-person clinical instruments

#clinical#data-collection#electronic-data-capture
71%
Merge Rate
8h
Review Time
50%
1st-Timers
18 GFI
Scorecard
cameri
nostream
cameri/nostream
S•Elite
829·TypeScript

A Nostr Relay written in TypeScript

#nostr
80%
Merge Rate
<1h
Review Time
75%
1st-Timers
2 GFI
Scorecard
Bike4Mind
bike4mind
Bike4Mind/bike4mind
S•Elite
83·TypeScript

The open-core AI workbench — notebooks, agents, RAG, voice, and images across any model: OpenAI, Anthropic, Google, xAI, or local via Ollama/vLLM. BSL 1.1, auto-converting to Apache-2.0 on a two-year clock. Your AI keeps running when theirs doesn't.

#agents#ai#ai-agents
80%
Merge Rate
4h
Review Time
81%
1st-Timers
1 GFI
Scorecard
LCE-Hub
LCE-Emerald-Launcher
LCE-Hub/LCE-Emerald-Launcher
S•EliteLow Sample
491·TypeScript

The LCE Emerald Launcher

93%
Merge Rate
4h
Review Time
100%
1st-Timers
1 GFI
Scorecard
1692775560
dsh-Mimir-Academic-research
1692775560/dsh-Mimir-Academic-research
S•Elite
541·TypeScript

Mimir — 一站式科研工作台插件:LaTeX 论文边写边编译、arXiv 文献管理、实验追踪、指标图表、GPU 服务器 SSH 任务编排,管理科研全周期。An open-source research workbench plugin for the whole research cycle.

#arxiv#bibtex#deepseek
96%
Merge Rate
22h
Review Time
80%
1st-Timers
5 GFI
Scorecard
stella
stella
stella/stella
S•Elite
259·TypeScript

Open-source legal workspace

#law#law-firms#legal
81%
Merge Rate
15h
Review Time
100%
1st-Timers
1 GFI
Scorecard
Colorado-Mesh
mesh-client
Colorado-Mesh/mesh-client
S•Elite
124·TypeScript

Cross-platform Electron desktop client for Meshtastic, MeshCore, and Reticulum on macOS, Linux, and Windows with multi-language support, BLE, USB serial, Wi‑Fi/TCP, MQTT, local SQLite history, and routing diagnostics. EMCOMM support via MECP & TAK.

#meshcore#meshcore-client#meshcore-gui
90%
Merge Rate
7d
Review Time
80%
1st-Timers
2 GFI
Scorecard
vybestack
llxprt-code
vybestack/llxprt-code
S•Elite
704·TypeScript

An open-source multi-provider AI assisted CLI development tool. Use whatever LLM you want to code in your terminal.

94%
Merge Rate
11h
Review Time
75%
1st-Timers
2 GFI
Scorecard
OpsiMate
OpsiMate
OpsiMate/OpsiMate
S•Elite
242·TypeScript

Open-source alert management for NOC/DevOps teams: one queue for Grafana, Datadog, Zabbix, Uptime Kuma and GCP alerts — with ownership, mute policies, root-cause analysis and insights. Self-hosted, one container.

#alert-management#alerting#datadog
82%
Merge Rate
16h
Review Time
57%
1st-Timers
74 GFI
Scorecard
rajbos
ai-engineering-fluency
rajbos/ai-engineering-fluency
S•Elite
118·TypeScript

Extension that shows information about the estimated token usage and more of AI in editors/CLI's

#githubcopilot#vsix-extension
84%
Merge Rate
<1h
Review Time
100%
1st-Timers
1 GFI
Scorecard
jo-duchan
tapflow
jo-duchan/tapflow
S•Elite
862·TypeScript

Self-hosted iOS & Android simulator streaming for the whole team

#android#android-emulator#app-testing
92%
Merge Rate
-
Review Time
100%
1st-Timers
8 GFI
Scorecard
SB2318
UltimateHealth
SB2318/UltimateHealth
S•Elite
64·TypeScript

Open-source health library & article management platform | React Native + Node.js + MongoDB | Trusted wellness content, AI chat & podcasts | Live: uhsocial.in | Android App on Play Store

64%
Merge Rate
-
Review Time
72%
1st-Timers
37 GFI
Scorecard
fazer-ai
agents
fazer-ai/agents
S•Elite
118·TypeScript

fazer.ai agents. Apache 2.0.

87%
Merge Rate
19h
Review Time
100%
1st-Timers
2 GFI
Scorecard
OpenRailAssociation
osrd
OpenRailAssociation/osrd
S•Elite
663·TypeScript

An open source web application for railway infrastructure design, capacity analysis, timetabling and simulation

#railway#simulation
81%
Merge Rate
1d
Review Time
78%
1st-Timers
17 GFI
Scorecard
mattogodoy
nametag
mattogodoy/nametag
S•Elite
1.0k·TypeScript

A simple, yet effective Personal Relationship Manager

92%
Merge Rate
5h
Review Time
100%
1st-Timers
2 GFI
Scorecard
amiantos
lurker
amiantos/lurker
S•Elite
77·TypeScript

Lurker is a beautiful self-hosted IRC client with a retro aesthetic and modern conveniences.

#express#irc#irc-client
91%
Merge Rate
18h
Review Time
60%
1st-Timers
5 GFI
Scorecard
RaspberryPiFoundation
blockly
RaspberryPiFoundation/blockly
S•Elite
13.6k·TypeScript

The web-based visual programming editor.

89%
Merge Rate
22h
Review Time
62%
1st-Timers
5 GFI
Scorecard

How to make your first TypeScript open-source pull request

Finding approachable Good First Issues in TypeScript allows you to build real-world software engineering experience. Instead of submitting PRs to abandoned repositories, GetMerged verifies maintainer review speeds and first-timer acceptance rates before you write a single line of code.

Select any issue above to claim it directly on GitHub, or click a repository to inspect full maintainer review turnaround metrics and triage guidance!

Get this week's top welcoming repos + fresh Good First Issues for TypeScript

Free weekly email, scoped to TypeScript. No account needed - confirm once and unsubscribe anytime.

Best TypeScript Good First Issues | GetMerged