{"id":39584725,"url":"https://github.com/0xSero/Azul","last_synced_at":"2026-01-26T15:01:15.593Z","repository":{"id":326375892,"uuid":"1105282978","full_name":"0xSero/Azul","owner":"0xSero","description":"Browse the world in the comfort of your terminal","archived":false,"fork":false,"pushed_at":"2026-01-08T15:13:49.000Z","size":2836,"stargazers_count":143,"open_issues_count":1,"forks_count":10,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-21T09:33:25.946Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","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/0xSero.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-27T11:42:20.000Z","updated_at":"2026-01-19T12:54:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/0xSero/Azul","commit_stats":null,"previous_names":["0xsero/azul"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/0xSero/Azul","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xSero%2FAzul","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xSero%2FAzul/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xSero%2FAzul/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xSero%2FAzul/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0xSero","download_url":"https://codeload.github.com/0xSero/Azul/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xSero%2FAzul/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28781308,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T13:55:28.044Z","status":"ssl_error","status_checked_at":"2026-01-26T13:55:26.068Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-01-18T07:35:27.099Z","updated_at":"2026-01-26T15:01:15.586Z","avatar_url":"https://github.com/0xSero.png","language":"Rust","readme":"# Azul Browse\n\n[![CI](https://github.com/0xSero/Azul/actions/workflows/ci.yml/badge.svg)](https://github.com/0xSero/Azul/actions/workflows/ci.yml)\n[![Release](https://github.com/0xSero/Azul/actions/workflows/release.yml/badge.svg)](https://github.com/0xSero/Azul/releases)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\nA beautiful terminal web browser with AI-powered chat, built in Rust.\n\n## Features\n\n- Full TUI web browsing with keyboard navigation\n- AI chat panel with tool-calling support (navigate, scroll, follow links)\n- Multi-engine search (DuckDuckGo, Wikipedia, arXiv, PubMed, Google Scholar, OpenLibrary)\n- JavaScript rendering via headless Chrome\n- Bookmarks and history\n- Cosmic dark theme\n- Tab support\n- RAG integration (optional)\n\n## Prerequisites\n\n- **Rust** (1.70+): https://rustup.rs/\n- **Chrome/Chromium** (optional): Required for `--js` mode (JavaScript rendering)\n\n## Installation\n\n### From Releases (Recommended)\n\nDownload the latest binary for your platform from [Releases](https://github.com/0xSero/Azul/releases):\n\n```bash\n# Linux (x86_64)\ncurl -LO https://github.com/0xSero/Azul/releases/latest/download/azul-linux-x86_64.tar.gz\ntar xzf azul-linux-x86_64.tar.gz\nsudo mv azul /usr/local/bin/\n\n# macOS (Apple Silicon)\ncurl -LO https://github.com/0xSero/Azul/releases/latest/download/azul-darwin-aarch64.tar.gz\ntar xzf azul-darwin-aarch64.tar.gz\nsudo mv azul /usr/local/bin/\n\n# macOS (Intel)\ncurl -LO https://github.com/0xSero/Azul/releases/latest/download/azul-darwin-x86_64.tar.gz\ntar xzf azul-darwin-x86_64.tar.gz\nsudo mv azul /usr/local/bin/\n```\n\n### From Source\n\n```bash\n# Clone the repo\ngit clone https://github.com/0xSero/Azul.git\ncd Azul\n\n# Quick install (uses Makefile)\nmake install          # System-wide (/usr/local/bin, requires sudo)\nmake install-user     # User-only (~/.local/bin)\n\n# Or manually\ncargo build --release\n./target/release/azul\n\n# Or via cargo\ncargo install --path .\n```\n\n## Quick Start\n\n```bash\n# Start TUI browser\nazul\n\n# Search DuckDuckGo\nazul -q \"rust programming\"\n\n# Search Wikipedia\nazul -q \"w:Rust language\"\n\n# Fetch a URL directly\nazul -q \"https://example.com\"\n\n# Fetch with JavaScript rendering\nazul --js -q \"https://example.com\"\n```\n\n## Configuration\n\nConfig file location: `~/.config/azul/config.json`\n\n```json\n{\n  \"theme\": {\n    \"accent\": \"#00BFFF\",\n    \"border\": \"#7aa2f7\",\n    \"text\": \"#c0caf5\",\n    \"background\": \"#1a1b26\"\n  },\n  \"ai\": {\n    \"provider\": \"openrouter\",\n    \"api_key\": \"YOUR_API_KEY\",\n    \"model\": \"anthropic/claude-3.5-sonnet\",\n    \"base_url\": \"https://openrouter.ai/api/v1\"\n  },\n  \"refresh_rate_ms\": 200,\n  \"rag_base_url\": \"http://127.0.0.1:3002\",\n  \"memory_scope\": \"azul-browse\"\n}\n```\n\n### AI Providers\n\nThe browser supports OpenAI-compatible APIs:\n\n| Provider | base_url |\n|----------|----------|\n| OpenRouter | `https://openrouter.ai/api/v1` |\n| OpenAI | `https://api.openai.com/v1` |\n| Local (Ollama) | `http://localhost:11434/v1` |\n| Custom | Any OpenAI-compatible endpoint |\n\n## Keybindings\n\n### Global\n| Key | Action |\n|-----|--------|\n| `q`, `Ctrl+C` | Quit |\n| `?` | Toggle help |\n| `Tab` | Cycle focus (Content -\u003e Chat -\u003e URL) |\n| `Shift+Tab` | Reverse cycle |\n| `/` | Focus URL bar |\n| `Escape` | Cancel/unfocus |\n\n### Content Navigation\n| Key | Action |\n|-----|--------|\n| `j` / `Down` | Scroll down |\n| `k` / `Up` | Scroll up |\n| `g` | Go to top |\n| `G` | Go to bottom |\n| `Tab` (in content) | Next link |\n| `Enter` | Follow selected link |\n| `1-9` | Follow link by number |\n\n### Chat Panel\n| Key | Action |\n|-----|--------|\n| `Up` / `PageUp` | Scroll up (older messages) |\n| `Down` / `PageDown` | Scroll down (newer messages) |\n| `Enter` | Send message |\n| Type | Input text |\n\n### URL Bar\n| Key | Action |\n|-----|--------|\n| `Enter` | Navigate/search |\n| `Escape` | Cancel |\n\n## Search Prefixes\n\n| Prefix | Engine |\n|--------|--------|\n| `w:` | Wikipedia |\n| `a:` | arXiv (academic papers) |\n| `s:` | Google Scholar |\n| `d:` | DuckDuckGo |\n| `g:` | General web search |\n| `p:` | PubMed (medical) |\n| `ol:` | OpenLibrary (books) |\n\nNo prefix defaults to DuckDuckGo. URLs (containing `.`) go directly to the site.\n\n## AI Chat\n\nThe chat panel supports tool calls - the AI can:\n- **Navigate** to URLs\n- **Follow links** by number\n- **Scroll** the page\n\nExample prompts:\n- \"Go to wikipedia.org\"\n- \"Click on the first link\"\n- \"Scroll down to see more\"\n- \"Summarize this page\"\n\n## Development\n\n```bash\n# Build debug\nmake build            # or: cargo build\n\n# Run with logging\nRUST_LOG=debug cargo run\n\n# Run all checks (format, lint, test)\nmake check\n\n# Individual checks\nmake test             # Run tests\nmake lint             # Run clippy\nmake fmt              # Format code\nmake fmt-check        # Check formatting\n\n# Clean build artifacts\nmake clean\n```\n\n## Releasing\n\nReleases are automated via GitHub Actions. To create a new release:\n\n```bash\n# 1. Update version (choose one)\nmake bump-patch       # 0.0.7 -\u003e 0.0.8\nmake bump-minor       # 0.0.7 -\u003e 0.1.0\nmake bump-major       # 0.0.7 -\u003e 1.0.0\n\n# 2. Update CHANGELOG.md with changes\n\n# 3. Commit changes\ngit add -A\ngit commit -m \"chore: bump version to $(make version)\"\n\n# 4. Create and push tag (triggers release build)\nmake release-tag\n```\n\nThe GitHub Action will automatically:\n- Build binaries for Linux (x86_64, musl) and macOS (x86_64, ARM64)\n- Create a GitHub Release with the binaries\n- Generate SHA256 checksums\n\n## Project Structure\n\n```\nsrc/\n├── main.rs          # Entry point, CLI/TUI setup\n├── app.rs           # Application state and input handling\n├── browser/         # HTTP fetching, page parsing\n├── chat/            # Chat session management\n├── config.rs        # Configuration loading\n├── ai/              # AI provider integration\n├── ui/              # Ratatui UI rendering\n├── search/          # Multi-engine search\n├── storage/         # SQLite bookmarks/history\n├── tabs/            # Tab management\n├── rag/             # RAG integration\n└── memory/          # Memory/context persistence\n```\n\n## License\n\nMIT\n","funding_links":[],"categories":["\u003ca name=\"Rust\"\u003e\u003c/a\u003eRust"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xSero%2FAzul","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0xSero%2FAzul","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xSero%2FAzul/lists"}