Crystal good first issues

30 open Crystal issues currently match the default 10+ star filter. Scored difficulty: 5,946 at 1/5, 8,786 at 2/5, 12,696 at 3/5, 12,117 at 4/5, 857 at 5/5. This hub uses the same feed as the homepage, limited to repositories whose GitHub language is Crystal.

All languages · Browse projects · How to find good first issues

Active projects

Unique repos with open help-wanted issues updated in the last 30 days

Showing 30 of ~30 matching filters (Crystal · 10+ stars)

List
kemalcr/kemal

HTTP/2 Support

AI summary

This issue proposes adding experimental HTTP/2 support to the Kemal web framework. While Crystal's standard HTTP server defaults to HTTP/1.1, HTTP/2 offers significant performance benefits. The issue highlights an existing native HTTP/2 implementation for Crystal and provides a working example, though it notes a current limitation in the `http2` shard.

help wanted
3.9K
Difficulty
3/5

Remove always-true `match.size > 0` guards in `koa.cr`

AI summary

This issue proposes removing redundant `match.size > 0` checks within the `koa.cr` analyzer. These checks are always true because `Regex::MatchData#size` will always be at least 1, as demonstrated by the provided example. The goal is to simplify the code by deleting these unnecessary guards without altering the output of endpoint and parameter extraction.

🔬 analyzergood first issue
1.3K
Difficulty
1/5

Rename `golang_spec.cr` to match the `*_lexer_spec.cr` naming in minilexer/

AI summary

This issue proposes renaming the `golang_spec.cr` file to `golang_lexer_spec.cr` to align with the naming convention of other lexer specification files within the `spec/unit_test/minilexer/` directory. The goal is to maintain consistency and alphabetical ordering with other spec files, without altering the source file or its require paths.

💊 spec🥢 mini-lexergood first issue
1.3K
Difficulty
1/5

Remove always-true `match.size > 0` guards in `express.cr`

AI summary

This issue proposes removing redundant `match.size > 0` checks within the `express.cr` file. These checks are always true because `Regex::MatchData#size` will always be at least 1. The task involves deleting these unnecessary guards and adjusting the code structure accordingly, ensuring no functional changes to endpoint or parameter output.

🔬 analyzergood first issue
1.3K
Difficulty
1/5

Remove always-true `match.size > 0` guards in `restify.cr`

AI summary

This issue proposes removing redundant `match.size > 0` checks in the `restify.cr` file. These checks are always true because `Regex::MatchData#size` will always be at least 1, as it includes the full match. The goal is to simplify the code without changing its functionality or output.

🔬 analyzergood first issue
1.3K
Difficulty
1/5

[Bug] HMooneyPot alias

AI summary

The user wants to add 'HMooneyPot' as an alias for 'Invidious' within the `src/invidious.cr` file. This change is considered potentially difficult due to its impact on a core file and has a bounty attached.

buggood first issuebountybounty:50$
20.8K
Difficulty
3/5

Proper implementation of `sslmode=verify-full`

AI summary

This issue proposes implementing `sslmode=verify-full` for database connections, particularly for users connecting to Azure and CockroachLabs databases using the `cleartext` authentication method. The goal is to enhance security by ensuring full SSL certificate verification for these common use cases.

help wanted
480
Difficulty
3/5

Large (~13.8kb) HTTP gzip responses aren't decompressed

AI summary

A bug report indicates that Crystal's HTTP client fails to automatically decompress gzip responses larger than approximately 13.8kb. The issue occurs when the server sends a gzipped response, and the client expects automatic decompression, but instead receives raw binary data for larger payloads.

help wantedtopic:stdlib:networking
20.3K
Difficulty
3/5

Add a functional tester for the Vercel specification analyzer

AI summary

This issue requests the addition of a functional tester for the Vercel specification analyzer. Currently, Vercel is the only analyzer lacking an end-to-end functional test, which verifies the detector, analyzer, and endpoint list on a real `vercel.json` file. The task involves creating a new fixture file and a corresponding tester file, modeled after existing Netlify tests.

💊 specgood first issue
1.3K
Difficulty
2/5

Use `unless x.nil?` instead of `if !x.nil?` at the six remaining plain sites

AI summary

This issue requests a code refactoring to replace `if !x.nil?` with the more idiomatic `unless x.nil?` in six specific locations within the codebase. This change is a straightforward syntactic improvement and does not alter the program's logic or behavior. The issue explicitly excludes compound conditions and `elsif` statements from this task.

💡 enhancementgood first issue
1.3K
Difficulty
1/5

Add a spec for the shared `PrefixScope.prefix_covers?` tagger helper

AI summary

This issue proposes adding a dedicated unit test for the `prefix_covers?` helper function within the `PrefixScope` module. Currently, this function's behavior is only tested indirectly through its usage in various framework taggers. The goal is to create a standalone spec file to directly verify its logic, particularly its handling of edge cases like partial string matches.

💊 specgood first issue
1.3K
Difficulty
1/5

Add the four missing `--set-pvalue-*` rows to the v1 flag-consolidation table

AI summary

This issue requests the addition of four missing rows to a documentation table that maps v1 CLI flags to their v0 equivalents. The missing rows pertain to the `--pvalue` family of flags, specifically for the `cookie`, `form`, `json`, and `path` types, which are currently not documented in the flag consolidation table.

📑 documentationgood first issue
1.3K
Difficulty
1/5

Document the `--no-spinner` flag in the Running page flag table

AI summary

This issue requests the documentation of the `--no-spinner` flag for the `noir scan` command. The flag is functional but missing from the "Running" page's flag table on the documentation site. The task involves adding a new row for this flag to the English and Korean versions of the "Running" page's flag table.

