MCPcopy Index your code
hub / github.com/bouncepaw/betula

github.com/bouncepaw/betula @v1.8.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.8.1 ↗ · + Follow
948 symbols 2,675 edges 147 files 134 documented · 14%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

🌳 Betula, the federated bookmark manager

A screenshot of Betula, featuring several bookmarks

Hits-of-Code Pipeline status

Betula is a single-user self-hosted federated bookmark manager for the Fediverse.

Features

  • Publish bookmarks, along with optional title and description/notes formatted with Mycomarkup.
  • Add tags to your bookmarks.
  • Fediverse:
  • Like and repost bookmarks from other Betula instances, and other software, sometimes.
  • Other Fediverse software such as Mastodon can follow Betula instances.
  • Follow other Betula instances and receive new bookmarks in your Timeline!
  • Make archive copies of web pages.
  • The whole collection is saved as a single SQLite file.
  • Search locally or search your mutuals' Betula instances.
  • Bookmarklet.
  • RSS.
  • Bookmarks can be public or private. Share only what you want to share!
  • Simple user interface that does not require JavaScript.
  • IndieWeb microformats are produced.
  • Simple installation: the program is one binary, the collection is one file, all configuration is done through the web interface.
  • Built-in documentation.
  • Miniflux integration.
  • Log servers integration.
  • Import and export in popular formats (Netscape Bookmark File, Pinboard JSON, Raindrop CSV).

Funding

This project is funded through Open Social Fund, a fund established by NLnet. Learn more at the NLnet project page.

NLnet foundation logo

Extension points exported contracts — how you extend this code

WorldWideWeb (Interface)
WorldWideWeb fetches information from the web. [2 implementers]
ports/www/www.go
Fetcher (Interface)
Fetcher fetches documents. [2 implementers]
ports/archiving/archiving.go
ActorRepository (Interface)
nolint:interfacebloat // Forgive me... It's not forever... [1 implementers]
ports/activitypub/activitypub.go
LocalBookmarkRepository (Interface)
nolint:interfacebloat // Temporary measure while migrating to the Repository pattern. [1 implementers]
ports/liking/liking.go
Item (Interface)
(no doc) [2 implementers]
pkg/imex/netscape/netscape.go
Provider (Interface)
Provider provides search results as per the query.
fediverse/fedisearch/fedisearch.go
RemoteBookmarkRepository (Interface)
(no doc) [1 implementers]
ports/remotebookmarks/remotebookmarks.go
Repository (Interface)
(no doc)
ports/sessions/sessions.go

Core symbols most depended-on inside this repo

templateExec
called by 54
web/templates.go
emptyCommon
called by 40
web/templates.go
SiteURL
called by 38
settings/settings.go
adminOnly
called by 37
web/web.go
templateFrom
called by 29
web/templates.go
handlerNotFound
called by 28
web/handlers.go
Write
called by 18
pkg/rss/rss.go
mustExec
called by 17
db/db.go

Shape

Function 392
Method 366
Struct 138
Interface 36
TypeAlias 16

Languages

Go99%
TypeScript1%
Python1%

Modules by API surface

web/handlers.go74 symbols
ports/liking/liking.go39 symbols
ports/activitypub/activitypub.go36 symbols
web/templates.go30 symbols
settings/settings.go22 symbols
db/repo_actor.go22 symbols
types/types.go20 symbols
web/handlers_federated.go17 symbols
ports/settings/settings.go17 symbols
fediverse/fedisearch/fedisearch.go17 symbols
db/repo_local_bookmarks.go17 symbols
types/ap.go16 symbols

For agents

$ claude mcp add betula \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page