Good First Issues in JavaScript
Explore curated starter issues in high-scoring JavaScript 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 JavaScript 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 repository should be upgraded to Go 1.27.1. Bump the go directive in go.mod (and any toolchain line) to 1.27.1, if the repo uses Go modules. Update the Go version in GitHub Actions workflows (actions/setup-go), Dockerfiles, Makefiles, and Netlify or other build config. Run go mod tidy and confirm builds and tests still pass.
Description Each integration page is meant to show a " Designs" section listing related designs from the Meshery Catalog. That section is currently missing on every integration page, even for technologies that do have designs in the catalog. Example: https://layer5.io/cloud-native-management/meshery/integrations/prometheus Scroll past the "Get Started / See Documentation" area. Where the designs should appear, there's just empty space. Prometheus has one design in the catalog ("Thanos Query Design"), but the page doesn't show it. The same happens on other integration pages, such as Istio. Cause The page does load the designs from Layer5 Cloud, and the data comes back fine. The problem is that the page looks for the number of designs under an old field name (total_count). Layer5 Cloud now sends that number under a new name (totalCount). Because the page can't find the count, it assumes there are zero designs and hides the whole section. The same old-vs-new naming also breaks the design
In the internetSpeedtestServers get handler (sensor/InternetSpeedtestPlugin.js:57-67), the "no IP address" else is attached to the dns check instead of the ip_address check: if (wanIntf.ip_address) bindIP = wanIntf.ip_address; if (wanIntf.dns) dnsServers=wanIntf.dns else throw {msg: `WAN interface ${wanIntf.name} does not have IP address, cannot get speed test servers from it`, code: 400}; The same block in runInternetSpeedtest (:108-116) is correct: if (wanIntf.ip_address) bindIP = wanIntf.ip_address; else throw {msg: `WAN interface ${wanIntf.name} does not have IP address, cannot run speedtest on it`, code: 400}; if (wanIntf.dns) dnsServers = wanIntf.dns; The dns lines were inserted between the if and its else in d2e5959 ("Add speedtest nameserver option"). When the app asks for the server list of a specific WAN: WAN has DNS but no IP (for example it's down): bindIP stays null, so the servers are fetched over the default route and belong to the other WAN. The handler sho
sysmemory (util/Stats.js) parses the Mem: line of free using the old column layout: buffers: cl[5], cached: cl[6], usable: cl[3] + cl[5] + cl[6] Current procps free prints total used free shared buff/cache available. So cl[5] is buff/cache and cl[6] is available. Available already includes free memory and most of buff/cache, which means usable counts the same memory two or three times. Current free has no -/+ buffers/cache: line either, so the fallback always runs: memInfo.buffer = memInfo.cache = { used: memInfo.mem.total - memInfo.mem.usable, free: memInfo.mem.usable }; With the fixture in test/test_stats_sysmemory.js (total 3884096, free 812004, buff/cache 2068740, available 2594440): usable = 5475184, which is more than total RAM buffer.free = 5475184 buffer.used = -1591088 mem.cached holds the available figure Until #9909 this parsing never ran (#9897), so these values only started going into getSysInfoAsync().memory and the check-in sysinfo with that fix. Fix: when the head
NetworkMonitorSensor.sampleOnce (sensor/NetworkMonitorSensor.js:569-574) modifies the module-level defaults object in place: const SAMPLE_DEFAULT_OPTS = { "manual": false, "saveResult": true } // :48 ... const opts = SAMPLE_DEFAULT_OPTS; // same object, not a copy opts.manual = true; if (intf) opts.intf = intf; if (typeof saveResult == typeof(true)) opts.saveResult = saveResult; scheduleSampleJob copies it correctly (:508): const opts = Object.assign({}, SAMPLE_DEFAULT_OPTS);. sampleOnce serves the sampleOnce cmd in FireApi (apiRun, :712-715). Because every call shares one object: An intf from one call stays for every later call that omits it. A later call meant for the default route pings with the earlier WAN's routing table (opts.intf at :342-357), and its result is recorded under that WAN. A save_result from one call becomes the default for later calls that omit it. Two calls in flight at once read each other's intf and saveResult after their awaits. The state lasts unti
NetworkProfile.destroyEnv (net2/NetworkProfile.js:686-689) builds the IPv6 copy of the second WAN input rule from the wrong rule: const inputRule6 = inputRule.clone().fam(6); const inputRule6Sec = inputRule.clone().fam(6); // should be inputRuleSec createEnv gets it right (net2/NetworkProfile.js:441): const inputRule6Sec = inputRuleSec.clone().fam(6); In router mode, createEnv appends six rules for a WAN, including this IPv6 rule tagged with the network's uuid: FW_INPUT_DROP -i <intf> --ctstate NEW ! --ctstate DNAT -j FW_WAN_IN_DROP destroyEnv deletes the IPv6 INVALID -> DROP rule twice and never deletes the IPv6 NEW -> FW_WAN_IN_DROP rule. So when a WAN network is removed, or re-created with a different interface or uuid, that rule stays in ip6tables until the chains are rebuilt. FW_WAN_IN_DROP drops everything sent to it. The leak itself follows from the code. Whether it bites in practice depends on the interface being reused afterwards, for example a former WAN port turned into a
IntelAlarm.keysToCompareForDedup (alarm/Alarm.js:1025-1030) pushes the URL's value onto the key list instead of the key name: const keys = ["p.device.mac", "p.dest.name", "p.dest.port", "p.intf.id", Constants.TAG_TYPE_MAP.user.alarmIdKey]; const url = this["p.dest.url"]; if (url) keys.push(url) Alarm.isDup (alarm/Alarm.js:279-296) then reads alarm["http://evil.com/b"] on both alarms. The field is undefined on both, and two undefined values count as equal, so the URL plays no part in the comparison. Result: a device hits http://evil.com/a and raises an intel alarm. Within the dedup window it hits http://evil.com/b on the same host and port. The second alarm is judged a duplicate of the first and dropped, so the user is never told about the second URL. This came in with 56be5dd ("stop using device/group tag for outbound alarm dedup keys"). Before it, the list contained the key name "p.dest.url". Fix: if (url) keys.push("p.dest.url").
Description This is a responsiveness issue in the form/modal styling, and the cause is in src/sections/app.style.js. In short: the layout is using fixed-height form dimensions rather than viewport-aware responsive sizing. Expected Behaviour The form inside the modal should remain fully visible and usable on mobile, tablet, and desktop. Its width should shrink with the viewport instead of being stuck at a large desktop width. Its height should not force the form to overflow or get clipped on smaller screens. Screenshots Screen.Recording.2026-10-13.at.1.25.14.PM.mov Environment: Host OS: MacOs Browser: Brave Contributor Resources and Handbook The layer5.io website uses Gatsby, React, and GitHub Pages. Site content is found under the master branch. 📚 See contributing instructions. 🎨 Wireframes and designs for Layer5 site in Figma (open invite) 🙋🏾🙋🏼 Questions: Discussion Forum and Community Slack. Join the Layer5 Community by sub
JavaScript Linting Failures Linting failures were detected in the automated JavaScript lint workflow run. Workflow Details Run: https://github.com/stdlib-js/stdlib/actions/runs/38487926047 Type: JavaScript Linting Date: 2026-10-14 00:10:41 UTC Error Details make[1]: Entering directory '/home/runner/work/stdlib/stdlib' Linting file: lib/node_modules/@stdlib/assert/is-relative-uri/examples/index.js Linting file: lib/node_modules/@stdlib/array/base/fancy-slice/examples/index.js Linting file: lib/node_modules/@stdlib/string/examples/index.js Linting file: lib/node_modules/@stdlib/assert/is-configurable-property-in/examples/index.js /home/runner/work/stdlib/stdlib/lib/node_modules/@stdlib/assert/is-configurable-property-in/examples/index.js 25:12 error No spaces allowed between an opening parenthesis or bracket and a nested object or array expression at the end of a line stdlib/eol-open-bracket-spacing 33:8 error No spaces allowed between an opening parenthesis or bracket and a
📝 Description Add a new Lever plugin to the ToolJet Marketplace so users can connect to Lever and use it as a data source in their apps. Lever is an applicant tracking system (ATS) and recruiting platform for managing candidates, job postings, and hiring pipelines. 🎯 Scope Authentication API key (pasted by the user, sent via Basic auth as the username with an empty password). OAuth is out of scope for this issue. Environment selector: Production (https://api.lever.co/v1) or Sandbox (https://api.sandbox.lever.co/v1) Operations to support Minimum: List opportunities (with filters for stage, posting, tag, archived status) Get opportunity Create opportunity (candidate) Update opportunity stage Archive / unarchive opportunity Add tags to opportunity Add note to opportunity List postings Get posting Create posting Update posting List interviews for an opportunity List feedback for an opportunity List offers for an opportunity List stages List archive reasons List users List requisit
Description When Plotly.react is called to update a plot that has a contour trace with autocontour true, the contour size/min/max are all calculated based on the previous contour trace z values. This can result in no contours being drawn or incorrect ones. This happens even though the data arrays are different instances. How it happens: in plots/plots.js method supplyDefaults: if(oldFullData.length === newFullData.length) { for(i = 0; i < newFullData.length; i++) { relinkPrivateKeys(newFullData[i], oldFullData[i]); } } copies the _zmin/_zmax from the previous trace to the new trace data in traces/contour/set_contours.js the trace zmin/zmax are used to calculate the contour size/min/max It is not until after setContours is called in traces/contour/calc.js that a call is made to Colorscale.calc(gd, trace, {vals: cVals, cLetter: 'z'}); that the correct trace.zmin/zmax are filled in. Setting the trace.zmin/zmax to the correct values before the call to Plot
The README shows a small React hook for rendering the widget and says an official wrapper depends on people asking for one. This issue is that ask, scoped small. What to do A minimal @webdecoy/fcaptcha-react package (in packages/react/ or similar) that exports a <FCaptcha siteKey onVerify onExpire onError /> component: loads the widget script once renders into a ref and calls FCaptcha.destroy on unmount works with React 18 and 19, including StrictMode's double mount has a test for mount, verify callback and unmount Publishing and CI wiring can come after the component itself is agreed in review. Done when The component is reviewed and merged with tests, and the README's React section points to it.
Since v1.45.0 the FCaptcha server serves its widget on the Turnstile, hCaptcha and reCAPTCHA script paths, so an app that lets you change a provider's script URL and siteverify URL can use FCaptcha with configuration only. Gitea is tested and documented in the README's Integrations section. Authentik's captcha stage has both settings (JS URL and API URL), so it should work the same way, but nobody has tried it. What to do Run Authentik and an FCaptcha server locally. Create a captcha stage with: JS URL: https://<fcaptcha>/turnstile/v0/api.js API URL: https://<fcaptcha>/turnstile/v0/siteverify the site key, and your FCAPTCHA_VERIFY_SECRET as the private key Add the stage to a flow and complete it in a browser. Note that FCaptcha's score is lower-is-more-human. If the stage applies score thresholds, report what settings worked. Done when Either a short Authentik entry is added to the README's Integrations section with the working settings, or this issue records what broke.
examples/ has runnable integrations for Hono, Supabase, FastAPI and a plain Node contact form. Nothing covers PHP yet. What to do Add examples/laravel/ with: a Blade form that renders the checkbox widget a validation rule (or middleware) that verifies the posted fcaptcha_token against /turnstile/v0/siteverify using Laravel's HTTP client feature tests for a valid, a replayed and a missing token (fake the HTTP call) a README with how to run it against a local FCaptcha server Done when The example runs from its README, and a link is added under "Runnable examples" in the main README.
examples/ has runnable integrations for Hono, Supabase, FastAPI and a plain Node contact form. A Django example would cover a lot of Python users. What to do Add examples/django/ with: a form view whose template renders the checkbox widget server-side verification of the posted fcaptcha_token against /turnstile/v0/siteverify or /api/token/verify (a small form field or a validator is fine) tests for a valid, a replayed and a missing token, in the style of examples/fastapi/test_main.py a README with how to run it against a local FCaptcha server Bonus: a note on using django-recaptcha unchanged by setting RECAPTCHA_DOMAIN to your FCaptcha server, which v1.45.0 makes possible. Done when The example runs from its README, and a link is added under "Runnable examples" in the main README.
The widget ships five strings in 34 languages. Swahili isn't one of them yet. What to do Add a sw entry to the I18N table in client/fcaptcha.js. Each entry is five strings, in this order: label: the resting checkbox label ("I'm not a robot") verifying: shown while checking ("Verifying…") verified: shown on success ("Verified") failed: shown on failure ("Verification failed") retry: shown before the widget resets ("Verification failed. Please try again.") Copy the shape of an existing entry such as de. Please only take this on if you're a fluent speaker; machine translations of short UI strings tend to read oddly. Done when FCaptcha.render(el, { siteKey, lang: 'sw' }) shows your strings cd test/browser && CI=1 npx playwright test i18n passes The language count in the README's feature list is updated
🐥 Beginner Friendly This issue is a great fit for contributors who are ready to explore the Hiero JavaScript codebase a little more and take on slightly more independent work. We strongly recommend completing a Good First Issue before tackling a Beginner Issue. Unlike a Good First Issue, this one does not spell out every line. You will read the code, decide how to fix each warning and check that the types still compile. The description below lists every warning and points you to patterns the codebase already uses. 👾 Description of the Issue npx eslint reports 7 warnings in 6 files: File Line Rule Warning src/account/AccountInfoQuery.js 140 @typescript-eslint/no-unused-vars '_nodeAccountId' is defined but never used. src/account/AccountInfoQuery.js 140 @typescript-eslint/no-unused-vars '_request' is defined but never used. src/hooks/EvmHookCall.js 1 @typescript-eslint/no-unused-vars 'Long' is defined but never used. src/hooks/FungibleHookCall.js 5 @typescript-eslint/n
🐥 Beginner Friendly This issue is a great fit for contributors who are ready to explore the Hiero JavaScript codebase a little more and take on slightly more independent work. We strongly recommend completing a Good First Issue before tackling a Beginner Issue. Unlike a Good First Issue, this one does not spell out every line. You will read the existing code, make a small fix, decide which test cases are needed and write them yourself. The description below lists everything that must change and be covered, and points you to the right files. 👾 Description of the Issue NftId identifies one NFT: a token ID plus a serial number, written as 0.0.123/45 or 0.0.123@45. Several public methods accept an NFT ID as a string and parse it with NftId.fromString(), for example TokenNftInfoQuery.setNftId(), PendingAirdropId.setNftId() and TransferTransaction.setNftTransferApproval(). NftId has no test file of its own, and fromString() accepts strings it should reject: Input What happens today
🐥 Beginner Friendly This issue is a great fit for contributors who are ready to explore the Hiero JavaScript codebase a little more and take on slightly more independent work. We strongly recommend completing a Good First Issue before tackling a Beginner Issue. Unlike a Good First Issue, this one does not spell out every line. You will read the existing code, decide which test cases are needed and write them yourself. The description below lists everything that must be covered and points you to the right files. 👾 Description of the Issue src/file/FileInfo.js holds the answer of a FileInfoQuery: the file ID, size, expiration time, deleted flag, keys, memo and ledger ID. It converts to and from protobuf and bytes, but there is no test file for it yet. Two of its JSDoc comments were copied from the account code and describe the wrong thing: Where Current text Should be Class description, line 13 Response when the client sends the node CryptoGetInfoQuery. Response when the cli
🆕🐥 First-Time Friendly This issue is especially welcoming for people who are new to contributing to the Hiero JS SDK. We know that opening your first pull request can feel like a big step. Issues labeled Good First Issue are designed to make that experience easier, clearer, and more comfortable. No prior knowledge of Hiero, Hedera, or distributed ledger technology is required. Just a basic familiarity with JavaScript and Git is more than enough to get started. 👾 Description of the Issue The legacy1 function in packages/cryptography/src/util/entropy.js uses a local variable named indicies, a misspelling of indices. It appears on 2 lines: where it is declared and where it is used. File Current name New name packages/cryptography/src/util/entropy.js indicies indices It is a local variable, so renaming it changes nothing outside the function. This issue is a gentle introduction to the packages/cryptography package, which has its own tests. ⏱ Estimated effort: about 1 h
🆕🐥 First-Time Friendly This issue is especially welcoming for people who are new to contributing to the Hiero JS SDK. We know that opening your first pull request can feel like a big step. Issues labeled Good First Issue are designed to make that experience easier, clearer, and more comfortable. No prior knowledge of Hiero, Hedera, or distributed ledger technology is required. Just a basic familiarity with JavaScript and Git is more than enough to get started. 👾 Description of the Issue Five unit test files have spelling mistakes in comments and test names (7 lines in total): File Misspelled Correct test/unit/BatchTransaction.js transactions doesnt have transactions don't have test/unit/Transaction.js diffrent different test/unit/TransactionLegacy.js diffrent different test/unit/TransferTransaction.js tansfers transfers test/unit/node/NodeCreateTransaction.js doesnt doesn't test/unit/node/NodeCreateTransaction.js vlaue value test/unit/node/NodeCreateTransact
stream.direction is documented as returning 'bidi', 'uni', or null when the stream is pending or destroyed. However, the implementation always returns 'bidi' or 'uni', and the lifecycle test confirms that the direction remains available after destruction. There's also a test validating this behaviour (test/parallel/test-quic-session-stream-lifecycle.mjs:97) node/doc/api/quic.md Lines 2110 to 2120 in 9e6dd49 ### `stream.direction` <!-- YAML added: v23.8.0 --> * Type: {string|null} One of `'bidi'`, `'uni'`, or `null`. The directionality of the stream, or `null` if
For Neople Is there a specific app this action is for? Gorgias (gorgias_oauth), actions Create Ticket Message (gorgias_oauth-create-ticket-message) and Send Public Reply (gorgias_oauth-send-public-reply). Request: add two optional props that are passed through to the message body: Integration ID → integration_id (integer): the Gorgias integration the reply is sent through (chat widget, Instagram account, Facebook page, WhatsApp number). Nice to have: async options from GET /api/integrations. Body Text → body_text: plain-text version of the message (or derive it from the HTML message). Please provide a link to the relevant API docs for the specific service / operation. https://developers.gorgias.com/reference/create-ticket-message (integration_id and body_text are request body fields) Is lack of support preventing you from moving forward, or do you have a workaround? It blocks us. Our AI agents reply to Gorgias tickets through this action. Email replies work, but replies on chat,
alarm/Exception.js normalises three numeric fields in the constructor (:52): const numberKeys = ["timestamp", "expireTs", "idleTs"] ... if (numberKeys.includes(key)) raw[key] = !isNaN(raw[key]) && Number(raw[key]); but the dedup predicate compares four (:79): let keys = ["cronTime", "duration", "expireTs", "idleTs"] duration is compared but never normalised — the one field of the four missing from numberKeys. Both lines came from the same commit (a8ea8fe02, "support cronTime, duration, expireTs and idleTs in exception data"). Why the types diverge: a mute created with a schedule arrives from the app with duration as a JSON number. ExceptionManager.js:336 persists with rclient.hmset(...), and redis stores every hash value as a string; ExceptionManager.js:201 reconstructs with new Exception(r), so the loaded copy has duration: "3600". Creating the same mute again compares the fresh object against the loaded one at Exception.js:98: if (!_.isEqual(this[k], e[k])) return false _.isEqual
util/Stats.js:19-20 declares: function sysmemory(args, cb) { childProcess.execFile('free', args, function (err, stdout) { net2/SysManager.js:1082 calls it as: const memory = await util.promisify(stat.sysmemory)() promisify produces a function that appends its own callback to the arguments it is given. Called with no arguments, it invokes sysmemory(promisifyCallback) — so inside sysmemory, args holds the promisify callback and cb is undefined. The execFile call becomes: childProcess.execFile('free', <promisifyCallback>, <parsing handler>) Node's normalizeExecFileArgs sees a function in the args position, takes it as the callback and sets options = null. The third argument — the handler that does all the parsing into a structured object — is silently dropped. Result: free runs with no arguments, the promisify callback is invoked with (err, stdout, stderr), and the promise resolves to the raw stdout string. The memory field returned by getSysInfoAsync() is an unparsed text blob ins
hook/DeviceHook.js:325, in the NewDeviceFound handler: if (!enrichedHost.sambaName && host.ipv4Addr) { let sambaName = await samba.getSambaName(host.ipv4Addr); if (sambaName) enrichedHost.sambaNname = sambaName; // <-- double 'n' enrichedHost.bnameCheckTime = Math.floor(new Date() / 1000); } The field is spelled sambaNname. git grep sambaNname matches this line and nothing else, while the name readers all use sambaName (net2/HostTool.js:127-128 in getPreferredName, util/util.js:86). Two effects: The NetBIOS name discovered for a new device is never used as its display name. The misspelled key is persisted as an extra field of host:mac:<mac> and stays there. The same block also stamps bnameCheckTime unconditionally, so DeviceNameUpdateSensor skips its re-check for a full revalidation interval (sensor/DeviceNameUpdateSensor.js:36) and the correct sambaName is not written in the meantime either. Fix: rename the assignment to sambaName.
English TL;DR: This is a long-term "help wanted" meta-issue. We invite everyone — human contributors and AI coding agents alike — to scan this repository, find real problems (bugs, security issues, fragile logic, missing tests, docs gaps), and submit PRs. Merged PRs get credited in our CHANGELOG and release notes. See the PR rules below before submitting. 🎯 全民找茬 · 长期悬赏贴:扫描代码库,发现问题,提交 PR 这是一个长期有效的贡献召集贴。无论你是人类开发者,还是正在扫 GitHub 找任务的 AI 编程 Agent(Devin / SWE-agent / Codex / Claude Code / Cursor 等),都欢迎来「找茬」: 通读本仓库代码 → 发现真实问题 → 提交修复 PR → 合并后署名进 CHANGELOG 与 Release Notes。 📦 项目速览(帮你快速进入状态) 是什么:矩媒 MatrixMedia,自媒体多平台视频矩阵批量发布工具 技术栈:Electron(主进程 + preload)+ Vue 2(renderer)+ Node.js 脚本 + Puppe
(I hit this problem and asked Gemini to generate the bug report - so written by AI, but I've reviewed and it's got all the right info IMHO.) Title: ClickHouse SQL export does not escape apostrophes in column comments Bug report: Using Data Contract CLI 1.2.4, a valid contract with an apostrophe in a property description generates invalid ClickHouse SQL. Minimal reproduction (datacontract.yaml): apiVersion: v3.2.0 kind: DataContract id: urn:datacontract:quote-repro name: quote-repro version: 1.0.0 status: active schema: - name: example properties: - name: id logicalType: string required: true primaryKey: true - name: amount logicalType: number description: The extractor's amount. Run: datacontract lint datacontract.yaml datacontract export sql datacontract.yaml --dialect clickhouse --clickhouse-engine MergeTree Lint passes, but the export contains: `amount` Nullable(Decimal(38,0)) COMMENT 'The extractor's amount.' The apostrophe
🔎 Existing issue check 已搜索现有 issue。相关:#352(要求区分 CodeGraph CLI/项目索引/MCP 注册三态)、#409(doctor 漏检 Codex 项目级 CodeGraph MCP 配置并误报未注册,已闭)、#135(doctor 其它假阴性,已在 0.4.0-beta.1 修复)。 上述均未覆盖本报告的两个问题:parseJsonLike() 的块注释剥离不识别字符串字面量,以及 inspectJsonMcpEntry() 不识别 opencode v2 的 mcp.servers.<name> 形状。 🎯 Affected area domains/integrations/codegraph.ts(parseJsonLike / inspectJsonMcpEntry),以及 comet doctor 的 CodeGraph 注册诊断输出。 📦 Comet version 0.4.4(npm latest,即当前无更新版本可等)。宿主:opencode v2.0.26,Linux/WSL2。 💥 Current behavior comet doctor --json 对 opencode 报: { "id": "opencode", "scope": "both", "configPath": "~/.config/opencode/opencode.jsonc", "registered": false, "valid": false, "effective": false, "detail": "unable to read ~/.confi
Prerequisite Be a member of Hack for LA. (There are no fees to join.) If you have not joined yet, please follow the steps on our Getting Started Page. Before you claim or start working on an issue, please make sure you have read our How to Contribute to Hack for LA Guide. Overview We need to populate the 'github-handle' variable with the correct GitHub username for each member of the leadership team. Eventually github-handle will replace the github and picture variables, reducing redundancy in the project file. Action Items Open the file _projects/tdm-calculator.md in the IDE 1 Replace: - name: Abby Rivard github-handle: with - name: Abby Rivard github-handle: abbyrivard Using docker, confirm that the appearance of the project webpage is unchanged at all screen sizes. The project webpage URL can be found below under Resources. For Merge Team Release the dependency for this issue in #8428. If all the dependencies have been completed, follow the Merge Team instructions o
Top JavaScript Repositories with Beginner Issues (20)
Updated Daily via GitHub GraphQLNeo.mjs is a self-evolving software organism: a professional end-to-end AI engineering team whose cross-model swarm inhabits live apps via Neural Link, Active Hybrid GraphRAG, DreamService, and self-healing loops.
Patches for Android TV apks
Open-source AI browser agent for Chrome and Firefox (monorepo) 🧠
The independent security agent for AI-written software. Finds issues, investigates whether they are real, and shows you the evidence. Deterministic core, no API key needed, JSON and SARIF output.
Open database of 27,000+ CCTV camera specs across 220+ brands, with Frigate and ONVIF/RTS integration, CC0
Eventra is a comprehensive event management system that empowers organizers to create, manage, and track events seamlessly. Built with a modern tech stack featuring React frontend and Spring Boot backend, Eventra provides everything needed to run successful events from creation to post-event analytics.
Skill that audits and rewrites content to remove AI writing patterns. Use it with your favorite agents including Claude Code, OpenClaw, Codex, and Hermes.
Project Sidewalk web page
A modeling solution for BPMN, DMN, and Forms based on bpmn.io. As a companion tool to your favorite IDE it supports you in implementing solutions with Camunda.
The official Foundry VTT implementation of the Daggerheart system
Cardano.org is the primary online resource for the Cardano community.
Unofficial Microsoft Teams for Linux client
Your day, at a glance
🗨️ Nextcloud Talk – chat, video & audio calls for Nextcloud
📝 Simple form & survey app for Nextcloud
📘 Nextcloud documentation
✨ The fundamental numerical library for JavaScript and TypeScript. ✨ ⭐️ Star to support our work!
The Enterprise Architecture Governance Harness — strategy, architecture, delivery, and assurance using AI coding assistants
This repository contains 100+ web projects from basic to advanced using html css and js and other web development tech stacks Please star the repo before start working on it
📑 Collabora Online for Nextcloud
How to make your first JavaScript open-source pull request
Finding approachable Good First Issues in JavaScript 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 JavaScript
Free weekly email, scoped to JavaScript. No account needed - confirm once and unsubscribe anytime.