mirror of
https://github.com/versia-pub/docs.git
synced 2025-12-06 06:18:19 +01:00
refactor: 🚚 Do full rename of Lysand to Versia
This commit is contained in:
parent
a106e7acef
commit
6414337a30
|
|
@ -1,12 +1,12 @@
|
||||||
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://lysand.org"><img src="https://cdn.lysand.org/logo-long-dark.webp" alt="Lysand Logo" height="110"></a>
|
<a href="https://versia.pub"><img src="https://cdn.lysand.org/logo-long-dark.webp" alt="Versia Logo" height="110"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<h2 align="center">
|
<h2 align="center">
|
||||||
<strong><code>Lysand Documentation</code></strong>
|
<strong><code>Versia Documentation</code></strong>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="public/screenshots/framed/ipad-home.webp" alt="Lysand on an iPad" height="400">
|
<img src="public/screenshots/framed/ipad-home.webp" alt="Versia on an iPad" height="400">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Technologies
|
## Technologies
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: 'Changelog',
|
title: 'Changelog',
|
||||||
description:
|
description:
|
||||||
'Changes since the last version of the Lysand protocol.',
|
'Changes since the last version of the Versia protocol.',
|
||||||
}
|
}
|
||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ export const metadata = {
|
||||||
|
|
||||||
# Notes
|
# Notes
|
||||||
|
|
||||||
Notes represent a piece of content on a Lysand instance. They can be posted by [Users](/entities/user) and are displayed in a user's feed. Notes can contain text, images, and other media. {{ className: 'lead' }}
|
Notes represent a piece of content on a Versia instance. They can be posted by [Users](/entities/user) and are displayed in a user's feed. Notes can contain text, images, and other media. {{ className: 'lead' }}
|
||||||
|
|
||||||
<Note>
|
<Note>
|
||||||
Notes are not just limited to microblogging. They can be used for any kind of content, such as forum posts, blog posts, image posts, video posts, audio posts, and even messaging.
|
Notes are not just limited to microblogging. They can be used for any kind of content, such as forum posts, blog posts, image posts, video posts, audio posts, and even messaging.
|
||||||
|
|
@ -97,12 +97,12 @@ Notes represent a piece of content on a Lysand instance. They can be posted by [
|
||||||
{
|
{
|
||||||
"id": "01902e09-0f8b-72de-8ee3-9afc0cf5eae1",
|
"id": "01902e09-0f8b-72de-8ee3-9afc0cf5eae1",
|
||||||
"type": "Note",
|
"type": "Note",
|
||||||
"uri": "https://social.lysand.org/objects/01902e09-0f8b-72de-8ee3-9afc0cf5eae1",
|
"uri": "https://versia.social/objects/01902e09-0f8b-72de-8ee3-9afc0cf5eae1",
|
||||||
"created_at": "2024-06-19T01:07:44.139Z",
|
"created_at": "2024-06-19T01:07:44.139Z",
|
||||||
"attachments": [ // [!code focus:100]
|
"attachments": [ // [!code focus:100]
|
||||||
{
|
{
|
||||||
"image/png": {
|
"image/png": {
|
||||||
"content": "https://cdn.lysand.org/29e810bf4707fef373d886af322089d5db300fce66e4e073efc26827f10825f6/image.webp",
|
"content": "https://cdn.versia.social/29e810bf4707fef373d886af322089d5db300fce66e4e073efc26827f10825f6/image.webp",
|
||||||
"remote": true,
|
"remote": true,
|
||||||
"thumbhash": "1QcSHQRnh493V4dIh4eXh1h4kJUI",
|
"thumbhash": "1QcSHQRnh493V4dIh4eXh1h4kJUI",
|
||||||
"description": "",
|
"description": "",
|
||||||
|
|
@ -116,7 +116,7 @@ Notes represent a piece of content on a Lysand instance. They can be posted by [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"image/png": {
|
"image/png": {
|
||||||
"content": "https://cdn.lysand.org/4f87598d377441e78f3c8cfa7bd7d19d61a7470bfe0abcbee6eb1de87279fb3b/image.webp",
|
"content": "https://cdn.versia.social/4f87598d377441e78f3c8cfa7bd7d19d61a7470bfe0abcbee6eb1de87279fb3b/image.webp",
|
||||||
"remote": true,
|
"remote": true,
|
||||||
"thumbhash": "3PcNNYSFeXh/d3eld0iHZoZgVwh2",
|
"thumbhash": "3PcNNYSFeXh/d3eld0iHZoZgVwh2",
|
||||||
"description": "",
|
"description": "",
|
||||||
|
|
@ -129,14 +129,14 @@ Notes represent a piece of content on a Lysand instance. They can be posted by [
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"author": "https://social.lysand.org/users/018eb863-753f-76ff-83d6-fd590de7740a",
|
"author": "https://versia.social/users/018eb863-753f-76ff-83d6-fd590de7740a",
|
||||||
"category": "microblog",
|
"category": "microblog",
|
||||||
"content": {
|
"content": {
|
||||||
"text/html": {
|
"text/html": {
|
||||||
"content": "<p>In the next lysand-fe update: account settings, finally!</p>"
|
"content": "<p>In the next versia-fe update: account settings, finally!</p>"
|
||||||
},
|
},
|
||||||
"text/plain": {
|
"text/plain": {
|
||||||
"content": "In the next lysand-fe update: account settings, finally!"
|
"content": "In the next versia-fe update: account settings, finally!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"device": {
|
"device": {
|
||||||
|
|
@ -145,14 +145,14 @@ Notes represent a piece of content on a Lysand instance. They can be posted by [
|
||||||
"url": "https://sk22.github.io/megalodon"
|
"url": "https://sk22.github.io/megalodon"
|
||||||
},
|
},
|
||||||
"extensions": {
|
"extensions": {
|
||||||
"org.lysand:custom_emojis": {
|
"pub.versia:custom_emojis": {
|
||||||
"emojis": []
|
"emojis": []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"group": "public",
|
"group": "public",
|
||||||
"is_sensitive": false,
|
"is_sensitive": false,
|
||||||
"mentions": [],
|
"mentions": [],
|
||||||
"subject": "Lysand development"
|
"subject": "Versia development"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: 'Entities',
|
title: 'Entities',
|
||||||
description:
|
description:
|
||||||
'Entities are simple JSON objects that represent the core data structures in Lysand.',
|
'Entities are simple JSON objects that represent the core data structures in Versia.',
|
||||||
}
|
}
|
||||||
|
|
||||||
# Entities
|
# Entities
|
||||||
|
|
||||||
Entities are the foundation of the Lysand protocol. A similar concept to entities are the [ActivityStreams](https://www.w3.org/TR/activitystreams-core/) objects, which are used to represent activities in the [ActivityPub](https://www.w3.org/TR/activitypub/) protocol. {{ className: 'lead' }}
|
Entities are the foundation of the Versia protocol. A similar concept to entities are the [ActivityStreams](https://www.w3.org/TR/activitystreams-core/) objects, which are used to represent activities in the [ActivityPub](https://www.w3.org/TR/activitypub/) protocol. {{ className: 'lead' }}
|
||||||
|
|
||||||
## Entity Definition
|
## Entity Definition
|
||||||
|
|
||||||
An entity is a simple JSON object that represents a core data structure in Lysand. Entities are used to represent various types of data, such as users, notes, and more. Each entity has a unique `id` property that is used to identify it within the instance.
|
An entity is a simple JSON object that represents a core data structure in Versia. Entities are used to represent various types of data, such as users, notes, and more. Each entity has a unique `id` property that is used to identify it within the instance.
|
||||||
|
|
||||||
Any field in an entity not marked as `required` may be omitted or set to `null`.
|
Any field in an entity not marked as `required` may be omitted or set to `null`.
|
||||||
|
|
||||||
|
|
@ -22,7 +22,7 @@ Any field in an entity not marked as `required` may be omitted or set to `null`.
|
||||||
Unique identifier for the entity. Must be unique within the instance. Can be any string. Max of 512 UTF-8 characters.
|
Unique identifier for the entity. Must be unique within the instance. Can be any string. Max of 512 UTF-8 characters.
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="type" type="string" required={true}>
|
<Property name="type" type="string" required={true}>
|
||||||
Type of the entity. Only types defined in the Lysand protocol are allowed. Use an [Extension](/extensions) if you want to define custom types.
|
Type of the entity. Only types defined in the Versia protocol are allowed. Use an [Extension](/extensions) if you want to define custom types.
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="created_at" type="ISO8601" required={true} typeLink="/types#iso-8601">
|
<Property name="created_at" type="ISO8601" required={true} typeLink="/types#iso-8601">
|
||||||
Date and time when the entity was created. Must be an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted string.
|
Date and time when the entity was created. Must be an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted string.
|
||||||
|
|
@ -67,7 +67,7 @@ Any field in an entity not marked as `required` may be omitted or set to `null`.
|
||||||
"zlorb_type": "giant",
|
"zlorb_type": "giant",
|
||||||
"zlorb_size": "huge"
|
"zlorb_size": "huge"
|
||||||
},
|
},
|
||||||
"org.lysand:location": {
|
"pub.versia:location": {
|
||||||
"latitude": 37.7749,
|
"latitude": 37.7749,
|
||||||
"longitude": -122.4194
|
"longitude": -122.4194
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ export const metadata = {
|
||||||
|
|
||||||
# Users
|
# Users
|
||||||
|
|
||||||
The `User` entity represents an account on a Lysand instance. Users can post [Notes](/entities/note), follow other users, and interact with content. Users are identified by their `id` property, which is unique within the instance. {{ className: 'lead' }}
|
The `User` entity represents an account on a Versia instance. Users can post [Notes](/entities/note), follow other users, and interact with content. Users are identified by their `id` property, which is unique within the instance. {{ className: 'lead' }}
|
||||||
|
|
||||||
## Addresses
|
## Addresses
|
||||||
|
|
||||||
|
|
@ -19,8 +19,8 @@ Users may be represented by a shorthand address, in the following formats:
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```
|
```
|
||||||
@jessew@social.lysand.org
|
@jessew@versia.social
|
||||||
@018ec082-0ae1-761c-b2c5-22275a611771@social.lysand.org
|
@018ec082-0ae1-761c-b2c5-22275a611771@versia.social
|
||||||
```
|
```
|
||||||
|
|
||||||
This is similar to an email address or an ActivityPub address.
|
This is similar to an email address or an ActivityPub address.
|
||||||
|
|
@ -71,7 +71,7 @@ Instance **must** be the host of the instance the user is on (hostname with opti
|
||||||
A header image for the user's profile. Also known as a cover photo or a banner. Must be an image format (`image/*`).
|
A header image for the user's profile. Also known as a cover photo or a banner. Must be an image format (`image/*`).
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="public_key" type="PublicKey" required={true}>
|
<Property name="public_key" type="PublicKey" required={true}>
|
||||||
The user's public key. Must follow the [Lysand Public Key](/signatures) format. `actor` may be a URI to another user's profile, in which case this key may allow the user to act on behalf of the other user (see [delegation](/delegation)).
|
The user's public key. Must follow the [Versia Public Key](/signatures) format. `actor` may be a URI to another user's profile, in which case this key may allow the user to act on behalf of the other user (see [delegation](/delegation)).
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
type URI = string;
|
type URI = string;
|
||||||
|
|
@ -132,7 +132,7 @@ Instance **must** be the host of the instance the user is on (hostname with opti
|
||||||
{
|
{
|
||||||
"id": "018ec082-0ae1-761c-b2c5-22275a611771",
|
"id": "018ec082-0ae1-761c-b2c5-22275a611771",
|
||||||
"type": "User",
|
"type": "User",
|
||||||
"uri": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771",
|
"uri": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771",
|
||||||
"created_at": "2024-04-09T01:38:51.743Z",
|
"created_at": "2024-04-09T01:38:51.743Z",
|
||||||
"avatar": { // [!code focus:100]
|
"avatar": { // [!code focus:100]
|
||||||
"image/png": {
|
"image/png": {
|
||||||
|
|
@ -148,16 +148,16 @@ Instance **must** be the host of the instance the user is on (hostname with opti
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"collections": {
|
"collections": {
|
||||||
"featured": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771/featured",
|
"featured": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771/featured",
|
||||||
"followers": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771/followers",
|
"followers": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771/followers",
|
||||||
"following": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771/following",
|
"following": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771/following",
|
||||||
"org.lysand:likes/Dislikes": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771/dislikes",
|
"pub.versia:likes/Dislikes": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771/dislikes",
|
||||||
"org.lysand:likes/Likes": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771/likes",
|
"pub.versia:likes/Likes": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771/likes",
|
||||||
"outbox": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771/outbox",
|
"outbox": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771/outbox",
|
||||||
},
|
},
|
||||||
"display_name": "April The Pink (limited Sand Edition)",
|
"display_name": "April The Pink (limited Sand Edition)",
|
||||||
"extensions": {
|
"extensions": {
|
||||||
"org.lysand:custom_emojis": {
|
"pub.versia:custom_emojis": {
|
||||||
"emojis": []
|
"emojis": []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -176,11 +176,11 @@ Instance **must** be the host of the instance the user is on (hostname with opti
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"header": null,
|
"header": null,
|
||||||
"inbox": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771/inbox",
|
"inbox": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771/inbox",
|
||||||
"indexable": false,
|
"indexable": false,
|
||||||
"manually_approves_followers": false,
|
"manually_approves_followers": false,
|
||||||
"public_key": {
|
"public_key": {
|
||||||
"actor": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771",
|
"actor": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771",
|
||||||
"public_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
"public_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
||||||
},
|
},
|
||||||
"username": "aprl"
|
"username": "aprl"
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ Likes are a way for users to show appreciation for a note, like Twitter's "heart
|
||||||
<Col>
|
<Col>
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="extension_type" type="string" required={true}>
|
<Property name="extension_type" type="string" required={true}>
|
||||||
Must be `org.lysand:likes/Like`.
|
Must be `pub.versia:likes/Like`.
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="author" type="URI" required={true} typeLink="/types#uri">
|
<Property name="author" type="URI" required={true} typeLink="/types#uri">
|
||||||
Creator of the Like.
|
Creator of the Like.
|
||||||
|
|
@ -37,7 +37,7 @@ Likes are a way for users to show appreciation for a note, like Twitter's "heart
|
||||||
{
|
{
|
||||||
"id": "3e7e4750-afd4-4d99-a256-02f0710a0520",
|
"id": "3e7e4750-afd4-4d99-a256-02f0710a0520",
|
||||||
"type": "Extension",
|
"type": "Extension",
|
||||||
"extension_type": "org.lysand:likes/Like",
|
"extension_type": "pub.versia:likes/Like",
|
||||||
"created_at": "2021-01-01T00:00:00.000Z",
|
"created_at": "2021-01-01T00:00:00.000Z",
|
||||||
"author": "https://example.com/users/6e0204a2-746c-4972-8602-c4f37fc63bbe",
|
"author": "https://example.com/users/6e0204a2-746c-4972-8602-c4f37fc63bbe",
|
||||||
"uri": "https://example.com/likes/3e7e4750-afd4-4d99-a256-02f0710a0520",
|
"uri": "https://example.com/likes/3e7e4750-afd4-4d99-a256-02f0710a0520",
|
||||||
|
|
@ -58,7 +58,7 @@ Dislikes are a way for users to show disapproval for a note, like YouTube's "dis
|
||||||
<Col>
|
<Col>
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="extension_type" type="string" required={true}>
|
<Property name="extension_type" type="string" required={true}>
|
||||||
Must be `org.lysand:likes/Dislike`.
|
Must be `pub.versia:likes/Dislike`.
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="author" type="URI" required={true} typeLink="/types#uri">
|
<Property name="author" type="URI" required={true} typeLink="/types#uri">
|
||||||
Creator of the Dislike.
|
Creator of the Dislike.
|
||||||
|
|
@ -75,7 +75,7 @@ Dislikes are a way for users to show disapproval for a note, like YouTube's "dis
|
||||||
{
|
{
|
||||||
"id": "3e7e4750-afd4-4d99-a256-02f0710a0520",
|
"id": "3e7e4750-afd4-4d99-a256-02f0710a0520",
|
||||||
"type": "Extension",
|
"type": "Extension",
|
||||||
"extension_type": "org.lysand:likes/Dislike",
|
"extension_type": "pub.versia:likes/Dislike",
|
||||||
"created_at": "2021-01-01T00:00:00.000Z",
|
"created_at": "2021-01-01T00:00:00.000Z",
|
||||||
"author": "https://example.com/users/6e0204a2-746c-4972-8602-c4f37fc63bbe",
|
"author": "https://example.com/users/6e0204a2-746c-4972-8602-c4f37fc63bbe",
|
||||||
"uri": "https://example.com/dislikes/3e7e4750-afd4-4d99-a256-02f0710a0520",
|
"uri": "https://example.com/dislikes/3e7e4750-afd4-4d99-a256-02f0710a0520",
|
||||||
|
|
@ -103,7 +103,7 @@ The Likes extension adds the following collections to the [User](/entities/user)
|
||||||
...
|
...
|
||||||
"collections": {
|
"collections": {
|
||||||
...
|
...
|
||||||
"org.lysand:likes/Likes": "https://example.com/users/6e0204a2-746c-4972-8602-c4f37fc63bbe/likes",
|
"pub.versia:likes/Likes": "https://example.com/users/6e0204a2-746c-4972-8602-c4f37fc63bbe/likes",
|
||||||
"org.lysand:likes/Dislikes": "https://example.com/users/6e0204a2-746c-4972-8602-c4f37fc63bbe/dislikes"
|
"pub.versia:likes/Dislikes": "https://example.com/users/6e0204a2-746c-4972-8602-c4f37fc63bbe/dislikes"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -68,7 +68,7 @@ All properties are optional.
|
||||||
Location does not need to be precise, and can be as simple as `+46+002/` (France) or `+48.52+002.20/` (Paris, France).
|
Location does not need to be precise, and can be as simple as `+46+002/` (France) or `+48.52+002.20/` (Paris, France).
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="aliases" type="URI[]" required={false} typeLink="/types#uri">
|
<Property name="aliases" type="URI[]" required={false} typeLink="/types#uri">
|
||||||
Lysand profiles that should be considered aliases of this profile.
|
Versia profiles that should be considered aliases of this profile.
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Col>
|
</Col>
|
||||||
|
|
@ -81,7 +81,7 @@ All properties are optional.
|
||||||
"type": "User",
|
"type": "User",
|
||||||
// ...
|
// ...
|
||||||
"extensions": { // [!code focus:100]
|
"extensions": { // [!code focus:100]
|
||||||
"org.lysand:vanity": {
|
"pub.versia:vanity": {
|
||||||
"avatar_overlays": [
|
"avatar_overlays": [
|
||||||
{
|
{
|
||||||
"image/png": {
|
"image/png": {
|
||||||
|
|
@ -124,7 +124,7 @@ All properties are optional.
|
||||||
"location": "+40.6894-074.0447/",
|
"location": "+40.6894-074.0447/",
|
||||||
"aliases": [
|
"aliases": [
|
||||||
"https://burger.social/accounts/349ee237-c672-41c1-aadc-677e185f795a",
|
"https://burger.social/accounts/349ee237-c672-41c1-aadc-677e185f795a",
|
||||||
"https://social.lysand.org/users/f565ef02-035d-4974-ba5e-f62a8558331d"
|
"https://versia.social/users/f565ef02-035d-4974-ba5e-f62a8558331d"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ export const metadata = {
|
||||||
If testing proves unsuccessful, this draft may be abandoned.
|
If testing proves unsuccessful, this draft may be abandoned.
|
||||||
</Note>
|
</Note>
|
||||||
|
|
||||||
Typically, communication between Lysand instances is done via HTTP. However, HTTP suffers from some limitations, such as high latency and heavy overhead for small messages, making it less suitable for exchanging large amounts of entities at acceptable speeds. {{ className: 'lead' }}
|
Typically, communication between Versia instances is done via HTTP. However, HTTP suffers from some limitations, such as high latency and heavy overhead for small messages, making it less suitable for exchanging large amounts of entities at acceptable speeds. {{ className: 'lead' }}
|
||||||
|
|
||||||
This extension aims to address these limitations by adding support for the exchange of entities using WebSockets.
|
This extension aims to address these limitations by adding support for the exchange of entities using WebSockets.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: 'HTTP',
|
title: 'HTTP',
|
||||||
description:
|
description:
|
||||||
'How Lysand uses the HTTP protocol for all communications between instances.',
|
'How Versia uses the HTTP protocol for all communications between instances.',
|
||||||
}
|
}
|
||||||
|
|
||||||
# HTTP
|
# HTTP
|
||||||
|
|
||||||
Lysand uses the HTTP protocol for all communications between instances. HTTP requests must conform to certain standards to ensure compatibility between different implementations, as well as to ensure the security and integrity of the data being exchanged.
|
Versia uses the HTTP protocol for all communications between instances. HTTP requests must conform to certain standards to ensure compatibility between different implementations, as well as to ensure the security and integrity of the data being exchanged.
|
||||||
|
|
||||||
ALL kinds of HTTP requests/responses between instances **MUST** include a [Signature](/signatures), signed with either the relevant [User](/entities/user)'s private key or the [Server Actor](/entities/server-actor)'s private key.
|
ALL kinds of HTTP requests/responses between instances **MUST** include a [Signature](/signatures), signed with either the relevant [User](/entities/user)'s private key or the [Server Actor](/entities/server-actor)'s private key.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,16 +3,16 @@ import { Guides, Guide } from '@/components/Guides';
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: 'Federation',
|
title: 'Federation',
|
||||||
description:
|
description:
|
||||||
'Description of federation behavior in Lysand.',
|
'Description of federation behavior in Versia.',
|
||||||
}
|
}
|
||||||
|
|
||||||
# Federation
|
# Federation
|
||||||
|
|
||||||
Being a federation protocol, Lysand defines a set of rules for exchanging data between instances. This document outlines the behavior of instances in a Lysand federated network. {{ className: 'lead' }}
|
Being a federation protocol, Versia defines a set of rules for exchanging data between instances. This document outlines the behavior of instances in a Versia federated network. {{ className: 'lead' }}
|
||||||
|
|
||||||
Federation is built on the [HyperText Transfer Protocol (HTTP)](https://tools.ietf.org/html/rfc7230) and the [JavaScript Object Notation (JSON)](https://tools.ietf.org/html/rfc7159) data format. Instances communicate with each other by sending and receiving JSON payloads over HTTP.
|
Federation is built on the [HyperText Transfer Protocol (HTTP)](https://tools.ietf.org/html/rfc7230) and the [JavaScript Object Notation (JSON)](https://tools.ietf.org/html/rfc7159) data format. Instances communicate with each other by sending and receiving JSON payloads over HTTP.
|
||||||
|
|
||||||
<Guides>
|
<Guides>
|
||||||
<Guide name="HTTP Guidelines" href="/federation/http" description="Guidelines for HTTP communication in Lysand." />
|
<Guide name="HTTP Guidelines" href="/federation/http" description="Guidelines for HTTP communication in Versia." />
|
||||||
<Guide name="Validation" href="/federation/validation" description="Validation rules for Lysand implementations." />
|
<Guide name="Validation" href="/federation/validation" description="Validation rules for Versia implementations." />
|
||||||
</Guides>
|
</Guides>
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: 'Validation',
|
title: 'Validation',
|
||||||
description:
|
description:
|
||||||
'Validation rules for Lysand implementations.',
|
'Validation rules for Versia implementations.',
|
||||||
}
|
}
|
||||||
|
|
||||||
# Validation
|
# Validation
|
||||||
|
|
||||||
Implementations **MUST** strictly validate all incoming data to ensure that it is well-formed and adheres to the Lysand Protocol. If a request is invalid, the server **MUST** return a `400 Bad Request` HTTP status code.
|
Implementations **MUST** strictly validate all incoming data to ensure that it is well-formed and adheres to the Versia Protocol. If a request is invalid, the server **MUST** return a `400 Bad Request` HTTP status code.
|
||||||
|
|
||||||
<Note>
|
<Note>
|
||||||
Remember that while *your* implementation may disallow or restrict some user input, other implementations may not. You **should not** apply those restrictions to data coming from other instances.
|
Remember that while *your* implementation may disallow or restrict some user input, other implementations may not. You **should not** apply those restrictions to data coming from other instances.
|
||||||
|
|
@ -33,4 +33,4 @@ Things that should be validated include, but are not limited to:
|
||||||
- The **validity** of all URLs and URIs (run them through your favorite URL parser, optionally fetch the linked URL).
|
- The **validity** of all URLs and URIs (run them through your favorite URL parser, optionally fetch the linked URL).
|
||||||
- The **time** of all dates and times (people should not be born in the future, or in the year 0).
|
- The **time** of all dates and times (people should not be born in the future, or in the year 0).
|
||||||
|
|
||||||
It is your implementation's duty to reject data from other instances that does not adhere to the strict spec. **This is crucial to ensure the integrity of your instance and the network as a whole**. Allowing data that is technically valid but semantically incorrect can lead to the degradation of the entire Lysand ecosystem.
|
It is your implementation's duty to reject data from other instances that does not adhere to the strict spec. **This is crucial to ensure the integrity of your instance and the network as a whole**. Allowing data that is technically valid but semantically incorrect can lead to the degradation of the entire Versia ecosystem.
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@ import { Resources } from '@/components/Resources'
|
||||||
import { HeroPattern } from '@/components/HeroPattern'
|
import { HeroPattern } from '@/components/HeroPattern'
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: 'Lysand Documentation',
|
title: 'Versia Documentation',
|
||||||
description: 'Introduction to the Lysand Protocol, a communication medium for federated applications, leveraging the HTTP stack.',
|
description: 'Introduction to the Versia Protocol, a communication medium for federated applications, leveraging the HTTP stack.',
|
||||||
}
|
}
|
||||||
|
|
||||||
export const sections = [
|
export const sections = [
|
||||||
|
|
@ -14,9 +14,9 @@ export const sections = [
|
||||||
|
|
||||||
<HeroPattern />
|
<HeroPattern />
|
||||||
|
|
||||||
# Lysand Federation Protocol
|
# Versia Federation Protocol
|
||||||
|
|
||||||
The Lysand Protocol is designed as a communication medium for federated applications, leveraging the HTTP stack. Its simplicity ensures ease of implementation and comprehension. {{ className: 'lead' }}
|
The Versia Protocol is designed as a communication medium for federated applications, leveraging the HTTP stack. Its simplicity ensures ease of implementation and comprehension. {{ className: 'lead' }}
|
||||||
|
|
||||||
<div className="not-prose mb-16 mt-6 flex gap-3">
|
<div className="not-prose mb-16 mt-6 flex gap-3">
|
||||||
<Button href="/entities" arrow="right">
|
<Button href="/entities" arrow="right">
|
||||||
|
|
@ -33,20 +33,20 @@ The Lysand Protocol is designed as a communication medium for federated applicat
|
||||||
The words **MUST**, **MUST NOT**, **SHOULD**, **SHOULD NOT**, and **MAY** are used in this document as defined in [RFC 2119](https://tools.ietf.org/html/rfc2119).
|
The words **MUST**, **MUST NOT**, **SHOULD**, **SHOULD NOT**, and **MAY** are used in this document as defined in [RFC 2119](https://tools.ietf.org/html/rfc2119).
|
||||||
</Note>
|
</Note>
|
||||||
|
|
||||||
The Lysand Protocol uses the following terms:
|
The Versia Protocol uses the following terms:
|
||||||
- **Entity**: A generic term for any JSON object in the protocol, such as an [Actor](./entities/actors), a [Note](./entities/note), or a [Like](./entities/likes). Entities are uniquely identified by their `id` property.
|
- **Entity**: A generic term for any JSON object in the protocol, such as an [Actor](./entities/actors), a [Note](./entities/note), or a [Like](./entities/likes). Entities are uniquely identified by their `id` property.
|
||||||
- **Implementation**: A software application that implements the Lysand Protocol.
|
- **Implementation**: A software application that implements the Versia Protocol.
|
||||||
- **Instance**: An application deploying an **Implementation**.
|
- **Instance**: An application deploying an **Implementation**.
|
||||||
- Using the same nomenclature, an ActivityPub Implementation would be `Mastodon`, and an Instance would be `mastodon.social`.
|
- Using the same nomenclature, an ActivityPub Implementation would be `Mastodon`, and an Instance would be `mastodon.social`.
|
||||||
- **Federation**: The process of exchanging data between two or more **Instances**.
|
- **Federation**: The process of exchanging data between two or more **Instances**.
|
||||||
|
|
||||||
## Philosophy
|
## Philosophy
|
||||||
|
|
||||||
The Lysand Protocol is heavily inspired by the [ActivityPub](https://www.w3.org/TR/activitypub/) specification. It is designed to be simple and easy to implement, with a focus on the following concepts:
|
The Versia Protocol is heavily inspired by the [ActivityPub](https://www.w3.org/TR/activitypub/) specification. It is designed to be simple and easy to implement, with a focus on the following concepts:
|
||||||
- **Simple Structures**: Entities are represented as JSON objects. No JSON-LD, no complex data structures, just plain JSON.
|
- **Simple Structures**: Entities are represented as JSON objects. No JSON-LD, no complex data structures, just plain JSON.
|
||||||
- **Modularity**: The protocol is divided into a **core protocol** and **extensions**. Implementations can choose to support only the core protocol or add extensions as needed.
|
- **Modularity**: The protocol is divided into a **core protocol** and **extensions**. Implementations can choose to support only the core protocol or add extensions as needed.
|
||||||
- **Namespacing**: To avoid extension conflicts, all extensions are namespaced.
|
- **Namespacing**: To avoid extension conflicts, all extensions are namespaced.
|
||||||
- **Signatures**: Most types of interactions **must** be signed with a private key. Unlike other protocols, signatures are **mandatory**, not optional.
|
- **Signatures**: Most types of interactions **must** be signed with a private key. Unlike other protocols, signatures are **mandatory**, not optional.
|
||||||
- **Developer-Friendliness**: Understanding and implementing your own Lysand server should be easy. Documentation is aimed at developers first.
|
- **Developer-Friendliness**: Understanding and implementing your own Versia server should be easy. Documentation is aimed at developers first.
|
||||||
|
|
||||||
<Resources />
|
<Resources />
|
||||||
|
|
|
||||||
|
|
@ -11,16 +11,16 @@ import type { ReactNode } from "react";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: {
|
title: {
|
||||||
template: "%s • Lysand API Reference",
|
template: "%s • Versia API Reference",
|
||||||
default: "Lysand API Reference",
|
default: "Versia API Reference",
|
||||||
},
|
},
|
||||||
keywords: ["federation", "api", "reference", "documentation", "lysand"],
|
keywords: ["federation", "api", "reference", "documentation", "versia"],
|
||||||
metadataBase: new URL("https://dev.lysand.org"),
|
metadataBase: new URL("https://versia.pub"),
|
||||||
openGraph: {
|
openGraph: {
|
||||||
type: "article",
|
type: "article",
|
||||||
images: {
|
images: {
|
||||||
url: logo.src,
|
url: logo.src,
|
||||||
alt: "Lysand logo",
|
alt: "Versia logo",
|
||||||
height: logo.height,
|
height: logo.height,
|
||||||
width: logo.width,
|
width: logo.width,
|
||||||
type: "image/webp",
|
type: "image/webp",
|
||||||
|
|
|
||||||
18
app/page.tsx
18
app/page.tsx
|
|
@ -5,9 +5,9 @@ import type { Metadata } from "next";
|
||||||
import type { FC } from "react";
|
import type { FC } from "react";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Lysand Documentation",
|
title: "Versia Documentation",
|
||||||
description:
|
description:
|
||||||
"Introduction to the Lysand Protocol, a communication medium for federated applications, leveraging the HTTP stack.",
|
"Introduction to the Versia Protocol, a communication medium for federated applications, leveraging the HTTP stack.",
|
||||||
};
|
};
|
||||||
|
|
||||||
const Page: FC = () => {
|
const Page: FC = () => {
|
||||||
|
|
@ -20,7 +20,7 @@ const Page: FC = () => {
|
||||||
{
|
{
|
||||||
name: "MIT licensed",
|
name: "MIT licensed",
|
||||||
description:
|
description:
|
||||||
"Lysand is licensed under the MIT License, which allows you to use it for any purpose.",
|
"Versia is licensed under the MIT License, which allows you to use it for any purpose.",
|
||||||
icon: "tabler:license",
|
icon: "tabler:license",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -32,7 +32,7 @@ const Page: FC = () => {
|
||||||
{
|
{
|
||||||
name: "Easy to implement",
|
name: "Easy to implement",
|
||||||
description:
|
description:
|
||||||
"Lysand is designed to be easy to implement in any language.",
|
"Versia is designed to be easy to implement in any language.",
|
||||||
icon: "tabler:code",
|
icon: "tabler:code",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -65,7 +65,7 @@ const Page: FC = () => {
|
||||||
<>
|
<>
|
||||||
<div className="relative z-10 max-w-2xl lg:pt-6">
|
<div className="relative z-10 max-w-2xl lg:pt-6">
|
||||||
<h1 className="text-5xl font-semibold tracking-tight leading-3 text-brand-600 dark:text-brand-400">
|
<h1 className="text-5xl font-semibold tracking-tight leading-3 text-brand-600 dark:text-brand-400">
|
||||||
Lysand
|
Versia
|
||||||
</h1>
|
</h1>
|
||||||
<h1 className="text-4xl sm:text-5xl font-semibold tracking-tight">
|
<h1 className="text-4xl sm:text-5xl font-semibold tracking-tight">
|
||||||
Federation, simpler
|
Federation, simpler
|
||||||
|
|
@ -79,8 +79,8 @@ const Page: FC = () => {
|
||||||
<h2>Made by developers</h2>
|
<h2>Made by developers</h2>
|
||||||
|
|
||||||
<p className="lead">
|
<p className="lead">
|
||||||
Lysand is designed and maintained by the developers of the
|
Versia is designed and maintained by the developers of the
|
||||||
Lysand Server, which uses Lysand for federation. This
|
Versia Server, which uses Versia for federation. This
|
||||||
community could include you! Check out our{" "}
|
community could include you! Check out our{" "}
|
||||||
<a
|
<a
|
||||||
href="https://github.com/lysand-org/lysand"
|
href="https://github.com/lysand-org/lysand"
|
||||||
|
|
@ -123,7 +123,7 @@ const Page: FC = () => {
|
||||||
url: "https://mk.cpluspatch.com/@jessew",
|
url: "https://mk.cpluspatch.com/@jessew",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Lysand",
|
name: "Versia",
|
||||||
icon: "bx:server",
|
icon: "bx:server",
|
||||||
url: "https://social.lysand.org/@jessew",
|
url: "https://social.lysand.org/@jessew",
|
||||||
},
|
},
|
||||||
|
|
@ -161,7 +161,7 @@ const Page: FC = () => {
|
||||||
url: "https://donotsta.re/april",
|
url: "https://donotsta.re/april",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Lysand",
|
name: "Versia",
|
||||||
icon: "bx:server",
|
icon: "bx:server",
|
||||||
url: "https://social.lysand.org/@aprl",
|
url: "https://social.lysand.org/@aprl",
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
import { Libraries } from '@/components/Libraries'
|
import { Libraries } from '@/components/Libraries'
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: 'Lysand SDKs',
|
title: 'Versia SDKs',
|
||||||
description:
|
description:
|
||||||
'Lysand offers well-written SDKs in various languages to help you create Lysand applications with ease.',
|
'Versia offers well-written SDKs in various languages to help you create Lysand applications with ease.',
|
||||||
}
|
}
|
||||||
|
|
||||||
export const sections = [
|
export const sections = [
|
||||||
{ title: 'Official libraries', id: 'official-libraries' },
|
{ title: 'Official libraries', id: 'official-libraries' },
|
||||||
]
|
]
|
||||||
|
|
||||||
# Protocol SDKs
|
# Protocol SDKs
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: 'Signatures',
|
title: 'Signatures',
|
||||||
description:
|
description:
|
||||||
'Learn how signatures work, and how to implement them in your Lysand server.',
|
'Learn how signatures work, and how to implement them in your Versia server.',
|
||||||
}
|
}
|
||||||
|
|
||||||
# Signatures
|
# Signatures
|
||||||
|
|
||||||
Lysand uses cryptographic signatures to ensure the integrity and authenticity of data. Signatures are used to verify that the data has not been tampered with and that it was created by the expected user. {{ className: 'lead' }}
|
Versia uses cryptographic signatures to ensure the integrity and authenticity of data. Signatures are used to verify that the data has not been tampered with and that it was created by the expected user. {{ className: 'lead' }}
|
||||||
|
|
||||||
<Note>
|
<Note>
|
||||||
This part is very important! If signatures are implemented incorrectly in your server, **you will not be able to federate**.
|
This part is very important! If signatures are implemented incorrectly in your server, **you will not be able to federate**.
|
||||||
|
|
|
||||||
|
|
@ -53,17 +53,17 @@ Pages should be limited to a reasonable number of entities, such as 20 or 80.
|
||||||
|
|
||||||
```jsonc {{ 'title': 'Example Collection' }}
|
```jsonc {{ 'title': 'Example Collection' }}
|
||||||
{
|
{
|
||||||
"author": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771",
|
"author": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771",
|
||||||
"first": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771/outbox?page=1",
|
"first": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771/outbox?page=1",
|
||||||
"last": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771/outbox?page=3",
|
"last": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771/outbox?page=3",
|
||||||
"total": 46,
|
"total": 46,
|
||||||
"next": "https://social.lysand.org/users/018ec082-0ae1-761c-b2c5-22275a611771/outbox?page=2",
|
"next": "https://versia.social/users/018ec082-0ae1-761c-b2c5-22275a611771/outbox?page=2",
|
||||||
"prev": null,
|
"prev": null,
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"id": "456df8ed-daf1-4062-abab-491071c7b8dd",
|
"id": "456df8ed-daf1-4062-abab-491071c7b8dd",
|
||||||
"type": "Note",
|
"type": "Note",
|
||||||
"uri": "https://social.lysand.org/notes/456df8ed-daf1-4062-abab-491071c7b8dd",
|
"uri": "https://versia.social/notes/456df8ed-daf1-4062-abab-491071c7b8dd",
|
||||||
"created_at": "2024-04-09T01:38:51.743Z",
|
"created_at": "2024-04-09T01:38:51.743Z",
|
||||||
"content": {
|
"content": {
|
||||||
"text/plain": {
|
"text/plain": {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ export const metadata = {
|
||||||
# Custom Emoji
|
# Custom Emoji
|
||||||
|
|
||||||
<Note>
|
<Note>
|
||||||
This structure is part of the [Custom Emojis](/extensions/custom-emojis) extension. As such, it is not part of the core Lysand specification.
|
This structure is part of the [Custom Emojis](/extensions/custom-emojis) extension. As such, it is not part of the core Versia specification.
|
||||||
|
|
||||||
If you are not implementing the Custom Emojis extension, you can ignore this structure.
|
If you are not implementing the Custom Emojis extension, you can ignore this structure.
|
||||||
</Note>
|
</Note>
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ export function Logo(props: ComponentPropsWithoutRef<"div">) {
|
||||||
>
|
>
|
||||||
<img src={logo.src} alt="Logo" className="h-full rounded-sm" />
|
<img src={logo.src} alt="Logo" className="h-full rounded-sm" />
|
||||||
<span className="fill-zinc-900 dark:fill-white font-semibold text-lg">
|
<span className="fill-zinc-900 dark:fill-white font-semibold text-lg">
|
||||||
Lysand Protocol
|
Versia Protocol
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ const resources: ResourceType[] = [
|
||||||
href: "/security",
|
href: "/security",
|
||||||
name: "Security",
|
name: "Security",
|
||||||
description:
|
description:
|
||||||
"Learn how to secure your Lysand implementation and protect your users' data.",
|
"Learn how to secure your Versia implementation and protect your users' data.",
|
||||||
icon: "tabler:building-bank",
|
icon: "tabler:building-bank",
|
||||||
pattern: {
|
pattern: {
|
||||||
y: -6,
|
y: -6,
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "@lysand-org/docs",
|
"name": "@versia-pub/docs",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue