Back to Explorer
Beginner Friendly Open-Source Rust

Good First Issues in Rust

Explore curated starter issues in high-scoring Rust 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 Rust 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
rtk-ai/rtk83,217 Tier A · 64 pts
#4577Opened today
rtk git log --format=<fmt> -z cuts the NUL-separated walk to 80 characters

rtk git log --format=<fmt> -z (and --oneline -z) prints the first record or two and then ..., because -z separates the records with NUL, so the whole walk is one line to RTK and the per-line truncation shortens it to 80 characters. Reproduced on develop 5eb0509 (rtk 0.49.0, git 2.53.0, LC_ALL=C), in a 60-commit repo: $ git log -50 --format=%H -z | wc -c 2050 $ rtk git log --format=%H -z | wc -c 81 $ rtk git log --format=%H -z | tr '\0' '|'; echo d0519d033405d415b7621c95f1c18a3d839ae7a8|1193c36a4b138862b563e8304c110a56a88d... $ git log -50 --format=%H -z > a; rtk git log --format=%H -z > b; cmp a b a b differ: char 78, line 1 $ rtk git log --format=%H | wc -lc # without -z the same walk is fine 50 2050 $ rtk git log --oneline -z | wc -c # same cut, at 80 characters 81 With a limit of the user's own (rtk git log -n 5 --format=%H -z) the cut moves to 120 characters, which is the wider width filter_log_output uses once the user named a limit. Expected: a NUL-separated w

buggood first issuearea:clipriority:medium
1
rtk-ai/rtk83,217 Tier A · 64 pts
#4572Opened today
discover: -p/--project filter is ignored when --all is set

Bug: rtk discover --all -p <project> ignores the -p filter Version rtk 1.0.0 (Homebrew) Expected behavior Per rtk discover --help, -p/--project <PATH> filters by substring match on the project path, regardless of whether -a/--all (scan all projects instead of just the current one) is also set. rtk discover --all -p <project-name> should therefore: scan all projects, but only keep sessions whose path contains <project-name>. Actual behavior With --all, the -p filter is completely ignored — the output is identical to a plain unfiltered --all run. Only without --all (which implicitly scans just the current project + substring filter) does the filter actually take effect. Reproduction # (1) unfiltered, all projects, 365 days rtk discover --all --since 365 # -> Scanned: 1082 sessions (last 365 days), 36111 Bash commands # (2) "filtered" to <project-name>, all projects, 365 days rtk discover --all -p <project-name> --since 365 # -> Scanned: 1082 sessions (last 365 days), 36110 Bash comman

bughelp wantedpriority:higharea:cli
1
PlasmaFAIR/fortitude211 Tier A · 67 pts
#758Opened today
Add agent skills example to the docs

For example: https://github.com/Cambridge-ICCS/ICCS-SKILLS/blob/main/skills/fortitude/SKILL.md This isn't something I've personally had much experience of, but I know Fortitude is already being used alongside AI-assisted development tools by various groups.

documentationgood first issueiccs-hacktoberfest
mxsm/rocketmq-rust1,528 Tier S · 75 pts
#11546Opened 1 day ago
[Refactor♻️] Rename ClusterRemotingBackend to ClusterBrokerRemotingAdapter

Target Code Affected Cargo packages: rocketmq-proxy-cluster and rocketmq-proxy. File checklist: File Change rocketmq-proxy-cluster/src/remoting.rs Rename the struct, inherent implementation, and ProxyRemotingRequestHandler implementation; clarify the type's adapter role. rocketmq-proxy-cluster/src/lib.rs Replace the crate-root export with ClusterBrokerRemotingAdapter. rocketmq-proxy/src/cluster.rs Replace the facade module's export with the new name. rocketmq-proxy/src/bootstrap.rs Update the feature-gated import and Cluster-mode constructor call. rocketmq-proxy-cluster/README.md Update the component name and describe how it implements ProxyRemotingRequestHandler through the cluster client. Problems ClusterRemotingBackend does not clearly express the type's responsibility. It implements ProxyRemotingRequestHandler using a shared RocketmqClusterClient: it translates queue lock/unlock requests into client operations, forwards supported commands to a named Broker, select

help wantedgood first issuerefactor♻️rust
rtk-ai/rtk83,217 Tier A · 64 pts
#4568Opened 1 day ago
Will the be support for Goose agent harness?

Goose is one of the most influential open-source agent harnesses. https://goose-docs.ai Can you support rtk init --agent goose to configure it?

