{"id":51110584,"url":"https://github.com/spinzed/litch","last_synced_at":"2026-06-24T17:01:54.455Z","repository":{"id":57564708,"uuid":"297683780","full_name":"spinzed/litch","owner":"spinzed","description":"A terminal app for viewing D\u0026D 5e spells.","archived":false,"fork":false,"pushed_at":"2021-09-03T21:00:30.000Z","size":72,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-14T22:19:28.841Z","etag":null,"topics":["5e","dnd","go","golang","terminal","tools"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spinzed.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":"2020-09-22T14:59:20.000Z","updated_at":"2023-05-07T12:39:05.000Z","dependencies_parsed_at":"2022-09-18T04:52:35.390Z","dependency_job_id":null,"html_url":"https://github.com/spinzed/litch","commit_stats":null,"previous_names":["spinzed/banshie"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/spinzed/litch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spinzed%2Flitch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spinzed%2Flitch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spinzed%2Flitch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spinzed%2Flitch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spinzed","download_url":"https://codeload.github.com/spinzed/litch/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spinzed%2Flitch/sbom","scorecard":{"id":841607,"data":{"date":"2025-08-18","repo":{"name":"github.com/spinzed/litch","commit":"23b021027ce43daefe8b4c0717bfa92d7635cebf"},"scorecard":{"version":"v5.2.1-41-g40576783","commit":"40576783fda6698350fcbbeaea760ff827433034"},"score":2.7,"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#packaging"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/20 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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#code-review"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#dangerous-workflow"}},{"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/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#maintained"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#sast"}},{"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/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#fuzzing"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":7,"reason":"3 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0493 / GHSA-p782-xgp4-8hr8","Warn: Project is vulnerable to: GO-2021-0113 / GHSA-ppp9-7jff-5vj2","Warn: Project is vulnerable to: GO-2022-1059 / GHSA-69ch-w2m2-3vjp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T20:36:28.379Z","repository_id":57564708,"created_at":"2025-08-23T20:36:28.379Z","updated_at":"2025-08-23T20:36:28.379Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34741320,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"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":["5e","dnd","go","golang","terminal","tools"],"created_at":"2026-06-24T17:01:54.309Z","updated_at":"2026-06-24T17:01:54.444Z","avatar_url":"https://github.com/spinzed.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Litch\nA terminal app for viewing D\u0026amp;D 5e spells. It extensively makes use of concurrency and caching.\n\n## What does this app do?\nIt fetches spells from a [public API](https://api.open5e.com) and **caches them for offline use**.\nThere are other public D\u0026amp;D 5e APIs, but I chose this one because it was easiest to fetch all data from once.\n(which is a priority so when spells are once downloaded, they can be viewed offline). The spells are cached in JSON format at the following location:\n`$HOME/.config/litch/cache` on Linux, `$HOME/Library/Application Support/litch/cache` on macOS and `%AppData%/litch/cache` on Windows.  \n\nThis app also supports adding custom spells. Once they are detected and loaded, they will be mixed with the ones fetched from the API.\nTo add custom spells, they must be added to the following location:\n- `$HOME/.config/litch/local/spells.json` on Linux,\n- `$HOME/Library/Application Support/litch/local/spells.json` on macOS and\n- `%AppData%/litch/local/spells.json` on Windows.  \n\nFormat of the spells in the spells.json file (**no fields are required except the index field**):  \n```jsonc\n[\n    {\n        // index is looked when sorting spells, it is most commonly lowercase spell\n        // name joined with dashes, but doesn't have to be\n        \"index\": \"magical-spell\",\n        \"name\": \"Magical Spell\",\n        \"desc\": [ // description of the spell. It is an array of strings and each string is a paragraph\n            \"This spell does magical magic.\",\n            \"The spell ends when you say \\\"hocus pocus\\\".\",\n            \"If you cast it again, you will spawn a truckload of kittens.\"\n        ],\n        \"higher_level\": [ // it is also an array of strings like description\n            \"When you casting this spell using a spell slot of 3rd level and blah blah.\"\n        ],\n        \"range\": \"60 ft\",\n        \"components\": [ // array of components. Items be either \"V\", \"S\" or \"M\"\n            \"V\",\n            \"S\",\n            \"M\"\n        ],\n        \"material\": \"Cat fur and 100gp worth of cat food\", // only valid when material component is present\n        \"ritual\": false,\n        \"duration\": \"1 hour\",\n        \"concentration\": false,\n        \"casting_time\": \"1 action\",\n        \"level\": 2, // must be an integer. For cantrips, the level is 0\n        \"school\": { \n            \"name\": \"Abjuration\",\n        },\n        \"classes\": [\n            {\n                \"name\": \"Cleric\",\n            }\n        ],\n        \"subclasses\": [\n            {\n                \"name\": \"Lore\",\n            }\n        ],\n    },\n    {\n        \"index\": \"slighty-less-magical-spell\"\n        // ... \n        // rest of the spell(s)\n        // ...\n    }\n] // EOF\n```\n\n## How do I run this?\n1) Install [Golang](https://golang.org/)\n2) `git clone https://github.com/spinzed/litch.git`\n3) `go run .`\n    - to install it, you can run `go install` but make sure that `$GOPATH\\bin` is in your PATH\n    - on Linux, you can run `make` to install the app and `make uninstall` to uninstall it\n\n## Aditional Notes\nIf you have any suggestions, please let me know. Although I planned to use this myself, I doubt that I'll be able to do so in foreseeable future.\nWith that in mind, I hope that this app can help someone else with their DMing (:\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspinzed%2Flitch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspinzed%2Flitch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspinzed%2Flitch/lists"}