{"id":43375268,"url":"https://github.com/goradd/goradd","last_synced_at":"2026-02-02T06:28:58.479Z","repository":{"id":34944171,"uuid":"163501882","full_name":"goradd/goradd","owner":"goradd","description":"Rapid web application development for GO","archived":false,"fork":false,"pushed_at":"2024-04-19T12:45:08.000Z","size":7305,"stargazers_count":9,"open_issues_count":38,"forks_count":5,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-08-14T14:46:10.462Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/goradd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2018-12-29T10:26:51.000Z","updated_at":"2023-12-20T17:59:27.000Z","dependencies_parsed_at":"2023-11-13T18:29:06.773Z","dependency_job_id":"8f2963d1-d1e1-4dc1-b570-f55dad46ff33","html_url":"https://github.com/goradd/goradd","commit_stats":null,"previous_names":[],"tags_count":125,"template":false,"template_full_name":null,"purl":"pkg:github/goradd/goradd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goradd%2Fgoradd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goradd%2Fgoradd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goradd%2Fgoradd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goradd%2Fgoradd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/goradd","download_url":"https://codeload.github.com/goradd/goradd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goradd%2Fgoradd/sbom","scorecard":{"id":441416,"data":{"date":"2025-08-11","repo":{"name":"github.com/goradd/goradd","commit":"aad2465f23b38a8a4025ed975d3b14cebf1ce079"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/go.yml:1","Warn: no topLevel permission defined: .github/workflows/postgres.yml:1","Info: no jobLevel write permissions found"],"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":4,"reason":"Found 4/9 approved changesets -- score normalized to 4","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":"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":"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/goradd/goradd/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/goradd/goradd/go.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/go.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/goradd/goradd/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/postgres.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/goradd/goradd/postgres.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/postgres.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/goradd/goradd/postgres.yml/main?enable=pin","Warn: containerImage not pinned by hash: internal/install/goradd-project/build/docker/Dockerfile:1: pin your Docker image by updating alpine:latest to alpine:latest@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 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"}},{"name":"Vulnerabilities","score":4,"reason":"6 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2024-2687 / GHSA-4v7x-pqxf-cx7m","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T05:39:43.872Z","repository_id":34944171,"created_at":"2025-08-19T05:39:43.872Z","updated_at":"2025-08-19T05:39:43.872Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29007089,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T04:25:24.522Z","status":"ssl_error","status_checked_at":"2026-02-02T04:24:51.069Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":"2026-02-02T06:28:57.846Z","updated_at":"2026-02-02T06:28:58.474Z","avatar_url":"https://github.com/goradd.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Build Status](https://img.shields.io/github/actions/workflow/status/goradd/goradd/go.yml?branch=main)\n# GoRADD\nA rapid Web application development framework for Go.\n\nGoRADD is a monolithic web development framework for rapidly creating a web application from a concept\nin your mind and then allowing you to as easily as possible maintain that application through\nall the twists and turns of the change process. It is ideal for prototyping, intranet websites,\nwebsites that are very data intensive with many forms to gather information from users,\nwebsites that require the security and speed of a compiled language, websites with thousands of\nsimultaneous users, and websites being maintained by one or a small group of developers. It is\nparticularly good for developers new to GO and/or new to web development.\n\n## Installation\nSee the [Quick Start](doc/quickstart.md) guide to get started.\n\n## Requirements\n- Go 1.21 or greater\n- A supported database up and running on your local development computer. \nCurrent supported databases are:\n    - Mysql\n    - Postgres\n\n### For Developing GoRADD itself\n- Sass (to build the css files from the scss source)\n\n## Goals\n1) 80-20 rule, where out of the box GoRADD will do most of the hard work of building a website, and\nwill quickly get you a working website, but not necessarily one that you will want to ship.\nGoRADD is architected to allow you to make changes and plug in other open-source \nsoftware as you need.\n1) Incremental changes. Most development processes go through a lengthy requirement analysis process,\nfollowed by a design process, and a lengthy build process, only to find out that what you built wasn't \nreally what was needed. Instead, GoRADD gets you a working website quickly, and then lets you build out\nyour application incrementally. It\ntries to make it easy to restructure your website, even\nat the data structure level, and have your changes filter through your application quickly without\nrequiring a complete rewrite. \n1) Layered development. GoRADD has its code, you have your code, and then there is an in-between\ninterface that changes over time. GoRADD uses code generation to create this interface, and clearly\ndelineates the code that you can change to modify the interface, vs. code that it will generate as you\nchange your data model. The result is a product that is easy to change as your world and\nrequirements change.\n1) Most development happens in GO. What the user does in the browser is mirrored on the\nserver, which allows you to work in a way that feels like you are building a desktop application. This\nmakes your developers more productive and it allows you to build your app using common GO tools like\nthe built-in unit test environment and documentation server. You can still work in javascript if you\nwant to or need to do custom UI work, but often you don't have to.\n1) Stability. We want to build applications that real people use, and that means reliance on tried\nand true technologies that work on a broad range of browsers and servers, rather than technologies\nthat require lots of Polyfills for emerging standards.\n1) Progressive enhancement. If you use the provided widgets, you can create a website\nthat works even if the client turns off Javascript. All major browsers are currently supported,\nbut we hope to support Opera Mini as well.\n1) Rich libraries of widgets. GoRADD provides standard widgets corresponding to \nbasic html controls, and also provides Bootstrap widgets. If you have a particular\ncss or javascript widget library you want to support, building the GoRADD\ninterface is fairly easy to do, and the Bootstrap library included gives you a \nmodel to follow.\n1) Scalability. GoRADD is architected for scalability. All user state information is serializable\nto key-value stores. You might need to build the interface to the particular key-value store you\nare interested in, but that is not difficult. Some specific issues to consider:\n    1. GoRADD requires a MySQL or Postgres database at this point for your main data store. \n        SQL is great for creating most common data\n           structures, is great when you need to change your structure without destroying data, and\n           is fast enough for most applications. However, all data access is done through a common API,\n           so switching an application that is already written to another SQL database like Postgres, Oracle, or any\n            other database is very straight-forward\n           and is just a matter of implementing the database layer.\n    2. GoRADD maintains the state of each user of the website in something we call the *pagestate*.\n       The pagestate is serializable to any key-value store. Currently, only an in-memory store is\n       provided, but writing an interface to any common key-value store is easy.\n    3. Live updates work through a pub/sub mechanism. Goradd provides a single-server in-memory \n       system out of the box, but its easy to switch to any other pub/sub mechanism, including \n       distributed systems like pubnub, ally, google cloud messaging, etc. There are no payloads\n       with the messages and traffic is minimal.\n\n### Future Goals\n* Expand database drivers, including NoSQL support\n* WebComponents. WebComponent architecture fits particularly well with goradd's architecture. However,\nWebComponents are not fully supported by all major browsers. As WebComponents gain traction, we hope\nto use them for future browser widgets.\n* Automated generation of a REST Api, including generation of Flutter client code.\n\n### Anti-patterns\n1) GoRADD's html server is not microservice based. \nWhile you can create microservices that serve parts of your application, at its\ncore goradd is a monolithic framework that includes an ORM, an MVC architecture, and a basic control\nand form management library. That said, GoRADD is still very scalable.\n2) Object-oriented. Some of goradd uses a code pattern that mirrors traditional object-oriented\ninheritance and gets around some of GO's limitations in this area, including implementing \nvirtual functions. We have found this particularly useful in the control library.\nIf you hate inheritance, goradd is not for you. If you don't mind it, but you still\nlike object composition too, this is your place.\n3) Code generation. GoRADD relies heavily on code generation, and in particular uses the\nrelated github.com/goradd/got template engine to generate code.\n\n## Acknowledgements\nGoRADD is a port of the PHP framework [QCubed](https://github.com/qcubed/qcubed). QCubed itself was a \nfork of the PHP framework written by Mike Ho called [QCodo](https://github.com/qcodo/qcodo).\nMike is the original mastermind of many of the concepts in GoRADD, like:\n- A code-generated ORM\n- The use of \"nodes\" to describe database entities AND the relationships between them.\n- Code-generated CRUD forms to get you started.\n- Scaffolding that separates code-generated code from developer code so that code-generation\ncan continue throughout the life of the project.\n- A lightweight javascript layer for processing events and actions through ajax.\n- The formstate engine to mirror the state of html and javascript widgets on the server-side\nso that the server-side engineer has complete control over what is happening in the html without\nneeding to write javascript.\n\nGoRADD relies on a number of other open-source projects, including:\n- Alex Edward's [SCS Session Manager Library](https://github.com/alexedwards/scs)\n- Akeda Bagus' [Inflector Library](https://github.com/gedex/inflector)\n- Gorilla's [Websocket Library](https://github.com/gorilla/websocket)\n- Kenneth Shaw's [Snaker Library](https://github.com/kenshaw/snaker)\n- Stretchr's testing library [Testify](https://github.com/stretchr/testify)\n- Andy Balholm's [Brotli Library](github.com/andybalholm/brotli)\n- Microcosm's injection prevention library [Blue Monday](github.com/microcosm-cc/bluemonday)\n- Russ Ross's Markdown library [Black Friday](github.com/russross/blackfriday)\n\nGoRADD was created and is maintained by [Shannon Pekary](https://github.com/spekary)\n\n### Thanks To\n[JetBrains](https://www.jetbrains.com/go) for use of the GoLand Go Editor\n\n![BrowserStack](https://d3but80xmlhqzj.cloudfront.net/production/images/static/header/bstack-logo.svg) \n[BrowserStack](http://browserstack.com) for automated browser testing tools\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoradd%2Fgoradd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoradd%2Fgoradd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoradd%2Fgoradd/lists"}