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.
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 IssuesThis 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
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
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
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
🟢 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
🟢 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 ]
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: 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
🟢 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
🟢 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
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
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
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
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
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.
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{有未完成的恢复
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.
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
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
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
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)
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
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
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
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
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
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
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/
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,
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
Top TypeScript Repositories with Beginner Issues (20)
Updated Daily via GitHub GraphQLAn AI Assistant that’s easy to setup, does your work 24/7, knows your preferences and gets better over time.
XR Blocks is a lightweight WebXR + AI library for rapidly prototyping advanced AI + XR experiences.
Kubernetes based Cloud Development Environments for Enterprise Teams
An electronic data capture platform for administering remote and in-person clinical instruments
A Nostr Relay written in 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.
The LCE Emerald Launcher
Mimir — 一站式科研工作台插件:LaTeX 论文边写边编译、arXiv 文献管理、实验追踪、指标图表、GPU 服务器 SSH 任务编排,管理科研全周期。An open-source research workbench plugin for the whole research cycle.
Open-source legal workspace
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.
An open-source multi-provider AI assisted CLI development tool. Use whatever LLM you want to code in your terminal.
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.
Extension that shows information about the estimated token usage and more of AI in editors/CLI's
Self-hosted iOS & Android simulator streaming for the whole team
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
fazer.ai agents. Apache 2.0.
An open source web application for railway infrastructure design, capacity analysis, timetabling and simulation
A simple, yet effective Personal Relationship Manager
Lurker is a beautiful self-hosted IRC client with a retro aesthetic and modern conveniences.
The web-based visual programming editor.
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.