{"id":13724122,"url":"https://github.com/aprice/embed","last_synced_at":"2026-01-17T23:44:25.478Z","repository":{"id":57481387,"uuid":"92614908","full_name":"aprice/embed","owner":"aprice","description":"Static content embedding for Golang","archived":false,"fork":false,"pushed_at":"2018-11-26T21:46:16.000Z","size":62,"stargazers_count":92,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-13T17:54:39.528Z","etag":null,"topics":["embedded-files","golang","minify"],"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/aprice.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}},"created_at":"2017-05-27T17:52:38.000Z","updated_at":"2023-08-23T04:01:10.000Z","dependencies_parsed_at":"2022-09-26T17:50:29.982Z","dependency_job_id":null,"html_url":"https://github.com/aprice/embed","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aprice/embed","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aprice%2Fembed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aprice%2Fembed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aprice%2Fembed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aprice%2Fembed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aprice","download_url":"https://codeload.github.com/aprice/embed/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aprice%2Fembed/sbom","scorecard":{"id":204287,"data":{"date":"2025-08-11","repo":{"name":"github.com/aprice/embed","commit":"b9ceb1f6d22de9c6505239962faff99b6f64238e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"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":0,"reason":"Found 0/12 approved changesets -- score normalized to 0","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":"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"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":"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":"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":"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":"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":"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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"}}]},"last_synced_at":"2025-08-16T23:22:01.990Z","repository_id":57481387,"created_at":"2025-08-16T23:22:01.990Z","updated_at":"2025-08-16T23:22:01.990Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28522313,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T22:11:28.393Z","status":"ssl_error","status_checked_at":"2026-01-17T22:11:27.841Z","response_time":85,"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":["embedded-files","golang","minify"],"created_at":"2024-08-03T01:01:50.699Z","updated_at":"2026-01-17T23:44:25.466Z","avatar_url":"https://github.com/aprice.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# embed\nStatic content embedding for Golang, ©2017 Adrian Price. Usage indicates acceptance\nof the license found in the LICENSE file.\n\n## Purpose \u0026 Functionality\nEmbed is a tool for embedding static content files into a Go binary, to create\na single, self-contained binary. Embed uses build constraints to offer a development\nmode that loads content from disk for rapid iteration during local development;\nonce content is stable, you can run `go generate` to update the embedded content\nfiles, and then rebuild with different tags to serve the embedded content instead\nof the files on disk.\n\nIn addition to simply embedding content within your binary, embed will minify\nHTML, CSS, and JavaScript; gzip files for serving to clients that accept compressed\ncontent; and calculate checksums for handling Etag-based conditional requests.\n\n## Installation\nEmbedding tool: `go get github.com/aprice/embed/cmd/embed`\n\nUsage library: `go get github.com/aprice/embed/loader`\n\n## Usage\nEmbed can easily be run with `go generate`.\n\n```go\n//go:generate embed -c \"embed.json\"\n```\n\nTo use embed, create a config file specifying what's to be generated:\n```json\n{\n\t\"RootPath\": \".\",\n\t\"Recurse\": true,\n\t\"IncludePattern\": \"\",\n\t\"ExcludePattern\": \"(^\\\\.|\\\\.go$)\",\n\t\"OutputPath\": \"embedded.go\",\n\t\"BuildConstraints\": \"\",\n\t\"PackageName\": \"embedded\",\n\t\"DevOutputPath\": \"\",\n\t\"DevBuildConstraints\": \"\",\n\t\"MinifyTypes\": {\n\t\t\"\\\\.html?$\": \"text/html\",\n\t\t\"\\\\.css$\": \"text/css\",\n\t\t\"\\\\.js$\": \"application/javascript\"\n\t},\n\t\"CompressPattern\": \"\\\\.(css|js|html)$\",\n\t\"NoCompressPattern\": \"\\\\.(jpe?g|png|gif|woff2?|eot|ttf|ico)$\",\n\t\"OverrideModDate\": false\n}\n```\n\nThe values above are the defaults.\n\n`RootPath` is the directory where source files to be embedded will be scanned.\nIf `Recurse` is true, subdirectories will be scanned as well. Each entry will\nbe compared against `IncludePattern` and `ExcludePattern`; if a file does not\nmatch `IncludePattern` or does match `ExcludePattern`, it will not be included.\n\n`OutputPath` is the path where the embedded content go file will be written. If\n`BuildConstraints` is not empty, it will be added to the output file; for example,\n`\"BuildConstraints\": \"!dev\"` will result in a file that will not be built by\na build command including `-tags=\"dev\"`. `PackageName` is the package name that\nwill be used for the output file.\n\n`DevOutputPath` and `DevBuildConstraints` work the same as their non-`Dev`\ncounterparts, but apply to a separate \"dev mode\" file; if `DevOutputPath` is not\nempty, a dev mode file will be written which reads all content from disk instead\nof using embedded content. This allows for rapid iteration during local development.\nThe dev mode file will use `PackageName` for its package.\n\n`MinifyTypes` is a mapping of file name regular expressions to content types that\nshould be minified. Minifiers are enabled for `text/html`, `text/css`,\n`text/javascript` (or `application/javascript`), and `image/svg+xml`. Any other\ncontent type (or an empty content type) will not be minified. The minifier used\nis [github.com/tdewolff/minify](https://github.com/tdewolff/minify).\n\n`CompressPattern` is a regular expression matching file names that should be\ngzip compressed for clients that accept compressed data. `NoCompressPattern`\nis for excluding files which otherwise match `CompressPattern`.\n\nIf `OverrideModDate` is true, the modification date for embedded files will be\nset to the timestamp when generation is run; otherwise, it will be the modification\ndate of the source files.\n\n## Referencing Embedded Content\nTo reference embedded content, call the `GetEmbeddedContent()` function in the\npackage where your generated file was created. This returns a `Loader`, which\ncan be used directly as an `http.Handler` to serve the embedded content the\nsame as `http.FileServer(http.Dir(RootPath))`. It also exposes a `GetContents()`\nmethod, for loading embedded content as a byte slice for programmatic use,\nsuch as embedding template files.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faprice%2Fembed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faprice%2Fembed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faprice%2Fembed/lists"}