mirror of
1
Fork 0

[documentation] Add project roadmap (#514)

* add note about alpha + beta, link to roadmap

* rename progress => roadmap

* edit / update roadmap

* add note that 2023 date is only an estimate

* clarify that order of features may change

* add 'best-guess' note at the top
This commit is contained in:
tobi 2022-04-30 17:14:57 +02:00 committed by GitHub
parent 4851ffe11b
commit f5e006892e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 293 additions and 247 deletions

View File

@ -1,244 +0,0 @@
# Progress
Things are moving on the project! As of July 2021 you can now:
## Admin
* Build and deploy GoToSocial as a binary, with automatic LetsEncrypt certificate support built-in.
* Create, confirm, and promote users using self-documented CLI tool.
## User
* Connect to the running instance via Tusky or Pinafore, using email address and password (stored encrypted).
* Post/delete posts.
* Reply/delete replies.
* Fave/unfave posts.
* Post images and gifs.
* Boost stuff/unboost stuff.
* Set your profile info (including header and avatar).
* Follow people/unfollow people.
* Accept follow requests from people.
* Post followers only/direct/public/unlocked.
* Customize posts with further flags: federated (y/n), replyable (y/n), likeable (y/n), boostable (y/n) -- not supported through Pinafore/Tusky yet.
* Get notifications for mentions/replies/likes/boosts.
* View local timeline.
* View and scroll home timeline (with ~10ms latency hell yeah).
* Stream new posts, notifications and deletes through a websockets connection via Pinafore.
## Federation
* Federation support and interoperability with Mastodon and others.
* Domain blocking: create, update, delete, and export domain blocks.
* Domain blocking: import lists of domain blocks -- no more blocking domains one-by-one.
## To-do list
* [ ] Client-To-Server (Client REST API)
* [ ] Token and sign-in
* [x] /api/v1/apps POST (Create an application)
* [ ] /api/v1/apps/verify_credentials GET (Verify an application works)
* [x] /oauth/authorize GET (Show authorize page to user)
* [x] /oauth/authorize POST (Get an oauth access code for an app/user)
* [x] /oauth/token POST (Obtain a user-level access token)
* [ ] /oauth/revoke POST (Revoke a user-level access token)
* [x] /auth/sign_in GET (Show form for user signin)
* [x] /auth/sign_in POST (Validate username and password and sign user in)
* [ ] Accounts
* [x] /api/v1/accounts POST (Register a new account)
* [x] /api/v1/accounts/verify_credentials GET (Verify account credentials with a user token)
* [x] /api/v1/accounts/update_credentials PATCH (Update user's display name/preferences)
* [x] /api/v1/accounts/:id GET (Get account information)
* [x] /api/v1/accounts/:id/statuses GET (Get an account's statuses)
* [x] /api/v1/accounts/:id/followers GET (Get an account's followers)
* [x] /api/v1/accounts/:id/following GET (Get an account's following)
* [ ] /api/v1/accounts/:id/featured_tags GET (Get an account's featured tags)
* [ ] /api/v1/accounts/:id/lists GET (Get lists containing this account)
* [ ] /api/v1/accounts/:id/identity_proofs GET (Get identity proofs for this account)
* [x] /api/v1/accounts/:id/follow POST (Follow this account)
* [x] /api/v1/accounts/:id/unfollow POST (Unfollow this account)
* [x] /api/v1/accounts/:id/block POST (Block this account)
* [x] /api/v1/accounts/:id/unblock POST (Unblock this account)
* [ ] /api/v1/accounts/:id/mute POST (Mute this account)
* [ ] /api/v1/accounts/:id/unmute POST (Unmute this account)
* [ ] /api/v1/accounts/:id/pin POST (Feature this account on profile)
* [ ] /api/v1/accounts/:id/unpin POST (Remove this account from profile)
* [ ] /api/v1/accounts/:id/note POST (Make a personal note about this account)
* [x] /api/v1/accounts/relationships GET (Check relationships with accounts)
* [ ] /api/v1/accounts/search GET (Search for an account)
* [ ] Bookmarks
* [ ] /api/v1/bookmarks GET (See bookmarked statuses)
* [x] Favourites
* [x] /api/v1/favourites GET (See faved statuses)
* [ ] Mutes
* [ ] /api/v1/mutes GET (See list of muted accounts)
* [x] Blocks
* [x] /api/v1/blocks GET (See list of blocked accounts)
* [ ] Domain Blocks
* [x] /api/v1/domain_blocks GET (See list of domain blocks)
* [x] /api/v1/domain_blocks POST (Create a domain block)
* [x] /api/v1/domain_blocks DELETE (Remove a domain block)
* [ ] Filters
* [ ] /api/v1/filters GET (Get list of filters)
* [ ] /api/v1/filters/:id GET (View a filter)
* [ ] /api/v1/filters POST (Create a filter)
* [ ] /api/v1/filters/:id PUT (Update a filter)
* [ ] /api/v1/filters/:id DELETE (Remove a filter)
* [ ] Reports
* [ ] /api/v1/reports POST (File a report)
* [ ] Follow Requests
* [x] /api/v1/follow_requests GET (View pending follow requests)
* [x] /api/v1/follow_requests/:id/authorize POST (Accept a follow request)
* [ ] /api/v1/follow_requests/:id/reject POST (Reject a follow request)
* [ ] Endorsements
* [ ] /api/v1/endorsements GET (View existing endorsements)
* [ ] Featured Tags
* [ ] /api/v1/featured_tags GET (View featured tags)
* [ ] /api/v1/featured_tags POST (Feature a tag)
* [ ] /api/v1/featured_tags/:id DELETE (Unfeature a tag)
* [ ] /api/v1/featured_tags/suggestions GET (See most used tags)
* [ ] Preferences
* [ ] /api/v1/preferences GET (Get user preferences)
* [ ] Suggestions
* [ ] /api/v1/suggestions GET (Get suggested accounts to follow)
* [ ] /api/v1/suggestions/:account_id DELETE (Delete a suggestion)
* [ ] Statuses
* [x] /api/v1/statuses POST (Create a new status)
* [x] /api/v1/statuses/:id GET (View an existing status)
* [x] /api/v1/statuses/:id DELETE (Delete a status)
* [x] /api/v1/statuses/:id/context GET (View statuses above and below status ID)
* [x] /api/v1/statuses/:id/reblogged_by GET (See who has reblogged a status)
* [x] /api/v1/statuses/:id/favourited_by GET (See who has faved a status)
* [x] /api/v1/statuses/:id/favourite POST (Fave a status)
* [x] /api/v1/statuses/:id/unfavourite POST (Unfave a status)
* [x] /api/v1/statuses/:id/reblog POST (Reblog a status)
* [x] /api/v1/statuses/:id/unreblog POST (Undo a reblog)
* [ ] /api/v1/statuses/:id/bookmark POST (Bookmark a status)
* [ ] /api/v1/statuses/:id/unbookmark POST (Undo a bookmark)
* [ ] /api/v1/statuses/:id/mute POST (Mute notifications on a status)
* [ ] /api/v1/statuses/:id/unmute POST (Unmute notifications on a status)
* [ ] /api/v1/statuses/:id/pin POST (Pin a status to profile)
* [ ] /api/v1/statuses/:id/unpin POST (Unpin a status from profile)
* [x] Media
* [x] /api/v1/media POST (Upload a media attachment)
* [x] /api/v1/media/:id GET (Get a media attachment)
* [x] /api/v1/media/:id PUT (Update an attachment)
* [ ] Polls
* [ ] /api/v1/polls/:id GET (Show a poll)
* [ ] /api/v1/polls/:id/votes POST (Vote on a poll)
* [ ] Scheduled Statuses
* [ ] /api/v1/scheduled_statuses GET (View scheduled statuses)
* [ ] /api/v1/scheduled_statuses/:id GET (View a scheduled status)
* [ ] /api/v1/scheduled_statuses/:id PUT (Schedule a status)
* [ ] /api/v1/scheduled_statuses/:id DELETE (Cancel a scheduled status)
* [ ] Timelines
* [x] /api/v1/timelines/public GET (See the public/federated timeline)
* [ ] /api/v1/timelines/tag/:hashtag GET (Get public statuses that use hashtag)
* [x] /api/v1/timelines/home GET (View statuses from followed users)
* [ ] /api/v1/timelines/list/:list_id GET (Get statuses in given list)
* [ ] Conversations
* [ ] /api/v1/conversations GET (Get a list of direct message convos)
* [ ] /api/v1/conversations/:id DELETE (Delete a direct message convo)
* [ ] /api/v1/conversations/:id POST (Mark a conversation as read)
* [ ] Lists
* [ ] /api/v1/lists GET (Show a list of lists)
* [ ] /api/v1/lists/:id GET (Show a single list)
* [ ] /api/v1/lists POST (Create a new list)
* [ ] /api/v1/lists/:id PUT (Update a list)
* [ ] /api/v1/lists/:id DELETE (Delete a list)
* [ ] /api/v1/lists/:id/accounts GET (View which accounts are in a list)
* [ ] /api/v1/lists/:id/accounts POST (Add accounts to a list)
* [ ] /api/v1/lists/:id/accounts DELETE (Remove accounts from a list)
* [ ] Markers
* [ ] /api/v1/markers GET (Get saved timeline position)
* [ ] /api/v1/markers POST (Save timeline position)
* [x] Streaming
* [x] /api/v1/streaming WEBSOCKETS (Stream live events to user via websockets)
* [ ] Notifications
* [x] /api/v1/notifications GET (Get list of notifications)
* [x] /api/v1/notifications/:id GET (Get a single notification)
* [ ] /api/v1/notifications/clear POST (Clear all notifications)
* [ ] /api/v1/notifications/:id POST (Clear a single notification)
* [ ] Push
* [ ] /api/v1/push/subscription POST (Subscribe to push notifications)
* [ ] /api/v1/push/subscription GET (Get current subscription)
* [ ] /api/v1/push/subscription PUT (Change notification types)
* [ ] /api/v1/push/subscription DELETE (Delete current subscription)
* [x] Search
* [x] /api/v2/search GET (Get search query results)
* [ ] Instance
* [x] /api/v1/instance GET (Get instance information)
* [x] /api/v1/instance PATCH (Update instance information)
* [ ] /api/v1/instance/peers GET (Get list of federated servers)
* [ ] /api/v1/instance/activity GET (Instance activity over the last 3 months, binned weekly.)
* [ ] Trends
* [ ] /api/v1/trends GET (Get a list of trending tags for the last week)
* [ ] Directory
* [ ] /api/v1/directory GET (Show profiles this server is aware of.)
* [ ] Custom Emojis
* [ ] /api/v1/custom_emojis GET (Show this server's custom emoji)
* [ ] Admin
* [x] /api/v1/admin/custom_emojis POST (Upload a custom emoji for instance-wide usage)
* [ ] /api/v1/admin/accounts GET (View accounts filtered by criteria)
* [ ] /api/v1/admin/accounts/:id GET (View admin level info about an account)
* [ ] /api/v1/admin/accounts/:id/action POST (Perform an admin action on account)
* [ ] /api/v1/admin/accounts/:id/approve POST (Approve pending account)
* [ ] /api/v1/admin/accounts/:id/reject POST (Deny pending account)
* [ ] /api/v1/admin/accounts/:id/enable POST (Reenable a disabled account)
* [ ] /api/v1/admin/accounts/:id/unsilence POST (Unsilence a silenced account)
* [ ] /api/v1/admin/accounts/:id/unsuspend POST (Unsuspend a suspended account)
* [ ] /api/v1/admin/reports GET (View all reports)
* [ ] /api/v1/admin/reports/:id GET (View a single report)
* [ ] /api/v1/admin/reports/:id/assign_to_self POST (Assign a report to the current admin account)
* [ ] /api/v1/admin/reports/:id/unassign POST (Unassign a report)
* [ ] /api/v1/admin/reports/:id/resolve POST (Mark a report as resolved)
* [ ] /api/v1/admin/reports/:id/reopen POST (Reopen a closed report)
* [ ] Announcements
* [ ] /api/v1/announcements GET (Show all current announcements)
* [ ] /api/v1/announcements/:id/dismiss POST (Mark an announcement as read)
* [ ] /api/v1/announcements/:id/reactions/:name PUT (Add a reaction to an announcement)
* [ ] /api/v1/announcements/:id/reactions/:name DELETE (Remove a reaction from an announcement)
* [ ] Proofs
* [ ] /api/proofs GET (View identity proofs)
* [ ] Oembed
* [ ] /api/oembed GET (Get oembed metadata for a status URL)
* [ ] Server-To-Server (Federation protocol)
* [x] Mechanism to trigger side effects from client AP
* [x] Webfinger account lookups
* [ ] Federation modes
* [ ] 'Slow' federation
* [ ] Reputation scoring system for instances
* [x] 'Greedy' federation
* [ ] No federation (insulate this instance from the Fediverse)
* [ ] Allowlist
* [x] Secure HTTP signatures (creation and validation)
* [ ] Storage
* [x] Internal/statuses/preferences etc
* [x] Postgres interface
* [x] Media storage
* [x] Local storage interface
* [ ] S3 storage interface
* [ ] Cache
* [ ] In-memory cache
* [ ] Security features
* [x] Authorization middleware
* [ ] Rate limiting middleware
* [ ] Scope middleware
* [ ] Permissions/acl middleware for admins+moderators
* [ ] Documentation
* [x] Swagger API documentation
* [ ] ReadTheDocs.io documentation
* [ ] Deployment documentation
* [ ] App creation guide
* [ ] Tooling
* [ ] Database migration tool
* [x] Admin CLI tool
* [ ] Build
* [x] Docker containerization
* [x] Dockerfile
* [ ] docker-compose.yml
* [ ] Tests
* [ ] Unit/integration
* [ ] 25% coverage
* [ ] 50% coverage
* [ ] 90%+ coverage
* [ ] Benchmarking

View File

@ -71,13 +71,13 @@ GoToSocial advocates for many small, weird, specialist servers where people can
### History and Status ### History and Status
This project sprang up in 2021 out of a dissatisfaction with the safety + privacy features of other Federated microblogging/social media applications, and a desire to implement something a little different. This project sprang up in February/March 2021 out of a dissatisfaction with the safety + privacy features of other Federated microblogging/social media applications, and a desire to implement something a little different.
It began as a solo project, and then picked up steam as more developers became interested and jumped on. It began as a solo project, and then picked up steam as more developers became interested and jumped on.
The project is still in prerelease, but is already deployable and very useable, and it federates cleanly with most other Fediverse servers (not yet all). The project is still [alpha software](https://en.wikipedia.org/wiki/Software_release_life_cycle#Alpha), but is already deployable and very useable, and it federates cleanly with many other Fediverse servers (not yet all).
For a detailed view on what's implemented and what's not, and progress made towards a first v0.1.0 (beta) release, see [here](./PROGRESS.md). For a detailed view on what's implemented and what's not, and progress made towards [beta release](https://en.wikipedia.org/wiki/Software_release_life_cycle#Beta), please see [the roadmap document](./ROADMAP.md).
## Features ## Features

290
ROADMAP.md Normal file
View File

@ -0,0 +1,290 @@
# Roadmap <!-- omit in toc -->
This document contains the roadmap for GoToSocial to be considered eligible for its first [beta release](https://en.wikipedia.org/wiki/Software_release_life_cycle#Beta), and a summary of progress made towards that goal.
All the dates contained in this document are best-guess only. It's useful to have a rough timeline, but things will undoubtedly change along the way.
## Table of Contents <!-- omit in toc -->
- [Beta Aims](#beta-aims)
- [Timeline](#timeline)
- [Q2 2022](#q2-2022)
- [Q3 2022](#q3-2022)
- [Q4 2022](#q4-2022)
- [Q1 2023](#q1-2023)
- [Q2 2023](#q2-2023)
- [Detailed To-do List](#detailed-to-do-list)
- [API Groups + Endpoints](#api-groups--endpoints)
- [Non-API tasks](#non-api-tasks)
## Beta Aims
The milestone for beta in GoToSocial's case is to have a feature set that roughly compares to existing popular ActivityPub server implementations (minus features which we don't see as particularly important or useful). The beta milestone also includes GoToSocial-specific features which we believe are vital for user safety, such as local-only posting, blocklist subscriptions, and so on.
Once feature parity is roughly in place, we will use beta time to start adding and polishing bonus features like slow federation, group moderation decisions, migration tooling, etc.
We currently foresee entering beta phase around the middle of 2023, though this is only an estimate and is subject to change.
## Timeline
What follows is a per-quarter timeline of features that will be implemented on the road to beta. The timeline is calculated on the following assumptions:
- We will continue to develop at a pace that is similar to what we've done over the previous year.
- Our combined bandwidth is roughly equivalent to one person working full time on the project.
- One distinct 'feature' takes one person 2-4 weeks to develop and test, depending on the size of the feature.
- There will be other bugs to fix in between implementing things, so we shouldn't pack in features too tightly.
Each quarter contains one 'big feature' which will probably take the longest amount of time that quarter.
**This timeline is a best-guess about when things will be implemented. The order of feature releases may change. It may go faster or slower depending on the amount of hurdles we run into, and the amount of help we receive from community contribitions of code. The timeline also does not include background tasks like admin, polishing existing features, refactoring code, and ensuring compatibility with other AP implementations.**
### Q2 2022
- **Big Feature** -- User settings page: allow users to edit their profile page and settings through a web page served by the GtS instance, for cases where client apps don't implement their own settings page.
- Blocklist subscription support: allow instance admins to subscribe their instance to plaintext domain blocklists (much of the work for this is already in place).
- Tag support: implement federating hashtags and viewing hashtags to allow users to discover posts that they might be interested in.
### Q3 2022
- **Big Feature** -- Video support: allow users to view + post videos (before we only implemented images and gifs).
- Custom emoji support: allow users to use custom emojis in posts. Fetch custom emojis from remote instances and display them properly.
- Pinned posts: allow users to 'feature' or 'pin' posts on their profile, and serve these featured posts via AP for other servers to see.
- Profile fields: allow users to set 'fields' on their profile: short key/value items that can display pronouns, links to websites, etc.
### Q4 2022
- **Big Feature** -- Reports: allow users to file reports for abusive behavior etc. Expose the API for admins to view + act on reports. Handle federation of reports.
- List support: allow users to create lists of other users which they can view as separate timelines.
- Polls support: allow users to create polls and vote in existing polls; federate the polls correctly via AP.
### Q1 2023
- **Big Feature** -- Sign-up flow. Allow users to submit a sign up request to an instance. Allow admins to moderate sign-up requests.
- Direct conversations: Allow users to see all direct-message conversations they're a part of.
- Muting conversations: Allow users to mute notifications for conversations they're no longer interested in.
### Q2 2023
- **Big Feature** -- Instance announcements. Allow admins to create/edit/delete announcements that are shown to all users on an instance.
- More to be confirmed.
## Detailed To-do List
### API Groups + Endpoints
Unfilled check - not yet implemented.
Filled check - implemented.
Crossed out - will not be implemented / will be stubbed only.
- [ ] Client-To-Server (Client REST API)
- [ ] Token and sign-in
- [x] /api/v1/apps POST (Create an application)
- [ ] /api/v1/apps/verify_credentials GET (Verify an application works)
- [x] /oauth/authorize GET (Show authorize page to user)
- [x] /oauth/authorize POST (Get an oauth access code for an app/user)
- [x] /oauth/token POST (Obtain a user-level access token)
- [ ] /oauth/revoke POST (Revoke a user-level access token)
- [x] /auth/sign_in GET (Show form for user signin)
- [x] /auth/sign_in POST (Validate username and password and sign user in)
- [ ] Accounts
- [x] /api/v1/accounts POST (Register a new account)
- [x] /api/v1/accounts/verify_credentials GET (Verify account credentials with a user token)
- [x] /api/v1/accounts/update_credentials PATCH (Update user's display name/preferences)
- [x] /api/v1/accounts/:id GET (Get account information)
- [x] /api/v1/accounts/:id/statuses GET (Get an account's statuses)
- [x] /api/v1/accounts/:id/followers GET (Get an account's followers)
- [x] /api/v1/accounts/:id/following GET (Get an account's following)
- [ ] /api/v1/accounts/:id/featured_tags GET (Get an account's featured tags)
- [ ] /api/v1/accounts/:id/lists GET (Get lists containing this account)
- [x] /api/v1/accounts/:id/follow POST (Follow this account)
- [x] /api/v1/accounts/:id/unfollow POST (Unfollow this account)
- [x] /api/v1/accounts/:id/block POST (Block this account)
- [x] /api/v1/accounts/:id/unblock POST (Unblock this account)
- [ ] /api/v1/accounts/:id/mute POST (Mute this account)
- [ ] /api/v1/accounts/:id/unmute POST (Unmute this account)
- [ ] /api/v1/accounts/:id/pin POST (Feature this account on profile)
- [ ] /api/v1/accounts/:id/unpin POST (Remove this account from profile)
- [ ] /api/v1/accounts/:id/note POST (Make a personal note about this account)
- [x] /api/v1/accounts/relationships GET (Check relationships with accounts)
- [ ] /api/v1/accounts/search GET (Search for an account)
- ~~/api/v1/accounts/:id/identity_proofs GET (Get identity proofs for this account)~~
- [x] Favourites
- [x] /api/v1/favourites GET (See faved statuses)
- [ ] Mutes
- [ ] /api/v1/mutes GET (See list of muted accounts)
- [x] Blocks
- [x] /api/v1/blocks GET (See list of blocked accounts)
- [ ] Domain Blocks
- [x] /api/v1/domain_blocks GET (See list of domain blocks)
- [x] /api/v1/domain_blocks POST (Create a domain block)
- [x] /api/v1/domain_blocks DELETE (Remove a domain block)
- [ ] Filters
- [ ] /api/v1/filters GET (Get list of filters)
- [ ] /api/v1/filters/:id GET (View a filter)
- [ ] /api/v1/filters POST (Create a filter)
- [ ] /api/v1/filters/:id PUT (Update a filter)
- [ ] /api/v1/filters/:id DELETE (Remove a filter)
- [ ] Reports
- [ ] /api/v1/reports POST (File a report)
- [ ] Follow Requests
- [x] /api/v1/follow_requests GET (View pending follow requests)
- [x] /api/v1/follow_requests/:id/authorize POST (Accept a follow request)
- [x] /api/v1/follow_requests/:id/reject POST (Reject a follow request)
- [ ] Featured Tags
- [ ] /api/v1/featured_tags GET (View featured tags)
- [ ] /api/v1/featured_tags POST (Feature a tag)
- [ ] /api/v1/featured_tags/:id DELETE (Unfeature a tag)
- ~~/api/v1/featured_tags/suggestions GET (See most used tags)~~
- [ ] Preferences
- [ ] /api/v1/preferences GET (Get user preferences)
- [ ] Statuses
- [x] /api/v1/statuses POST (Create a new status)
- [x] /api/v1/statuses/:id GET (View an existing status)
- [x] /api/v1/statuses/:id DELETE (Delete a status)
- [x] /api/v1/statuses/:id/context GET (View statuses above and below status ID)
- [x] /api/v1/statuses/:id/reblogged_by GET (See who has reblogged a status)
- [x] /api/v1/statuses/:id/favourited_by GET (See who has faved a status)
- [x] /api/v1/statuses/:id/favourite POST (Fave a status)
- [x] /api/v1/statuses/:id/unfavourite POST (Unfave a status)
- [x] /api/v1/statuses/:id/reblog POST (Reblog a status)
- [x] /api/v1/statuses/:id/unreblog POST (Undo a reblog)
- [ ] /api/v1/statuses/:id/mute POST (Mute notifications on a status)
- [ ] /api/v1/statuses/:id/unmute POST (Unmute notifications on a status)
- [ ] /api/v1/statuses/:id/pin POST (Pin a status to profile)
- [ ] /api/v1/statuses/:id/unpin POST (Unpin a status from profile)
- ~~/api/v1/statuses/:id/bookmark POST (Bookmark a status)~~
- ~~/api/v1/statuses/:id/unbookmark POST (Undo a bookmark)~~
- [x] Media
- [x] /api/v1/media POST (Upload a media attachment)
- [x] /api/v1/media/:id GET (Get a media attachment)
- [x] /api/v1/media/:id PUT (Update an attachment)
- [ ] Polls
- [ ] /api/v1/polls/:id GET (Show a poll)
- [ ] /api/v1/polls/:id/votes POST (Vote on a poll)
- [ ] Timelines
- [x] /api/v1/timelines/public GET (See the public/federated timeline)
- [ ] /api/v1/timelines/tag/:hashtag GET (Get public statuses that use hashtag)
- [x] /api/v1/timelines/home GET (View statuses from followed users)
- [ ] /api/v1/timelines/list/:list_id GET (Get statuses in given list)
- [ ] Conversations
- [ ] /api/v1/conversations GET (Get a list of direct message convos)
- [ ] /api/v1/conversations/:id DELETE (Delete a direct message convo)
- [ ] /api/v1/conversations/:id POST (Mark a conversation as read)
- [ ] Lists
- [ ] /api/v1/lists GET (Show a list of lists)
- [ ] /api/v1/lists/:id GET (Show a single list)
- [ ] /api/v1/lists POST (Create a new list)
- [ ] /api/v1/lists/:id PUT (Update a list)
- [ ] /api/v1/lists/:id DELETE (Delete a list)
- [ ] /api/v1/lists/:id/accounts GET (View which accounts are in a list)
- [ ] /api/v1/lists/:id/accounts POST (Add accounts to a list)
- [ ] /api/v1/lists/:id/accounts DELETE (Remove accounts from a list)
- [ ] Markers
- [ ] /api/v1/markers GET (Get saved timeline position)
- [ ] /api/v1/markers POST (Save timeline position)
- [x] Streaming
- [x] /api/v1/streaming WEBSOCKETS (Stream live events to user via websockets)
- [ ] Notifications
- [x] /api/v1/notifications GET (Get list of notifications)
- [x] /api/v1/notifications/:id GET (Get a single notification)
- [ ] /api/v1/notifications/clear POST (Clear all notifications)
- [ ] /api/v1/notifications/:id POST (Clear a single notification)
- [x] Search
- [x] /api/v2/search GET (Get search query results)
- [ ] Instance
- [x] /api/v1/instance GET (Get instance information)
- [x] /api/v1/instance PATCH (Update instance information)
- [ ] /api/v1/instance/peers GET (Get list of federated servers)
- [ ] /api/v1/instance/activity GET (Instance activity over the last 3 months, binned weekly.)
- [ ] Custom Emojis
- [ ] /api/v1/custom_emojis GET (Show this server's custom emoji)
- [ ] Admin
- [x] /api/v1/admin/custom_emojis POST (Upload a custom emoji for instance-wide usage)
- [ ] /api/v1/admin/accounts GET (View accounts filtered by criteria)
- [ ] /api/v1/admin/accounts/:id GET (View admin level info about an account)
- [x] /api/v1/admin/accounts/:id/action POST (Perform an admin action on account)
- [ ] /api/v1/admin/accounts/:id/approve POST (Approve pending account)
- [ ] /api/v1/admin/accounts/:id/reject POST (Deny pending account)
- [ ] /api/v1/admin/accounts/:id/enable POST (Reenable a disabled account)
- [ ] /api/v1/admin/accounts/:id/unsilence POST (Unsilence a silenced account)
- [ ] /api/v1/admin/accounts/:id/unsuspend POST (Unsuspend a suspended account)
- [ ] /api/v1/admin/reports GET (View all reports)
- [ ] /api/v1/admin/reports/:id GET (View a single report)
- [ ] /api/v1/admin/reports/:id/assign_to_self POST (Assign a report to the current admin account)
- [ ] /api/v1/admin/reports/:id/unassign POST (Unassign a report)
- [ ] /api/v1/admin/reports/:id/resolve POST (Mark a report as resolved)
- [ ] /api/v1/admin/reports/:id/reopen POST (Reopen a closed report)
- [ ] Announcements
- [ ] /api/v1/announcements GET (Show all current announcements)
- [ ] /api/v1/announcements/:id/dismiss POST (Mark an announcement as read)
- [ ] /api/v1/announcements/:id/reactions/:name PUT (Add a reaction to an announcement)
- [ ] /api/v1/announcements/:id/reactions/:name DELETE (Remove a reaction from an announcement)
- [ ] Oembed
- [ ] /api/oembed GET (Get oembed metadata for a status URL)
- ~~Proofs~~
- ~~/api/proofs GET (View identity proofs)~~
- ~~Trends~~
- ~~/api/v1/trends GET (Get a list of trending tags for the last week)~~
- ~~Directory~~
- ~~/api/v1/directory GET (Show profiles this server is aware of.)~~
- ~~Endorsements~~
- ~~/api/v1/endorsements GET (View existing endorsements)~~
- ~~Push~~
- ~~/api/v1/push/subscription POST (Subscribe to push notifications)~~
- ~~/api/v1/push/subscription GET (Get current subscription)~~
- ~~/api/v1/push/subscription PUT (Change notification types)~~
- ~~/api/v1/push/subscription DELETE (Delete current subscription)~~
- ~~Scheduled Statuses~~
- ~~/api/v1/scheduled_statuses GET (View scheduled statuses)~~
- ~~/api/v1/scheduled_statuses/:id GET (View a scheduled status)~~
- ~~/api/v1/scheduled_statuses/:id PUT (Schedule a status)~~
- ~~/api/v1/scheduled_statuses/:id DELETE (Cancel a scheduled status)~~
- ~~Suggestions~~
- ~~/api/v1/suggestions GET (Get suggested accounts to follow)~~
- ~~/api/v1/suggestions/:account_id DELETE (Delete a suggestion)~~
- ~~Bookmarks~~
- ~~/api/v1/bookmarks GET (See bookmarked statuses)~~
### Non-API tasks
- [ ] Server-To-Server (Federation protocol)
- [x] Mechanism to trigger side effects from client AP
- [x] Webfinger account lookups
- [ ] Federation modes
- [ ] 'Slow' federation
- [ ] Reputation scoring system for instances
- [x] 'Greedy' federation
- [ ] No federation (insulate this instance from the Fediverse)
- [ ] Allowlist
- [x] Secure HTTP signatures (creation and validation)
- [ ] Storage
- [x] Internal/statuses/preferences etc
- [x] Postgres interface
- [x] Media storage
- [x] Local storage interface
- [ ] S3 storage interface
- [x] Cache
- [x] In-memory cache
- [ ] Security features
- [x] Authorization middleware
- [ ] Rate limiting middleware
- [ ] Scope middleware
- [x] Permissions/acl middleware for admins+moderators
- [ ] Documentation
- [x] Swagger API documentation
- [x] ReadTheDocs.io documentation
- [x] Deployment documentation
- [ ] App creation guide
- [ ] Tooling
- [ ] Database migration tool
- [x] Admin CLI tool
- [x] Build
- [x] Docker containerization
- [x] Dockerfile
- [x] docker-compose.yml
- [ ] Tests
- [ ] Unit/integration
- [x] 25% coverage
- [ ] 50% coverage
- [ ] 90%+ coverage
- [ ] Benchmarking