Good First Issues in Java
Explore curated starter issues in high-scoring Java 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 Java 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 Issuesui/src/components/executions/Gantt.vue uses 10 Bootstrap utility classes. Bootstrap is being removed from the design system, so each one should become CSS written with the --ks-* tokens from ui/packages/design-system, in the component's existing <style scoped lang="scss"> block. Where Line Element Classes 88 <div class="d-flex flex-column"> d-flex, flex-column 90 <div class="gantt-row d-flex cursor-icon"> d-flex 94 <div class="d-inline-flex"> d-inline-flex 122 <Warning class="attempt_warn me-3"> me-3 139 <div class="task-duration d-none d-md-inline-block"> d-none, d-md-inline-block 155 <div class="task-details__inner p-2"> p-2 162 <TaskRunDetails class="mh-100 mx-3"> mh-100, mx-3 Bootstrap's spacing steps stop matching the token steps after 2: -3 is --ks-spacing-4. So me-3 takes var(--ks-spacing-4), not var(--ks-spacing-3). Done when No Bootstrap class is left in Gantt.vue: none of the utilities above. The PR has before and after screenshots in light and dark mod
ui/src/components/dashboard/sections/Sections.vue uses 10 Bootstrap utility classes. Bootstrap is being removed from the design system, so each one should become CSS written with the --ks-* tokens from ui/packages/design-system, in the component's existing <style scoped lang="scss"> block. Where Line Element Classes 12 <div class="d-flex flex-column"> d-flex, flex-column 13 <div class="d-flex justify-content-between"> d-flex, justify-content-between 16 <span class="fs-6 fw-bold"> fs-6, fw-bold 21 <small class="fw-light"> fw-light 40 <KsButton class="ms-2"> ms-2 68 <KsButton class="ms-2"> ms-2 74 <div class="flex-grow-1"> flex-grow-1 Done when No Bootstrap class is left in Sections.vue: none of the utilities above. The PR has before and after screenshots in light and dark mode, and the component looks the same. cd ui && npm run check:types && npm run test:unit && npm run lint && npm run check:ts-any passes.
ui/src/components/logs/LogLevelNavigator.vue uses 8 Bootstrap utility classes. Bootstrap is being removed from the design system, so each one should become CSS written with the --ks-* tokens from ui/packages/design-system, in the component's existing <style scoped lang="scss"> block. Where Line Element Classes 3 <div class="d-flex kel-select__wrapper space-between gap-2"> d-flex, gap-2 12 <div class="d-flex align-items-center gap-2"> d-flex, align-items-center, gap-2 16 <div class="d-flex align-items-end gap-1"> d-flex, align-items-end, gap-1 Done when No Bootstrap class is left in LogLevelNavigator.vue: none of the utilities above. The PR has before and after screenshots in light and dark mode, and the component looks the same. cd ui && npm run check:types && npm run test:unit && npm run lint && npm run check:ts-any passes.
ui/src/override/components/namespaces/Namespaces.vue uses 6 Bootstrap utility classes. Bootstrap is being removed from the design system, so each one should become CSS written with the --ks-* tokens from ui/packages/design-system, in the component's existing <style scoped lang="scss"> block. Where Line Element Classes 27 <KsCol class="p-3 namespaces"> p-3 40 <KsTree class="h-auto p-2 rounded-full"> h-auto, p-2 52 <div class="d-flex"> d-flex 53 <FolderOpenOutline class="me-2 icon"> me-2 54 <span class="pe-3"> pe-3 Bootstrap's spacing steps stop matching the token steps after 2: -3 is --ks-spacing-4. So p-3 takes var(--ks-spacing-4), not var(--ks-spacing-3). Done when No Bootstrap class is left in Namespaces.vue: none of the utilities above. The PR has before and after screenshots in light and dark mode, and the component looks the same. cd ui && npm run check:types && npm run test:unit && npm run lint && npm run check:ts-any passes.
ui/src/components/flows/Flows.vue uses 6 Bootstrap utility classes. Bootstrap is being removed from the design system, so each one should become CSS written with the --ks-* tokens from ui/packages/design-system, in the component's existing <style scoped lang="scss"> block. Where Line Element Classes 10 <input class="d-none"> d-none 107 <router-link class="me-1"> me-1 111 <KsTag class="me-1"> me-1 190 <div class="d-flex justify-content-between align-items-center"> d-flex, justify-content-between, align-items-center Done when No Bootstrap class is left in Flows.vue: none of the utilities above. The PR has before and after screenshots in light and dark mode, and the component looks the same. cd ui && npm run check:types && npm run test:unit && npm run lint && npm run check:ts-any passes.
What would you like to be improved? keep consistent with Lance community How should we improve? No response
new empty libary Double click "Corti" Go to Citation Key Replace by "Test" Press Enter Expected: Focus is put to the tab itself (as if I would click on "Citation Key") Actual: text field keeps focus.
GET /VulnerableApp/templates/JWTVulnerability/keys/private_key.pem returns 200 with a PEM private key, 1850 bytes. It is the RS256 key from sasanlabs.p12. That key signs the tokens of LEVEL_8, LEVEL_9 and LEVEL_13. They read it from JWTAlgorithmKMS through getAsymmetricAlgorithmKey. Those three levels are forgeable by design already, so this does not weaken them. What it does do: It publishes a private key at a path no level teaches. A scanner that reports it is right. It rules that key out for any secure RS256 level. #826 generates its own key pair at startup for this reason. Nothing reads the two PEM files. Both reads sit inside the commented out level in JWTVulnerability.java, and no document, template or message refers to the path. They were added in 2020 by 555eb91. My suggestion is to delete both files, or to move them out of static/ if a later level needs them. How I checked, on master c49b262 The app ran from its own bootJar. Served: private_key.pem 200 at 1850 bytes, public
👉 Please confirm the following I agree to follow the Code of Conduct that this project adheres to. I checked the current issues for duplicate features. 🤔 Is your proposal related to a problem? yes 😍 Describe the solution you'd like In the game the full screen option does not works (its excluded). Adding a full screen option. And a window resizing option. And even what is present does not fits the screen. See the video for reference --> Screen.Recording.2026-10-11.194846.mp4
ImportantThis issue is not ready for contributions yet. The Kestra team still has to review it. Please wait until this message is removed and the issue has been move to Backlog stage before you start working on it. Pull requests opened before that will not be reviewed. In the meantime, feel free to get started on a different issue by checking out our good first issues list. Describe the issue The tab buttons in the flow editor stay in English when the UI language is changed. Steps: Settings > Language > Français (any non-English language) Open a flow and click Edit The tabs still read "Flow Code", "No Code", "Topology", "Docs", "Files" and "Blueprints", while the rest of the page is translated. The labels are plain strings in ui/src/override/components/flows/panelDefinition.ts (lines 25-73), and MultiPanelEditorTabs.vue / MultiPanelTabs.vue print button.label as is. The "No Code" label in ui/src/components/flows/useNoCodePanels.ts (line 113) is the same. Some of these words alrea
Please check before submitting an issue I have searched the issues and haven't found anything relevant I have read the docs I know that generating a report, in whole part or in part, using AI/LLM is prohibited Describe the existing feature/documentation I would like to understand the meaning of the enable/disable switches in the Activity list and how App Manager determines whether an Activity is enabled or disabled. Describe your problem(s) When viewing the Activities of an app, the switches appear to be enabled for all Activities, including those that have been disabled using another app (e.g. Blocker) through package manager (pm). I have also refreshed the list many times. I checked the output of adb shell dumpsys package <package_name> and found the relevant Activities listed under disabledComponents. I am not sure whether the switches represent the actual enabled state of each component, a state managed by App Manager itself, or something else. Could someone clarify the follow
👉 Please confirm the following I agree to follow the Code of Conduct that this project adheres to. I checked the current issues for duplicate features. 🤔 Is your proposal related to a problem? Enemies' speed is pretty slow while asteroids pretty fast. 😍 Describe the solution you'd like Let's change asteroids speed for the Easy mode Tiny hint: would need to make a change for example in this file GameMode, to add a new field for asteroid speed. 👍️ Describe alternatives you've considered No response ✍ Additional context No response
A JSON body that fails to deserialize on a ccompat endpoint gets a v3 ProblemDetails error instead of the Confluent {error_code, message} shape, and the response leaks the server exception class name. Follow-up from #10150 (review item O1), which moved the API-surface dispatch into ApiSurfaceResolver but intentionally left this mapper out of scope. Reproduce On current main, against a running registry: POST /apis/ccompat/v7/subjects/{subject}/versions Content-Type: application/json {"schema": {"not": "a string"}} returns 400: {"detail":"BadRequestException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)","title":"Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)","status":400,"name":"BadRequestException"} By contrast, a ccompat 404 from the same API correctly returns {"message":"Subject 'does-not-exist' not found.","error_code":40401}. Cause app/src/main/java/io/apicurio/regis
Search before asking I had searched in the feature and found no similar feature requirement. Description Background SeaTunnel cannot be started with a single pip install. Users who work in Python (notebooks, CI jobs, data / AI pipelines) have to download a distribution tarball, unpack it, set SEATUNNEL_HOME, make sure Java is available and install connector plugins by hand before they can run a config. This issue proposes a way for SeaTunnel to be installed and invoked directly from PyPI. What SeaTunnel has today No SeaTunnel package is published on PyPI (seatunnel, apache-seatunnel, seatunnel-cli all return 404). tools/seatunnel-python-sdk (merged in #10184, distribution name seatunnel, version 0.1) is only a REST client (httpx); it needs an already running engine. seatunnel-cli (seatunnel-cli/pyproject.toml, console script seatunnel) needs SEATUNNEL_HOME or a running engine for /run and /check and bundles no engine. It also has its own seatunnel_cli/rest.py that duplicates REST c
Before reporting an issue I have read and understood the above terms for submitting issues, and I understand that my issue may be closed without action if I do not follow them. Area operator Describe the bug The official chart oci://quay.io/keycloak/keycloak-operator-helm:26.8.0 renders app.kubernetes.io/version as YAML null on controller RoleBindings. The published Chart.yaml does not define appVersion, but the affected templates reference .Chart.AppVersion without quoting or a fallback. In our Argo CD deployment, this caused persistent OutOfSync status. Enabling ServerSideApply=true alone did not resolve it. Adding argocd.argoproj.io/compare-options: ServerSideDiff=true resolved the comparison issue, but the chart still emits the null-valued label. Additional context The chart is generated by the Quarkus Helm extensions: https://github.com/keycloak/keycloak/blob/26.8.0/operator/README.md#helm-chart The generation configuration does not set quarkus.helm.app-version: https://github.
Why Follow frontend/src/locales/CONVENTIONS.md. zh-CN / en-US namespace files must have identical key sets (npm run check:locales). Task From frontend/, run npm run check:locales (or node scripts/check-locale-parity.mjs). Pick one failing namespace file pair (e.g. editor.js or whichever fails). Add the missing keys on the other side; translate via glossary.md (add glossary rows first if a term is new). Re-run check until that namespace (ideally the whole suite) passes. Acceptance PR touches at most one namespace pair (+ glossary if needed) check:locales green for that namespace No emoji; EN uses English punctuation only Claim Comment「认领」below before starting. Please read .github/CONTRIBUTING.md and sign legal/CLA.md. Not in scope Large i18n refactors; extracting new hard-coded UI strings (separate issue).
Why Follow frontend/src/locales/CONVENTIONS.md. zh-CN / en-US namespace files must have identical key sets (npm run check:locales). Task From frontend/, run npm run check:locales (or node scripts/check-locale-parity.mjs). Pick one failing namespace file pair (e.g. editor.js or whichever fails). Add the missing keys on the other side; translate via glossary.md (add glossary rows first if a term is new). Re-run check until that namespace (ideally the whole suite) passes. Acceptance PR touches at most one namespace pair (+ glossary if needed) check:locales green for that namespace No emoji; EN uses English punctuation only Claim Comment「认领」below before starting. Please read .github/CONTRIBUTING.md and sign legal/CLA.md. Not in scope Large i18n refactors; extracting new hard-coded UI strings (separate issue).
Why i18n / contributor on-ramp. examples/hello-web-plugin/README.md is Chinese-only; international contributors bounce. Task Either: Add a clear English section to the same README, or Add README.en.md and link it from the top of the Chinese README Keep technical commands identical; do not invent APIs. Acceptance English content covers install paths, demos (awd.ready, files, toast, storage, evidence.list), and sandbox boundaries Links to PLUGIN_SPEC / SDK still work Not in scope Rewriting the plugin code or SDK.
Why i18n / contributor on-ramp. examples/hello-web-plugin/README.md is Chinese-only; international contributors bounce. Task Either: Add a clear English section to the same README, or Add README.en.md and link it from the top of the Chinese README Keep technical commands identical; do not invent APIs. Acceptance English content covers install paths, demos (awd.ready, files, toast, storage, evidence.list), and sandbox boundaries Links to PLUGIN_SPEC / SDK still work Not in scope Rewriting the plugin code or SDK.
Why examples/hello-declarative-plugin/ has manifest + l10n + template but no README. hello-web-plugin already has a strong Chinese README to mirror. Task Add examples/hello-declarative-plugin/README.md (CN + EN) covering: What a declarative plugin is (no Java) How l10n %name% keys map to l10n/zh-CN.json / en-US.json How to install (same plugin dirs as hello-web-plugin) What template / styleProfile / settings it contributes Link to docs/plugin-guide.md or PLUGIN_SPEC.md Acceptance README present and accurate against current manifest Install path table included Not in scope Changing plugin behavior.
Why examples/hello-declarative-plugin/ has manifest + l10n + template but no README. hello-web-plugin already has a strong Chinese README to mirror. Task Add examples/hello-declarative-plugin/README.md (CN + EN) covering: What a declarative plugin is (no Java) How l10n %name% keys map to l10n/zh-CN.json / en-US.json How to install (same plugin dirs as hello-web-plugin) What template / styleProfile / settings it contributes Link to docs/plugin-guide.md or PLUGIN_SPEC.md Acceptance README present and accurate against current manifest Install path table included Not in scope Changing plugin behavior.
Why Parent (pay track core stays with maintainers): #66. Issue already describes a Quick check; newcomers need a copy-paste runbook with expected screenshots placeholders. Task Add docs/dev-notes/lowa-ui-locale-quickcheck.md (or under docs/ if dev-notes not yet created) containing: Install / open latest desktop release Open any docx in embedded editor Navigate to Language Settings → User Interface What “lists zh-CN” vs “English only” means for options 1 vs 2 in #66 Where to paste findings (comment on #66) No product code changes. Acceptance Runbook merged Linked from a comment on #66 Not in scope Implementing zh-CN langpack or custom toolbar (#66 implementation).
Why Parent (pay track core stays with maintainers): #66. Issue already describes a Quick check; newcomers need a copy-paste runbook with expected screenshots placeholders. Task Add docs/dev-notes/lowa-ui-locale-quickcheck.md (or under docs/ if dev-notes not yet created) containing: Install / open latest desktop release Open any docx in embedded editor Navigate to Language Settings → User Interface What “lists zh-CN” vs “English only” means for options 1 vs 2 in #66 Where to paste findings (comment on #66) No product code changes. Acceptance Runbook merged Linked from a comment on #66 Not in scope Implementing zh-CN langpack or custom toolbar (#66 implementation).
Why Parent: #15. Warm-up for docs hygiene without boiling the ocean. Task Create docs/dev-notes/. Move one clearly historical/internal file (suggested candidates: docs/AUDIT_2026-08-20_REMAINING.md, docs/HANDOFF_EDITOR_REVIEW_2026-09-11.md, or docs/DESENSITIZATION_REVIEW_2026-09-10.md). Leave a 5-line stub at the old path pointing to the new location (so old links do not 404). Update docs/README.md if it already exists; otherwise mention the move in the PR. Acceptance File lives under docs/dev-notes/ Stub at old path No broken relative links you introduced (fix any in-repo links to that filename) Not in scope Bulk-moving all internal docs.
Why Parent: #15. Warm-up for docs hygiene without boiling the ocean. Task Create docs/dev-notes/. Move one clearly historical/internal file (suggested candidates: docs/AUDIT_2026-08-20_REMAINING.md, docs/HANDOFF_EDITOR_REVIEW_2026-09-11.md, or docs/DESENSITIZATION_REVIEW_2026-09-10.md). Leave a 5-line stub at the old path pointing to the new location (so old links do not 404). Update docs/README.md if it already exists; otherwise mention the move in the PR. Acceptance File lives under docs/dev-notes/ Stub at old path No broken relative links you introduced (fix any in-repo links to that filename) Not in scope Bulk-moving all internal docs.
ui/src/components/executions/date-select/TimeSelect.vue uses 2 Bootstrap utility classes. Bootstrap is being removed from the design system, so each one should become CSS written with the --ks-* tokens from ui/packages/design-system, in the component's existing <style scoped lang="scss"> block. Where Line Element Classes 14 <div class="mt-2 duration-examples"> mt-2 25 <KsInput class="mt-2"> mt-2 Done when No Bootstrap class is left in TimeSelect.vue: none of the utilities above. The PR has before and after screenshots in light and dark mode, and the component looks the same. cd ui && npm run check:types && npm run test:unit && npm run lint && npm run check:ts-any passes.
ui/src/components/ErrorToastContainer.vue uses 2 Bootstrap utility classes. Bootstrap is being removed from the design system, so each one should become CSS written with the --ks-* tokens from ui/packages/design-system, in the component's existing <style scoped lang="scss"> block. Where Line Element Classes 7 <AiIcon class="me-1"> me-1 14 <li class="font-monospace"> font-monospace Done when No Bootstrap class is left in ErrorToastContainer.vue: none of the utilities above. The PR has before and after screenshots in light and dark mode, and the component looks the same. cd ui && npm run check:types && npm run test:unit && npm run lint && npm run check:ts-any passes.
ui/src/components/content/ProseImg.vue uses 2 Bootstrap utility classes. Bootstrap is being removed from the design system, so each one should become CSS written with the --ks-* tokens from ui/packages/design-system, in the component's existing <style scoped lang="scss"> block. Where Line Element Classes 2 <span class="text-center d-block img-block"> text-center, d-block Done when No Bootstrap class is left in ProseImg.vue: none of the utilities above. The PR has before and after screenshots in light and dark mode, and the component looks the same. cd ui && npm run check:types && npm run test:unit && npm run lint && npm run check:ts-any passes.
ui/src/components/content/CardLogos.vue uses 2 Bootstrap utility classes. Bootstrap is being removed from the design system, so each one should become CSS written with the --ks-* tokens from ui/packages/design-system, in the component's existing <style scoped lang="scss"> block. Where Line Element Classes 2 <div class="row card-group mb-4 pb-2"> mb-4, pb-2 Bootstrap's spacing steps stop matching the token steps after 2: -4 is --ks-spacing-5. So mb-4 takes var(--ks-spacing-5), not var(--ks-spacing-4). Also remove These Bootstrap names have no CSS behind them in Kestra, so they do nothing today: row (line 2), col-12 (lines 3, 20 and 37), col-sm-4 (lines 3, 20 and 37). Delete them, and if the layout needs what they were meant to do, write it as CSS. For the row/col* grid, use KsRow/KsCol instead. Done when No Bootstrap class is left in CardLogos.vue: none of the utilities above, and none of the names under Also remove. The PR has before and after screenshots in light and dark m
ui/src/components/admin/triggers/TriggersManage.vue uses 2 Bootstrap utility classes. Bootstrap is being removed from the design system, so each one should become CSS written with the --ks-* tokens from ui/packages/design-system, in the component's existing <style scoped lang="scss"> block. Where Line Element Classes 76 <LogsWrapper class="m-3"> m-3 91 <div class="text-nowrap"> text-nowrap Bootstrap's spacing steps stop matching the token steps after 2: -3 is --ks-spacing-4. So m-3 takes var(--ks-spacing-4), not var(--ks-spacing-3). Also remove These look like Bootstrap utilities but aren't Bootstrap 5 classes and have no rule anywhere: mr-1 (lines 241, 249, 257, 266 and 276). Delete them, and if the layout needs what they were meant to do, write it as CSS. Done when No Bootstrap class is left in TriggersManage.vue: none of the utilities above, and none of the names under Also remove. The PR has before and after screenshots in light and dark mode, and the component looks t
Top Java Repositories with Beginner Issues (20)
Updated Daily via GitHub GraphQLEOLANG, an Experimental Pure Object-Oriented Programming Language Based on 𝜑-Calculus
Eclipse OpenJ9: A Java Virtual Machine for OpenJDK that's optimized for small footprint, fast start-up, and high throughput. Builds on Eclipse OMR (https://github.com/eclipse/omr) and combines with the Extensions for OpenJDK for OpenJ9 repo.
Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus.
Digital logic design tool and simulator
Process Orchestration Framework
No repository description available.
Apache IoTDB
Multi-Agent Transport Simulation
CiviForm simplifies the application process for government benefits programs by re-using applicant data for multiple benefits applications. It's being developed by Google.org and Exygy, in collaboration with the City of Seattle and community contributors.
EventMesh is a new generation serverless event middleware for building distributed event-driven applications.
Apache Kafka® running on Kubernetes
Enterprise-grade, commercial-friendly agentic workflow platform for building next-generation SuperAgents.
Artemis - Interactive Learning with Automated Feedback
Dependency-Track is an intelligent Component Analysis platform that allows organizations to identify and reduce risk in the software supply chain.
The world's fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.
Flutter Plugin for IntelliJ
Wynntils (Artemis) is a rewrite of Wynntils in 1.21.11 using Architectury, to support Fabric and Forge.
Free and Open Source, Distributed, RESTful Search Engine
Open source IaC Automation and Collaboration Software.
A blazingly fast multi-language serialization framework for idiomatic domain objects, schema IDL, and cross-language data exchange.
How to make your first Java open-source pull request
Finding approachable Good First Issues in Java 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 Java
Free weekly email, scoped to Java. No account needed - confirm once and unsubscribe anytime.