Skip to content
Golang ActivityPub Server Framework
Go
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore Configuration wizard and clarke the cow May 28, 2019
LICENSE License under the GNU Affero General Public License May 29, 2019
README.md Add first edition of the README Jul 12, 2019
activitystreams.go Implement toOrderedCollectionPage Aug 9, 2019
ap_actor.go Authenticate oauth tokens when posting to outbox Jul 17, 2019
ap_c2s.go Authenticate oauth tokens when posting to outbox Jul 17, 2019
ap_clock.go License under the GNU Affero General Public License May 29, 2019
ap_common.go Outline persistent Transport Aug 9, 2019
ap_db.go Implement more generic db management Jun 4, 2019
ap_s2s.go Hook up the rest of the contextual information. Jun 17, 2019
application.go Authenticate oauth tokens when posting to outbox Jul 17, 2019
clarke.go License under the GNU Affero General Public License May 29, 2019
cmdline.go Expand help text, fix vet issues May 29, 2019
config.go More oAuth and config implementation Jun 23, 2019
context.go Hook up the rest of the contextual information. Jun 17, 2019
database.go Outline persistent Transport Aug 9, 2019
db_postgres.go Outline persistent Transport Aug 9, 2019
go.mod Add go.mod and go.sum Jul 17, 2019
go.sum Add go.mod and go.sum Jul 17, 2019
handler.go Populate host in Router Jun 16, 2019
oauth.go Authenticate oauth tokens when posting to outbox Jul 17, 2019
oauth_stores.go Hook OAuth storage into database. Jul 16, 2019
password.go Support password OAuth2 flow Jun 23, 2019
pkg.go License under the GNU Affero General Public License May 29, 2019
policy.go More context and database glue Jun 16, 2019
prompt.go License under the GNU Affero General Public License May 29, 2019
router.go Hook up the rest of the contextual information. Jun 17, 2019
server.go More OAuth glue with database Jun 23, 2019
sessions.go More oAuth and config implementation Jun 23, 2019
software.go Outline persistent Transport Aug 9, 2019
transport.go Outline persistent Transport Aug 9, 2019
user_prefs.go More context and database glue Jun 16, 2019

README.md

apcore

Under Construction

go get github.com/go-fed/apcore

apcore is a powerful single server ActivityPub framework for performant Fediverse applications.

It is built on top of the go-fed/activity suite of libraries, which means it can readily allow application developers to iterate and leverage new ActivityStreams or RDF vocabularies.

Features

This list is a work in progress.

  • Uses go-fed/activity
    • ActivityPub S2S (Server-to-Server) Protocol supported
    • ActivityPub C2S (Client-to-Server) Protocol supported
    • Both S2S and C2S can be used at the same time
    • Comes with the Core & Extended ActivityStreams types
    • Readily expands to support new ActivityStreams types and/or RDF vocabularies
  • Federation & Moderation Policy System
    • Administrators and/or users can create policies to customize their federation experience
    • Auditable results of applying policies on incoming federated data
  • Supports common out-of-the-box command-line commands for:
    • Initializing a database with the appropriate apcore tables as well as your application-specific tables
    • Initializing a new administrator account
    • Creating a server configuration file in a partially guided flow
    • Comprehensive help command
    • Guided command line flow for administrators for all the above tasks, featuring Clarke the Cow
  • Configuration file support
    • Add your configuration options to the existing apcore configuration options
    • Administrators can customize their ActivityPub and your app's experience
  • Database support
    • Currently, only PostgreSQL supported
    • Others can be added with a some SQL work, in the future
    • No ORM overhead
    • Your custom application has access to apcore tables, and more
  • OAuth2 support
    • Easy API to build authorization grant and validation flows
    • Handles server side state for you

How To Use This Framework

This guide is a work in progress.

Building an application is not an easy thing to do, but following these steps reduces the cost of building a federated application:

  1. Implement the apcore.Application interface.
  2. Call apcore.Run with your implementation in main.

The most work is in the first step, as your application logic is able to live as functional closures as the Application is used within the apcore framework. See the documentation on the Application interface for specific details.

You can’t perform that action at this time.