{"id":15483460,"url":"https://github.com/hackergrrl/patchfoo","last_synced_at":"2025-09-11T02:15:36.763Z","repository":{"id":147533986,"uuid":"89888011","full_name":"hackergrrl/patchfoo","owner":"hackergrrl","description":"github mirror of patchfoo (from git-ssb). maybe not quite so up-to-date","archived":false,"fork":false,"pushed_at":"2018-01-27T07:04:05.000Z","size":549,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-05T18:53:02.197Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hackergrrl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2017-05-01T01:15:48.000Z","updated_at":"2017-08-04T13:31:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"64edf657-124b-4a3f-b61a-c037a6fe9fe1","html_url":"https://github.com/hackergrrl/patchfoo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hackergrrl/patchfoo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackergrrl%2Fpatchfoo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackergrrl%2Fpatchfoo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackergrrl%2Fpatchfoo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackergrrl%2Fpatchfoo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hackergrrl","download_url":"https://codeload.github.com/hackergrrl/patchfoo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackergrrl%2Fpatchfoo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262762436,"owners_count":23360326,"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","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":[],"created_at":"2024-10-02T05:16:12.493Z","updated_at":"2025-06-30T11:03:21.843Z","avatar_url":"https://github.com/hackergrrl.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# patchfoo\n\nPlain SSB web UI. Uses HTML forms instead of client-side JS. Designed for use on low-power and low-resource computers.\n\n## Goals\n\n- Support all message schemas commonly used in the main SSB network.\n- Make efficient use of screen space, memory, and CPU.\n- Run well in [dillo](http://dillo.org/) browser.\n- Serve as a place for experimenting with new HTML-based SSB UIs.\n\n## Features\n\n- Render messages with author name and icons.\n- Render core ssb message types, git-ssb message types, and raw messages.\n- View public log, private log, user feeds, channels, and search.\n- Paginate views bidirectionally.\n- Compose, preview and publish public and private messages.\n- *and more*\n\n## Joining SSB with Patchfoo\n\nFind [this guide](%VaSj08AbdhIa4itK4z8Z91G80o2h5OhRLCEEO6MhAcU=.sha256) [on github](https://github.com/noffle/sailing-patchfoo) or [on\nSSB](http://git.scuttlebot.io/%25VaSj08AbdhIa4itK4z8Z91G80o2h5OhRLCEEO6MhAcU%3D.sha256).\n\n## Install\n\nRequirements:\n\n- [scuttlebot][]\n- [ssb-npm-registry][]\n- [git-ssb][]\n\n```sh\ngit clone ssb://%YAg1hicat+2GELjE2QJzDwlAWcx0ML+1sXEdsWwvdt8=.sha256 patchfoo\ncd patchfoo\nnpm install --registry=http://localhost:8043/\nnpm start\n```\n\nAlternatively, install as an sbot plugin (advanced):\n\n```sh\ncd ~/.ssb/node_modules\ngit clone ssb://%YAg1hicat+2GELjE2QJzDwlAWcx0ML+1sXEdsWwvdt8=.sha256 patchfoo\ncd patchfoo\nnpm install\nsbot plugins.enable patchfoo\n# restart sbot\n```\n\n## Install extras\n\nTo most effectively render things, patchfoo needs the `ssb-backlinks` scuttlebot\nplugin:\n\n```sh\nsbot plugins.install ssb-backlinks\nsbot plugins.enable ssb-backlinks\n# restart sbot\n```\n\n## Config\n\nPass config options with args\ne.g. `npm start -- --patchfoo.port 8027` if running standalone,\nor `sbot server --patchfoo.port 8027` if running as an sbot plugin.\nTo make config options persistent, set them in `~/.ssb/config`, e.g.:\n```json\n{\n  \"patchfoo\": {\n    \"port\": 8027,\n    \"host\": \"::\",\n    \"filter\": \"all\",\n    \"showPrivates\": true,\n    \"previewVotes\": true,\n    \"ooo\": true,\n  }\n}\n```\n\n### Config options\n\n- `port`: port for the server to listen on. default: `8027`\n- `host`: host address for the server to listen on. default: `localhost`\n- `base`: base url that the app is running at. default: `/`\n- `blob_base`: base url for links to ssb blobs. default: same as `base`\n- `img_base`: base url for blobs embedded as images. default: same as `base`\n- `emoji_base`: base url for emoji images. default: same as `base`\n- `encode_msgids`: whether to URL-encode message ids in local links. default: `true`\n- `auth`: HTTP auth password. default: `null` (no password required)\n- `filter`: Filter setting. `\"all\"` to show all messages. `\"invert\"` to show messages that would be hidden by the default setting. Otherwise the default setting applies, which is so to only show messages authored or upvoted by yourself or by a feed that you you follow. Exceptions are that if you navigate to a user feed page, you will see messages authored by that feed, and if you navigate to a message page, you will see that message - regardless of the filter setting. The `filter` setting may also be specified per-request as a query string parameter.\n- `showPrivates`: Whether or not to show private messages. Default is `true`. Overridden by `filter=all`.\n- `previewVotes`: Whether to preview creating votes/likes/digs (`true`) or publish them immediately (`false`). default: `false`\n- `previewContacts`: Whether to preview creating contact/(un)follow/block messages (`true`) or publish them immediately (`false`). default: `false`\n- `ooo`: if true, use `ssb-ooo` to try to fetch missing messages in threads. also can set per-request with query string `?ooo=1`. default: `false`\n`codeInTextareas`: if `true`, render markdown code blocks in textareas. if `false`, render them in `pre` tags. default: `false`\n\n## TODO\n\n- Add a way to assist picking feed ids for `@mentions` in composer.\n- Add more sophisticated private messages view.\n- Show contents of git repos (cross-develop with [patchbay])\n- Count digs\n- Show network status\n- Add UI for using pub invites\n\n[scuttlebot]: %M0TrM+oJT2i/phUJO/fZ2wkK2AN2FB1xK0tqR7SNj58=.sha256\n[patchbay]: %s9mSFATE4RGyJx9wgH22lBrvD4CgUQW4yeguSWWjtqc=.sha256\n[ssb-npm-registry]: %59m0nJQ/YOnxkPi7QfBphcOtuwCgamUgoVHtBhCEq7k=.sha256\n[git-ssb]: %n92DiQh7ietE+R+X/I403LQoyf2DtR3WQfCkDKlheQU=.sha256\n\n## License\n\nCopyright (C) 2017 Secure Scuttlebutt Consortium\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License\nalong with this program.  If not, see \u003chttp://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackergrrl%2Fpatchfoo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhackergrrl%2Fpatchfoo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackergrrl%2Fpatchfoo/lists"}