enhancementhelp wantedpriority:lowarea:cli
1
mxsm/rocketmq-rust1,528 Tier S · 75 pts
#11545Opened 1 day ago
[Refactor♻️] Rename ProxyBrokerFacade to EmbeddedBroker

Target Code Affected Cargo packages: rocketmq-broker and rocketmq-proxy-local. File checklist: File Change rocketmq-broker/src/proxy_facade.rs Rename the struct and inherent implementation; update type and constructor documentation to describe the embedded Broker. rocketmq-broker/src/lib.rs Replace the crate-root export with EmbeddedBroker. rocketmq-proxy-local/src/local.rs Update the import, construction, owned/shared/borrowed type references, and helper signatures. rocketmq-broker/README.md Update the architecture description and public API table. rocketmq-broker/README-zh_cn.md Keep the Chinese architecture description and public API table aligned with the English README. resources/rocketmq-broker-architecture.svg Update the component label and accessibility description. Problems ProxyBrokerFacade does not clearly express the component's full responsibility. It owns a BrokerRuntime, a local-request TaskGroup, and startup state. It provides configuration-based con

help wantedgood first issuerefactor♻️rust
mxsm/rocketmq-rust1,528 Tier S · 75 pts
#11544Opened 1 day ago
[Refactor♻️] Rename LocalBrokerFacadeClient to LocalBrokerCommandGateway

Target Code Affected Cargo packages: rocketmq-proxy-local and rocketmq-proxy. File checklist: File Change rocketmq-proxy-local/src/local.rs Rename the struct and inherent implementation; update all service/adapter fields, constructor parameters, helper signatures, component-factory return types, imports, and test references that name the type. Add a brief description of its command-gateway role. rocketmq-proxy-local/src/lib.rs Replace the crate-root export with LocalBrokerCommandGateway. rocketmq-proxy/src/local.rs Replace the facade module's export with the new name. rocketmq-proxy/src/lib.rs Replace the crate-root export, preserving its local-mode feature gate. rocketmq-proxy-local/README.md Update the public-export list and briefly describe the gateway's role. Problems LocalBrokerFacadeClient does not clearly express this type's responsibility. It converts Proxy operations into LocalBrokerCommand requests, applies count/byte admission budgets and deadline/cancellat

help wantedgood first issuerefactor♻️rust
mxsm/rocketmq-rust1,528 Tier S · 75 pts
#11543Opened 1 day ago
[Refactor♻️] Rename LocalRemotingBackend to LocalBrokerRemotingAdapter

Target Code Affected Cargo packages: rocketmq-proxy-local and rocketmq-proxy. File checklist: File Change rocketmq-proxy-local/src/local.rs Rename the struct, inherent implementation, ProxyRemotingRequestHandler implementation, test import, and test construction. Add a brief description of the adapter's role. rocketmq-proxy-local/src/lib.rs Replace the crate-root export with LocalBrokerRemotingAdapter. rocketmq-proxy/src/local.rs Replace the facade module's export with the new name. rocketmq-proxy/src/lib.rs Update the crate-root export, preserving its local-mode feature gate. rocketmq-proxy/src/bootstrap.rs Update the gated import and the Local-mode adapter construction. rocketmq-proxy-local/README.md Update the public-export list. resources/proxy-architecture.svg Replace the component label with the new name and keep it readable within its box. Problems LocalRemotingBackend does not clearly describe this type's role. It implements ProxyRemotingRequestHandler by

help wantedgood first issuerefactor♻️rust
LargeModGames/spotatui1,474 Tier A · 68 pts
#848Opened 1 day ago
Show a short hint when the ALSA default device is missing

What A user on Discord pressed play and heard nothing. The playbar stayed on "Paused" and the status line showed this, cut off at the terminal edge: Audio backend failed: Audio Sink Error Connection Refused: <AlsaSink> Device default May be Invalid, Busy, or Already in The useful part only shows up in the log: ALSA function 'snd_pcm_open' failed with error 'No such file or directory (2)' That means ALSA has no default device at all. The usual cause is PipeWire without its ALSA bridge, and pipewire-alsa fixed it for them. "Connection Refused" is just librespot's generic label for any sink that fails to open, so the message points people the wrong way. There's also a way to pick another ALSA device, the SPOTATUI_STREAMING_AUDIO_DEVICE env var, but only an old CHANGELOG entry mentions it. What should happen instead: when the ALSA default device is missing, the status line says so in a short sentence that fits, and the docs have a "No sound" section that explains the fix and the env var.

