NewTube (my NodeTube instance) is going to end up being a SFW content only instance, but for an instance with solid free speech protections check out

Thinking about renaming the NodeTube project to NewTube. NodeTube just doesn't roll off the tongue very easily. The new instance is called NewTube ( but I think the whole project may be renamed to that. 🤔

NodeTube boosted

The new NodeTube instance is running really fast now on this new server, make sure to check it out and try an upload (no email required for uploading)

New NodeTube instance up at

This one should have very good performance compared to the last one since it's on new infrastructure

NodeTube boosted
@nodetube @sean
* Leaks viewer IP addresses
* Currently not compatible with clients like qbittorrent
* Uses a lot of RAM
* High overhead when using webseeds due to the large number of HTTP requests made
* Most people have slow residential connections so the benefit of load reduction is minimal

Torrent just isn't a good protocol for streaming video over the internet, it has all the weaknesses and none of the strengths of the protocol.

Hmm I went to check Fosstodon after a couple days away and I was logged out! Wonder what the cookie expiration is here 😐

NodeTube boosted

So I have an announcement. I sent an email to my work saying that I wanted to be able to focus on my work on taking advancing the federated social web to the next level. Read: better security / abuse resistance, richer interactions, virtual worlds.

How will I be funded to do this? I don't know. I do know that the state of the political world scares me enough that I feel I have to do this. If you want to support me:

Wish me luck. More updates soon.

NodeTube boosted

@nodetube @sean (you should view this on my instance since doesn’t support Markdown formatting so it’ll look like a garbled mess on your instance)

there are a few things you need to understand to understand ActivityPub:

How ActivityPub servers actually implement the protocol (very different from the other three!)

so first, let’s start with ActivityStreams2. The general way this works is by having multiple types of Objects. An object can be anything, but there are three main categories: Object (catch-all category), Actor, and Activity. So while all Activities are Objects, not all Objects are Activities.

An example of an Activity is a Like. Another example is a Follow. Another example is a Create.

Here’s what a Pleroma (implementation of ActivityPub similar to Mastodon) Like looks like:

{ "cc":[ "", "" ], "id":"", "to":[ "", "" ], "type":"Like", "actor":"", "object":"", "context":"", "published":"2020-02-01T22:10:10.801412Z", "context_id":5619370 }

Let’s take a look at this. First, take a look at the “object” field. This is the ID of another Object (in this case, a Note). ActivityStreams2 uses JSON-LD, meaning that instead of having to embed the object, you can just put a URL for it instead.

Next, the “actor” field. This is the ID of the Actor (think: user) who did the activity (in this case, me).

The type is “Like” obviously.

“to” lists who the object is being sent to - in particular, it’s addressed to the actor, whose Note is being liked, and to the list of my followers: “cc” is for people who the object isn’t explicitly being sent to, but is visible to. is a URL to say “this is public”. Note: for normal posts, if that URL is part of the “to” field, then the post is listed on timelines, if it’s part of the “cc” field, it’s unlisted. However, this is not part of the spec and is instead how instances choose to implement it so you don’t need to implement things in a similar way.

Finally, “id” is the unique ID of the object. Every object, be it an actor, activity, note, etc, has a unique ID. If another object wanted to reference this object, it’d reference that ID instead of embedding the entire object.

Now, how do Actors work? Here’s an example of an actor (me):

