{"id":18774547,"url":"https://github.com/staab/quack","last_synced_at":"2026-01-26T17:35:30.303Z","repository":{"id":85234013,"uuid":"337806222","full_name":"staab/quack","owner":"staab","description":"It's a DSL for full-stack web applications","archived":false,"fork":false,"pushed_at":"2021-02-10T18:20:14.000Z","size":6,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-16T12:31:05.689Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"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/staab.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}},"created_at":"2021-02-10T17:52:02.000Z","updated_at":"2021-02-10T18:30:45.000Z","dependencies_parsed_at":"2024-03-08T11:30:50.733Z","dependency_job_id":null,"html_url":"https://github.com/staab/quack","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/staab/quack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/staab%2Fquack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/staab%2Fquack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/staab%2Fquack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/staab%2Fquack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/staab","download_url":"https://codeload.github.com/staab/quack/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/staab%2Fquack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28783028,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T13:55:28.044Z","status":"ssl_error","status_checked_at":"2026-01-26T13:55:26.068Z","response_time":59,"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":[],"created_at":"2024-11-07T19:38:35.002Z","updated_at":"2026-01-26T17:35:30.287Z","avatar_url":"https://github.com/staab.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Quack\n\nIt's a DSL for full-stack web development that compiles to python, html, and tiny bits of javascript.\n\nFeatures/Goals:\n\n- Extensibility (use js, html, md, py functions to escape to whatever native nonsense you want)\n- Beginner-friendly syntax. Inspired by python, but with less syntax to trip beginners up.\n- Easy to learn, powerful enough for experienced developers (on small projects).\n- Dynamic rather than lexical scoping for less boilerplate. Use it wisely!\n\nRight now, it's very much in the exploratory phase. See the `example` directory for an example real-world app modeled after my [disc golf PWA](https://duthie-park.anhyzer.io/). See below for a teeny tiny example.\n\nThe big idea here is to use dynamic scope for all state. I'm not sure if I'll introduce syntax to explicitly denote where the state is supposed to come from, but the idea is that if the framework does its job by handling form state, loading state, error state, etc, there will be far less bookkeeping to do, and state variables can be focused on a well-defined domain, for which (hopefully) there is a well-defined vocabulary.\n\n# Tiny example\n\n```\nApp\n  # Declare a variable and load the whole todos table\n  data todos\n    all todos\n\n  # If you want, just write html\n  html \"components/header.html\"\n\n  # Tell quack where to put the pages\n  slot page\n\n# A model determines a database model. This is automatically exposed for simple\n# CRUD operations, but for more sophisticated access patterns use views and actions.\nModel todo todos\n  title = text\n  completed? = boolean\n\n# Declare a route\nPage /\n  # Iterate over data declared in some parent scope\n  each todos as todo\n    # The show function renders a component. There are builtins that can be themed,\n    # and the Component block lets you declare custom ones.\n    show row\n      show cell\n        show checkbox\n          # When value changes, todo is mutated, affecting todos data\n          value = todo.completed?\n          # Action is debounced, occurs after todo is modified.\n          # The save built-in action persists the new value of the todo to the database.\n          action = save todo\n      show cell\n        show input\n          value = todo.title\n          action = save todo\n\n  show button\n    text = \"Add Todo\"\n    action = add_todo\n\n# Custom actions can be defined. While this is executing, a loading state will be shown\n# on the button that triggered it.\nAction add_todo\n  # Construct a new associative data structure local to the action\n  data todo\n    title = \"New Todo\"\n    completed? = false\n\n  # Append is a built-in function adding the todo to the todos data declared in app\n  append todos todo\n\n  # Save the todo to the database. Actions are transactional, so if this fails, the todos\n  # array won't be mutated and an error will be shown (by default maybe a toast?)\n  save todo\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstaab%2Fquack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstaab%2Fquack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstaab%2Fquack/lists"}