{"id":48884635,"url":"https://github.com/charliesbot/leetkick","last_synced_at":"2026-04-16T04:10:11.776Z","repository":{"id":305600184,"uuid":"1023310704","full_name":"charliesbot/leetkick","owner":"charliesbot","description":"A modern TypeScript CLI tool for scaffolding LeetCode exercises with language-specific testing setups.","archived":false,"fork":false,"pushed_at":"2025-08-24T01:02:45.000Z","size":283,"stargazers_count":65,"open_issues_count":2,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-04T10:38:21.811Z","etag":null,"topics":["cli","leetcode"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/charliesbot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-21T01:01:09.000Z","updated_at":"2025-10-02T01:26:07.000Z","dependencies_parsed_at":"2025-08-04T04:19:11.403Z","dependency_job_id":"25e32277-778a-492a-8282-7d6c2a9b7d29","html_url":"https://github.com/charliesbot/leetkick","commit_stats":null,"previous_names":["charliesbot/leetkick"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/charliesbot/leetkick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charliesbot%2Fleetkick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charliesbot%2Fleetkick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charliesbot%2Fleetkick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charliesbot%2Fleetkick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/charliesbot","download_url":"https://codeload.github.com/charliesbot/leetkick/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charliesbot%2Fleetkick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31870558,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","leetcode"],"created_at":"2026-04-16T04:10:10.957Z","updated_at":"2026-04-16T04:10:11.766Z","avatar_url":"https://github.com/charliesbot.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LeetKick\n\nA modern CLI tool for scaffolding LeetCode exercises with language-specific testing setups. Fetch problems, auto-generate boilerplate, and start coding immediately!\n\n\u003e **🚧 Heads up!**  \n\u003e LeetKick is still pretty new and changing fast. Things might break between updates as I add support for more programming languages. Once it hits v1.0, it'll be much more stable!\n\n## Features\n\n- **Fetch problems directly from LeetCode** - no copy/paste needed\n- **Auto-scaffolding** - solution + test files generated instantly\n- **Clean organization** - problems organized by language and number\n- **Zero-config testing** - just run `leetkick test` from anywhere\n- **Smart problem matching** - run tests by number, slug, or name\n- **Multi-language support** - 8 languages supported, 10+ planned (goal: all LeetCode languages)\n\n## Quick Start\n\n```bash\n# Setup once\nleetkick init my-practice \u0026\u0026 cd my-practice\nleetkick add python    # or typescript, javascript, go, rust, kotlin, java, cpp\n\n# Use daily\nleetkick fetch two-sum --language python    # Auto-generates solution + test files\nleetkick test two-sum --language python     # Run tests instantly\n```\n\n**What you get:** Ready-to-code files with problem description, starter code, and test setup. No configuration needed!\n\n## Installation\n\n**Prerequisites:** Node.js 18+\n\n```bash\n# Install from npm (recommended)\nnpm install -g leetkick\n\n# Or build from source\ngit clone https://github.com/charliesbot/leetkick.git\ncd leetkick \u0026\u0026 npm install \u0026\u0026 npm run compile \u0026\u0026 npm link\n\n# Verify installation\nleetkick --help\n```\n\n## Language Support\n\nOur goal is to support all languages that LeetCode offers. Here's our current progress:\n\n| Language       | Status           | Testing Framework | Formatter    | Linter | Notes                           |\n| -------------- | ---------------- | ----------------- | ------------ | ------ | ------------------------------- |\n| **TypeScript** | ✅ **Supported** | Vitest            | Biome        | Biome  | Full support with type checking |\n| **C++**        | ✅ **Supported** | Catch2 (bundled)  | clang-format | —      | C++17 standard                  |\n| **Kotlin**     | ✅ **Supported** | JUnit 5 + Gradle  | —            | —      | Full Gradle integration         |\n| **Java**       | ✅ **Supported** | JUnit 5 + Gradle  | —            | —      | Full Gradle integration         |\n| **Go**         | ✅ **Supported** | Built-in testing  | —            | —      | Go 1.21+ with modules           |\n| **Rust**       | ✅ **Supported** | cargo test        | —            | —      | Rust 2021 edition               |\n| **Python**     | ✅ **Supported** | pytest            | ruff         | ruff   | Python 3.8+ with modern tooling |\n| **JavaScript** | ✅ **Supported** | Vitest            | Biome        | Biome  | ES Modules with modern tooling  |\n| **C**          | 🚧 **Planned**   | —                 | —            | —      | Coming soon                     |\n| **C#**         | 🚧 **Planned**   | —                 | —            | —      | Coming soon                     |\n| **Ruby**       | 🚧 **Planned**   | —                 | —            | —      | Coming soon                     |\n| **Swift**      | 🚧 **Planned**   | —                 | —            | —      | Coming soon                     |\n| **Scala**      | 🚧 **Planned**   | —                 | —            | —      | Coming soon                     |\n| **PHP**        | 🚧 **Planned**   | —                 | —            | —      | Coming soon                     |\n| **Dart**       | 🚧 **Planned**   | —                 | —            | —      | Coming soon                     |\n\n**Legend:**\n\n- ✅ **Supported** - Full integration with templates, testing, and tooling\n- 🚧 **Planned** - On our roadmap, contributions welcome!\n\nEach supported language workspace includes setup instructions, prerequisites, and testing guides in its own README.\n\n## Command Reference\n\n| Command                             | Purpose              | Example                                        |\n| ----------------------------------- | -------------------- | ---------------------------------------------- |\n| `init [dir]`                        | Create workspace     | `leetkick init my-practice`                    |\n| `add \u003clang\u003e`                        | Add language support | `leetkick add javascript`                      |\n| `fetch \u003cproblem\u003e --language \u003clang\u003e` | Get LeetCode problem | `leetkick fetch two-sum --language javascript` |\n| `test \u003cproblem\u003e --language \u003clang\u003e`  | Run tests            | `leetkick test 1 --language javascript`        |\n| `sync [lang]`                       | Update config files  | `leetkick sync --all --dry-run`                |\n| `help [cmd]`                        | Show help            | `leetkick help fetch`                          |\n\n### Advanced Features\n\n**Smart Problem Matching**\n\n```bash\nleetkick test 1 --language javascript           # By number\nleetkick test two-sum --language javascript     # By slug\nleetkick test problem_0001 --language javascript # By exact directory name\n```\n\n**Workspace Sync**\n\n```bash\nleetkick sync typescript          # Sync specific language\nleetkick sync --all              # Sync all languages  \nleetkick sync --dry-run          # Preview changes only\n```\n\n**Works Anywhere:** Run commands from any directory in your workspace  \n**Safe Overwrites:** CLI warns before overwriting existing solutions. Use `--force` to override  \n**Shortcuts:** Use `-l` instead of `--language`, `-f` instead of `--force`\n\n## Project Structure\n\nAfter using the CLI, your project will be organized by language:\n\n```\nyour-project/\n├── .leetkick.json            # Workspace configuration\n├── typescript/               # TypeScript workspace\n│   ├── problem_0001/\n│   │   ├── TwoSum.ts         # Your solution\n│   │   └── TwoSum.test.ts    # Test cases\n│   └── problem_0704/\n│       ├── BinarySearch.ts\n│       └── BinarySearch.test.ts\n├── cpp/                      # C++ workspace\n│   ├── problem_0001/\n│   │   ├── two_sum.cpp       # Your solution\n│   │   └── two_sum.test.cpp  # Test cases\n│   └── catch_amalgamated.hpp # Bundled testing framework\n├── kotlin/                   # Kotlin workspace\n│   ├── src/main/kotlin/      # Solutions\n│   │   └── problem0001/TwoSum.kt\n│   ├── src/test/kotlin/      # Tests\n│   │   └── problem0001/TwoSumTest.kt\n│   └── build.gradle.kts      # Gradle configuration\n├── go/                       # Go workspace\n│   ├── go.mod                # Module definition\n│   ├── problem_0001/         # Each problem is its own package\n│   │   ├── solution.go       # Solution\n│   │   └── solution_test.go  # Tests\n│   └── problem_0704/\n│       ├── solution.go\n│       └── solution_test.go\n├── python/                   # Python workspace\n│   ├── src/                  # Source code\n│   │   ├── problem_0001/\n│   │   │   └── two_sum.py    # Your solution\n│   │   └── problem_0704/\n│   │       └── binary_search.py\n│   ├── tests/                # Tests\n│   │   ├── problem_0001/\n│   │   │   └── test_two_sum.py\n│   │   └── problem_0704/\n│   │       └── test_binary_search.py\n│   ├── requirements.txt      # Dependencies\n│   └── pyproject.toml        # Configuration\n└── ...\n```\n\nEach language workspace includes all necessary configuration files, testing frameworks, and formatting rules.\n\n## What You Get\n\nEach problem generates solution and test files with:\n\n- Problem description and difficulty\n- LeetCode starter code\n- Test framework setup ready to use\n- Language-specific project structure\n\n**Workflow:** Implement solution → Add test cases → Run `leetkick test` → Success!\n\n## Troubleshooting\n\n**Installation Issues:**\n\n- Ensure Node.js 18+ is installed: `node --version`\n- Clear npm cache: `npm cache clean --force`\n- Use `npm install -g leetkick --force` to reinstall\n\n**Command Issues:**\n\n- Run `leetkick --help` to verify installation\n- Check you're in a leetkick workspace (contains `.leetkick.json`)\n- Use full problem names if short names don't work\n\n**Language Issues:**\n\n- Check language-specific README for setup instructions and prerequisites\n- Ensure required compilers/runtimes are installed\n\n**Update LeetKick:**\n\n```bash\nnpm update -g leetkick\nleetkick --version\n```\n\n---\n\n## Contributing\n\nWe'd love your contributions! Here's how to help:\n\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/awesome-feature`\n3. Make your changes following the existing code style\n4. Run tests: `npm test` and linting: `npm run lint`\n5. Submit a pull request\n\n### Development Setup\n\n```bash\ngit clone https://github.com/charliesbot/leetkick.git\ncd leetkick \u0026\u0026 npm install \u0026\u0026 npm run compile \u0026\u0026 npm link\n```\n\n**Commands:** `npm run compile` (build) | `npm test` (test) | `npm run lint` (style check)\n\n### Adding New Language Support\n\nAdd new language templates easily:\n\n1. Create `templates/\u003clanguage\u003e/` directory\n2. Add `exercise_template.*` and `test_template.*` files with placeholders\n3. Include config files (package.json, requirements.txt, etc.)\n4. CLI automatically discovers new languages!\n\n**Template placeholders:** `__PROBLEM_ID__`, `__PROBLEM_TITLE__`, `__PROBLEM_DESC__`, `__PROBLEM_DEFAULT_CODE__`, etc.\n\nSee existing templates in `templates/` for examples.\n\n## License\n\nMIT\n\n## Acknowledgments\n\n- Built with [Google TypeScript Style (gts)](https://github.com/google/gts)\n- Uses LeetCode's GraphQL API for problem fetching\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcharliesbot%2Fleetkick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcharliesbot%2Fleetkick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcharliesbot%2Fleetkick/lists"}