{"id":19615949,"url":"https://github.com/vgarvardt/rklotz","last_synced_at":"2025-09-08T20:33:32.161Z","repository":{"id":18783050,"uuid":"21996414","full_name":"vgarvardt/rklotz","owner":"vgarvardt","description":"Yet another simple single-user file-based golang-driven blog engine","archived":false,"fork":false,"pushed_at":"2025-08-19T10:03:59.000Z","size":2694,"stargazers_count":41,"open_issues_count":0,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-23T10:49:43.585Z","etag":null,"topics":["blog-engine","boltdb","golang","pet-project"],"latest_commit_sha":null,"homepage":"http://itskrig.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vgarvardt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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,"zenodo":null}},"created_at":"2014-07-18T22:34:56.000Z","updated_at":"2025-08-19T10:04:02.000Z","dependencies_parsed_at":"2024-03-05T07:41:56.155Z","dependency_job_id":"eea87699-062e-4186-80e0-c49b24622f84","html_url":"https://github.com/vgarvardt/rklotz","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/vgarvardt/rklotz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vgarvardt%2Frklotz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vgarvardt%2Frklotz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vgarvardt%2Frklotz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vgarvardt%2Frklotz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vgarvardt","download_url":"https://codeload.github.com/vgarvardt/rklotz/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vgarvardt%2Frklotz/sbom","scorecard":{"id":919570,"data":{"date":"2025-08-11","repo":{"name":"github.com/vgarvardt/rklotz","commit":"29818f95761c75a538cac94d554e3907d513fba9"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.2,"checks":[{"name":"Maintained","score":10,"reason":"13 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","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":-1,"reason":"Found no human activity in the last 15 changesets","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/lint.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: no topLevel permission defined: .github/workflows/testing.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":"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.txt:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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/lint.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/testing.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/testing.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/testing.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/testing.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/testing.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/vgarvardt/rklotz/testing.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating ubuntu:22.04 to ubuntu:22.04@sha256:1aa979d85661c488ce030ac292876cf6ed04535d3a237e49f61542d8e5de5ae0","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 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":"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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 0.15.0 not signed: https://api.github.com/repos/vgarvardt/rklotz/releases/148080906","Warn: release artifact 0.14.3 not signed: https://api.github.com/repos/vgarvardt/rklotz/releases/129050169","Warn: release artifact 0.14.2 not signed: https://api.github.com/repos/vgarvardt/rklotz/releases/95327337","Warn: release artifact 0.14.1 not signed: https://api.github.com/repos/vgarvardt/rklotz/releases/95326313","Warn: release artifact 0.14.0 not signed: https://api.github.com/repos/vgarvardt/rklotz/releases/95325154","Warn: release artifact 0.15.0 does not have provenance: https://api.github.com/repos/vgarvardt/rklotz/releases/148080906","Warn: release artifact 0.14.3 does not have provenance: https://api.github.com/repos/vgarvardt/rklotz/releases/129050169","Warn: release artifact 0.14.2 does not have provenance: https://api.github.com/repos/vgarvardt/rklotz/releases/95327337","Warn: release artifact 0.14.1 does not have provenance: https://api.github.com/repos/vgarvardt/rklotz/releases/95326313","Warn: release artifact 0.14.0 does not have provenance: https://api.github.com/repos/vgarvardt/rklotz/releases/95325154"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:11"],"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":"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":"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"}}]},"last_synced_at":"2025-08-25T00:27:37.269Z","repository_id":18783050,"created_at":"2025-08-25T00:27:37.269Z","updated_at":"2025-08-25T00:27:37.269Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272965355,"owners_count":25023066,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["blog-engine","boltdb","golang","pet-project"],"created_at":"2024-11-11T10:59:15.866Z","updated_at":"2025-08-31T09:35:15.441Z","avatar_url":"https://github.com/vgarvardt.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rKlotz\n\n[![Build Status](https://travis-ci.org/vgarvardt/rklotz.svg?branch=master)](https://travis-ci.org/vgarvardt/rklotz)\n[![Coverage Status](https://codecov.io/gh/vgarvardt/rklotz/branch/master/graph/badge.svg)](https://codecov.io/gh/vgarvardt/rklotz)\n\n\u003e Yet another simple single-user file-based golang-driven blog engine\n\n## Run locally\n\nYou need to have [Docker](https://www.docker.com/) installed and running.\n\n```bash\ndocker run --rm -it -p 8080:8080 vgarvardt/rklotz\n```\n\nThen open `http://127.0.0.1:8080` in your browser.\n\n## Build and run locally\n\nYou need to have Go 1.12+ and [Docker](https://www.docker.com/) installed and running.\n\n```bash\ngit clone git@github.com:vgarvardt/rklotz.git\ncd rklotz\nmake deps\nmake build\ndocker run -it -p 8080:8080 vgarvardt/rklotz:`cat ./VERSION` server\n```\n\nThen open `http://127.0.0.1:8080` in your browser.\n\n## Build your own blog based on rKlotz\n\nSee [github.com/vgarvardt/itskrig.com](https://github.com/vgarvardt/itskrig.com) for example\non how to build your blog using `rKlotz` as base image.\n\n## Posts\n\nPosts in rKlotz are just files written in some markup language.\nCurrently only [Markdown](https://daringfireball.net/projects/markdown/syntax) (`md` extension) is supported.\n\nPost file has the following structure:\n\n* *Line 1*: Post title\n* *Line 2*: Post publishing date - posts are ordered by publishing date in reverse chronological order.\n  Date must be in [`RFC822Z` format](https://golang.org/pkg/time/#pkg-constants)\n* *Line 3*: Post tags - comma-separated tags list\n* *Line 4*: Reserved for further usage\n* *Line 5*: Post delimiter - `+++` for Markdown, not necessary that line number, may be preceded by any number\n  of lines before delimiter\n* *Line 6*: Post body - may be preceded by any number of lines before post body, after delimiter\n\nPost teaser will be extracted from the post body automatically to be displayed on the posts list pages.\nIf you want to set post teaser explicitly - use `+++teaser` delimiter.\n\nPost path is determined automatically from its path, relative to posts root path (see settings).\n\nPosts examples are available in [asserts/posts](./assets/posts).\n\n## Settings\n\nCurrently, the following settings (environment variables) are available:\n\n### Base application settings\n\n* `POSTS_DSN` (default `file:///etc/rklotz/posts`) - posts root path in the format `storage://\u003cpath\u003e`.\n  Currently, the following storage types are supported:\n  * `file` - local file system\n* `POSTS_PERPAGE` (default `10`) - number of posts per page\n* `STORAGE_DSN` (default `boltdb:///tmp/rklotz.db`) - posts storage in runtime in the format `storage://path`.\n  Currently, the following storage types are supported:\n  * `boltdb` - storage on top of [BoltDB](https://github.com/boltdb/bolt) and [Storm](https://github.com/asdine/storm)\n  * `memory` - store all posts in memory, perfect for hundreds or even thousands of posts\n\n### Logger settings\n\n* `LOG_LEVEL` (default `info`) - logging level\n* `LOG_TYPE` (default `rklotz`) - logging type (`type` field in the log message)\n\n### Web application settings\n\n* `WEB_PORT` (default `8080`) - port to run the `http` server\n* `WEB_STATIC_PATH` (default `/etc/rklotz/static`) - static files root path\n* `WEB_TEMPLATES_PATH` (default `/etc/rklotz/templates`) - templates root path\n\n### SSL settings\n\n`rKlotz` supports SSL with [Let's Encrypt](https://letsencrypt.org/).\n\n* `SSL_ENABLED` (default `false`) - enables SSL/TLS\n* `SSL_PORT` (default `8443`) - SSL port\n* `SSL_HOST` - host to validate for SSL\n* `SSL_EMAIL` (default `vgarvardt@gmail.com`) - email to register for SSL\n* `SSL_CACHE_DIR` (default `/tmp`) - directory to cache retrieved certificate\n\n### HTML and UI settings\n\n* `UI_THEME` (default `foundation6`) - theme name. Themes list available in [templates](./templates)\n  (except for `plugins`, that are plugins templates, see below)\n* `UI_AUTHOR` (default `Vladimir Garvardt`) - blog author name (HTML head meta)\n* `UI_EMAIL` (default `vgarvardt@gmail.com`) - blog author email\n* `UI_DESCRIPTION` (default `rKlotz - simple golang-driven blog engine`) - blog description (HTML head meta)\n* `UI_LANGUAGE` (default `en`) - blog language (HTML lang)\n* `UI_TITLE` (default `rKlotz`) - blog title (HTML title)\n* `UI_HEADING` (default `rKlotz`) - blog heading (index page header)\n* `UI_INTRO` (default `simple golang-driven blog engine`) - blog intro (index page header)\n* `UI_DATEFORMAT` (default `2 Jan 2006`) - post publishing date display format.\n  Must be compatible with [`time.Format()`](http://golang.org/pkg/time/#Time.Format). See examples in\n  [predefined time formats](https://golang.org/pkg/time/#pkg-constants).\n* `UI_ABOUT_PATH` (default `/etc/rklotz/about.tpl`) - path to custom \"about panel\".\n  If not found - `\u003cWEB_TEMPLATES_PATH\u003e/\u003cUI_THEME\u003e/partial/about.tpl` is used.\n\n#### About panel\n\nTemplate must have the following structure:\n\n```gotemplate\n{{ define \"partial/about.tpl\" }}\n    Content goes here. html/template is used for rendering.\n{{ end }}\n```\n\nSee about panel example in [default theme](./templates/foundation6/partial/about.tpl).\n\n### Root URL settings\n\n* `ROOT_URL_SCHEME` (default `http`) - blog absolute URL scheme. Currently `https` si not supported on rKlotz web\n  application level (in plans), so use `https` only if you have `SSL/TLS` certificate termination on the level before\n  rKlotz (e.g. nginx as reverse proxy before your blog).\n* `ROOT_URL_HOST` (default ``) - blog absolute URL host. If empty - request host is used.\n* `ROOT_URL_PATH` (default `/`) - blog absolute URL path prefix. In case your blog is hosted on the second (or deeper)\n  path level, e.g. `http://example.com/blog` (`ROOT_URL_PATH`=`/blog`)\n\n### Plugins settings\n\n### Plugins\n\nrKlots supports plugins. Currently, the following are implemented:\n\n* [Disqus](https://disqus.com/) (`disqus`) - posts comments\n* [Google Analytics](http://www.google.com/analytics/) (`ga`) - site visits analytics from Google\n* [Google Tag Manager](https://tagmanager.google.com) (`gtm`) - tag management analytics from Google\n* [highlight.js](https://highlightjs.org/) (`highlightjs`) - posts code highlighting\n* [Yandex Metrika](https://metrika.yandex.ru/) (`yamka`) - site visits analytics from Yandex\n* [Yandex Share](https://tech.yandex.ru/share/) (`yasha`) - share post buttons from Yandex\n\nPlugins configuration available with the following settings:\n\n* `PLUGINS_ENABLED` - comma-separated plugins list, e.g. `disqus,ga,highlightjs`\n  to enable *Disqus*, *Google Analytics* and *highlight.js* plugins\n* `PLUGINS_DISQUS` - *Disqus* plugin configuration in the format `\u003cconfig1\u003e:\u003cvalue1\u003e,\u003cconfig2\u003e:\u003cvalue2\u003e,...`\n  The following configurations are available:\n  * `shortname` (required) - account short name\n* `PLUGINS_GA` - *Google Analytics* plugin configuration in the format `\u003cconfig1\u003e:\u003cvalue1\u003e,\u003cconfig2\u003e:\u003cvalue2\u003e,...`\n  The following configurations are available:\n  * `tracking_id` (required) - analytics tracking ID\n* `PLUGINS_GTM` - *Google Tag Manager* plugin configuration in the format `\u003cconfig1\u003e:\u003cvalue1\u003e,\u003cconfig2\u003e:\u003cvalue2\u003e,...`\n  The following configurations are available:\n  * `id` (required) - tag manager ID\n* `PLUGINS_HIGHLIGHTJS` - *highlight.js* plugin configuration in the format `\u003cconfig1\u003e:\u003cvalue1\u003e,\u003cconfig2\u003e:\u003cvalue2\u003e,...`\n  The following configurations are available:\n  * `version` (default `9.7.0`) - library version\n  * `theme` (default `idea`) - colour scheme/theme\n* `PLUGINS_YAMKA` - *Yandex Metrika* plugin configuration in the format `\u003cconfig1\u003e:\u003cvalue1\u003e,\u003cconfig2\u003e:\u003cvalue2\u003e,...`\n  The following configurations are available:\n  * `id` (required) - metrika ID\n* `PLUGINS_YASHA` - *Yandex Share* plugin configuration in the format `\u003cconfig1\u003e:\u003cvalue1\u003e,\u003cconfig2\u003e:\u003cvalue2\u003e,...`\n  The following configurations are available (see fill list of values on plugin page):\n  * `services` (default: `facebook twitter gplus`) - space-separated services list\n  * `size` (default: `m`) - icons size: `m` - medium, `s` - small\n  * `lang` (default `en`) - widget language, see [docs page](https://tech.yandex.ru/share/doc/dg/add-docpage/)\n  for complete list of available languages\n\n## TODO\n\n- [x] Dockerize deployment\n- [x] Get config values from os env\n- [ ] Implement at least one more theme\n- [x] Write some tests\n- [x] Cover reindex logic with tests\n- [x] Migrate to another Web Framework (maybe echo)\n- [x] Get version from VERSION file (gb does not seem to inject ldflag into packages other than main)\n- [x] SemVer versioning\n- [x] SSL/TLS with Let's Encrypt\n- [ ] Implement [`badger`](https://github.com/dgraph-io/badger) storage\n- [x] Implement `memory` storage\n- [ ] Implement `git` loader\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvgarvardt%2Frklotz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvgarvardt%2Frklotz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvgarvardt%2Frklotz/lists"}