📑 documentationgood first issue
1.3K
Difficulty
1/5

Use `Hash#has_value?` instead of `.values.includes?` in the JS and Ktor extractors

AI summary

This issue proposes replacing inefficient `Hash#values.includes?` calls with the more performant `Hash#has_value?` method in the JavaScript and Ktor extractors. This change aims to optimize performance by avoiding unnecessary array allocations within loops, as `Hash#has_value?` provides a direct and efficient way to check for value existence. The issue explicitly excludes one instance where `region.values` is an Array, for which `.includes?` is the correct method.

💡 enhancementgood first issue
1.3K
Difficulty
1/5

`Token#to_s` rewrites the token’s own `value` as a side effect

AI summary

The `Token#to_s` method currently modifies the token's internal `@value` by escaping newlines and tabs, which is an unintended side effect for a formatting method. The fix involves computing the display form locally without altering the original `@value` and adopting the idiomatic Crystal `to_s(io)` signature.

🐞 buggood first issue
1.3K
Difficulty
2/5

Move the php / csharp mini-lexer specs into spec/unit_test/minilexer/

AI summary

This issue proposes to correct the location of two spec files for PHP and C# lexers. Currently, `php_lexer_spec.cr` and `csharp_lexer_spec.cr` are located in `spec/unit_test/miniparser/` instead of the correct `spec/unit_test/minilexer/` directory, following the project's structure convention. The fix involves a simple file move using `git mv`, with no changes required to the `require` statements within the files.

💊 specgood first issue
1.3K
Difficulty
1/5

Remove the dead 93-line extract_handler_params_from_content in the restify JS analyzer

AI summary

This issue proposes the removal of a 93-line dead code method, `extract_handler_params_from_content`, from the Restify JavaScript analyzer in `src/analyzer/analyzers/javascript/restify.cr`. The method is defined but never called, and its only potential caller is in a separate Express analyzer class. The issue also notes a subtle bug in the dead code related to regex matching.

🔬 analyzergood first issue
1.3K
Difficulty
1/5

Remove three dead private methods left behind in the C# ASP.NET Core MVC analyzer

AI summary

This issue involves removing three unused private methods from the C# ASP.NET Core MVC analyzer. These methods were superseded by changes made when Minimal API support was extracted into a separate file and are no longer called by any active code. The task is to delete these specific methods without altering other parts of the codebase.

🔬 analyzergood first issue
1.3K
Difficulty
1/5

Introduce Analyzer::Clojure::Helper for the four s-expression scanners duplicated across all five Clojure analyzers

AI summary

This issue proposes refactoring duplicated s-expression scanning logic across five Clojure analyzers into a single `Analyzer::Clojure::Helper` module. The goal is to eliminate redundant code by creating a shared helper file and updating the existing analyzers to use it, ensuring functional parity.

🔬 analyzergood first issue
1.3K
Difficulty
2/5

[Enhancement] Removal of unused/duplicated code.

AI summary

This enhancement issue proposes the removal of unused and duplicated code within the Invidious codebase. The reporter has identified specific examples of unused variables, functions, and arguments that can be safely deleted without impacting functionality.

enhancementgood first issue
20.8K
Difficulty
1/5

Refresh the stale language / framework counts in README and on the docs site

AI summary

This issue requires updating outdated language and framework counts in the project's README and documentation. The current numbers are significantly stale, and the task involves regenerating the authoritative list, recounting the supported technologies, and then updating all instances across the documentation and README files to reflect the accurate, current figures.

📑 documentationgood first issue
1.3K
Difficulty
2/5

Consolidate the duplicated Python extract_python_string into Analyzer::Python::Helper

AI summary

This issue proposes consolidating seven duplicated private methods named `extract_python_string` across different Python analyzers into a single method within the `Analyzer::Python::Helper` module. The goal is to reduce code duplication and improve maintainability by having a single source of truth for this functionality.

🔬 analyzergood first issue
1.3K
Difficulty
1/5

Add unit specs for Noir::ScalaLexer

AI summary

This issue requests the addition of unit tests for the Noir::ScalaLexer. Currently, only two out of five mini-lexers have dedicated unit tests, and the Scala lexer is only indirectly tested. The goal is to create a new spec file for the Scala lexer, mirroring the structure of existing tests and covering its public methods with various test cases, including specific edge cases related to Scala syntax.

💊 spec🥢 mini-lexergood first issue
1.3K
Difficulty
3/5

CLI ERROR messages are colorized yellow, the same as WARNING

AI summary

This issue reports that CLI error messages are being colorized yellow, making them indistinguishable from warning messages. The fix involves changing the colorization of specific error messages from yellow to red to align with the established color convention for errors.

⚙️ optionsgood first issue
1.3K
Difficulty
1/5

Use idiomatic .empty? instead of .size == 0 / .size != 0

AI summary

This issue proposes to replace instances of `.size == 0` and `.size != 0` with the more idiomatic `.empty?` and `!empty?` respectively in the codebase. The change applies to `String` and `Array` types and is a straightforward refactoring with no behavioral changes.

💡 enhancementgood first issue
1.3K
Difficulty
1/5

Document --export-opensearch, --export-webhook and --tls-skip-verify on the Deliver page

AI summary

This issue requests documentation updates for the Noir CLI's export and webhook flags. Specifically, it asks to add `--export-opensearch`, `--export-webhook`, and `--tls-skip-verify` to the 'Deliver Results to Other Tools' page, including a flag table and usage examples. The documentation should also clarify the purpose and security implications of `--tls-skip-verify`.

📑 documentationgood first issue
1.3K
Difficulty
2/5

Also browsing: Python , TypeScript , JavaScript