{ "@context":[ "", "", { "@language":"und" } ], "attachment":[ { "name":"I set this using ", "type":"PropertyValue", "value":"Husky" }, { "name":"UwU?", "type":"PropertyValue", "value":"uwu" } ], "discoverable":false, "endpoints":{ "oauthAuthorizationEndpoint":"", "oauthRegistrationEndpoint":"", "oauthTokenEndpoint":"", "sharedInbox":"", "uploadMedia":"" }, "followers":"", "following":"", "icon":{ "type":"Image", "url":"" }, "id":"", "image":{ "type":"Image", "url":"" }, "inbox":"", "manuallyApprovesFollowers":false, "name":"Fridayblob :blobcat:", "outbox":"", "preferredUsername":"mewmew", "publicKey":{ "id":"", "owner":"", "publicKeyPem":"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA38zn7CJV6qBMHrkealqC\n70l/WlSGcNC4PHx5HnOmw8cXqbmeFKkJuyXFiDsz8m2BwjeN/TEjeBsn/1LcQ5x1\nqvx5QQ+0XFvHuCXigjRhR7p54M1yPyxxiQF2BDe1dRMArfBh0ca48kvqzkzvfhrr\n5sFhXChy9+n8Y4FhAeZ39nTvmpkpEdZ/F/0PIjR5IdwrWKmJ510Tn0tBx5YWmQ7p\nj0K2mlVANJmLT/YiqCu25LX3D/UsEA69mWRDYNqj5EozyvAi1FA1SHisNWy8a6zg\nnoqk3/pQ5rU7A4upGCvASmParxAY54FZ05JeYee3FXzvwSmHG+zj6lMrirK1zI8T\nLQIDAQAB\n-----END PUBLIC KEY-----\n\n" }, "summary":"admin of <a href=\"\"></a> and, if you have any questions/concerns, or if you just wanna talk, dm me<br><br>please don&#39;t tag me in hellthreads though<br><br>if i&#39;m posting too much meta stuff please slap me or something don&#39;t just unfollow that makes me sad :blobcatglare: <br><br>mastodon alt: <span class=\"h-card\"><a data-user=\"9poBFzbtejsZg96wsa\" class=\"u-url mention\" href=\"\" rel=\"ugc\">@<span></span></a></span><br>private alt: <span class=\"h-card\"><a data-user=\"9phYcLTwGpaIFSikcK\" class=\"u-url mention\" href=\"\" rel=\"ugc\">@<span></span></a></span><br>xmpp account: (all local users here have it!)", "tag":[ { "icon":{ "type":"Image", "url":"" }, "name":":blobcatglare:", "type":"Emoji" }, { "icon":{ "type":"Image", "url":"" }, "name":":blobcat:", "type":"Emoji" } ], "type":"Person", "url":"" }

There’s a lot going on here. First, take a look at the “id”. This is and my id on this social network - I’ll explain how you get from that to @mewmew later.

“followers” and “following” are collections (a type of object) that list who I am following and who follows me.

“name” is what I have my nickname set to currently.

“type” is “Person” - there can also be automated actors such as relays (which is the way you’d follow an instance).

Most important: take a look at “inbox” (,"outbox” (, and under “endpoints”, “sharedInbox” ( These are the main way ActivityPub federation works. If you make a private post and want to send it to me, what you would do is POST it to my inbox, while signing the request with your key. You can see publicKeyPem listed in my profile - this is the key that all my posts are signed with, so if I send you a direct message, a message is POSTed to your inbox URL (probably, with an HTTP signature made using my private key (stored on server).

Now, this is inefficient for public posts - so for a post that’s public, you send it to the sharedInbox endpoint instead (so this post is only getting sent to, not to you individually).

Now, /outbox is another important endpoint. It allows you to iterate over an actor’s posts. Usually it only displays public ones, but if you sign your fetch with an HTTP signature, it’ll show all of the ones that that actor is allowed to access (so if you follow me and sign the request with your signature, you can load my followers-only posts). This is useful for backfilling posts to your instance when you first find an account for example.

NOW, for your intended functionality - what I would do is the following:

Allow oAuth for various scopes
On the remote instance, authenticate with oAuth
When you do something on the remote instance, send the object created back to your home instance to be federated out

(sorry if this didn’t make sense, kinda hard to explain it)

NodeTube boosted

@nodetube @sean ok, I can address this.

First, a lot of these issues are only in the implementation. For example, following an instance is definitely possible in ActivityPub, Mastodon simply does not have this supported.

The ugly redirect flow isn’t necessary either, you just search up their handle on your instance.

You can still use the protocol and have a more oAuth like flow for interactions - simply expose channels as Actor, videos as Video, audio as Audio, comments as Note, etc (and when someone follows a channel, send them Create Video, Like Video, Create Note etc).

As for your community concern, I think that’s more about the people who are interested in ActivityPub using ActivityPub, of course they’re not gonna be on Twitter - they’re here.

If you have further questions I can answer them.

NodeTube boosted
@nodetube you might want to check out #PeerTube, which your project could be compatible with!

Is there a way to see which instances are followed by a given Mastodon instance?

Show more

Fosstodon is an English speaking Mastodon instance that is open to anyone who is interested in technology; particularly free & open source software.