{"id":13600808,"url":"https://github.com/prql/prql","last_synced_at":"2025-12-16T11:53:10.447Z","repository":{"id":37359692,"uuid":"449091292","full_name":"PRQL/prql","owner":"PRQL","description":"PRQL is a modern language for transforming data — a simple, powerful, pipelined SQL replacement","archived":false,"fork":false,"pushed_at":"2025-05-12T17:46:11.000Z","size":23200,"stargazers_count":10283,"open_issues_count":264,"forks_count":228,"subscribers_count":44,"default_branch":"main","last_synced_at":"2025-05-13T11:06:33.813Z","etag":null,"topics":["data","pipeline","sql"],"latest_commit_sha":null,"homepage":"https://prql-lang.org","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PRQL.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","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}},"created_at":"2022-01-18T00:37:55.000Z","updated_at":"2025-05-13T01:39:31.000Z","dependencies_parsed_at":"2023-10-15T17:04:56.358Z","dependency_job_id":"fa03250e-b811-4d2e-953c-7d447bcfb33f","html_url":"https://github.com/PRQL/prql","commit_stats":{"total_commits":1562,"total_committers":54,"mean_commits":"28.925925925925927","dds":0.350832266325224,"last_synced_commit":"27bb50abdba4ed575451b0900a5d954aece5777b"},"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PRQL%2Fprql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PRQL%2Fprql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PRQL%2Fprql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PRQL%2Fprql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PRQL","download_url":"https://codeload.github.com/PRQL/prql/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253929364,"owners_count":21985802,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["data","pipeline","sql"],"created_at":"2024-08-01T18:00:49.065Z","updated_at":"2025-12-16T11:53:10.432Z","avatar_url":"https://github.com/PRQL.png","language":"Rust","readme":"# PRQL\n\n\u003c!-- User badges on first line (language docs \u0026 chat) --\u003e\n\n\u003c!-- Discord online count is blocked rate limits, can try swapping back [![Discord](https://img.shields.io/discord/936728116712316989?label=discord%20chat\u0026style=for-the-badge)](https://discord.gg/eQcfaCmsNc) --\u003e\n\u003c!-- Twitter followers doesn't work, but leaving the badge there --\u003e\n\n[![Website](https://img.shields.io/badge/INTRO-WEB-blue?style=for-the-badge)](https://prql-lang.org)\n[![Playground](https://img.shields.io/badge/INTRO-PLAYGROUND-blue?style=for-the-badge)](https://prql-lang.org/playground)\n[![Language Docs](https://img.shields.io/badge/DOCS-BOOK-blue?style=for-the-badge)](https://prql-lang.org/book)\n[![Discord](https://img.shields.io/badge/DISCORD-CHAT-indigo?style=for-the-badge\u0026logo=discord)](https://discord.gg/eQcfaCmsNc)\n[![Twitter](https://img.shields.io/twitter/follow/prql_lang?color=%231DA1F2\u0026style=for-the-badge\u0026logo=x)](https://twitter.com/prql_lang)\n\n\u003c!-- Dev badges on second line --\u003e\n\n[![GitHub CI Status](https://img.shields.io/github/actions/workflow/status/prql/prql/tests.yaml?event=push\u0026branch=main\u0026logo=github\u0026style=for-the-badge)](https://github.com/PRQL/prql/actions?query=branch%3Amain+workflow%3Atests)\n[![GitHub contributors](https://img.shields.io/github/contributors/PRQL/prql?style=for-the-badge\u0026logo=github)](https://github.com/PRQL/prql/graphs/contributors)\n[![Stars](https://img.shields.io/github/stars/PRQL/prql?style=for-the-badge\u0026logo=github)](https://github.com/PRQL/prql/stargazers)\n\n**P**ipelined **R**elational **Q**uery **L**anguage, pronounced \"Prequel\".\n\nPRQL is a modern language for transforming data — a simple, powerful, pipelined\nSQL replacement. Like SQL, it's readable, explicit and declarative. Unlike SQL,\nit forms a logical pipeline of transformations, and supports abstractions such\nas variables and functions. It can be used with any database that uses SQL,\nsince it compiles to SQL.\n\nPRQL can be as simple as:\n\n```elm\nfrom tracks\nfilter artist == \"Bob Marley\"                 # Each line transforms the previous result\naggregate {                                   # `aggregate` reduces each column to a value\n  plays    = sum plays,\n  longest  = max length,\n  shortest = min length,                      # Trailing commas are allowed\n}\n```\n\nHere's a larger example of the language:\n\n```elm\nfrom employees\nfilter start_date \u003e @2021-01-01               # Clear date syntax\nderive {                                      # `derive` adds columns / variables\n  gross_salary = salary + (tax ?? 0),         # Terse coalesce\n  gross_cost = gross_salary + benefits_cost,  # Variables can use other variables\n}\nfilter gross_cost \u003e 0\ngroup {title, country} (                      # `group` runs a pipeline over each group\n  aggregate {                                 # `aggregate` reduces each group to a value\n    average gross_salary,\n    sum_gross_cost = sum gross_cost,          # `=` sets a column name\n  }\n)\nfilter sum_gross_cost \u003e 100_000               # `filter` replaces both of SQL's `WHERE` \u0026 `HAVING`\nderive id = f\"{title}_{country}\"              # F-strings like Python\nderive country_code = s\"LEFT(country, 2)\"     # S-strings allow using SQL as an escape hatch\nsort {sum_gross_cost, -country}               # `-country` means descending order\ntake 1..20                                    # Range expressions (also valid here as `take 20`)\n```\n\nFor more on the language, more examples \u0026 comparisons with SQL, visit\n[prql-lang.org][prql website]. To experiment with PRQL in the browser, check out\n[PRQL Playground][prql playground].\n\n## Current Status - December 2025\n\nPRQL is ready to use by the intrepid, either with our supported integrations, or\nwithin your own tools, using one of our supported language bindings.\n\nPRQL still has some bugs and some missing features, and is probably only ready\nto be rolled out to non-technical teams for fairly simple queries.\n\nDevelopment has slowed in the past few months as we decide how to work on a new\nresolver, which will let us squash many bugs and simplify our code a lot. It'll\nalso let us scale the language without scaling the complexity of the compiler.\n\nWhile we figure that out, we're also thinking about:\n\n- Ensuring our supported features feel extremely robust; resolving any\n  [priority bugs](https://github.com/PRQL/prql/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Apriority).\n  As more folks have started using PRQL, we've had more bug reports — good news,\n  but also gives us more to work on.\n- Filling remaining feature gaps, so that PRQL is possible to use for almost all\n  standard SQL queries.\n- Expanding our set of supported features — we are working to add experimental\n  support for modules / multi-file projects, and for auto-formatting.\n\nAnd:\n\n- Making it really easy to start using PRQL. We're doing that by building\n  integrations with tools that folks already use; for example a VS Code\n  extension, Jupyter integration, and the recent\n  [QStudio](https://www.timestored.com/qstudio/prql-ide) integration. If there\n  are tools you're familiar with that you think would be open to integrating\n  with PRQL, please let us know in an issue.\n- Whether all our initial decisions were correct — for example\n  [how we handle window functions outside of a `window` transform](https://github.com/PRQL/prql/issues/2723).\n- Making it easier to contribute to the compiler. We have a wide group of\n  contributors to the project, but contributions to the compiler itself are\n  quite concentrated. We're keen to expand this;\n  [#1840](https://github.com/PRQL/prql/issues/1840) for feedback, some\n  suggestions on starter issues are below.\n\nWe're increasingly open to contributions for bigger rewrites of the resolver\ngiven how bottlenecked we are on it. If you're interested in contributing,\nplease reach out in an issue or on Discord.\n\n## Get involved\n\nTo stay in touch with PRQL:\n\n- Follow us on [Twitter](https://twitter.com/prql_lang)\n- Join us on [Discord](https://discord.gg/eQcfaCmsNc)\n- Star this repo\n- [Contribute][contributing] — join us in building PRQL, through writing code\n  [(send us your use-cases!)](https://github.com/PRQL/prql/discussions), or\n  inspiring others to use it.\n- See the [development][development] documentation for PRQL. It's easy to get\n  started — the project can be built in a couple of commands, and we're a really\n  friendly community!\n- For those who might be interested in contributing to the code now, check out\n  issues with the\n  [good first issue](https://github.com/PRQL/prql/labels/good%20first%20issue)\n  label. Always feel free to ask questions or open a draft PR.\n\n## Explore\n\n- [PRQL Playground][prql playground] — experiment with PRQL in the browser.\n- [PRQL Book][prql book] — the language documentation.\n- [Jupyter magic](https://pyprql.readthedocs.io/en/latest/magic_readme.html) —\n  run PRQL in Jupyter, either against a DB, or a Pandas DataFrame / CSV /\n  Parquet file through DuckDB.\n- [pyprql Docs](https://pyprql.readthedocs.io) — the pyprql documentation, the\n  Python bindings to PRQL, including Jupyter magic.\n- [PRQL VS Code extension](https://marketplace.visualstudio.com/items?itemName=prql-lang.prql-vscode)\n- [prqlc-js](https://www.npmjs.com/package/prqlc) — JavaScript bindings for\n  PRQL.\n\n## Repo organization\n\nThis repo is composed of:\n\n- **[prqlc](./prqlc/)** — the compiler, written in rust, whose main role is to\n  compile PRQL into SQL. Also contains the CLI and bindings from various\n  languages.\n- **[web](./web/)** — our web content: the [Book][prql book],\n  [Website][prql website], and [Playground][prql playground].\n\nIt also contains our testing / CI infrastructure and development tools. Check\nout our [development docs][development] for more details.\n\n## Contributors\n\nMany thanks to those who've made our progress possible:\n\n[![Contributors](https://contrib.rocks/image?repo=PRQL/prql)](https://github.com/PRQL/prql/graphs/contributors)\n\n[prql book]: https://prql-lang.org/book\n[prql website]: https://prql-lang.org\n[contributing]: https://prql-lang.org/book/project/contributing/\n[development]: https://prql-lang.org/book/project/contributing/development.html\n[prql playground]: https://prql-lang.org/playground\n","funding_links":[],"categories":["Other","Rust"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprql%2Fprql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprql%2Fprql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprql%2Fprql/lists"}