patchcore

minimal core for ssb clients

Usage no npm install needed!

<script type="module">
  import patchcore from 'https://cdn.skypack.dev/patchcore';
</script>

README

patchcore

a shared library to build ssb apps

or the shared assumptions of all (or most) ssb related applications

required sbot plugins

apps

here's a list of apps in the wild using patchcore:

plugins

here's a list of plugins that build on top of patchcore:

depject

to use this you must understand depject but also the historical context - depject is short for ~dependency injection" it was intended to make software that was very easy to add features to, but this didn't really work out. And most of the applications built on it embrace "strong opinions" but still happen to use depject, which is now inconvienient to change, because it's used throughout the entire app.

directory structure

the patchcore files are organized in the following hierarchy:

${topic} / ${type} / ${module}.js

or when module name is different from file name (this only happens within message/html):

${topic} / ${type} / ${module} / ${file}.js

some cases, the module is skipped (in topics: about, contact, backlinks, feed)

${topic} / ${type}.js

and, (only in backlinks/obs topic/type) the type and module are part of the same name.

{$topic=backlinks} / ${type=obs}-$name}

finally, the config, emoji, keys, and sbot topics types. it's just a single javascript.

${topic}.js

topics

  • lib (junk that isn't part of any topic and should really be published as a reusable module, but too lazy)
  • about - functions relating to about messages, for setting avatars and names.
  • blob - related to images and files
  • config - config.sync.load method that loads config.
  • contact - related to contact messages, for following and blocking.
  • emoji - :dancer: :tada: :joy_cat: :haircut_woman:
  • [feed](./docs/index.md#feed - stuff related to feeds - aka streams of messages by one or more user
  • invite - using invite codes
  • keys - load the main identity
  • message - relating to messages generically, i.e. publishing messages or rendering things that are the same for multiple different message types.
  • router
  • sbot

types

  • sync a function that returns an ordinary javascript value, such as a string or number. Usually a simple utility function.
  • async a function that takes a callback, and does IO. It may query the database or publish a message.
  • pull returns pull-stream source, sink, or through. Sometimes pull type returns a function that then creates a pull stream.
  • obs sometimes, return a mutant observable this is generally for things that change in real time or may load slowly, and you usually want to display them as a single thing (i.e. number of likes, or an avatar name). sometimes obs really just wrap async methods, but obs play more nicely with mutant than async functions do, other times obs functions directly expose a obs, or expose a function that you pass the listener to.
  • html returns an HtmlElement this may have dynamic behaviour.

license

AGPL-3.0