{"id":51475268,"url":"https://github.com/devswha/zipcode","last_synced_at":"2026-07-06T20:03:17.703Z","repository":{"id":348871290,"uuid":"1200180994","full_name":"devswha/zipcode","owner":"devswha","description":"Local-only AI coding agent powered by Gemma 4 via candle. Runs entirely offline — packaged as a ZIP for air-gapped environments.","archived":false,"fork":false,"pushed_at":"2026-05-12T06:44:57.000Z","size":1148,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-12T08:34:29.228Z","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/devswha.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,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-03T05:53:57.000Z","updated_at":"2026-05-12T06:45:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/devswha/zipcode","commit_stats":null,"previous_names":["devswha/zipcode"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devswha/zipcode","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devswha%2Fzipcode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devswha%2Fzipcode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devswha%2Fzipcode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devswha%2Fzipcode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devswha","download_url":"https://codeload.github.com/devswha/zipcode/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devswha%2Fzipcode/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35204422,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-06T02:00:07.184Z","response_time":106,"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":[],"created_at":"2026-07-06T20:03:16.420Z","updated_at":"2026-07-06T20:03:17.681Z","avatar_url":"https://github.com/devswha.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Rust-000000?style=for-the-badge\u0026logo=rust\u0026logoColor=white\" alt=\"Rust\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Gemma_4-4285F4?style=for-the-badge\u0026logo=google\u0026logoColor=white\" alt=\"Gemma 4\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/CUDA-76B900?style=for-the-badge\u0026logo=nvidia\u0026logoColor=white\" alt=\"CUDA\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Air--Gapped-FF6B6B?style=for-the-badge\u0026logoColor=white\" alt=\"Air-Gapped\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003ezipcode\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eLocal-only AI coding agent. No API keys. No cloud dependency. Just code.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#quick-start\"\u003eQuick Start\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#air-gapped-deployment\"\u003eAir-Gapped Deploy\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#tools\"\u003eTools\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#architecture\"\u003eArchitecture\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#configuration\"\u003eConfig\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/devswha/zipcode?style=flat-square\" alt=\"License\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platform-linux%20x86__64-blue?style=flat-square\" alt=\"Platform\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/tests-265%20passing-brightgreen?style=flat-square\" alt=\"Tests\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/clippy-zero%20warnings-brightgreen?style=flat-square\" alt=\"Clippy\" /\u003e\n\u003c/p\u003e\n\n---\n\n**zipcode** is a Rust-based coding agent that runs **entirely on your machine** using local LLM inference. It can run Gemma-family GGUF models through candle, native `llama-cpp`, or a `llama-server` fallback for newer Gemma 4 models that outpace the current Rust bindings. Responses stream token-by-token via SSE for instant feedback.\n\nThe intended entrypoint is plain `zipcode`: if the machine is ready, you land in the REPL; if it is fresh or broken, zipcode points you at setup or repair steps instead of dropping you into backend jargon.\n\nShip it on a USB stick. Run it in a SCIF. It just works.\n\n```\n$ zipcode\nzipcode 0.1.0 (abc1234+dirty, build 1770000000) — local AI coding agent\nType /help for commands, Ctrl+D to exit\n\n\u003e read main.rs and add error handling to the database connection\n\n  Reading src/main.rs...\n  \u003e edit_file {\"file_path\": \"src/main.rs\", ...}\n  \u003c Successfully edited src/main.rs\n\n  I've wrapped the database connection in a proper error handler with\n  retry logic and connection pooling...\n```\n\n## Why zipcode?\n\n| Problem | zipcode Solution |\n|---------|-----------------|\n| API keys expire, leak, or get rate-limited | No API. Model runs locally. |\n| Corporate networks block LLM endpoints | No network needed after setup unless you explicitly ask zipcode to fetch a GitHub repo URL. |\n| Sensitive code can't leave the machine | Everything stays on disk. |\n| Cloud LLMs add latency | GPU inference on your hardware. |\n| Setup requires `npm`, `pip`, Docker... | Single static binary. |\n\n### Performance\n\n| Setup | Response Time | Tokens/sec |\n|-------|--------------|------------|\n| CPU only (12 threads) | ~150s | ~0.8 |\n| **GPU (RTX 2070 SUPER)** | **~7.6s** | **~15** |\n\n\u003e SSE streaming delivers tokens to your terminal as they're generated — no waiting for the full response.\n\n---\n\n## Quick Start\n\n### 1. Install from a clone\n\n```bash\ngit clone https://github.com/devswha/zipcode.git\ncd zipcode\n./install.sh\n```\n\nThe clone installer builds zipcode, installs a `zipcode` launcher into `~/.local/bin`,\ncopies any model artifacts you point it at, and when nothing is ready it walks you\nthrough a setup interview: download in the terminal now, show the download links,\npaste the local paths after you fetch the files, or skip for now.\n\nCommon flags:\n\n```bash\n./install.sh --model /path/to/model.gguf --tokenizer /path/to/tokenizer.json\n./install.sh --llama-server /path/to/llama-server\n./install.sh --skip-build --binary ./target/release/zipcode\n./scripts/download_model.sh --yes --dir ~/.zipcode/models\n./scripts/download_model.sh --yes --preset 31b --dir ~/.zipcode/models\n./scripts/build_llama_server.sh ~/.zipcode\n```\n\nThe online download path may require Hugging Face login / access approval for the\nGemma GGUF repository.\n\n### 2. Get a model + tokenizer\n\n```bash\n# Automated (requires internet + hf or huggingface-cli)\n./scripts/download_model.sh\n\n# Or manual: download a Gemma GGUF + matching tokenizer.json\n# Place both files in ~/.zipcode/models/\n```\n\n### 3. First run\n\n```bash\n# Start here. Ready machines drop into the REPL.\nzipcode\n\n# Scripted first-run / repair path\nzipcode setup --skip-smoke\n\n# Detailed readiness + repair report\nzipcode doctor\n```\n\n`zipcode` is the default entrypoint. Use `setup` when you want zipcode to discover the model,\nwrite or refresh the global config, and optionally run a smoke prompt. Use `doctor` when you\nwant the repair summary without entering the agent.\n\n\n### Version visibility\n\nEvery local build embeds a build label: package version, Git commit, dirty marker for tracked local changes, and a Unix build timestamp. Use it to confirm which binary you are testing:\n\n```bash\nzipcode --version\nzipcode doctor\n```\n\nThe fullscreen TUI header shows the Git label as well, so stale binaries are easier to spot during manual QA.\n\n### 4. Power-user flows\n\n```bash\n# Interactive entrypoint\nzipcode\n\n# One-shot\nzipcode prompt \"explain this codebase\"\n\n# Guided config + smoke test\nzipcode setup\n\n# Guided config only\nzipcode setup --skip-smoke\n\n# Readiness / repair report\nzipcode doctor\n\n# Custom model\nzipcode --model ./my-model.gguf\n\n# Gemma 4 via the llama-server helper\nZIPCODE_LLAMA_SERVER_BIN=/path/to/llama-server \\\nzipcode --backend llama-server --model ~/.zipcode/models/gemma-4-e2b-it-Q8_0.gguf prompt \"hello\"\n\n# GPU acceleration (CUDA)\nZIPCODE_GPU_LAYERS=99 ZIPCODE_FLASH_ATTENTION=1 zipcode\n\n# Build llama-server with CUDA (auto-detects GPU)\n./scripts/build_llama_server.sh\n\n# If CUDA 11.x + newer GCC fails, prefer gcc-10/g++-10 for GPU builds\nCC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 \\\nZIPCODE_LLAMA_SERVER_CMAKE_ARGS=\"-DCMAKE_CUDA_HOST_COMPILER=/usr/bin/g++-10\" \\\n./scripts/build_llama_server.sh\n\n# Read-only mode (safe exploration)\nzipcode --permission-mode read-only\n```\n\n---\n\n## Air-Gapped Deployment\n\nzipcode was designed from the ground up for **isolated networks**. Package everything into a ZIP,\nmove it on a USB drive, and let bare `zipcode` handle first-run versus recovery on the target\nmachine.\n\n### Package\n\n```bash\n# Smallest bundle\n./scripts/package.sh\n\n# Or bundle llama-server so Gemma 4 stays fully offline on first run / repair\n./scripts/package.sh --with-llama-server=/path/to/llama-server\n\n# Creates: dist/zipcode-v0.1.0-linux-x86_64-cuda.zip\n```\n\n### Archive contents\n\n```\nzipcode-v0.1.0-linux-x86_64-cuda.zip\n |- zipcode                     # single binary (~30 MB)\n |- install.sh                  # extracted-bundle installer\n |- install_llama_server.sh     # repair helper for adding llama-server later\n |- build_llama_server.sh       # build llama-server from source when needed\n |- download_model.sh           # model download helper\n |- README.md\n |- llama-server                # optional, when bundled during packaging\n |- scripts/lib/install_common.sh\n '- models/\n     |- PLACE_MODEL_HERE.txt\n     '- PLACE_TOKENIZER_HERE.txt\n```\n\n### Transfer workflow\n\n```\n  Internet Machine                    Air-Gapped Machine\n  ================                    ==================\n\n  1. Build or download zipcode.zip\n  2. Download model.gguf + tokenizer.json\n  3. Optional: bundle llama-server for Gemma 4\n  4. Copy to USB\n                        ---- USB ----\u003e\n                                      5. Unzip\n                                      6. ./install.sh\n                                      7. cp model.gguf tokenizer.json ~/.zipcode/models/\n                                      8. zipcode\n                                      9. If repair is needed:\n                                         zipcode doctor\n                                         zipcode setup --skip-smoke\n```\n\n---\n\n## Tools\n\nzipcode comes with **11 built-in tools** that the model can invoke autonomously:\n\n| Tool | Description | Permission |\n|------|-------------|------------|\n| **Bash** | Execute shell commands via `bash -c` | Needs approval in `workspace-write` |\n| **ReadFile** | Read file contents with line numbers, offset/limit | Always allowed |\n| **WriteFile** | Create or overwrite files, auto-creates parent dirs | Blocked in `read-only` |\n| **EditFile** | Targeted string replacement in existing files | Blocked in `read-only` |\n| **FetchRepo** | Clone a public GitHub repo into `.zipcode-remote/` for analysis | Blocked in `read-only` |\n| **GlobSearch** | Find files by glob pattern (`**/*.rs`, `src/*.py`) | Always allowed |\n| **GrepSearch** | Search file contents with regex, returns `file:line:` | Always allowed |\n| **TodoWrite** | Structured todo list persistence (`.zipcode-todos.json`) | Blocked in `read-only` |\n| **REPL** | Execute Python/Node.js code snippets | Blocked in `read-only` |\n| **Agent** | Spawn sub-agent for delegated tasks | _Stub in v0.1_ |\n| **ToolSearch** | Search available tools by keyword | Always allowed |\n\nAll tool output is automatically truncated at **8 KB** with a byte-count summary.\n\n`FetchRepo` is the explicit network exception: it only handles repository-root `https://github.com/\u003cowner\u003e/\u003crepo\u003e` URLs, clones them with `git clone --depth 1` into `.zipcode-remote/`, and is unavailable in `read-only` mode. Air-gapped deployments should pre-copy repositories into the workspace instead.\n\n### Permission Modes\n\n| Mode | Bash | Writes | Reads | Use case |\n|------|------|--------|-------|----------|\n| `read-only` | Denied | Denied | Allowed | Safe exploration |\n| `workspace-write` | Approval required | Allowed | Allowed | **Default** |\n| `full-access` | Allowed | Allowed | Allowed | Trusted automation |\n\n\u003e In `workspace-write`, approval-gated tools fail closed when zipcode is running non-interactively (for example `prompt` mode with EOF / no TTY). A real interactive terminal is required to approve `bash` or `repl`.\n\n---\n\n## Architecture\n\n### System Overview\n\n```\n+-------------------------------------------------+\n|                  zipcode CLI                     |\n|            REPL / one-shot / doctor              |\n+-------------------------------------------------+\n|                Agentic Runtime                   |\n|   +--------+  +----------+  +---------+         |\n|   |Session |  |Permission|  | Config  |         |\n|   |Manager |  |  Policy  |  | Loader  |         |\n|   +--------+  +----------+  +---------+         |\n|          +-----------------+                     |\n|          | Conversation    |\u003c--- tool results    |\n|          |     Loop        |                     |\n|          +-------+---------+                     |\n|                  | tool calls                    |\n|          +-------v---------+                     |\n|          |  Tool Router    |                     |\n|          +--+---------+----+                     |\n|             |         |                          |\n|       +-----+    +----+----+                     |\n|       |Bash |    |FileOps  |  ...11 tools        |\n|       +-----+    +---------+                     |\n+-------------------------------------------------+\n|             Inference Engine                     |\n|   candle | llama-cpp | llama-server (SSE)        |\n|   GPU offload | KV cache | Flash attention       |\n+-------------------------------------------------+\n|              Model Store                         |\n|   ~/.zipcode/models/*.gguf                       |\n+-------------------------------------------------+\n```\n\n### Workspace Structure\n\n```\nzipcode/\n |- crates/\n |   |- inference/    Candle GGUF engine, Gemma 4 chat template, sampler\n |   |- tools/        11 tool implementations + Tool trait + registry\n |   |- runtime/      Agentic loop, config, permissions, sessions\n |   '- cli/          REPL, one-shot, doctor, slash commands\n |- scripts/          install.sh, download_model.sh, package.sh\n |- models/           .gguf model files (gitignored)\n '- docs/             Design specs + implementation plans\n```\n\n### Crate Dependencies\n\n```\ncli --\u003e runtime --\u003e inference\n           |\n           '--\u003e tools\n```\n\n| Crate | Responsibility |\n|-------|---------------|\n| **inference** | GGUF loading, tokenization, KV cache, SSE streaming, GPU offload. Supports candle, llama-cpp, and llama-server backends. |\n| **tools** | 11 tool implementations. `Tool` trait, `ToolRegistry`, `ToolResult` truncation. |\n| **runtime** | Agentic conversation loop. Config hierarchy, permission policy, session persistence. |\n| **cli** | Binary entry point. REPL (rustyline), ANSI rendering (termimad), clap argument parsing. |\n\n---\n\n## CLI Reference\n\n### Commands\n\n| Command | Description |\n|---------|-------------|\n| `zipcode` | Smart entrypoint: REPL when ready, setup/repair guidance when not |\n| `zipcode prompt \"...\"` | One-shot prompt, then exit |\n| `zipcode setup` | Discover prerequisites, write config, optionally run a smoke prompt |\n| `zipcode doctor` | Show readiness state and repair hints |\n\n### Flags\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--model \u003cPATH\u003e` | `~/.zipcode/models/` | Path to `.gguf` file |\n| `--backend \u003cBACKEND\u003e` | `llama-cpp` | `llama-cpp` / `llama-server` / `candle` |\n| `--permission-mode` | `workspace-write` | `read-only` / `workspace-write` / `full-access` |\n| `--ui \u003cMODE\u003e` | `fullscreen` | Interactive UI mode: `plain` or `fullscreen` |\n\n### Slash Commands (REPL)\n\n| Command | Action |\n|---------|--------|\n| `/help` | Show commands |\n| `/status` | Session ID, message count, cwd |\n| `/clear` | Reset conversation |\n| `/quit` | Exit |\n\n### Fullscreen TUI MVP\n\n`zipcode` now launches the fullscreen UI by default when the install is ready. Use\n`zipcode --ui fullscreen` (or `zipcode repl --ui fullscreen`) explicitly if you want to force it,\nor `zipcode --ui plain` to return to the classic line-oriented REPL.\n\nThe fullscreen terminal UI MVP includes:\n\n- transcript area\n- bottom composer\n- inline status bar\n- multiline composer editing\n- input history recall\n- exact slash-command handling (`/help`, `/status`, `/clear`, `/quit`)\n- fullscreen rendering on the main terminal screen so scrollback remains copyable\n\nKey bindings:\n- `Enter` — submit\n- `Ctrl+J` — newline\n- `Arrow keys` — move cursor / recall input history\n- `PgUp` / `PgDn` — scroll transcript inside the TUI\n- Mouse wheel / drag — use terminal scrollback and selection to copy logs\n- `F1` — help overlay\n- `Esc` — clear input or close overlay\n- `Ctrl+D` — exit\n\n---\n\n## Configuration\n\n### Project config (`.zipcode.json`)\n\nLoaded from the nearest ancestor project root. Overrides global `~/.zipcode/config.json`.\nPaths such as `model_dir`, `model_file`, and `llama_server_bin` support `~/...` home expansion.\n\n```json\n{\n  \"permission_mode\": \"workspace-write\",\n  \"model_dir\": \"~/.zipcode/models\",\n  \"gpu_layers\": 99,\n  \"flash_attention\": true,\n  \"generation\": {\n    \"temperature\": 0.7,\n    \"top_p\": 0.9,\n    \"max_tokens\": 4096\n  }\n}\n```\n\n### Project instructions (`.zipcode.md`)\n\nPlace in any project root. Contents are injected into the system prompt.\n\n```markdown\n# My Project\n- Language: Rust 2021\n- Build: cargo build --release\n- Test: cargo test --workspace\n- Never modify files under vendor/\n```\n\n### Storage layout\n\n```\n~/.zipcode/\n |- config.json          # global config\n |- models/              # GGUF model files\n '- sessions/            # conversation history\n     '- \u003cuuid\u003e.json\n```\n\n### Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `ZIPCODE_LLAMA_SERVER_BIN` | Path to llama-server binary | auto-detect |\n| `ZIPCODE_LLAMA_SERVER_CMAKE_ARGS` | Extra cmake flags for `build_llama_server.sh` | none |\n| `ZIPCODE_LLAMA_SERVER_CUDA_ARCHITECTURES` | Override detected CUDA arch list (example: `75`) | auto-detect when possible |\n| `ZIPCODE_LLAMA_SERVER_CTX` | Context window size | 131072 (Gemma 4 128K native) |\n| `ZIPCODE_GPU_LAYERS` | GPU layers to offload (e.g., 99 for all) | none (CPU) |\n| `ZIPCODE_FLASH_ATTENTION` | Enable flash attention (`1` or `true`) | false |\n\n---\n\n## Model Setup\n\n### Requirements\n\n| Component | Minimum |\n|-----------|---------|\n| Model | Gemma 4 E2B IT (GGUF format) |\n| VRAM | ~8 GB recommended for Q8_0 quantization |\n| CUDA | 12.0+ (optional, CPU fallback available) |\n| Disk | ~5 GB for Q8_0 model file |\n\n### Download\n\n```bash\n# Option 1: helper script\n./scripts/download_model.sh\n\n# Option 2: manual\n# Download from: huggingface.co/ggml-org/gemma-4-E2B-it-GGUF\n# Also download tokenizer.json from the matching model repo\n# Place both files in: ~/.zipcode/models/\n```\n\nCPU inference works but is significantly slower. zipcode auto-detects CUDA availability at startup.\n\n### Gemma 4 today\n\n- Native `llama-cpp-2` `0.1.141` still cannot open `general.architecture = gemma4`.\n- In practice, Gemma 4 currently works best when zipcode can find a recent `llama-server`.\n- Easiest paths:\n  1. bundle it during packaging with `./scripts/package.sh --with-llama-server=/path/to/llama-server`\n  2. or install it later with `~/.zipcode/install_llama_server.sh /path/to/llama-server ~/.zipcode`\n  3. or set `ZIPCODE_LLAMA_SERVER_BIN=/path/to/llama-server`\n\nAfter that, rerun `zipcode` (default entrypoint) or `zipcode setup` if you want zipcode to refresh its saved config first.\n\n---\n\n## Key Dependencies\n\n| Crate | Purpose |\n|-------|---------|\n| [candle](https://github.com/huggingface/candle) | Rust-native ML framework for GGUF inference |\n| [tokenizers](https://github.com/huggingface/tokenizers) | HuggingFace tokenizer |\n| [clap](https://github.com/clap-rs/clap) | CLI argument parsing |\n| [rustyline](https://github.com/kkawakam/rustyline) | REPL line editing |\n| [termimad](https://github.com/Canop/termimad) | Markdown to ANSI rendering |\n| [tokio](https://tokio.rs) | Async runtime |\n\n---\n\n## Contributing\n\nContributions welcome. Please open an issue first for major changes.\n\n```bash\n# Development workflow\ncargo test --workspace          # run all tests\ncargo clippy --workspace        # lint\ncargo fmt --all                 # format\ncargo build --release -p zipcode  # build binary\n```\n\n---\n\n## Acknowledgments\n\nInspired by [claw-code](https://github.com/instructkr/claw-code) by [@instructkr](https://github.com/instructkr).\n\nBuilt with [candle](https://github.com/huggingface/candle) by Hugging Face.\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevswha%2Fzipcode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevswha%2Fzipcode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevswha%2Fzipcode/lists"}