{"id":47754724,"url":"https://github.com/roblillack/tack","last_synced_at":"2026-04-03T04:05:30.489Z","repository":{"id":4377329,"uuid":"5514044","full_name":"roblillack/tack","owner":"roblillack","description":"tack is a static site generator.","archived":false,"fork":false,"pushed_at":"2022-07-12T16:47:51.000Z","size":591,"stargazers_count":4,"open_issues_count":7,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-06-20T00:32:50.031Z","etag":null,"topics":["golang","static-site-generator","web","website"],"latest_commit_sha":null,"homepage":"http://burningsoda.com/software/tack/","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/roblillack.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null}},"created_at":"2012-08-22T19:07:07.000Z","updated_at":"2023-03-08T16:12:42.000Z","dependencies_parsed_at":"2022-07-10T03:00:19.317Z","dependency_job_id":null,"html_url":"https://github.com/roblillack/tack","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/roblillack/tack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roblillack%2Ftack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roblillack%2Ftack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roblillack%2Ftack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roblillack%2Ftack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/roblillack","download_url":"https://codeload.github.com/roblillack/tack/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roblillack%2Ftack/sbom","scorecard":{"id":780948,"data":{"date":"2025-08-11","repo":{"name":"github.com/roblillack/tack","commit":"ec96c42808039d8d55c68e7187dfb3c90b391e5c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"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":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","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":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","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":"Code-Review","score":0,"reason":"Found 0/23 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":"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":"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":"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:14: update your workflow using https://app.stepsecurity.io/secureworkflow/roblillack/tack/go.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/roblillack/tack/go.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/go.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/roblillack/tack/go.yml/master?enable=pin","Warn: goCommand not pinned by hash: .github/workflows/go.yml:29","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party 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":"CII-Best-Practices","score":2,"reason":"badge detected: InProgress","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":"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":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.3.0 not signed: https://api.github.com/repos/roblillack/tack/releases/71822805","Warn: release artifact v1.2.0 not signed: https://api.github.com/repos/roblillack/tack/releases/45674184","Warn: release artifact v1.1.0 not signed: https://api.github.com/repos/roblillack/tack/releases/44439079","Warn: release artifact v1.0.0 not signed: https://api.github.com/repos/roblillack/tack/releases/44155564","Warn: release artifact v0.5.1 not signed: https://api.github.com/repos/roblillack/tack/releases/44154106","Warn: release artifact v1.3.0 does not have provenance: https://api.github.com/repos/roblillack/tack/releases/71822805","Warn: release artifact v1.2.0 does not have provenance: https://api.github.com/repos/roblillack/tack/releases/45674184","Warn: release artifact v1.1.0 does not have provenance: https://api.github.com/repos/roblillack/tack/releases/44439079","Warn: release artifact v1.0.0 does not have provenance: https://api.github.com/repos/roblillack/tack/releases/44155564","Warn: release artifact v0.5.1 does not have provenance: https://api.github.com/repos/roblillack/tack/releases/44154106"],"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 '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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 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":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"}}]},"last_synced_at":"2025-08-23T04:54:00.378Z","repository_id":4377329,"created_at":"2025-08-23T04:54:00.379Z","updated_at":"2025-08-23T04:54:00.379Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31333230,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T03:20:36.090Z","status":"ssl_error","status_checked_at":"2026-04-03T03:20:35.133Z","response_time":107,"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":["golang","static-site-generator","web","website"],"created_at":"2026-04-03T04:05:29.700Z","updated_at":"2026-04-03T04:05:30.478Z","avatar_url":"https://github.com/roblillack.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tack\n\nA static site generator for the long run.\n\n[![Build Status](https://github.com/roblillack/tack/actions/workflows/go.yml/badge.svg)](https://github.com/roblillack/tack/actions/workflows/go.yml)\n[![Go Reference](https://pkg.go.dev/badge/github.com/roblillack/tack.svg)](https://pkg.go.dev/github.com/roblillack/tack)\n[![Coverage Status](https://coveralls.io/repos/github/roblillack/tack/badge.svg)](https://coveralls.io/github/roblillack/tack)\n[![Go Report Card](https://goreportcard.com/badge/github.com/roblillack/tack)](https://goreportcard.com/report/github.com/roblillack/tack)\n![GitHub release (latest by date)](https://img.shields.io/github/v/release/roblillack/tack?label=latest%20version)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/6239/badge)](https://bestpractices.coreinfrastructure.org/projects/6239)\n\nThe project's goal is to create and maintain a sustainable tool that does the\n(arguably pretty easy) job of filling HTML templates with content well enough\nnow and in ten years when you come back to update that minimal website you own.\n\nWebsite: https://burningsoda.com/software/tack \\\nManpage: https://github.com/roblillack/tack/blob/master/tack.1.md\n\n#### Installation\n\nDownload binaries for FreeBSD, Linux, macOS (ARM \u0026 Intel), NetBSD, OpenBSD, or Windows from [the release page](https://github.com/roblillack/tack/releases) or install from source (you will need to have Git and Go installed) like this:\n\n```\ngo get github.com/roblillack/tack\n```\n\n#### Usage\n\nCreate directory for your site somewhere using a structure like this:\n\n```\nmysite                     Your website project dir\n├── content                Contains a subdir per page\n│   ├── about-me           Page will be available at /about-me\n│   │   ├── default.yaml   Page variables, page will use \"default\" template\n│   │   ├── body.md        One page variable \"content\" will hold this files'\n│   │   │                  content processed as HTML.\n│   │   └── me.jpg         All files not recognized as metadata or markup will\n|   |                      be regarded as assets and be copied to output as is.\n│   ├── bikes              Another page, /bikes\n│   │   └── body.md        Works, even if no other page variables are defined.\n│   └── work               Again, another page: /work\n│       └── serious.yaml   Different template used here.\n├── templates\n│   ├── default.mustache   The default template, used by /about-me and /bikes.\n│   └── serious.mustache   Another template, used by /work\n├── public                 Files in here will not be touched and will be copied\n│   ├── style.css          over to output/ as is.\n│   ├── logo.png\n│   └── js\n│       ├── main.js\n│       ├── tracker.js\n│       └── library.js\n└── site.yaml              Optional site-wide metadata and variables\n```\n\n##### Commands\n\n**Build the site** (default action):\n```\ntack\n```\n\n**Serve with auto-reload** for development:\n```\ntack serve\n```\nOpens http://localhost:8080/ and automatically rebuilds when files change.\n\n**List all pages** in your site:\n```\ntack list\n```\n\n**Get help**:\n```\ntack help\n```\n\n##### Command Line Options\n\n- `-d` Enable debug mode (shows detailed build information)\n- `-s` Enable strict mode (fails when undefined variables are referenced)\n\n##### Examples\n\nBuild from a different directory:\n```\ntack /path/to/my/site\n```\n\nDevelopment with debugging:\n```\ntack -d serve\n```\n\nStrict mode for catching template errors:\n```\ntack -s\n```\n\n##### Supported File Extensions\n\n- **Templates**: `.mustache`, `.mu`, `.stache`\n- **Metadata**: `.yaml`, `.yml`  \n- **Markup**: `.md`, `.mkd`\n\nOnce you're done, copy over the content of `output/` to a hosting service of your choice.\n\n#### Documentation\n\nLearn more on the [tack website](https://burningsoda.com/software/tack)\n\n#### Features that will not be part of future tack versions\n\nThere are lots of features that are more or less a standard part of static site\ngenerators nowadays but don't really align well with the goals of the project and\ntherefor will not be added to tack.\n\n- Plugin support\n- Image resizing\n- JavaScript transpilation\n- JavaScript bundling\n- JavaScript minification\n\n#### Features that might be implemented as part of future tack versions\n\n- Sitemap creation\n- CSS transpilation (we used to have less support)\n- TOML file metadata support\n- Liquid template support\n- More configuration options\n\n#### Contributing\n\nTo report bugs, or to propose new features, please see [the tack bug tracker](https://github.com/roblillack/tack/issues).\n\nIf you'd like to contribute, feel free to create a pull request to implement new features or bug-fixes. Ensure that all code has a proper unit test and is written in idiomatic Go.\n\nRegarding security concerns, please see the separate [Security Policy](./SECURITY.md)\n\n#### License\n\n[MIT/X11](https://github.com/roblillack/tack/blob/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froblillack%2Ftack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froblillack%2Ftack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froblillack%2Ftack/lists"}