documentationenhancementgood first issuerust
1
LargeModGames/spotatui1,474 Tier A · 68 pts
#844Opened 1 day ago
GUI: click a synced lyric line to jump there

What The GUI shows the lyrics of the playing song in two places: the Lyrics page (press l, or the Lyrics button in the player bar) and the full-screen Room (press r, then l). When the lyrics are synced, the current line lights up as the song plays. But the lines are plain text, so clicking one does nothing. To see it: Play a song that has synced lyrics. Press l to open the Lyrics page. Click a line further down. Nothing happens. The song keeps playing where it was. What should happen: clicking a synced line seeks the song to the start of that line, the same way clicking the seek bar does. Keyboard users can do it too: Tab reaches the lyrics once, on the line being sung, and Enter or Space seeks there. Only synced lyrics should be clickable. When the lyrics are not synced, the line times are only estimates (the Lyrics page says "These lyrics are not synced", the Room says "Timing estimated"), so a seek there would land in the wrong place. Those lines stay plain text. Arrow-key browsin

enhancementgood first issuejavascript
1
LargeModGames/spotatui1,474 Tier A · 68 pts
#843Opened 1 day ago
GUI: the seek and volume bars can't be dragged

What The GUI player bar has two thin sliders: the seek bar under the play button and the volume bar on the right. Right now they only react to a click and to the arrow keys. How to see it: Start the GUI with something playing (see "Done when" for a way to do this without Spotify). Press the mouse button on the seek bar and drag it sideways. Nothing moves while you drag. If you let go inside the bar, the song jumps to where you let go. If you let go outside the bar, nothing happens at all. Do the same on the volume bar. Same result. What should happen: While you drag either bar, its fill follows the pointer, even when the pointer leaves the bar. When you let go, the bar sends one value: one seek for the seek bar, one volume change for the volume bar. Nothing is sent while you drag. A plain click and the arrow keys keep working as they do today. The cause: Meter only has an onClick and an onKeyDown. It has no pointer handling at all. Where to look gui/src/Transport.tsx, Meter (lines

bugenhancementgood first issuejavascript
1
LargeModGames/spotatui1,474 Tier A · 68 pts
#842Opened 1 day ago
GUI: filter the playlists in Your Library

What The Your Library panel on the left of the GUI has no way to find one playlist. If you follow a lot of playlists, you scroll until you spot the one you want. The list page already has a Filter box (open any playlist and it sits next to the sort select). The sidebar doesn't have one. What should happen: a small filter box on its own row, right under the Playlists / Albums / Artists / Podcasts chips, shown while the Playlists shelf is open. Typing narrows the rows: Playlists match by name, for every source (Spotify, Local, Subsonic, Qobuz, YouTube, Apple Music, and the stations on Radio). Liked Songs, Recently played and Library health stay only when their title matches. Spotify folders flatten while you filter. You see matching playlists from inside closed folders too, with no indent and no folder rows. Clear the box and the folder tree comes back, with the same folders open as before. Matching ignores case and works word by word, like the list page's Filter: trip road matches "Roa

enhancementgood first issuejavascript
1
LargeModGames/spotatui1,474 Tier A · 68 pts
#841Opened 1 day ago
GUI: make the Shuffle button on Liked Songs and playlist pages work

What Open Liked Songs or any playlist in the GUI. Next to the big green Play button there's a Shuffle button. It's always greyed out, even when the list is full of songs. It was added as a placeholder and never wired up. To see it: Start the GUI (see "Done when" for how). From Your Library, open Liked Songs or a playlist. With Local Files, open a folder. Hover over the Shuffle icon next to Play, or click it. Nothing happens, because it's disabled. What should happen: clicking Shuffle plays the songs you see on the page in a random order. If you typed something in the Filter box, it shuffles only the matching rows, the same rows Play would use. All of this happens in the page. It picks a random order with a Fisher-Yates shuffle and sends the same "play this list of URIs" message that Play already sends after a sort or filter. No Rust change is needed. Shuffle uses the rows that are loaded when you click. You don't need to fetch anything first. Once the first page of Liked Songs or a S

enhancementgood first issuejavascript
1
rtk-ai/rtk83,217 Tier A · 64 pts
#4564Opened 1 day ago
feat: live view of hook rewrites during an agent session (`rtk showlive`)

Problem I've used RTK for a long time and have gotten a lot of friends and colleagues onto it. One thing I keep wanting: to see live which commands the hook is rewriting while a Claude Code session is running. Today I can check after the fact with rtk gain --history, but there is no way to follow it in real time. I also don't want RTK info shown inside Claude Code all the time (statusline, plugin, etc.). On top of that, our org's Claude Code marketplace only allows org-approved plugins/skills, so an in-agent integration isn't an option for us. A separate terminal I open only when I want to look is the ideal setup. Proposal A tail/follow style command, for example: rtk showlive # stream rewrites as they happen rtk showlive --command-only # only "original -> rewritten" rtk showlive --show-output # also print the filtered output the agent received Example output: 18:09:12 git status -> rtk git status 1.2 KB -> 140 B (-88%) 18:09:20 cargo tes

enhancementhelp wantedpriority:lowarea:cli
1
mxsm/rocketmq-rust1,528 Tier S · 75 pts
#11515Opened 1 day ago
[Refactor♻️] Rename FaultInjectingBackend to FaultInjectingKeyValueStore in Controller tests

Target Code rocketmq-controller/tests/controller_storage_faults.rs: the private FaultInjectingBackend test fixture, its inherent impl, its KeyValueStore impl, and all construction sites. There are 8 exact references in this single tracked file. The owning Cargo package is rocketmq-controller. Problems This fixture is an in-memory key-value store used by Controller durability tests. It stores string keys and byte values, can reject batch_put and write_batch with an injected storage error, and counts write_batch attempts. Tests use it to verify that failed persistence does not publish candidate state, votes, or log entries; its normal mode also supports reopen and incomplete-state scenarios. The suffix Backend does not describe the storage interface it implements. Rename the fixture to FaultInjectingKeyValueStore to make its key-value storage contract and controlled fault-injection role explicit. This is a small naming task suitable for a first contribution. Proposed Changes Rename Fa

help wantedgood first issuerefactor♻️rust
2
rtk-ai/rtk83,217 Tier A · 64 pts
#4559Opened 1 day ago
Proxies silently truncate output or redefine flags (grep -c/-l/-m, find, git status/show/log, docker images); rtk curl -o fails; no Windows hook mode

Summary We evaluated RTK (v0.29.0, Windows 10, Git Bash) for automatic prefixing of Claude Code bash commands via a PreToolUse hook (~14.6k commands/month). The evaluation failed on output integrity: several proxies silently truncate output or change flag semantics, which is unsafe when an LLM consumes the output as complete data. Findings (all reproduced on real workloads) 1. rtk grep redefines grep flags and silently truncates -c means "context-only" (native grep: count), -l means "max-len" (native: files-with-matches), -m means "total results cap" (native: per-file max-count). Defaults truncate to 50 results / 80 chars per line, silently. For agentic use this corrupts data: the model reads a truncated listing as complete. 2. Data loss in listing commands rtk find on a directory with 6,710 files returns a 10-line summary. rtk git status: 10 of 126 changed paths shown. rtk git show: emits a "truncated" marker; diff lines cut (+64 → +15). rtk git log without an explicit limit caps

bughelp wantedpriority:higharea:cli
2
vx-lang/Vx216 Tier A · 59 ptsPR #1745 In Progress
#1743Opened 1 day ago
symbol visibility

local and dso local with same name external symbols start with vx extern C keeps C semantics. See #1671

buggood first issuecodegen
rtk-ai/rtk83,217 Tier A · 64 pts
#4556Opened 1 day ago
RTK_PROXY_BIND is ignored by llm-proxy start and the agent launchers

Summary RTK_PROXY_BIND is documented in src/llm_proxy.rs as "the same variable the daemon itself reads" so the CLI and daemon agree on the port. In v1.0.0 only rtk llm-proxy status and rtk-proxy itself honor it. rtk llm-proxy start and the agent launchers (rtk claude, …) still hardcode DEFAULT_BIND, so moving the proxy off 8080 via the environment makes every launch fall back to unproxied. Reproduce Something else already listens on 127.0.0.1:8080. $ export RTK_PROXY_BIND=127.0.0.1:8580 $ rtk llm-proxy status not running (no proxy reachable at 127.0.0.1:8580) $ rtk llm-proxy start rtk: rtk-proxy did not become reachable on 127.0.0.1:8080 within 15s -- see ~/.config/rtk/llm-proxy/rtk-proxy.log $ rtk claude --version rtk: proxy unavailable (rtk-proxy did not become reachable on 127.0.0.1:8080 within 15s -- see ~/.config/rtk/llm-proxy/rtk-proxy.log) rtk: launching `claude` unproxied — API traffic will not be compressed. Install the daemon (rtk llm-proxy setup) to enable it. rtk-proxy

buggood first issuepriority:higharea:cli
1
mxsm/rocketmq-rust1,528 Tier S · 75 pts
#11507Opened 1 day ago
[Refactor♻️] Rename SqlPersistence to SqlDashboardStore in Web Dashboard

Target Code SqlPersistence in rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/sql_store.rs and its consumers in the standalone rocketmq-dashboard-web-backend package. Affected files (12): rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/audit_sql_store.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/backend.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/history_capacity_tests.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/history_lease_store.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/history_sql_store.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/history_sql_store_contract_tests.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/history_sql_store_docker_tests.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/history_sql_store

help wantedgood first issuerefactor♻️rust
mxsm/rocketmq-rust1,528 Tier S · 75 pts
#11506Opened 1 day ago
[Refactor♻️] Rename FilePersistence to FileDashboardStore in Web Dashboard

Target Code FilePersistence in rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/file_store.rs and its consumers in the standalone rocketmq-dashboard-web-backend package. Affected files (10): rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/audit_file_store.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/backend.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/environment_repository.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/file_store.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/history_capacity_tests.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/history_file_store.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/monitor_repository.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/session_file_store.rs rocketmq-dashboard/ro

help wantedgood first issuerefactor♻️rust
mxsm/rocketmq-rust1,528 Tier S · 75 pts
#11505Opened 1 day ago
[Refactor♻️] Rename PersistenceBackend to DashboardDataStore in Web Dashboard

Target Code The enum in rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/backend.rs and its consumers in the standalone rocketmq-dashboard-web-backend package. Affected files (10): rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/audit_repository.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/backend.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/contract_tests.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/environment_repository.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/history_repository.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/lease_repository.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/monitor_repository.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence/session_repository.rs rocketmq-dashboard/rocketmq-dashb

help wantedgood first issuerefactor♻️rust
mxsm/rocketmq-rust1,528 Tier S · 75 pts
#11504Opened 1 day ago
[Refactor♻️] Rename StorageBackend to StorageEngine in Web Dashboard

Target Code The persistence-engine selector enum in rocketmq-dashboard/rocketmq-dashboard-web/backend/src/model/config_model.rs and its corresponding TypeScript union in rocketmq-dashboard/rocketmq-dashboard-web/frontend/src/types/config.ts. Affected files (34): rocketmq-dashboard/rocketmq-dashboard-web/backend/src/api/health_api.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/api/router.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/bin/rocketmq-dashboard-storage.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/config/app_config.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/model/audit_model.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/model/config_model.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/model/dashboard_model.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/model/ops_model.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/src/persistence.rs rocketmq-dashboard/rocketmq-dashboard-web/backend/s

help wantedgood first issuerefactor♻️rust
2
mxsm/rocketmq-rust1,528 Tier S · 75 pts
#11503Opened 1 day ago
[Refactor♻️] Rename StorageBackend to KeyValueStore in rocketmq-controller

Target Code The public storage trait in rocketmq-controller/src/storage/mod.rs, its public re-export, concrete implementations, and OpenRaft consumers. Affected files (10): rocketmq-controller/src/lib.rs rocketmq-controller/src/openraft/log_store.rs rocketmq-controller/src/openraft/persistence/log_repository.rs rocketmq-controller/src/openraft/persistence/state_repository.rs rocketmq-controller/src/openraft/state_machine.rs rocketmq-controller/src/openraft/storage.rs rocketmq-controller/src/storage/file_backend.rs rocketmq-controller/src/storage/mod.rs rocketmq-controller/src/storage/rocksdb_backend.rs rocketmq-controller/tests/controller_storage_faults.rs Problems StorageBackend describes an implementation position rather than the interface's actual responsibility. Its contract is an asynchronous key-value store: string keys, byte values, prefix listing, atomic mixed batches, synchronization, and statistics. KeyValueStore expresses that contract and matches the existing Fi

help wantedgood first issuerefactor♻️rust
gitbutlerapp/grit544 Tier D · 16 pts
#1013Opened 1 day ago
grit commit cannot create an empty commit (no --allow-empty equivalent); fails with 'nothing to commit'

Kind: ux · Severity: low · Area: commit Steps to reproduce export GIT_AUTHOR_NAME=a GIT_AUTHOR_EMAIL=a@x GIT_COMMITTER_NAME=a GIT_COMMITTER_EMAIL=a@x mkdir e && cd e && grit init . && echo a > a && grit commit -m one grit commit -m empty grit commit --allow-empty -m empty Expected Some way to record a commit with the same tree as its parent (e.g. to trigger CI or mark a point in history); git offers commit --allow-empty and the resulting commit is valid. Actual grit commit -m empty -> 'error: nothing to commit — working tree clean' (exit 1). grit commit --allow-empty -> 'error: unexpected argument '--allow-empty' found' (exit 2). Mode-only commits (chmod +x then grit commit) work fine and match git's tree diff. Environment grit 0.5.8 (release installer), macOS 15.7 arm64, system git 2.52.0 Found by automated dogfooding (task #1553).

enhancementgood first issuepriority:p3factory:triaged
1
flxzt/rnote11,727 Tier A · 60 pts
#1873Opened 1 day ago
'US Letter' format pages exported to PDF are the wrong size

Describe the bug When I export a document with pages formatted as 'US Letter' (215.9 mm x 279.4 mm or 816x1056px @ 96dpi) as PDF and open in a PDF application or to be printed, the document properties say the size is "11.33 x 14.67 inch". While this is the correct ratio, it should be 8.5x11 inch. Even if I print from rnote, and I select print to file, I get a letter-sized 8.5 by 11 pdf. This isn't a huge issue because the printing dialog usually scales it, but this seems like a bug. To Reproduce Steps to reproduce the behavior: Format page as US Letter and apply. Export as PDF View document properties in a viewer application or file manager Expected behavior The size should be US Letter, 8.5 by 11 Console Output Run the app in the terminal with flatpak --env=RUST_LOG=rnote=debug --env=RUST_BACKTRACE=1 run com.github.flxzt.rnote and post the output. $ flatpak --env=RUST_LOG=rnote=debug --env=RUST_BACKTRACE=1 run com.github.flxzt.rnote 0.036528468s DEBUG rnote: .. tracing subscriber

buggood first issue
2
alacritty/alacritty65,821 Tier B · 51 pts
#9070Opened 1 day ago
Message-bar wrapping of UTF-8 text can trigger panic

Message::text truncates wrapped lines by byte index when wrapping lines (line.truncate(num_cols - button_len) alacritty/src/message_bar.rs:100-104. If this index does not align with a character boundary, alacritty crashes with a panic. message_bar.rs:78-86 demonstrates the correct approach to wrapping while accounting for double-width characters. e.g. for an error message, the string is "[ERROR] " (8 bytes) plus the message. If the terminal is 80 columns wide, and the message is two byte wide characters, the truncation index is 80 - 3 (button_len + CLOSE_BUTTON_PADDING), which does not fall on a character boundary. This command generates an example message-bar output that triggers the issue: alacritty msg config '"éééééééééééééééééééééééééééééééééééééééé"=1' Results in this crash: [14.385954529s] [ERROR] [alacritty_log_window_config] Unable to override option '"éééééééééééééééééééééééééééééééééééééééé"=1'

help wantedD - easyP - low
1
srothgan/claude-code-rust261 Tier A · 63 pts
#473Opened 1 day ago
[Bug]: The trust prompt does not show which directory it will trust

Description The trust screen is titled "Unknown Project" and never names the directory. Yes saves trust for the normalised absolute form of the start directory, which differs from the shell's directory when -C/--dir is used, so the user cannot see what they are agreeing to. Steps to Reproduce claude-rs -C /tmp/crs-untrusted-project (any untrusted directory). Read the prompt. Expected Behavior The prompt shows the absolute path Yes will save, wrapped rather than truncated on narrow terminals. Actual Behavior At 100x14: ┌Unknown Project──────────────────────────────────────────────────┐ │ Trust this project directory? │ Claude Rust will wait here until you choose whether to trust this workspace. │ │ Review the project before continuing if you are unsure. │ Choose Yes to continue or No to close Claude Rust. │ > Yes │ No The path appears only after the choice, in the f

type: buggood first issuehelp wantedarea: tui
srothgan/claude-code-rust261 Tier A · 63 pts
#472Opened 1 day ago
[Bug]: --dir and --bridge-script are not validated, so a bad path ends at the trust prompt or a "Bridge spawn failure"

Description Path arguments are checked only on use. A -C/--dir that is missing or a file still gets the trust prompt, saved trust, then a misleading SDK error. A missing --bridge-script exits 21 and suggests claude-rs doctor --strict, which passes: doctor checks the default script and takes no --bridge-script. Steps to Reproduce With a scratch CLAUDE_CONFIG_DIR: claude-rs -C /nonexistent/dir, choose Yes. claude-rs -C ./notes.txt (a file), choose Yes. claude-rs --bridge-script /nonexistent/bridge.js, then claude-rs doctor --strict Expected Behavior Each exits 2 with a usage error naming the argument; nothing is saved. Actual Behavior /nonexistent/dir is added to projects in .claude.json, then exit 22 with Connection failed: agent stream failed: Claude Code native binary at .../claude exists but failed to launch. and a libc-mismatch hint. An existing directory connects. error=ENOTDIR: not a directory, posix_spawn '.../claude', exit 22. Bridge spawn failure detail: bridge script doe

type: bughelp wantedarea: core
obi1kenobi/cargo-semver-checks1,693 Tier A · 67 pts
#1757Opened 1 day ago
New lint: replacing a public static with a const

Add a pub_static_became_const lint that matches a public baseline Static to a current Constant at the same public importable path. Replacing a public static with a const breaks downstream code that takes its raw address, even when the name, type, and value remain unchanged. Before: pub static VALUE: u32 = 0; After: pub const VALUE: u32 = 0; This downstream code compiles against the first version but fails against the second: fn main() { let _ = &raw const static_to_const::VALUE; } The compiler reports: error[E0745]: cannot take address of a temporary A static denotes a storage location. A const denotes a value, so this expression attempts to take the raw address of a temporary — which is not a valid operation.

A-lintC-enhancementE-help-wantedE-mentor
srothgan/claude-code-rust261 Tier A · 63 pts
#469Opened 1 day ago
[BUG]: Status rename fails before a fresh session is persisted

Description Status offers session renaming immediately after connecting, but the SDK's persisted-session rename API cannot find a fresh session yet. Composer /rename works through the live session. Steps to Reproduce Start claude-rs with a fresh session and wait for connection. Before sending a prompt or session command, open Status. Enter a session name and confirm. After the failure, run /rename example in the composer. Try renaming through Status again; the second attempt succeeds. Expected Behavior An available rename action should work. If persistence is required, explain that prerequisite and disable the action until it is met. Actual Behavior The first Status rename fails: failed to rename session: Session <id> not found in project directory for <cwd> Version Observed with Agent SDK 0.3.288 and bundled runtime 2.1.288. The app version was not recorded; reproduction on current main needs checking. Operating System Windows (x86_64) Solution Discussion Help wanted reproducing th

type: bughelp wantedstatus: discussionarea: tui
1

Top Rust Repositories with Beginner Issues (20)

Updated Daily via GitHub GraphQL
kmolan
multicalc-rust
kmolan/multicalc-rust
S•Elite
187·Rust

Scientific computing that fits on a microcontroller. Estimation, control, kinematics, Lie groups, calculus, autodiff and linear algebra in stable no_std Rust with no heap, no panics and no unsafe. Run the same code on your laptop and your Cortex-M0.

#autodiff#automatic-differentiation#cortex-m
87%
Merge Rate
3h
Review Time
85%
1st-Timers
32 GFI
Scorecard
h5i-dev
h5i
h5i-dev/h5i
S•Elite
761·Rust

An agent-native web security workspace. Find vulnerabilities through red-teaming. Formally verify properties of Rust codes in Lean 4.

#agentic-ai#agentic-workflow#ai-coding
91%
Merge Rate
3d
Review Time
78%
1st-Timers
11 GFI
Scorecard
mahkoh
jay
mahkoh/jay
S•Elite
712·Rust

A Wayland Compositor

#linux#rust#wayland
87%
Merge Rate
8h
Review Time
100%
1st-Timers
2 GFI
Scorecard
kairusds
Hachimi-Edge
kairusds/Hachimi-Edge
S•Elite
160·Rust

はちみーをなめると〜 Game enhancement and translation mod for Honse Game. Cutting edge.

82%
Merge Rate
7h
Review Time
57%
1st-Timers
1 GFI
Scorecard
mxsm
rocketmq-rust
mxsm/rocketmq-rust
S•Elite
1.5k·Rust

🚀 Apache RocketMQ built in Rust 🦀 — faster, safer, and more memory-efficient. Powering high-performance messaging for the AI era, with AI Agent, MCP, and AI-SRE capabilities.

#ai-sre#cloud-native#mcp
92%
Merge Rate
-
Review Time
50%
1st-Timers
12 GFI
Scorecard
Scille
parsec-cloud
Scille/parsec-cloud
S•Elite
311·Rust

Open source Dropbox-like file sharing with full client encryption !

#cloud#dropbox#file-sharing
89%
Merge Rate
20h
Review Time
100%
1st-Timers
2 GFI
Scorecard
apache
asyncband
apache/asyncband
S•Elite
279·Rust

This crate provides concurrency control and async coordination primitives that are runtime agnostic.

#asynchronous#futures#rust
72%
Merge Rate
3h
Review Time
38%
1st-Timers
7 GFI
Scorecard
mkbhardwas12
prismos-ai
mkbhardwas12/prismos-ai
S•EliteLow Sample
378·Rust

Local-first desktop AI: chat with your files, turn one line into a living 3D scene, investigate logs and harden configs. Runs on your laptop, works offline.

#ai#desktop-app#llm
86%
Merge Rate
5h
Review Time
100%
1st-Timers
8 GFI
Scorecard
orhun
git-cliff
orhun/git-cliff
S•Elite
12.2k·Rust

A highly customizable Changelog Generator that follows Conventional Commit specifications ⛰️

#changelog#changelog-generator#commit
82%
Merge Rate
<1h
Review Time
75%
1st-Timers
4 GFI
Scorecard
dirge-code
dirge
dirge-code/dirge
S•Elite
356·Rust

Dynamic Intent Resolution Grounding Engine

#agent#agentic-workflow#janet
96%
Merge Rate
8d
Review Time
85%
1st-Timers
5 GFI
Scorecard
ki-editor
ki-editor
ki-editor/ki-editor
S•Elite
984·Rust

ⵣ Ki Editor - Multi-cursor combinatoric modal editor.

88%
Merge Rate
14h
Review Time
100%
1st-Timers
1 GFI
Scorecard
UniClipboard
UniClipboard
UniClipboard/UniClipboard
S•Elite
1.9k·Rust

Real-time clipboard sync across all your devices — local-first, peer-to-peer, and end-to-end encrypted. No account. No cloud dependency. No central server.

#clipboard-manager#clipboardsync#cross-platform
91%
Merge Rate
-
Review Time
100%
1st-Timers
2 GFI
Scorecard
plabayo
rama
plabayo/rama
S•Elite
1.2k·Rust

modular service framework to move and transform network packets

#http#https#mitm
91%
Merge Rate
-
Review Time
67%
1st-Timers
3 GFI
Scorecard
kornia
kornia-rs
kornia/kornia-rs
S•Elite
731·Rust

🦀 Low-level 3D Computer Vision library in Rust

#computer-vision#deep-learning#image-processing
74%
Merge Rate
-
Review Time
75%
1st-Timers
44 GFI
Scorecard
vllm-project
agentic-api
vllm-project/agentic-api
S•Elite
313·Rust

Stateful API logic for agentic applications using vLLM

76%
Merge Rate
4h
Review Time
88%
1st-Timers
1 GFI
Scorecard
IngvarConsulting
unica
IngvarConsulting/unica
S•Elite
225·Rust

Unica (Ю́ника) — публичный плагин Codex и Claude Code для разработки на 1С:Предприятии.

#1c-enterprise#claude-code-plugin#codex-plugin
75%
Merge Rate
-
Review Time
80%
1st-Timers
4 GFI
Scorecard
lumen-oss
lux
lumen-oss/lux
S•Elite
1.0k·Rust

A luxurious package manager for Lua

#lua#luarocks#package-manager
90%
Merge Rate
-
Review Time
88%
1st-Timers
5 GFI
Scorecard
agent-of-empires
agent-of-empires
agent-of-empires/agent-of-empires
S•Elite
3.3k·Rust

Manage multiple Claude Code, OpenCode agents from either TUI or Web for easy access on mobile. Also supports Mistral Vibe, Codex CLI, Gemini CLI, Pi.dev, Copilot CLI, Factory Droid Coding.

#ai-coding#claude#claude-code
88%
Merge Rate
-
Review Time
76%
1st-Timers
3 GFI
Scorecard
servo
servo
servo/servo
S•Elite
38.1k·Rust

Servo aims to empower developers with a lightweight, high-performance alternative for embedding web technologies in applications.

#browser#rust#servo
83%
Merge Rate
-
Review Time
75%
1st-Timers
3 GFI
Scorecard
paradedb
paradedb
paradedb/paradedb
S•Elite
9.4k·Rust

One Postgres for your application data, full-text search, vector retrieval, and aggregations. Home of the pg_search extension.

#analytics#bm25#database
71%
Merge Rate
-
Review Time
53%
1st-Timers
17 GFI
Scorecard

How to make your first Rust open-source pull request

Finding approachable Good First Issues in Rust 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 Rust

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