<div align="center">
<img src="https://github.com/mirasurf/tarzi/blob/4e751f8d389c0ac7f2061afa9286d2d7fa551aaf/static/tarzi-320.png" alt="Tarzi Logo" width="200" height="200">
</div>
<h1 align="center">tarzi</h1>
<p align="center">
<a href="https://crates.io/crates/tarzi">
<img src="https://img.shields.io/crates/v/tarzi.svg?style=flat-square" alt="Crate Version" />
</a>
<a href="https://pypi.org/project/tarzi/">
<img src="https://img.shields.io/pypi/v/tarzi.svg?style=flat-square" alt="PyPI Version" />
</a>
<!-- CI and Docs -->
<a href="https://github.com/mirasurf/tarzi/actions/workflows/rust-ci.yml">
<img src="https://github.com/mirasurf/tarzi/actions/workflows/rust-ci.yml/badge.svg" alt="Rust CI" />
</a>
<a href="https://github.com/mirasurf/tarzi/actions/workflows/python-ci.yml">
<img src="https://github.com/mirasurf/tarzi/actions/workflows/python-ci.yml/badge.svg" alt="Python CI" />
</a>
<a href="https://tarzirs.readthedocs.io/en/latest/">
<img src="https://app.readthedocs.org/projects/tarzirs/badge/?version=latest&style=flat" alt="Docs" />
</a>
<!-- License -->
<a href="https://www.apache.org/licenses/LICENSE-2.0">
<img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat-square" alt="License" />
</a>
<!-- X (formerly Twitter) -->
<a href="https://x.com/mirasurf_ai">
<img src="https://img.shields.io/twitter/follow/mirasurf_ai?label=@mirasurf_ai&style=flat-square" alt="X Follow" />
</a>
</p>
## ๐ Tarzi
**Tarzi** is a unified search interface designed for **Retrieval-Augmented Generation (RAG)** and **agentic systems** built on large language models. Search is a core functionality in these systems, yet most search engine providers (SEPs) impose API paywalls or strict rate limits. **Tarzi**, empowered by browser automation and web crawling technologies, removes these barriers by supporting token-free queries across multiple search engines. With a single dependency, you can integrate and switch between different SEPs as neededโseamlessly and efficiently.
<div align="center">
<img src="static/tariz-workflow.png" alt="Tarzi Logo" width="100%">
</div>
## โ๏ธ Core Capabilities
- ๐ฆ **Dual Implementation**: Native Rust library and Python wrapper with CLI tools
- ๐ **Content Conversion**: Convert raw HTML into Markdown, JSON, or YAML, which is ready for LLMs
- ๐ **Search Integration**: Fetch fully rendered result pages with a unified interface for token-free headless browser mode
- ๐ง **Multi-Engine Support**: Works with Bing, Google, DuckDuckGo, Baidu etc.
- ๐ก๏ธ **Proxy Support**: Bypass network bans using proxy support to access global SEPs
- ๐ **End-to-End Workflow**: Full pipeline from search to content extraction for AI and automation use cases
## ๐งช Advanced Features (Under dev.)
- ๐ฅ๏ธ **Custom Browser Controls**: Set screen size, viewport, and locale for realistic behavior
- ๐ต๏ธโโ๏ธ **Anti-Bot Evasion**: Use fingerprint spoofing, proxy rotation, and human-like actions to avoid detection
- ๐ง **Smarter Queries**: Improve search results with prompt rewriting and intent-aware queries
- ๐ **Workflow Automation**: Chain steps like search, click, form fill, and scraping into automated flows
- ๐ค **Agent Integration (MCP)**: Connect with agent frameworks for context-aware, distributed task execution
- ๐ **Observability**: Monitor success rate, latency, CAPTCHA frequency, and export logs for analysis
## Install
```
pip install tarzi
```
## CLI Commands
Tarzi provides two command-line interfaces:
- **`tarzi`**: Native Rust CLI (faster, more efficient)
- **`pytarzi`**: Python CLI (easier to extend, same functionality)
Both CLIs support the same commands and configuration precedence.
## Usage Examples
* Examples in Python and Rust: [examples](/examples/)
## Alternatives
* LangChain [PlayWrightBrowserToolkit](https://python.langchain.com/docs/integrations/tools/playwright/)
## Contributors
Thank you โค all human and non-human contributors.
[](https://github.com/mirasurf/tarzi/graphs/contributors)
Raw data
{
"_id": null,
"home_page": null,
"name": "tarzi",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "xmingc <chenxm35@gmail.com>",
"keywords": "web-scraping, search-engine, ai-tools, rust, browser-automation",
"author": null,
"author_email": "xmingc <chenxm35@gmail.com>",
"download_url": null,
"platform": null,
"description": "<div align=\"center\">\n <img src=\"https://github.com/mirasurf/tarzi/blob/4e751f8d389c0ac7f2061afa9286d2d7fa551aaf/static/tarzi-320.png\" alt=\"Tarzi Logo\" width=\"200\" height=\"200\">\n</div>\n<h1 align=\"center\">tarzi</h1> \n<p align=\"center\">\n <a href=\"https://crates.io/crates/tarzi\">\n <img src=\"https://img.shields.io/crates/v/tarzi.svg?style=flat-square\" alt=\"Crate Version\" />\n </a>\n <a href=\"https://pypi.org/project/tarzi/\">\n <img src=\"https://img.shields.io/pypi/v/tarzi.svg?style=flat-square\" alt=\"PyPI Version\" />\n </a>\n <!-- CI and Docs -->\n <a href=\"https://github.com/mirasurf/tarzi/actions/workflows/rust-ci.yml\">\n <img src=\"https://github.com/mirasurf/tarzi/actions/workflows/rust-ci.yml/badge.svg\" alt=\"Rust CI\" />\n </a>\n <a href=\"https://github.com/mirasurf/tarzi/actions/workflows/python-ci.yml\">\n <img src=\"https://github.com/mirasurf/tarzi/actions/workflows/python-ci.yml/badge.svg\" alt=\"Python CI\" />\n </a>\n <a href=\"https://tarzirs.readthedocs.io/en/latest/\">\n <img src=\"https://app.readthedocs.org/projects/tarzirs/badge/?version=latest&style=flat\" alt=\"Docs\" />\n </a>\n <!-- License -->\n <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">\n <img src=\"https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat-square\" alt=\"License\" />\n </a>\n <!-- X (formerly Twitter) -->\n <a href=\"https://x.com/mirasurf_ai\">\n <img src=\"https://img.shields.io/twitter/follow/mirasurf_ai?label=@mirasurf_ai&style=flat-square\" alt=\"X Follow\" />\n </a>\n</p>\n\n## \ud83d\udc12 Tarzi\n\n**Tarzi** is a unified search interface designed for **Retrieval-Augmented Generation (RAG)** and **agentic systems** built on large language models. Search is a core functionality in these systems, yet most search engine providers (SEPs) impose API paywalls or strict rate limits. **Tarzi**, empowered by browser automation and web crawling technologies, removes these barriers by supporting token-free queries across multiple search engines. With a single dependency, you can integrate and switch between different SEPs as needed\u2014seamlessly and efficiently.\n\n<div align=\"center\">\n <img src=\"static/tariz-workflow.png\" alt=\"Tarzi Logo\" width=\"100%\">\n</div>\n\n## \u2699\ufe0f Core Capabilities\n\n- \ud83e\udd80 **Dual Implementation**: Native Rust library and Python wrapper with CLI tools\n- \ud83d\udd04 **Content Conversion**: Convert raw HTML into Markdown, JSON, or YAML, which is ready for LLMs\n- \ud83d\udd0d **Search Integration**: Fetch fully rendered result pages with a unified interface for token-free headless browser mode\n- \ud83e\udde0 **Multi-Engine Support**: Works with Bing, Google, DuckDuckGo, Baidu etc.\n- \ud83d\udee1\ufe0f **Proxy Support**: Bypass network bans using proxy support to access global SEPs\n- \ud83d\ude80 **End-to-End Workflow**: Full pipeline from search to content extraction for AI and automation use cases\n\n## \ud83e\uddea Advanced Features (Under dev.)\n\n- \ud83d\udda5\ufe0f **Custom Browser Controls**: Set screen size, viewport, and locale for realistic behavior \n- \ud83d\udd75\ufe0f\u200d\u2642\ufe0f **Anti-Bot Evasion**: Use fingerprint spoofing, proxy rotation, and human-like actions to avoid detection \n- \ud83e\udde0 **Smarter Queries**: Improve search results with prompt rewriting and intent-aware queries \n- \ud83d\udd17 **Workflow Automation**: Chain steps like search, click, form fill, and scraping into automated flows \n- \ud83e\udd16 **Agent Integration (MCP)**: Connect with agent frameworks for context-aware, distributed task execution \n- \ud83d\udcca **Observability**: Monitor success rate, latency, CAPTCHA frequency, and export logs for analysis\n\n## Install\n\n```\npip install tarzi\n```\n\n## CLI Commands\n\nTarzi provides two command-line interfaces:\n\n- **`tarzi`**: Native Rust CLI (faster, more efficient)\n- **`pytarzi`**: Python CLI (easier to extend, same functionality)\n\nBoth CLIs support the same commands and configuration precedence.\n\n## Usage Examples\n\n* Examples in Python and Rust: [examples](/examples/)\n\n## Alternatives\n\n* LangChain [PlayWrightBrowserToolkit](https://python.langchain.com/docs/integrations/tools/playwright/)\n\n## Contributors\n\nThank you \u2764 all human and non-human contributors.\n\n[](https://github.com/mirasurf/tarzi/graphs/contributors)\n\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Rust-native lite search for AI applications",
"version": "0.0.21",
"project_urls": {
"Documentation": "https://tarzi.readthedocs.io/",
"Homepage": "https://github.com/mirasurf/tarzi",
"Repository": "https://github.com/mirasurf/tarzi"
},
"split_keywords": [
"web-scraping",
" search-engine",
" ai-tools",
" rust",
" browser-automation"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e680f692c3fc8df21c2fac99c2cf5ae636086185da902aa0d1768fff81da321e",
"md5": "d7465a3a9d8ab62309ee8a272163b247",
"sha256": "705318488d699c90c2986377e426e7ee46307163347788684198c669a80246b8"
},
"downloads": -1,
"filename": "tarzi-0.0.21-cp310-cp310-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "d7465a3a9d8ab62309ee8a272163b247",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 4173023,
"upload_time": "2025-09-02T15:01:23",
"upload_time_iso_8601": "2025-09-02T15:01:23.445183Z",
"url": "https://files.pythonhosted.org/packages/e6/80/f692c3fc8df21c2fac99c2cf5ae636086185da902aa0d1768fff81da321e/tarzi-0.0.21-cp310-cp310-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "43682d358f6626bc7d9ccfcfe22b211b663ff766b940a928aa60cd222367ed3f",
"md5": "976e47534b19083f936f9d834f0c0667",
"sha256": "5ca9c573a4cf1d353beb302c44bfecf05c8a73aceb36f3e4caf7d810d8ee6077"
},
"downloads": -1,
"filename": "tarzi-0.0.21-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "976e47534b19083f936f9d834f0c0667",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 3998338,
"upload_time": "2025-09-02T15:01:25",
"upload_time_iso_8601": "2025-09-02T15:01:25.423438Z",
"url": "https://files.pythonhosted.org/packages/43/68/2d358f6626bc7d9ccfcfe22b211b663ff766b940a928aa60cd222367ed3f/tarzi-0.0.21-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b60e10cb3d2197e5580246c8d7efe0af0d1f460bf5213b3e908e033727e40c4e",
"md5": "4afe7eb6a4c008fa06a23092ed338015",
"sha256": "52e18026d75ecacedd822511ae24effc2b01f4db9248efb46ca870a532869992"
},
"downloads": -1,
"filename": "tarzi-0.0.21-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "4afe7eb6a4c008fa06a23092ed338015",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 6182067,
"upload_time": "2025-09-02T15:01:27",
"upload_time_iso_8601": "2025-09-02T15:01:27.241613Z",
"url": "https://files.pythonhosted.org/packages/b6/0e/10cb3d2197e5580246c8d7efe0af0d1f460bf5213b3e908e033727e40c4e/tarzi-0.0.21-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bc93cc596a44ff896344d96727fe9bc3763cd03f7ef5773a305412f569554eab",
"md5": "d46001b41d9fff1bb82e2047255a30dd",
"sha256": "6667013ae78a958c21cfc5f9b966cbd99f91dc285ac36773264fee397ba5002b"
},
"downloads": -1,
"filename": "tarzi-0.0.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "d46001b41d9fff1bb82e2047255a30dd",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 6721046,
"upload_time": "2025-09-02T15:01:28",
"upload_time_iso_8601": "2025-09-02T15:01:28.953576Z",
"url": "https://files.pythonhosted.org/packages/bc/93/cc596a44ff896344d96727fe9bc3763cd03f7ef5773a305412f569554eab/tarzi-0.0.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b8b55ac51de23000a1f9be517b6d371b6041352fb47d9840423d0e4ed029f451",
"md5": "b25ffa7f1958f201041b51398b22d848",
"sha256": "09aa0a7aea6b243d6c25e2eaf3fc745ce267d59e5272593d90547169b9f48dac"
},
"downloads": -1,
"filename": "tarzi-0.0.21-cp311-cp311-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "b25ffa7f1958f201041b51398b22d848",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 4175057,
"upload_time": "2025-09-02T15:01:30",
"upload_time_iso_8601": "2025-09-02T15:01:30.856050Z",
"url": "https://files.pythonhosted.org/packages/b8/b5/5ac51de23000a1f9be517b6d371b6041352fb47d9840423d0e4ed029f451/tarzi-0.0.21-cp311-cp311-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f14a632c76ac3edc8021ce43e05f98c57846d9712dd46e43e672ad4202b8a624",
"md5": "4596a9e1f312e0cc087417ccc2265610",
"sha256": "047cb511b03e21240264ee57ee72122fe3ba81a6434416051d80e75db8975194"
},
"downloads": -1,
"filename": "tarzi-0.0.21-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "4596a9e1f312e0cc087417ccc2265610",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 3998880,
"upload_time": "2025-09-02T15:01:32",
"upload_time_iso_8601": "2025-09-02T15:01:32.434079Z",
"url": "https://files.pythonhosted.org/packages/f1/4a/632c76ac3edc8021ce43e05f98c57846d9712dd46e43e672ad4202b8a624/tarzi-0.0.21-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b1181e8d0045027a87633e741188d7e37230acef3473de95c24782792fc12bed",
"md5": "6367895041086c7708d22219e24d7564",
"sha256": "43387e577e3f9b60cc2bfb42c7f3dc33336da97625e52d4b13dd45c1dd3d47f5"
},
"downloads": -1,
"filename": "tarzi-0.0.21-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "6367895041086c7708d22219e24d7564",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 6182350,
"upload_time": "2025-09-02T15:01:33",
"upload_time_iso_8601": "2025-09-02T15:01:33.981470Z",
"url": "https://files.pythonhosted.org/packages/b1/18/1e8d0045027a87633e741188d7e37230acef3473de95c24782792fc12bed/tarzi-0.0.21-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a0414e3c9919b2c505b7b4a974be864c611e827341ae6d7017973575c33aa1bd",
"md5": "acb77b68af862564d56f41efd911f55b",
"sha256": "d1be938f5547f6f8b2bd1a71caaacce5d29bd8fbf2c745f063bbae430e43c039"
},
"downloads": -1,
"filename": "tarzi-0.0.21-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "acb77b68af862564d56f41efd911f55b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 6720935,
"upload_time": "2025-09-02T15:01:35",
"upload_time_iso_8601": "2025-09-02T15:01:35.762362Z",
"url": "https://files.pythonhosted.org/packages/a0/41/4e3c9919b2c505b7b4a974be864c611e827341ae6d7017973575c33aa1bd/tarzi-0.0.21-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7e7f8d1332133d4d1faaac6c97f3574daae0e43e25aa628233c77d0f391c9953",
"md5": "64a690c6ab20ec8ea3d1c45a29999557",
"sha256": "27eeaab76a90b59a90bb0d9beb4057f52bf0fce61ec53cec367d3be33f746681"
},
"downloads": -1,
"filename": "tarzi-0.0.21-cp312-cp312-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "64a690c6ab20ec8ea3d1c45a29999557",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 4174997,
"upload_time": "2025-09-02T15:01:37",
"upload_time_iso_8601": "2025-09-02T15:01:37.984241Z",
"url": "https://files.pythonhosted.org/packages/7e/7f/8d1332133d4d1faaac6c97f3574daae0e43e25aa628233c77d0f391c9953/tarzi-0.0.21-cp312-cp312-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fa25a2448775d5eff86777b90cf2a58c8493ef1d42f5eb3d91aaa1ef514b0a93",
"md5": "71a7b013c5cbe698c24bad4c93e406ea",
"sha256": "8497c2a292d0088df6e0ebdd9b018661968d1719be6ae3801fc77b522fe0e92e"
},
"downloads": -1,
"filename": "tarzi-0.0.21-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "71a7b013c5cbe698c24bad4c93e406ea",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 3996873,
"upload_time": "2025-09-02T15:01:39",
"upload_time_iso_8601": "2025-09-02T15:01:39.955936Z",
"url": "https://files.pythonhosted.org/packages/fa/25/a2448775d5eff86777b90cf2a58c8493ef1d42f5eb3d91aaa1ef514b0a93/tarzi-0.0.21-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f8c1b19ef66c7e08b191e443330d4f85094c5c105ba92bfb15fd5e73a4d8c996",
"md5": "67dcf654bbd88e671b19eca2880224ce",
"sha256": "43c15729ccd4e058a275ba8cefb31bdf941fb5f016490b868d390aef170a288a"
},
"downloads": -1,
"filename": "tarzi-0.0.21-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "67dcf654bbd88e671b19eca2880224ce",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 6181502,
"upload_time": "2025-09-02T15:01:41",
"upload_time_iso_8601": "2025-09-02T15:01:41.699990Z",
"url": "https://files.pythonhosted.org/packages/f8/c1/b19ef66c7e08b191e443330d4f85094c5c105ba92bfb15fd5e73a4d8c996/tarzi-0.0.21-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9a7f08deab1c7e89b541cb71e33dbde258235eea3122ee93b7f617330cc3894a",
"md5": "1815b9f46b4e989282996fac7dea1afc",
"sha256": "0b654be3b844abd2e1a21efe76b458657759c3ec288e7148e36652d54f986d85"
},
"downloads": -1,
"filename": "tarzi-0.0.21-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "1815b9f46b4e989282996fac7dea1afc",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 6720217,
"upload_time": "2025-09-02T15:01:43",
"upload_time_iso_8601": "2025-09-02T15:01:43.445050Z",
"url": "https://files.pythonhosted.org/packages/9a/7f/08deab1c7e89b541cb71e33dbde258235eea3122ee93b7f617330cc3894a/tarzi-0.0.21-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-02 15:01:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mirasurf",
"github_project": "tarzi",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "tarzi"
}