{"id":32956858,"url":"https://github.com/quack/quack","last_synced_at":"2025-11-16T16:02:22.051Z","repository":{"id":64964687,"uuid":"43531497","full_name":"quack/quack","owner":"quack","description":":baby_chick: A multi-paradigm programming language with gradual and duck typing that targets PHP and JS","archived":false,"fork":false,"pushed_at":"2020-09-30T16:41:19.000Z","size":3357,"stargazers_count":322,"open_issues_count":7,"forks_count":37,"subscribers_count":28,"default_branch":"master","last_synced_at":"2024-05-01T13:51:16.523Z","etag":null,"topics":["functional-programming","language","programming-language","programming-paradigms","repl"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quack.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-10-02T02:03:12.000Z","updated_at":"2024-02-16T01:18:31.000Z","dependencies_parsed_at":"2023-01-13T15:00:00.073Z","dependency_job_id":null,"html_url":"https://github.com/quack/quack","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/quack/quack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quack%2Fquack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quack%2Fquack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quack%2Fquack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quack%2Fquack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quack","download_url":"https://codeload.github.com/quack/quack/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quack%2Fquack/sbom","scorecard":{"id":754771,"data":{"date":"2025-08-11","repo":{"name":"github.com/quack/quack","commit":"5fbe626e028d430c4a27c9369fd6839258d1fbbf"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":2,"reason":"Found 1/4 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating hhvm/hhvm:3.22.1 to hhvm/hhvm:3.22.1@sha256:53609052a13b3596024b95ba2cce1fafc7a3689fef48e4850036dc1ee2e04454","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 27 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T21:19:22.186Z","repository_id":64964687,"created_at":"2025-08-22T21:19:22.186Z","updated_at":"2025-08-22T21:19:22.186Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284734138,"owners_count":27054622,"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","status":"online","status_checked_at":"2025-11-16T02:00:05.974Z","response_time":65,"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":["functional-programming","language","programming-language","programming-paradigms","repl"],"created_at":"2025-11-12T23:00:20.489Z","updated_at":"2025-11-16T16:02:22.042Z","avatar_url":"https://github.com/quack.png","language":"PHP","readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"\"\u003e\n    \u003cimg alt=\"Logo\" src=\"./resource/logo.png\" width=\"600px\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ca href=\"https://app.codesponsor.io/link/osmbVLutaA7HXKYJpSN5uQYQ/quack/quack\" rel=\"nofollow\"\u003e\u003cimg src=\"https://app.codesponsor.io/embed/osmbVLutaA7HXKYJpSN5uQYQ/quack/quack.svg\" style=\"width: 888px; height: 68px;\" alt=\"Sponsor\" /\u003e\u003c/a\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://quack-lang.herokuapp.com/\"\u003e\u003cimg alt=\"Slack\" src=\"https://quack-lang.herokuapp.com/badge.svg\" height=\"20\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://travis-ci.org/quack/quack\"\u003e\u003cimg alt=\"Build Status\" src=\"https://travis-ci.org/quack/quack.svg?branch=master\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codeclimate.com/github/quack/quack\"\u003e\u003cimg alt=\"Code Climate\" src=\"https://codeclimate.com/github/quack/quack/badges/gpa.svg\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codeclimate.com/github/quack/quack/coverage\"\u003e\u003cimg alt=\"Test Coverage\" src=\"https://codeclimate.com/github/quack/quack/badges/coverage.svg\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codeclimate.com/github/quack/quack\"\u003e\u003cimg alt=\"Issue Count\" src=\"https://codeclimate.com/github/quack/quack/badges/issue_count.svg\" /\u003e\u003c/a\u003e\n  \u003ca href=\"#\"\u003e\u003cimg alt=\"Issue Count\" src=\"https://img.shields.io/badge/language-quack-green.svg\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n### What is Quack?\n\nQuack is a type-safe, multi-paradigm programming language. Quack enables you to write consistent and legible code, and run it on different platforms.\n\n### Quack is:\n\n#### Type safe\n\nYou can optionally provide type annotations for your values, although it isn't really necessary because we rely on duck and gradual typing. The Quack compiler is being built to be decidable by propagation and with a strong type inference.\n\n#### Multi-paradigm\n\nQuack supports many programming paradigms, especially functional and imperative programming. Quack also supports tacit programming,  immutability and determinism when possible.\n\n#### Metaprogrammable and extensible\n\nThe language is metaprogrammable and very extensible. You can easily build extensions for the language and provide them as libraries with annotations. You can create operators at compile time, override current operators, match operations by type, implement inline optimizations via the own compiler and easily build DSLs over it.\n\n### Basic examples\n\n#### Hello World\n\n```ruby\nfn main()\n  do print(\"Hello World!\")\nend\n```\n\n#### Factorial\n\n```ruby\n[imperative]\nfn fact(n)\n  let fact :- 1\n  for i from 1 to n do fact :- fact * i\n  ^ fact\nend\n\n[tail_call_recursion]\nfn fact(n) :- n = 0 then 1 else n * fact(n - 1)\n```\n\n### How does it work?\n\nFirst of all, Quack compiler is, currently, entirely written in PHP, by hand. I'm doing this because I want to easily make it self-hosted and write the compiler in itself later. The front-end of the compiler is easy to extend and you can provide multiple back-ends for it. I'm writing standard libraries in the language for itself to allow interpreting it and running the compiler on desktop, on browser and interpreting it using the evaluator of any target language. Basically, when integrating Quack with your main programming language, you need to provide a set of type annotations for your libraries and for the language core. For JavaScript, I'm writing a tool that is able to convert TypeScript type definitions `.d.ts` for Quack type definitons `.qkt`, making the life easier. The initial support will be provided for **PHP**, **Python** and **JavaScript**. Please note that Quack is in its early stage, and in constant development. Quack also provides a [REPL that you can try online here](http://108.167.188.125/~conta180/quack/), currently generating the AST of the source.\n\n### Get Quack\n\n#### REPL\n\nTo get and try Quack, the steps are simple. Clone this repository and install the `src` folder under `/quack/quack`. I promise I'll provide a better way to do it later. After, `cd /quack/quack/src/repl` and `php QuackRepl.php --ast` (you can also try with `--python`, but it is unstable at the moment). You will be sent to the REPL. Currently, the REPL is only compatible with POSIX systems. I'll implement support for Windows later, I promise too!\n\n#### Run tests\n\nAssert that everything is **OK**. There is a small set of tests that may be run.\n\n`make test module=module_name`\n\n**Modules**\n\n| `lexer` | `parser` |\n|---------|----------|\n\n### Syntax Support\n\n#### Vim\n\nQuack syntax support to Vim's built-in editor [quack/editor/vim/quack.vim](https://github.com/quack/quack/tree/master/editor/vim)\n\n### Contribute to Quack!\n\nYay! Your contribution to the Quack language core is **very** important! There is **a lot of work** to be done, and you can find it in this repository's issues! Look for the `accepting-pull-requests` label! Newcomers to the open-source contribution process are very welcome! Please, read the `CONTRIBUTING` file in this repository as well!\n\nThere are many ways to help! You can fix typos, improve code quality, suggest changes, suggest language features, be engaged on the language discussion, standardize the code, doc-comment the methods, write and run tests... The work is just starting out!\n\nWe also need to implement support of Quack for the different text editors. If you want to implement for some, contact me and I'll write the syntactic specification and the semantic of the blocks for you!\n\nQuestions or concerns? Contact me at \u003cmarcelocamargo@linuxmail.org\u003e and I'll be happy to answer.\n","funding_links":[],"categories":["Functional Languages that Compile to JavaScript"],"sub_categories":["Lenses"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquack%2Fquack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquack%2Fquack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquack%2Fquack/lists"}