{"id":13393956,"url":"https://github.com/maxence-charriere/go-app","last_synced_at":"2026-02-08T10:01:06.631Z","repository":{"id":37227945,"uuid":"70646781","full_name":"maxence-charriere/go-app","owner":"maxence-charriere","description":"A package to build progressive web apps with Go programming language and WebAssembly.","archived":false,"fork":false,"pushed_at":"2026-02-04T12:08:37.000Z","size":239268,"stargazers_count":8854,"open_issues_count":50,"forks_count":404,"subscribers_count":143,"default_branch":"master","last_synced_at":"2026-02-04T22:53:09.677Z","etag":null,"topics":["awesome-go","go","golang","gui","pwa","ui","wasm"],"latest_commit_sha":null,"homepage":"https://go-app.dev","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/maxence-charriere.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"maxence-charriere","patreon":null,"open_collective":"go-app","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2016-10-12T00:31:33.000Z","updated_at":"2026-02-04T10:21:24.000Z","dependencies_parsed_at":"2023-02-14T16:01:05.803Z","dependency_job_id":"2296ae95-d1e8-4f7f-9d34-ef2e4c9c0040","html_url":"https://github.com/maxence-charriere/go-app","commit_stats":{"total_commits":1081,"total_committers":25,"mean_commits":43.24,"dds":"0.031452358926919555","last_synced_commit":"25ff16972d8f322d54879e190c6c4bf9d6faffff"},"previous_names":["maxence-charriere/app","murlokswarm/app"],"tags_count":140,"template":false,"template_full_name":null,"purl":"pkg:github/maxence-charriere/go-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxence-charriere%2Fgo-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxence-charriere%2Fgo-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxence-charriere%2Fgo-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxence-charriere%2Fgo-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxence-charriere","download_url":"https://codeload.github.com/maxence-charriere/go-app/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxence-charriere%2Fgo-app/sbom","scorecard":{"id":629043,"data":{"date":"2025-08-11","repo":{"name":"github.com/maxence-charriere/go-app","commit":"5877c594ced957e3d22eb69e2ed05ec893f1387e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.3,"checks":[{"name":"Maintained","score":1,"reason":"2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"Code-Review","score":3,"reason":"Found 10/30 approved changesets -- score normalized to 3","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":"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":4,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Warn: no linked content found","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.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":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: docs/web/app.wasm:1"],"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":"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":"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/build.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/maxence-charriere/go-app/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/maxence-charriere/go-app/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/maxence-charriere/go-app/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/maxence-charriere/go-app/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/maxence-charriere/go-app/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/maxence-charriere/go-app/build.yml/master?enable=pin","Warn: goCommand not pinned by hash: .github/workflows/build.yml:46","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 goCommand 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":"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":-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":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2025-3553 / GHSA-mh63-6h87-95cp","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw","Warn: Project is vulnerable to: GO-2022-0603 / GHSA-hp87-p4gw-j4gq"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":5,"reason":"SAST tool is not run on all commits -- score normalized to 5","details":["Warn: 12 commits out of 24 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-21T07:19:03.510Z","repository_id":37227945,"created_at":"2025-08-21T07:19:03.510Z","updated_at":"2025-08-21T07:19:03.510Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29227378,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T09:43:19.170Z","status":"ssl_error","status_checked_at":"2026-02-08T09:42:55.556Z","response_time":57,"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":["awesome-go","go","golang","gui","pwa","ui","wasm"],"created_at":"2024-07-30T17:01:03.647Z","updated_at":"2026-02-08T10:01:06.568Z","avatar_url":"https://github.com/maxence-charriere.png","language":"Go","funding_links":["https://github.com/sponsors/maxence-charriere","https://opencollective.com/go-app","https://opencollective.com/go-app/contribute","https://opencollective.com/go-app/organization/0/website","https://opencollective.com/go-app/organization/1/website","https://opencollective.com/go-app/organization/2/website","https://opencollective.com/go-app/organization/3/website","https://opencollective.com/go-app/organization/4/website","https://opencollective.com/go-app/organization/5/website","https://opencollective.com/go-app/organization/6/website","https://opencollective.com/go-app/organization/7/website","https://opencollective.com/go-app/organization/8/website","https://opencollective.com/go-app/organization/9/website"],"categories":["Popular","Go","开源类库","Go Libraries","Open source library","\u003ca name=\"Go\"\u003e\u003c/a\u003eGo","ui","前端开发框架及项目","Repositories","Relational Databases","GUI"],"sub_categories":["桌面开发","Desktop Development","其他_文本生成、文本对话","Search and Analytic Databases"],"readme":"\u003ch1 align=\"center\"\u003e\n    \u003ca href=\"https://go-app.dev\"\u003e\n        \u003cimg alt=\"go-app\"  width=\"150\" height=\"150\" src=\"docs/web/icon.png\"\u003e\n    \u003c/a\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n\t\u003ca href=\"https://github.com/maxence-charriere/go-app/actions\"\u003e\u003cimg src=\"https://github.com/maxence-charriere/go-app/actions/workflows/build.yml/badge.svg?branch=master\" alt=\"GitHub actions\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://goreportcard.com/report/github.com/maxence-charriere/go-app\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/maxence-charriere/go-app\" alt=\"Go Report Card\"\u003e\u003c/a\u003e\n\t\u003ca href=\"https://GitHub.com/maxence-charriere/go-app/releases/\"\u003e\u003cimg src=\"https://img.shields.io/github/release/maxence-charriere/go-app.svg\" alt=\"GitHub release\"\u003e\u003c/a\u003e\n\t\u003ca href=\"https://pkg.go.dev/github.com/maxence-charriere/go-app/v10/pkg/app\"\u003e\u003cimg src=\"https://img.shields.io/badge/dev-reference-007d9c?logo=go\u0026logoColor=white\u0026style=flat\" alt=\"pkg.go.dev docs\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://twitter.com/jonhymaxoo\"\u003e\u003cimg alt=\"Twitter URL\" src=\"https://img.shields.io/badge/twitter-@jonhymaxoo-35A9F8?logo=twitter\u0026style=flat\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://opencollective.com/go-app\" alt=\"Financial Contributors on Open Collective\"\u003e\u003cimg src=\"https://opencollective.com/go-app/all/badge.svg?label=open+collective\u0026color=4FB9F6\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nGo-app is a package for **building progressive web apps (PWA)** with the [Go programming language (Golang)](https://golang.org) and [WebAssembly (Wasm)](https://webassembly.org).\n\nShaping a UI is done by using a **[declarative syntax](https://go-app.dev/declarative-syntax) that creates and compose HTML elements only by using the Go programing language**.\n\nIt **uses [Go HTTP standard](https://golang.org/pkg/net/http) model**.\n\nAn app created with go-app can out of the box **runs in its own window**, **supports offline mode**, and is **SEO friendly**.\n\n## Documentation (built with go-app)\n\n[![go-app documentation](docs/web/images/go-app.png)](https://go-app.dev)\n\n## Install\n\n**go-app** requirements:\n\n- [Go 1.18](https://golang.org/doc/go1.17) or newer\n- [Go module](https://github.com/golang/go/wiki/Modules)\n\n```sh\ngo mod init\ngo get -u github.com/maxence-charriere/go-app/v10/pkg/app\n```\n\n## Declarative syntax\n\nGo-app uses a [declarative syntax](https://go-app.dev/declarative-syntax) so you can **write reusable component-based UI elements** just by using the Go programming language.\n\nHere is a Hello World component that takes an input and displays its value in its title:\n\n```go\ntype hello struct {\n\tapp.Compo\n\n\tname string\n}\n\nfunc (h *hello) Render() app.UI {\n\treturn app.Div().Body(\n\t\tapp.H1().Body(\n\t\t\tapp.Text(\"Hello, \"),\n\t\t\tapp.If(h.name != \"\", func() app.UI {\n\t\t\t\treturn app.Text(h.name)\n\t\t\t}).Else(func() app.UI {\n\t\t\t\treturn app.Text(\"World!\")\n\t\t\t}),\n\t\t),\n\t\tapp.P().Body(\n\t\t\tapp.Input().\n\t\t\t\tType(\"text\").\n\t\t\t\tValue(h.name).\n\t\t\t\tPlaceholder(\"What is your name?\").\n\t\t\t\tAutoFocus(true).\n\t\t\t\tOnChange(h.ValueTo(\u0026h.name)),\n\t\t),\n\t)\n}\n```\n\n## Standard HTTP\n\nApps created with go-app complies with [Go standard HTTP](https://golang.org/pkg/net/http) package interfaces.\n\n```go\nfunc main() {\n\t// Components routing:\n\tapp.Route(\"/\", func() app.Composer { return \u0026hello{} })\n\tapp.Route(\"/hello\", func() app.Composer { return \u0026hello{} })\n\tapp.RunWhenOnBrowser()\n\n\t// HTTP routing:\n\thttp.Handle(\"/\", \u0026app.Handler{\n\t\tName:        \"Hello\",\n\t\tDescription: \"An Hello World! example\",\n\t})\n\n\tif err := http.ListenAndServe(\":8000\", nil); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n```\n\n## Getting started\n\n**Read the [Getting Started](https://go-app.dev/getting-started) document**.\n\n## Built with go-app\n\n- [Lofimusic.app](https://lofimusic.app/collegemusic-lonely)\n- [Murlok.io](https://murlok.io/)\n- [liwasc](https://pojntfx.github.io/liwasc/)\n- [go-app Docs](https://go-app.dev/)\n\n## Contributors\n\n### Code Contributors\n\nThis project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].\n\n\u003ca href=\"https://github.com/maxence-charriere/go-app/graphs/contributors\"\u003e\u003cimg src=\"https://opencollective.com/go-app/contributors.svg?width=890\u0026button=false\" /\u003e\u003c/a\u003e\n\n### Financial Contributors\n\nBecome a financial contributor and help us sustain [go-app](https://github.com/maxence-charriere/go-app) development. [[Contribute](https://opencollective.com/go-app/contribute)]\n\n#### Individuals\n\n\u003ca href=\"https://opencollective.com/go-app\"\u003e\u003cimg src=\"https://opencollective.com/go-app/individuals.svg?width=890\"\u003e\u003c/a\u003e\n\n#### Organizations\n\nSupport this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/go-app/contribute)]\n\n\u003ca href=\"https://opencollective.com/go-app/organization/0/website\"\u003e\u003cimg src=\"https://opencollective.com/go-app/organization/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/go-app/organization/1/website\"\u003e\u003cimg src=\"https://opencollective.com/go-app/organization/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/go-app/organization/2/website\"\u003e\u003cimg src=\"https://opencollective.com/go-app/organization/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/go-app/organization/3/website\"\u003e\u003cimg src=\"https://opencollective.com/go-app/organization/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/go-app/organization/4/website\"\u003e\u003cimg src=\"https://opencollective.com/go-app/organization/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/go-app/organization/5/website\"\u003e\u003cimg src=\"https://opencollective.com/go-app/organization/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/go-app/organization/6/website\"\u003e\u003cimg src=\"https://opencollective.com/go-app/organization/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/go-app/organization/7/website\"\u003e\u003cimg src=\"https://opencollective.com/go-app/organization/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/go-app/organization/8/website\"\u003e\u003cimg src=\"https://opencollective.com/go-app/organization/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/go-app/organization/9/website\"\u003e\u003cimg src=\"https://opencollective.com/go-app/organization/9/avatar.svg\"\u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxence-charriere%2Fgo-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxence-charriere%2Fgo-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxence-charriere%2Fgo-app/lists"}