{"id":35627330,"url":"https://github.com/fraiseql/fraiseql","last_synced_at":"2026-04-26T10:03:26.051Z","repository":{"id":338405817,"uuid":"1157457421","full_name":"fraiseql/fraiseql","owner":"fraiseql","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-25T20:42:16.000Z","size":473693,"stargazers_count":4,"open_issues_count":32,"forks_count":1,"subscribers_count":0,"default_branch":"dev","last_synced_at":"2026-04-25T22:27:41.273Z","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":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fraiseql.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":"roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"evoludigit","polar":"evoludigit"}},"created_at":"2026-02-13T20:58:10.000Z","updated_at":"2026-04-17T17:25:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fraiseql/fraiseql","commit_stats":null,"previous_names":["fraiseql/fraiseql"],"tags_count":172,"template":false,"template_full_name":null,"purl":"pkg:github/fraiseql/fraiseql","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraiseql%2Ffraiseql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraiseql%2Ffraiseql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraiseql%2Ffraiseql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraiseql%2Ffraiseql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fraiseql","download_url":"https://codeload.github.com/fraiseql/fraiseql/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraiseql%2Ffraiseql/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32292960,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T09:34:17.070Z","status":"ssl_error","status_checked_at":"2026-04-26T09:34:00.993Z","response_time":129,"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":["fastapi","graphql","postgresql","python","rag"],"created_at":"2026-01-05T08:11:54.724Z","updated_at":"2026-04-26T10:03:26.032Z","avatar_url":"https://github.com/fraiseql.png","language":"Rust","funding_links":["https://github.com/sponsors/evoludigit","https://polar.sh/evoludigit"],"categories":[],"sub_categories":[],"readme":"# FraiseQL\n\n[![Rust](https://img.shields.io/badge/language-Rust-orange.svg)](https://www.rust-lang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT%20OR%20Apache--2.0-blue.svg)](LICENSE)\n[![Crates.io](https://img.shields.io/crates/v/fraiseql.svg)](https://crates.io/crates/fraiseql)\n[![Test Coverage](https://img.shields.io/badge/tests-10000%2B-brightgreen.svg)](./crates/fraiseql-core/tests/)\n![Build](https://github.com/fraiseql/fraiseql/actions/workflows/ci.yml/badge.svg)\n\n**Compiled GraphQL execution engine.** Define schemas in Python or TypeScript, compile to optimized SQL at build time, execute with predictable sub-10ms latency.\n\nWhere Hasura and PostGraphile interpret GraphQL at request time, FraiseQL generates deterministic SQL templates during compilation, achieving zero runtime query planning overhead for known query patterns.\n\n## Quick Start\n\n```python\n# 1. Define schema (Python)\nimport fraiseql\n\n@fraiseql.type\nclass User:\n    id: int\n    name: str\n    email: str\n\n@fraiseql.query\ndef users(limit: int = 10) -\u003e list[User]:\n    return fraiseql.config(sql_source=\"v_user\", returns_list=True)\n\nfraiseql.export_schema(\"schema.json\")\n```\n\n```bash\n# 2. Compile\nfraiseql-cli compile schema.json -o schema.compiled.json\n\n# 3. Run\nfraiseql-server --config fraiseql.toml --schema schema.compiled.json\n\n# 4. Query\ncurl -X POST http://localhost:8080/graphql \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"{ users(limit: 5) { id name email } }\"}'\n```\n\n## Why FraiseQL?\n\n1. **Compile-time SQL generation.** SQL is generated at build time for deterministic queries. Your schema is analyzed once at build; queries execute without interpretation or query-planning overhead.\n\n2. **Schema-as-code authoring.** Define schemas in Python or TypeScript with decorators, compile to optimized JSON. No runtime language bridge, no FFI.\n\n3. **Multi-database from one schema.** PostgreSQL, MySQL, SQLite, SQL Server from a single compiled schema. Per-database SQL generation, not ORM translation.\n\n## Performance\n\n```\nTraditional GraphQL:  Schema + Query -\u003e Parse -\u003e Plan -\u003e SQL -\u003e Execute -\u003e Serialize\n                      ~~~~~~~~~~~~~~ runtime overhead ~~~~~~~~~~~~~~\n\nFraiseQL:             Compiled Schema -\u003e SQL Template -\u003e Execute -\u003e Serialize\n                      ~~~~ zero planning overhead ~~~~\n```\n\nBenchmarks: `crates/fraiseql-core/benches/` (Criterion, reproducible).\n\n## Architecture\n\n```\nAuthoring (Python/TS)     Compilation (Rust)        Runtime (Rust)\n      |                         |                        |\n  schema.json    +    fraiseql.toml    -\u003e    schema.compiled.json    -\u003e    Server\n  (types)             (config)               (types + SQL templates)      (execute)\n```\n\nPython and TypeScript are authoring languages only. The runtime is pure Rust with zero language bridge overhead.\n\n## Database Support\n\n| Feature          | PostgreSQL | MySQL | SQL Server | SQLite |\n|------------------|:----------:|:-----:|:----------:|:------:|\n| Queries          | ✅         | ✅    | ✅         | ✅     |\n| Mutations        | ✅         | ✅    | ✅         | ✅ DirectSql |\n| Relay pagination | ✅         | ✅    | ✅         | ❌     |\n| Full-text search | ✅         | ⚠️    | ⚠️         | ❌     |\n| Subscriptions    | ✅         | ⚠️    | ⚠️         | ❌     |\n| Production use   | ✅         | ✅    | ✅         | ❌     |\n\n**PostgreSQL** is the primary platform with full feature support.\n\n**MySQL** (v2.1+) and **SQL Server** support queries, mutations, and relay cursor pagination. Subscriptions use polling-based observer bridges (not LISTEN/NOTIFY).\n\n**SQLite** supports queries and mutations (via DirectSql strategy) but not relay pagination, full-text search, or subscriptions. Recommended for local development and testing only.\n\nSee [docs/database-compatibility.md](docs/database-compatibility.md) for the full feature matrix.\n\n## Wire Protocol\n\n`fraiseql-wire` is a separate read-only Rust crate for streaming bulk reads directly from PostgreSQL views. It is not part of the FraiseQL server. Mutations go through the GraphQL HTTP endpoint.\n\n## Schema Authoring SDKs\n\n| Tier | Languages |\n|------|-----------|\n| Tier 1 (Supported) | Python, TypeScript, Java, Go |\n| Tier 2 (Maintained) | PHP, Rust |\n\n## Installation\n\n**Rust applications:**\n\n```toml\n[dependencies]\nfraiseql = { version = \"2.0.0\", features = [\"server\"] }\n```\n\n**Schema authoring:**\n\n```bash\npip install fraiseql        # Python\nnpm install fraiseql        # TypeScript\n```\n\n**Feature flags:**\n\n| Feature | Use Case |\n|---------|----------|\n| `postgres` (default) | PostgreSQL only |\n| `mysql`, `sqlite`, `sqlserver` | Additional databases |\n| `server` | HTTP GraphQL server |\n| `observers` | Post-mutation event hooks |\n| `arrow` | Apache Arrow Flight for analytics |\n| `wire` | Streaming JSON over PostgreSQL wire protocol |\n| `full` | All features |\n\n## Security\n\nAll queries are parameterized at compile time. Zero unsafe code (forbidden). Additional enterprise features:\n\n- OAuth2/OIDC authentication (7+ providers)\n- Field-level authorization and encryption-at-rest\n- Audit logging (file, PostgreSQL, Syslog)\n- Rate limiting on auth endpoints\n- Error sanitization (no implementation details leaked)\n- Constant-time token comparison\n\n### APQ Cache RLS Dependency\n\nAutomatic Persisted Query (APQ) caching isolates results per user via Row-Level Security. Different users must generate different WHERE clauses through their RLS policies. If RLS is disabled or generates an empty WHERE clause, two users with the same query and variables will receive the same cached response. Always verify RLS is active in multi-tenant deployments with caching enabled.\n\nSee [Security Checklist](docs/guides/production-security-checklist.md) for production hardening.\n\n## Documentation\n\n- [Getting Started](docs/guides/getting-started.md) -- 5-minute quick start\n- [Architecture Documentation](docs/architecture/README.md) -- System design, compiler internals, security model\n- [Value Proposition](docs/value-proposition.md) -- What FraiseQL does and does not do\n- [Roadmap](roadmap.md) -- Prioritized next steps\n- [Changelog](CHANGELOG.md) -- User-facing changes per version\n- [SLA/SLO Targets](docs/sla.md) -- Availability and latency objectives\n- [Operational Runbooks](docs/runbooks/) -- Incident response procedures\n- [Security Checklist](docs/guides/production-security-checklist.md) -- Production hardening\n- [Migration from v1](docs/guides/v1-to-v2-migration.md) -- Upgrade path\n\n## Quality\n\n- 10,000+ tests (unit, integration, E2E, property-based, fuzz)\n- Cross-SDK parity suite: all 9 authoring SDKs (Python, TypeScript, Go, Java, PHP, C#, F#, Elixir, Rust SDK) produce identical schema JSON\n- Golden fixture regression guards for every field in the compiled schema contract (protects against issue-#53-class bugs)\n- Zero unsafe code (forbidden at compile time)\n- Clippy pedantic as deny with justified suppressions\n- Load testing infrastructure (k6)\n- 12 operational runbooks\n\n## Repository Layout\n\n```\ncrates/               # Rust engine crates (fraiseql-core, fraiseql-server, fraiseql-cli, …)\nsdks/official/        # Official authoring SDKs (Python, TypeScript, Java, Go, Rust, PHP, …)\nsdks/community/       # Community-maintained SDKs\ndocs/                 # Architecture docs, guides, runbooks\nvendor/               # Vendored Rust patch dependencies ([patch.crates-io])\ntutorial/             # Interactive tutorial platform — separate product, co-located for convenience\n```\n\n**Fraisier** (deployment orchestration tool) has been moved to its own repository at\n[`github.com/fraiseql/fraisier`](https://github.com/fraiseql/fraisier).\n\nSee [`sdks/official/README.md`](sdks/official/README.md) for the full SDK inventory.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## License\n\nDual-licensed under MIT or Apache 2.0. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffraiseql%2Ffraiseql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffraiseql%2Ffraiseql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffraiseql%2Ffraiseql/lists"}