{"id":51533193,"url":"https://github.com/tamada/fauxrest","last_synced_at":"2026-07-09T05:01:44.584Z","repository":{"id":366350660,"uuid":"1275959708","full_name":"tamada/fauxrest","owner":"tamada","description":"Pseudo-REST static API generator","archived":false,"fork":false,"pushed_at":"2026-06-27T02:40:55.000Z","size":22594,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-27T04:03:02.369Z","etag":null,"topics":["rest-api","static-api","static-api-generator"],"latest_commit_sha":null,"homepage":"https://tamada.github.io/fauxrest","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/tamada.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":null,"dco":null,"cla":null}},"created_at":"2026-06-21T11:12:00.000Z","updated_at":"2026-06-27T02:41:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tamada/fauxrest","commit_stats":null,"previous_names":["tamada/prest","tamada/fauxrest"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/tamada/fauxrest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tamada%2Ffauxrest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tamada%2Ffauxrest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tamada%2Ffauxrest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tamada%2Ffauxrest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tamada","download_url":"https://codeload.github.com/tamada/fauxrest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tamada%2Ffauxrest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35287410,"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-09T02:00:07.329Z","response_time":57,"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":["rest-api","static-api","static-api-generator"],"created_at":"2026-07-09T05:01:43.467Z","updated_at":"2026-07-09T05:01:44.567Z","avatar_url":"https://github.com/tamada.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fauxrest\n\n[![Version](https://img.shields.io/badge/Version-0.0.1-blue)](https://github.com/tamada/fauxrest/releases/tag/v0.0.1)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue?logo=spdx)](LICENSE)\n\n[![Coverage Status](https://coveralls.io/repos/github/tamada/fauxrest/badge.svg?branch=releases/v0.0.1)](https://coveralls.io/github/tamada/fauxrest?branch=main)\n[![Built with Rust](https://img.shields.io/badge/Built%20with-Rust-c45508?logo=rust)](https://www.rust-lang.org/)\n[![Docker](https://img.shields.io/badge/Container-quay.io/tama5/fauxrest:latest-2496ED?logo=docker)](https://quay.io/repository/tama5/fauxrest)\n\n![logo](.github/assets/logo.svg)\n\n\u003e **Pseudo-REST Static API Generator** — Compile raw JSON datasets into structured, production-ready static API endpoints deployable directly to cost-effective, infinitely scalable CDNs (GitHub Pages, Cloudflare Pages, Netlify, AWS S3, etc.).\n\n`fauxrest` is a zero-maintenance, blazingly fast command-line utility written in Rust. It eliminates the need for dynamic server processes (such as Node.js or Python) and databases for read-only APIs, enabling infinite scalability and sub-millisecond response times at zero hosting cost.\n\n---\n\n## 🚀 Features\n\n* **Two Configuration Tiers:** From zero-config auto-inference (Tier 1) to shorthand JSON routes (Tier 2).\n* **Flexible Routing Patterns:** Support Single Object, Collections (Lists), Item Details (via URL parameters), and Grouping transformations out of the box.\n* **Advanced Data Cleaning:** Deep JSONPath extraction, along with robust sanitization using `pick` (allowlist) and `omit` (denylist).\n* **Multi-Platform Target Formats:** Output formats tailored for all static hosting environments, supporting trailing slashes, directory index resolutions, extensionless files, or fully bundled files.\n* **Asset Bundling \u0026 Path Rewriting:** Scans compilation output for local asset references (e.g., images), copies them to the distribution folder, and rewrites path links safely.\n\n---\n\n## ⚓️ Installation\n\n### 🍺 Homebrew\n\nTo install `fauxrest` into your local environment, type the following command.\n\n```sh\n# install fauxrest\nbrew install tamada/tap/faurest\n```\n\n### 🐳 Container image\n\n[![Docker](https://img.shields.io/badge/Container-quay.io/tama5/fauxrest:latest-2496ED?logo=docker)](https://quay.io/repository/tama5/fauxrest)\n\nFauxrest also supports container images distributed on [Quay.io](https://quay.io/repository/tama5/fauxrest). Use it with the following command (in the following example, we use [`docker`](https://www.docker.com); however, [`podman`](https://podman.io), [`finch,`](https://runfinch.com) and/or [`apple/container`](https://github.com/apple/container) might be supported).\n\n```sh\ndocker run -it --rm -v $PWD:/opt quay.io/tama5/faurest:latest \n```\n\nOptions and arguments should follow the above command.\n\n### 💪 Compile yourself\n\nTo compile `fauxrest` from source, ensure you have Rust installed.\n\n```bash\n# Clone the repository\ngit clone https://github.com/username/fauxrest.git\ncd fauxrest\n\n# Build in release mode\ncargo build --release\n```\n\nThe compiled binary will be located in `target/release/fauxrest`.\n\n---\n\n## 🚦 Quick Start (Zero-Config Mode)\n\nNo configuration files are needed. Organize your JSON data into a directory:\n\n```text\ndata/\n├── profile.json       # direct single object\n└── users.json         # list of user objects with \"id\"\n```\n\nThen run `fauxrest`:\n\n```bash\nfauxrest data -d dist\n```\n\n`fauxrest` will scan `./data`, infer the routes, and output:\n\n```text\ndist/\n├── profile/\n│   └── index.json     # Resolves to /profile\n└── users/\n    ├── index.json     # Resolves to /users\n    ├── 1/\n    │   └── index.json # Resolves to /users/1 (derived from ID)\n    └── 2/\n        └── index.json # Resolves to /users/2 (derived from ID)\n```\n\n---\n\n## 🛠️ Configuration Tiers\n\n### Tier 1: Zero-Config (Convention over Configuration)\n*   **Object files (`profile.json`):** Mapped to `/profile`.\n*   **Array files (`users.json`)** are mapped to `/users/index.json` (list view), and if elements contain an `id` field, individual items map to `/users/:id` (detail view).\n\n### Tier 2: Shorthand Routing (`_config.json`)\nFor basic routing overrides, create a simple `_config.json` configuration in the `data` directory. The files starting with a dot (`.`) or an underscore (`_`) are ignored for the resultant JSON files.\n\n---\n\n### ⚡ Output Formats (`--format`)\n\nTo ensure seamless routing behavior across different CDN and static hosts:\n\n*   `--format index` (Default): Outputs `/endpoint/index.json`. Perfect for standard servers resolving `/endpoint/`.\n*   `--format file`: Outputs `/endpoint` file with no file extension.\n*   `--format extension`: Outputs `/endpoint.json`. Zero-risk option compatible with every hosting platform.\n\n---\n\n## 🛑 Out of Scope (Non-Functional Scope)\n\nTo maintain simplicity, high speed, and ease of deployment, certain features are explicitly **out of scope**:\n\n1.  **Dynamic Write Operations (`POST`, `PUT`, `DELETE`):** `fauxrest` is purely a static read-only generator. If your clients require dynamic, stateful database updates, you should migrate to a standard, dynamic API backend.\n2.  **API Versioning (Simultaneous `/v1` and `/v2` branches):** Maintaining legacy endpoint schemas within a static compiler adds unnecessary overhead. If multiple active versions must be supported, standard dynamic API gateways or hosting-level rewrite layers should be utilized.\n3.  **Advanced Mock Server Latency or Status Emulation:** This is a deployment publisher, not a test suite mock framework. If you need rich latency simulation (`?_delay=2000`) or status-code mocking, please use standard client-side libraries like MSW (Mock Service Worker).\n\n---\n\n## 📖 Specifications\n\nFor comprehensive technical architecture design, command line args, and subcommands, see:\n*   [Full Architectural Specification](./.github/assets/spec.md)\n*   [Command Line Interface (CLI) Specification](./.github/assets/cli_spec.md)\n\n---\n\n## 😀 About\n\n### 👩‍💼 Developers 👨‍💼\n\n- Haruaki Tamada ([@tamada](https://github.com/tamada))\n- Google Gemini, GitHub Copilot\n\n### 📄 License\n\nThis project is licensed under the MIT License. See [LICENSE](LICENSE) for details.\n\n### 📛 The project name (`fauxrest`)\n\nThe project name `fauxrest` is pronounced /fɔːrɪst/ or /foʊrɪst/, which is the same as \"forest\".\nAnd it is derived from Faux (meaning `fake' in French) and REST.\n\n### 🎃 Icon\n\n![logo](.github/assets/logo.svg)\n\nThis logo is based on the one published on [SVGRepo](https://www.svgrepo.com/svg/476993/forest).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftamada%2Ffauxrest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftamada%2Ffauxrest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftamada%2Ffauxrest/lists"}