Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ihateblueb/aster
awesome (work in progress) federated microblogging server
https://github.com/ihateblueb/aster
activitypub activitystreams fediverse svelte typescript
Last synced: 14 days ago
JSON representation
awesome (work in progress) federated microblogging server
- Host: GitHub
- URL: https://github.com/ihateblueb/aster
- Owner: ihateblueb
- License: agpl-3.0
- Created: 2024-11-24T16:45:10.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2025-01-20T16:54:11.000Z (18 days ago)
- Last Synced: 2025-01-20T17:25:26.418Z (18 days ago)
- Topics: activitypub, activitystreams, fediverse, svelte, typescript
- Language: TypeScript
- Homepage:
- Size: 183 MB
- Stars: 10
- Watchers: 2
- Forks: 0
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Aster
[![Translate Aster](https://weblate.git.gay/widget/aster/locales/svg-badge.svg?native=1)](https://weblate.git.gay/projects/aster/locales/)
Aster is a federated microblogging software (heavily in development) intending to include the fun features of software like Misskey and also the practical features of software like Mastodon.
I also intend to have a somewhat good quality codebase with limited repetition and similar style throughout.
Development instance (sometimes) available at https://dev.aster.pages.gay/. It's run through a Cloudflare tunnel and is on my computer, so it's only up when I'm working on it.
## Requirements
- NodeJS
- pnpm
- PostgreSQL
- Redis or DragonflyDBLatest of all of these are best, haven't tested for minimum versions.
## Setup
Install dependencies with `pnpm i` and then build with `pnpm build`.\
Afterward, copy `./config/example.yaml` to `./config/production.yaml` and update it to your liking.\
Make sure your url set in the config is right. If it isn't, your instance actor will be generated wrong, and you won't be able to federate.\
It is recommended you set the logging to fancy during initial setup.\
After configuration, run `pnpm migrate` to set up your database\
Run `pnpm start` and your instance will start up.## Project Status
### AP
Endpoints done:
- /user/:id
- /user/:id/inbox
- /note/:id
- /note/:id/activity
- /like/:idEndpoints in progress:
- /user/:id/followers (Collection of following actors)
- /user/:id/following (Collection of followed actors)- /user/:id/outbox (Collection of recently sent public activities. Do I even do this? Does anyone even use it? may be good for backfill of notes. maybe just get past public notes and throw /activity at the end so it's all of a user's public Create and Announce activities? like is also fetchable, could do those also)
Endpoints needed:
- /note/:id/replies (Collection of Links to Note objects\*)
- /note/:id/likes (Collection of Links to Like activities\*)
- /note/:id/shares (Collection of Links to Announce activities\*)\*or entire object with LD signature, to save time on the fetching end. I need to look into the best way to implement this further.
Activities Sent:
- Accept
- Follow
- Announce
- Note
- Bite
- User
- Block
- Create
- Note
- Delete
- Note
- Like
- Note
- Reject
- Follow
- Undo
- Like
- FollowI'm thinking of sending Create(Actor()) to instances with followers to local since I process that
Activities Processed:
- Accept
- Follow
- Announce
- Note
- Bite
- User
- Note
- Block
- Create
- Note
- Actor
- Delete
- User
- Note
- Flag
- Like
- Note
- Reject
- Follow
- Undo
- Follow
- Like
- Announce
- Update
- User
- NoteActivities that should be processed in the future:
- Undo
- Accept ?
- Follow ??
- Like (with content)
- EmojiReact
- Add
- Remove### Federation
- Supports nodeinfo 2.0 and 2.1
- host-meta works neatly
- webfinger implemented, and has high tolerance of formatting (eg. resource can be @user@host, user, @user, user@host, etc.)
- json and xml supported! for the most part!### API
- Get note
- Create notes
- Create notes with replies or quotes
- Like notes
- Delete notes
- Create repeats
- Delete repeats (same as deleting a note)
- Register
- Login
- Get user
- Follow user
- Block user
- Bite user
- Get relationship to/from user
- Refetch remote user
- Get instance metadata
- Get notifications
- Read notifications
- Get timelines
- home
- local
- bubble
- global
- Refetch user from remote
- Moderate remote instances (admin)
- toggle accept, return, fetch, and deliver
- Get moderated remote instances (admin)## TODO
- Processing of incoming emoji
- Emoji on entities (emoji array on Note, User, Poll that joins?? ManyToMany?)
- Fix note attachment joins. Cant it just be a left join?? have i been overthinking it?
- bookmarks
- bookmark timeline
- drive endpoints
- drive upload- report frontend and endpoints
- handle robots.txt from backend, generate from config
- favicon## Development
`devenv up` automatically starts a fresh postgres instance, creates a database and user with the correct permissions, and a redis instance.
`devenv shell` opens a shell with helpful aliases and automatically adjusts which config is used by aster, so you don't have to modify the config to start.
you can use direnv to automatically start the devenv shell when in aster