[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-71912":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},71912,"gitingest","coderamp-labs\u002Fgitingest","coderamp-labs","Replace 'hub' with 'ingest' in any GitHub URL to get a prompt-friendly extract of a codebase ","https:\u002F\u002Fgitingest.com",null,"Python",14864,1105,51,5,0,28,70,227,84,119.13,"MIT License",false,"main",true,[27,28,29,30],"ai","code","developer-tool","ingestion","2026-06-12 04:01:02","# Gitingest\n\n[![Screenshot of Gitingest front page](https:\u002F\u002Fraw.githubusercontent.com\u002Fcoderamp-labs\u002Fgitingest\u002Frefs\u002Fheads\u002Fmain\u002Fdocs\u002Ffrontpage.png)](https:\u002F\u002Fgitingest.com)\n\n\u003C!-- Badges -->\n\u003C!-- markdownlint-disable MD033 -->\n\u003Cp align=\"center\">\n  \u003C!-- row 1 — install & compat -->\n  \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fgitingest\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fgitingest.svg\" alt=\"PyPI\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fgitingest\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fgitingest.svg\" alt=\"Python Versions\">\u003C\u002Fa>\n  \u003Cbr>\n  \u003C!-- row 2 — quality & community -->\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcoderamp-labs\u002Fgitingest\u002Factions\u002Fworkflows\u002Fci.yml?query=branch%3Amain\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fcoderamp-labs\u002Fgitingest\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg?branch=main\" alt=\"CI\">\u003C\u002Fa>\n\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https:\u002F\u002Fraw.githubusercontent.com\u002Fastral-sh\u002Fruff\u002Fmain\u002Fassets\u002Fbadge\u002Fv2.json\" alt=\"Ruff\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fscorecard.dev\u002Fviewer\u002F?uri=github.com\u002Fcoderamp-labs\u002Fgitingest\">\u003Cimg src=\"https:\u002F\u002Fapi.scorecard.dev\u002Fprojects\u002Fgithub.com\u002Fcoderamp-labs\u002Fgitingest\u002Fbadge\" alt=\"OpenSSF Scorecard\">\u003C\u002Fa>\n  \u003Cbr>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcoderamp-labs\u002Fgitingest\u002Fblob\u002Fmain\u002FLICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fcoderamp-labs\u002Fgitingest.svg\" alt=\"License\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fpepy.tech\u002Fproject\u002Fgitingest\">\u003Cimg src=\"https:\u002F\u002Fpepy.tech\u002Fbadge\u002Fgitingest\" alt=\"Downloads\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcoderamp-labs\u002Fgitingest\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fcoderamp-labs\u002Fgitingest\" alt=\"GitHub Stars\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdiscord.com\u002Finvite\u002FzerRaGK9EC\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-Join_chat-5865F2?logo=discord&logoColor=white\" alt=\"Discord\">\u003C\u002Fa>\n  \u003Cbr>\n  \u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F13519\">\u003Cimg src=\"https:\u002F\u002Ftrendshift.io\u002Fapi\u002Fbadge\u002Frepositories\u002F13519\" alt=\"Trendshift\" height=\"50\">\u003C\u002Fa>\n\u003C\u002Fp>\n\u003C!-- markdownlint-enable MD033 -->\n\nTurn any Git repository into a prompt-friendly text ingest for LLMs.\n\nYou can also replace `hub` with `ingest` in any GitHub URL to access the corresponding digest.\n\n\u003C!-- Extensions -->\n[gitingest.com](https:\u002F\u002Fgitingest.com) · [Chrome Extension](https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Fadfjahbijlkjfoicpjkhjicpjpjfaood) · [Firefox Add-on](https:\u002F\u002Faddons.mozilla.org\u002Ffirefox\u002Faddon\u002Fgitingest)\n\n\u003C!-- Languages -->\n[Deutsch](https:\u002F\u002Fwww.readme-i18n.com\u002Fcoderamp-labs\u002Fgitingest?lang=de) |\n[Español](https:\u002F\u002Fwww.readme-i18n.com\u002Fcoderamp-labs\u002Fgitingest?lang=es) |\n[Français](https:\u002F\u002Fwww.readme-i18n.com\u002Fcoderamp-labs\u002Fgitingest?lang=fr) |\n[日本語](https:\u002F\u002Fwww.readme-i18n.com\u002Fcoderamp-labs\u002Fgitingest?lang=ja) |\n[한국어](https:\u002F\u002Fwww.readme-i18n.com\u002Fcoderamp-labs\u002Fgitingest?lang=ko) |\n[Português](https:\u002F\u002Fwww.readme-i18n.com\u002Fcoderamp-labs\u002Fgitingest?lang=pt) |\n[Русский](https:\u002F\u002Fwww.readme-i18n.com\u002Fcoderamp-labs\u002Fgitingest?lang=ru) |\n[中文](https:\u002F\u002Fwww.readme-i18n.com\u002Fcoderamp-labs\u002Fgitingest?lang=zh)\n\n## 🚀 Features\n\n- **Easy code context**: Get a text digest from a Git repository URL or a directory\n- **Smart Formatting**: Optimized output format for LLM prompts\n- **Statistics about**:\n  - File and directory structure\n  - Size of the extract\n  - Token count\n- **CLI tool**: Run it as a shell command\n- **Python package**: Import it in your code\n\n## 📚 Requirements\n\n- Python 3.8+\n- For private repositories: A GitHub Personal Access Token (PAT). [Generate your token **here**!](https:\u002F\u002Fgithub.com\u002Fsettings\u002Ftokens\u002Fnew?description=gitingest&scopes=repo)\n\n### 📦 Installation\n\nGitingest is available on [PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fgitingest\u002F).\nYou can install it using `pip`:\n\n```bash\npip install gitingest\n```\n\nor\n\n```bash\npip install gitingest[server]\n```\n\nto include server dependencies for self-hosting.\n\nHowever, it might be a good idea to use `pipx` to install it.\nYou can install `pipx` using your preferred package manager.\n\n```bash\nbrew install pipx\napt install pipx\nscoop install pipx\n...\n```\n\nIf you are using pipx for the first time, run:\n\n```bash\npipx ensurepath\n```\n\n```bash\n# install gitingest\npipx install gitingest\n```\n\n## 🧩 Browser Extension Usage\n\n\u003C!-- markdownlint-disable MD033 -->\n\u003Ca href=\"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Fadfjahbijlkjfoicpjkhjicpjpjfaood\" target=\"_blank\" title=\"Get Gitingest Extension from Chrome Web Store\">\u003Cimg height=\"48\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F20a6e44b-fd46-4e6c-8ea6-aad436035753\" alt=\"Available in the Chrome Web Store\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Faddons.mozilla.org\u002Ffirefox\u002Faddon\u002Fgitingest\" target=\"_blank\" title=\"Get Gitingest Extension from Firefox Add-ons\">\u003Cimg height=\"48\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fc0e99e6b-97cf-4af2-9737-099db7d3538b\" alt=\"Get The Add-on for Firefox\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fmicrosoftedge.microsoft.com\u002Faddons\u002Fdetail\u002Fnfobhllgcekbmpifkjlopfdfdmljmipf\" target=\"_blank\" title=\"Get Gitingest Extension from Microsoft Edge Add-ons\">\u003Cimg height=\"48\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F204157eb-4cae-4c0e-b2cb-db514419fd9e\" alt=\"Get from the Edge Add-ons\" \u002F>\u003C\u002Fa>\n\u003C!-- markdownlint-enable MD033 -->\n\nThe extension is open source at [lcandy2\u002Fgitingest-extension](https:\u002F\u002Fgithub.com\u002Flcandy2\u002Fgitingest-extension).\n\nIssues and feature requests are welcome to the repo.\n\n## 💡 Command line usage\n\nThe `gitingest` command line tool allows you to analyze codebases and create a text dump of their contents.\n\n```bash\n# Basic usage (writes to digest.txt by default)\ngitingest \u002Fpath\u002Fto\u002Fdirectory\n\n# From URL\ngitingest https:\u002F\u002Fgithub.com\u002Fcoderamp-labs\u002Fgitingest\n\n# or from specific subdirectory\ngitingest https:\u002F\u002Fgithub.com\u002Fcoderamp-labs\u002Fgitingest\u002Ftree\u002Fmain\u002Fsrc\u002Fgitingest\u002Futils\n```\n\nFor private repositories, use the `--token\u002F-t` option.\n\n```bash\n# Get your token from https:\u002F\u002Fgithub.com\u002Fsettings\u002Fpersonal-access-tokens\ngitingest https:\u002F\u002Fgithub.com\u002Fusername\u002Fprivate-repo --token github_pat_...\n\n# Or set it as an environment variable\nexport GITHUB_TOKEN=github_pat_...\ngitingest https:\u002F\u002Fgithub.com\u002Fusername\u002Fprivate-repo\n\n# Include repository submodules\ngitingest https:\u002F\u002Fgithub.com\u002Fusername\u002Frepo-with-submodules --include-submodules\n```\n\nBy default, files listed in `.gitignore` are skipped. Use `--include-gitignored` if you\nneed those files in the digest.\n\nBy default, the digest is written to a text file (`digest.txt`) in your current working directory. You can customize the output in two ways:\n\n- Use `--output\u002F-o \u003Cfilename>` to write to a specific file.\n- Use `--output\u002F-o -` to output directly to `STDOUT` (useful for piping to other tools).\n\nSee more options and usage details with:\n\n```bash\ngitingest --help\n```\n\n## 🐍 Python package usage\n\n```python\n# Synchronous usage\nfrom gitingest import ingest\n\nsummary, tree, content = ingest(\"path\u002Fto\u002Fdirectory\")\n\n# or from URL\nsummary, tree, content = ingest(\"https:\u002F\u002Fgithub.com\u002Fcoderamp-labs\u002Fgitingest\")\n\n# or from a specific subdirectory\nsummary, tree, content = ingest(\"https:\u002F\u002Fgithub.com\u002Fcoderamp-labs\u002Fgitingest\u002Ftree\u002Fmain\u002Fsrc\u002Fgitingest\u002Futils\")\n```\n\nFor private repositories, you can pass a token:\n\n```python\n# Using token parameter\nsummary, tree, content = ingest(\"https:\u002F\u002Fgithub.com\u002Fusername\u002Fprivate-repo\", token=\"github_pat_...\")\n\n# Or set it as an environment variable\nimport os\nos.environ[\"GITHUB_TOKEN\"] = \"github_pat_...\"\nsummary, tree, content = ingest(\"https:\u002F\u002Fgithub.com\u002Fusername\u002Fprivate-repo\")\n\n# Include repository submodules\nsummary, tree, content = ingest(\"https:\u002F\u002Fgithub.com\u002Fusername\u002Frepo-with-submodules\", include_submodules=True)\n```\n\nBy default, this won't write a file but can be enabled with the `output` argument.\n\n```python\n# Asynchronous usage\nfrom gitingest import ingest_async\nimport asyncio\n\nresult = asyncio.run(ingest_async(\"path\u002Fto\u002Fdirectory\"))\n```\n\n### Jupyter notebook usage\n\n```python\nfrom gitingest import ingest_async\n\n# Use await directly in Jupyter\nsummary, tree, content = await ingest_async(\"path\u002Fto\u002Fdirectory\")\n\n```\n\nThis is because Jupyter notebooks are asynchronous by default.\n\n## 🐳 Self-host\n\n### Using Docker\n\n1. Build the image:\n\n   ``` bash\n   docker build -t gitingest .\n   ```\n\n2. Run the container:\n\n   ``` bash\n   docker run -d --name gitingest -p 8000:8000 gitingest\n   ```\n\nThe application will be available at `http:\u002F\u002Flocalhost:8000`.\n\nIf you are hosting it on a domain, you can specify the allowed hostnames via env variable `ALLOWED_HOSTS`.\n\n   ```bash\n   # Default: \"gitingest.com, *.gitingest.com, localhost, 127.0.0.1\".\n   ALLOWED_HOSTS=\"example.com, localhost, 127.0.0.1\"\n   ```\n\n### Environment Variables\n\nThe application can be configured using the following environment variables:\n\n- **ALLOWED_HOSTS**: Comma-separated list of allowed hostnames (default: \"gitingest.com, *.gitingest.com, localhost, 127.0.0.1\")\n- **GITINGEST_METRICS_ENABLED**: Enable Prometheus metrics server (set to any value to enable)\n- **GITINGEST_METRICS_HOST**: Host for the metrics server (default: \"127.0.0.1\")\n- **GITINGEST_METRICS_PORT**: Port for the metrics server (default: \"9090\")\n- **GITINGEST_SENTRY_ENABLED**: Enable Sentry error tracking (set to any value to enable)\n- **GITINGEST_SENTRY_DSN**: Sentry DSN (required if Sentry is enabled)\n- **GITINGEST_SENTRY_TRACES_SAMPLE_RATE**: Sampling rate for performance data (default: \"1.0\", range: 0.0-1.0)\n- **GITINGEST_SENTRY_PROFILE_SESSION_SAMPLE_RATE**: Sampling rate for profile sessions (default: \"1.0\", range: 0.0-1.0)\n- **GITINGEST_SENTRY_PROFILE_LIFECYCLE**: Profile lifecycle mode (default: \"trace\")\n- **GITINGEST_SENTRY_SEND_DEFAULT_PII**: Send default personally identifiable information (default: \"true\")\n- **S3_ALIAS_HOST**: Public URL\u002FCDN for accessing S3 resources (default: \"127.0.0.1:9000\u002Fgitingest-bucket\")\n- **S3_DIRECTORY_PREFIX**: Optional prefix for S3 file paths (if set, prefixes all S3 paths with this value)\n\n### Using Docker Compose\n\nThe project includes a `compose.yml` file that allows you to easily run the application in both development and production environments.\n\n#### Compose File Structure\n\nThe `compose.yml` file uses YAML anchoring with `&app-base` and `\u003C\u003C: *app-base` to define common configuration that is shared between services:\n\n```yaml\n# Common base configuration for all services\nx-app-base: &app-base\n  build:\n    context: .\n    dockerfile: Dockerfile\n  ports:\n    - \"${APP_WEB_BIND:-8000}:8000\"  # Main application port\n    - \"${GITINGEST_METRICS_HOST:-127.0.0.1}:${GITINGEST_METRICS_PORT:-9090}:9090\"  # Metrics port\n  # ... other common configurations\n```\n\n#### Services\n\nThe file defines three services:\n\n1. **app**: Production service configuration\n   - Uses the `prod` profile\n   - Sets the Sentry environment to \"production\"\n   - Configured for stable operation with `restart: unless-stopped`\n\n2. **app-dev**: Development service configuration\n   - Uses the `dev` profile\n   - Enables debug mode\n   - Mounts the source code for live development\n   - Uses hot reloading for faster development\n\n3. **minio**: S3-compatible object storage for development\n   - Uses the `dev` profile (only available in development mode)\n   - Provides S3-compatible storage for local development\n   - Accessible via:\n     - API: Port 9000 ([localhost:9000](http:\u002F\u002Flocalhost:9000))\n     - Web Console: Port 9001 ([localhost:9001](http:\u002F\u002Flocalhost:9001))\n   - Default admin credentials:\n     - Username: `minioadmin`\n     - Password: `minioadmin`\n   - Configurable via environment variables:\n     - `MINIO_ROOT_USER`: Custom admin username (default: minioadmin)\n     - `MINIO_ROOT_PASSWORD`: Custom admin password (default: minioadmin)\n   - Includes persistent storage via Docker volume\n   - Auto-creates a bucket and application-specific credentials:\n     - Bucket name: `gitingest-bucket` (configurable via `S3_BUCKET_NAME`)\n     - Access key: `gitingest` (configurable via `S3_ACCESS_KEY`)\n     - Secret key: `gitingest123` (configurable via `S3_SECRET_KEY`)\n   - These credentials are automatically passed to the app-dev service via environment variables:\n     - `S3_ENDPOINT`: URL of the MinIO server\n     - `S3_ACCESS_KEY`: Access key for the S3 bucket\n     - `S3_SECRET_KEY`: Secret key for the S3 bucket\n     - `S3_BUCKET_NAME`: Name of the S3 bucket\n     - `S3_REGION`: Region for the S3 bucket (default: us-east-1)\n     - `S3_ALIAS_HOST`: Public URL\u002FCDN for accessing S3 resources (default: \"127.0.0.1:9000\u002Fgitingest-bucket\")\n\n#### Usage Examples\n\nTo run the application in development mode:\n\n```bash\ndocker compose --profile dev up\n```\n\nTo run the application in production mode:\n\n```bash\ndocker compose --profile prod up -d\n```\n\nTo build and run the application:\n\n```bash\ndocker compose --profile prod build\ndocker compose --profile prod up -d\n```\n\n## 🤝 Contributing\n\n### Non-technical ways to contribute\n\n- **Create an Issue**: If you find a bug or have an idea for a new feature, please [create an issue](https:\u002F\u002Fgithub.com\u002Fcoderamp-labs\u002Fgitingest\u002Fissues\u002Fnew) on GitHub. This will help us track and prioritize your request.\n- **Spread the Word**: If you like Gitingest, please share it with your friends, colleagues, and on social media. This will help us grow the community and make Gitingest even better.\n- **Use Gitingest**: The best feedback comes from real-world usage! If you encounter any issues or have ideas for improvement, please let us know by [creating an issue](https:\u002F\u002Fgithub.com\u002Fcoderamp-labs\u002Fgitingest\u002Fissues\u002Fnew) on GitHub or by reaching out to us on [Discord](https:\u002F\u002Fdiscord.com\u002Finvite\u002FzerRaGK9EC).\n\n### Technical ways to contribute\n\nGitingest aims to be friendly for first time contributors, with a simple Python and HTML codebase. If you need any help while working with the code, reach out to us on [Discord](https:\u002F\u002Fdiscord.com\u002Finvite\u002FzerRaGK9EC). For detailed instructions on how to make a pull request, see [CONTRIBUTING.md](.\u002FCONTRIBUTING.md).\n\n## 🛠️ Stack\n\n- [Tailwind CSS](https:\u002F\u002Ftailwindcss.com) - Frontend\n- [FastAPI](https:\u002F\u002Fgithub.com\u002Ffastapi\u002Ffastapi) - Backend framework\n- [Jinja2](https:\u002F\u002Fjinja.palletsprojects.com) - HTML templating\n- [tiktoken](https:\u002F\u002Fgithub.com\u002Fopenai\u002Ftiktoken) - Token estimation\n- [posthog](https:\u002F\u002Fgithub.com\u002FPostHog\u002Fposthog) - Amazing analytics\n- [Sentry](https:\u002F\u002Fsentry.io) - Error tracking and performance monitoring\n\n### Looking for a JavaScript\u002FFileSystemNode package?\n\nCheck out the NPM alternative 📦 Repomix: \u003Chttps:\u002F\u002Fgithub.com\u002Fyamadashy\u002Frepomix>\n\n## 🚀 Project Growth\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=coderamp-labs\u002Fgitingest&type=Date)](https:\u002F\u002Fstar-history.com\u002F#coderamp-labs\u002Fgitingest&Date)\n","Gitingest 是一个将任何 Git 仓库转换为适合大语言模型使用的文本摘要的工具。其核心功能是通过简单地将 GitHub URL 中的“hub”替换为“ingest”，即可获取代码库的易于处理的摘要。该项目采用 Python 编写，支持多种平台，并提供了 Chrome 和 Firefox 浏览器扩展以方便使用。Gitingest 适用于需要快速理解和分析代码库内容的开发者、研究人员以及AI工程师等场景，能够有效提升代码审查和学习效率。",2,"2026-06-11 03:39:24","high_star"]