{"id":23938070,"url":"https://github.com/plebbit/roadmap","last_synced_at":"2026-02-18T05:01:14.955Z","repository":{"id":47455977,"uuid":"487183510","full_name":"plebbit/roadmap","owner":"plebbit","description":null,"archived":false,"fork":false,"pushed_at":"2024-07-07T14:45:47.000Z","size":197,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-10T17:48:23.765Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/plebbit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-30T04:44:35.000Z","updated_at":"2024-07-07T14:45:50.000Z","dependencies_parsed_at":"2023-02-15T18:46:13.284Z","dependency_job_id":"4ec7cbe0-1e9b-4472-b487-c36e09704fee","html_url":"https://github.com/plebbit/roadmap","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/plebbit/roadmap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plebbit%2Froadmap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plebbit%2Froadmap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plebbit%2Froadmap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plebbit%2Froadmap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plebbit","download_url":"https://codeload.github.com/plebbit/roadmap/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plebbit%2Froadmap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29569853,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T04:18:28.490Z","status":"ssl_error","status_checked_at":"2026-02-18T04:13:49.018Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-06T02:18:21.345Z","updated_at":"2026-02-18T05:01:14.934Z","avatar_url":"https://github.com/plebbit.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Demo roadmap\n\n## `plebbit-js`\n\n- [x] Publish comment over pubsub\n  - [x] Captcha\n  - [x] Signature\n  - [x] Encryption\n  - [x] HTTP gateway fallback if IPFS client undefined\n  - [x] Pubsub provider fallback if IPFS client undefined\n  - [x] Add signature to `PubsubMessage` and validate `PubsubMessage.signature`\n  - [x] Encrypt `ChallengeMessage.challenges` and `ChallengeAnswerMessage.answers`\n  - [x] Include Plebbit and plebbit-js version in every pubsub message\n- [x] Get comment over IPFS/IPNS\n  - [x] Verify author signature\n  - [x] Verify subplebbit owner signature\n  - [x] HTTP gateway fallback if IPFS client undefined\n  - [x] Validate `comment.link` is valid with `new URL(comment.link).protocol === 'https:'` (all posts, comments and replies, and in pages)\n- [x] Get subplebbit over IPNS\n  - [x] Verify Subplebbit.signature (sub owner must sign subplebbit updates otherwise IPNS provider can lie)\n  - [x] HTTP gateway fallback if IPFS client undefined\n- [x] Get subplebbit pages over IPNS\n  - [x] Verify author signature\n  - [x] HTTP gateway fallback if IPFS client undefined\n- [x] Tests\n  - [x] Tests run under 1 minute\n  - [x] Concurrent mocha tests\n  - [x] Concurrent karma tests\n  - [x] Add CI\n  - [x] Add CI including plebbit-react-hooks CI\n  - [x] Add way to run only 1 file in mocha tests with CLI\n- [x] Bind `Plebbit`, `Comment`. `Subplebbit`, `Pages` classses public methods\n\n## `plebbit-react`\n\n- [x] Post page\n- [x] Feed page\n  - [x] Infinite scroll\n  - [x] Loading skeleton\n- [x] Submit post page\n- [x] Publish vote and captcha modal\n- [x] Publish comment and captcha modal\n- [x] Auto login with default account\n- [x] Deploy demo to demo.plebbit.eth\n- [ ] Electron client\n  - [x] Add windows icon\n  - [x] Add mac icon\n  - [ ] Add linux .desktop file info and icon\n  - [ ] Set up Plebbit app to open Plebbit links. Any link that starts with demo.plebbit.eth\n  - [x] Builds and runs on Linux\n  - [x] Builds and runs on Windows\n  - [x] Builds and runs on Mac\n\n## `plebbit-react-hooks`\n\n- [x] Accounts actions\n  - [x] createAccount\n  - [x] setAccount\n  - [x] setActiveAccount\n  - [x] setAccountsOrder\n  - [x] publishComment\n  - [x] publishCommentEdit\n  - [x] publishVote\n- [x] Accounts hooks \n  - [x] useAccount\n  - [x] useAccountComments\n  - [x] useAccountVotes\n  - [x] useAccountVote\n  - [x] useAccounts\n  - [x] useAccountsActions\n- [x] Comments hooks\n  - [x] useComment\n  - [x] useComments\n- [x] Subplebbits hooks\n  - [x] useSubplebbit\n  - [x] useSubplebbits\n  - [x] Make Cloudflare not cache IPNS requests\n- [x] Feeds hooks\n  - [x] useFeed\n  - [x] useBufferedFeeds\n- [x] Tests\n  - [x] Add CI\n  - [x] Clean up tests to be smaller and give better errors\n  - [x] Add CI integration tests with plebbit-js (after the plebbit-js test are optimized)\n  - [x] Add way to run only 1 file in mocha tests with CLI\n\n# MVP roadmap\n\n## `plebbit-js`\n\n- [ ] Publish comment over pubsub\n  - [x] Encrypt challenges and challengeAnswers\n  - [ ] Queue pubsub publishing when more than 5 keepalive connections in the browser\n- [ ] Get comment over IPFS/IPNS\n  - [x] Resolve `author.address` ENS name\n  - [x] Subplebbit owner adds comment.thumbnailUrl (optionally because it can leak IP)\n  - [ ] Electron and Android client can fetch comment.thumbnailUrl when not already available (optionally because it can leak IP)\n- [x] Get subplebbit over IPNS\n  - [x] Resolve `subplebbit.address` ENS name\n- [ ] Get subplebbit pages over IPNS\n  - [x] Resolve `author.address` ENS name\n- [ ] Multisubs\n  - [ ] Implement `Plebbit.createMultisub(createMultisubOptions): Multisub`\n  - [ ] Implement `Plebbit.getMultisub(multisubAddress): Multisub`\n- [ ] Subplebbits\n  - [ ] Implement `Plebbit.createSubplebbitEdit(createSubplebbitEditOptions): SubplebbitEdit`\n- [x] IPNS over pubsub\n- [ ] Peers block spam IP addresses\n- [ ] Challenges\n  - [ ] Text captcha challenge\n- [x] Implement `Plebbit.listSubplebbits(): address[]`\n- [x] Change dataPath to dataPath/subplebbits and dataPath/cache\n- [ ] Implement `Plebbit.getDefaults()`\n- [ ] Add `Plebbit.createSubplebbitEdit(createSubplebbitEditOptions)` and `CreateSubplebbitEditOptions` documentation to readme\n- [x] Round robin multiple pubsub providers and IPFS gateways, change provider/gateway configs to arrays\n- [ ] Make BlockchainProvider.rpcUrls an array, either to round robin or double validate responses\n- [x] Figure out how to block IPFS files larger than the max publication size\n\n## `plebbit-react`\n\n- [ ] Challenges\n  - [ ] Text captcha challenge\n  - [x] Challenge success/fail notification\n  - [ ] Information about the publication on the challenge modal\n  - [ ] Multiple challenges with progress indicator (e.g. 1/4)\n- [ ] Moderator/about pages\n  - [ ] Subplebbit settings\n    - [ ] Instructions to export/backup subplebbit (backup the file `${plebbit.dataPath}/subplebbits/${subplebbit.address}`)\n    - [ ] Instructions to import subplebbit (copy the database file in `${plebbit.dataPath}/subplebbits/${subplebbit.address}`) and refresh\n  - [x] Subplebbit appearance\n  - [x] Subplebbit rules\n  - [x] Subplebbit moderators\n- [ ] Settings pages\n  - [ ] Account\n    - [ ] Language\n    - [ ] Location\n    - [x] Export\n    - [x] Import\n  - [ ] Profile\n    - [x] NFT avatar\n    - [x] Display name\n    - [ ] Crypto wallet addresses (to receive tips and awards)\n  - [ ] Safety \u0026 Privacy\n    - [ ] Blocked addresses\n- [ ] Own profile page\n  - [x] Edit NFT avatar\n  - [x] Edit display name\n  - [ ] Edit crypto wallet addresses (to receive tips and awards)\n- [ ] Feed page\n  - [x] Author address (ENS or 14 characters public key)\n  - [x] Author avatar image\n  - [x] Author flair\n  - [x] Post flair\n  - [x] Date\n  - [x] Full embed images\n  - [x] Small thumbnails\n  - [x] Share button\n  - [ ] Block button\n  - [x] Sidebar links\n  - [x] Sidebar popular communities\n  - [x] Nicely display broken images and thumbnails\n  - [x] Switch sort types\n- [ ] Comment page\n  - [x] Display markdown\n  - [x] Verify markdown \u003ca\u003e tags links don't allow remote execution in electron\n  - [ ] Cross posts\n- [x] Top menu\n  - [x] Create more than 1 account\n  - [x] Switch account\n- [ ] Translations\n  - [ ] Arabic\n  - [ ] Chinese\n  - [ ] Hindi\n  - [ ] Spanish\n  - [ ] Russian\n  - [ ] Japanese\n  - [ ] Portuguese\n  - [ ] German\n  - [ ] Korean\n  - [ ] French\n  - [ ] Italian\n  - [ ] Turkish\n- [ ] Improve logo and 'plebbit' text light and dark mode\n- [ ] Improve captcha modal design\n- [ ] Search default subs\n- [x] Pubsub HTTP client can open unlimited keepalive connections without timeout in electron\n- [ ] Tests\n  - [ ] Playright browser tests\n  - [ ] Add CI playright browser tests\n  - [ ] Add CI/CD on master merge using plebbit-js, plebbit-react-hooks and plebbit-react tests\n- [x] Add config for progressive web app\n- [x] Add config for react-native build to Android APK\n- [x] Add Android APK to automatic releases\n- [ ] Embeds\n  - [ ] Twitter\n  - [ ] Instagram\n  - [ ] Twitch\n  - [ ] Tiktok\n  - [ ] Youtube\n  - [ ] Odysee\n  - [ ] Bitchute\n  - [ ] Reddit\n  - [ ] Streamable\n  - [ ] Spotify\n  - [ ] Imgur (not needed, they give direct links to .png)\n  - [ ] Giphy (not needed, they give direct links to .gif)\n  - [ ] Rumble (doesn't seem possible without API)\n  - [ ] Soundcloud (doesn't seem possible without API)\n  - [ ] Bandcamp (doesn't seem possible without API)\n  - [ ] Google Drive (need to research, low priority)\n\n## `plebbit-react-hooks`\n\n- [ ] Accounts actions\n  - [ ] publishSubplebbitEdit\n  - [x] deleteAccount\n  - [x] importAccount\n  - [x] exportAccount\n  - [ ] deleteComment\n  - [x] blockAddress\n- [x] Accounts hooks\n  - [x] useAccountNotifications\n- [ ] Feeds hooks\n  - [ ] useRepliesFeed\n- [x] Authors hooks\n  - [x] useAuthorComments or useAuthorFeed\n  - [x] hook to get total karma and other profile info (possibly just include it in useAuthorFeed)\n- [ ] Multisubs hooks\n  - [ ] useFeed should resolve multisubs\n  - [ ] useMultisub\n  - [ ] createMultisub\n- [ ] Tipping\n- [ ] Gold and Silver NFT awards\n- [ ] Filter feed by language\n- [ ] Filter feed by location\n- [ ] Add account.warnings for ENS not resolving properly\n- [ ] useResolvedSubplebbitAddress for debugging setting up ENS in a subplebbit\n- [ ] Filter blocked addresses from accounts notifications\n- [x] Migrate feeds React context to Zustand\n\n# Low priority\n\n## `plebbit-js`\n\n- [ ] Challenges\n  - [ ] ERC20 staking challenge\n  - [ ] ERC721 staking challenge\n  - [ ] ERC20 tipping challenge\n  - [ ] ERC20 balance challenge\n  - [ ] ERC721 balance challenge\n  - [ ] Video captcha challenge\n  - [ ] Audio captcha challenge\n  - [ ] More difficult image captcha challenge\n  - [ ] Settings for less or no captcha for users with karma in the sub\n  - [ ] Settings for less or no captcha for users with karma in other subs\n- [x] Migrate to typescript\n- [ ] Mod subplebbit posts pages\n  - [ ] Mod queue\n  - [ ] Reports\n  - [ ] Spam\n  - [ ] Edited\n  - [ ] Unmoderated\n- [ ] Report publication type (possibly just use CommentEdit, need to think of design)\n- [ ] Comment edit log\n- [ ] Comment vote log\n- [ ] Remove all typescript any and @ts-ignore\n- [x] Security\n  - [x] Context isolated desktop only functions to use in the electron client\n- [ ] Algo for most anonymous padding size for publication encryption\n- [x] Make createSigner a native function with a `sign()` method to protect privateKey against XSS\n- [ ] Sort by active\n- [ ] Pass `acceptedChallengeTypes` in Plebbit constructor\n- [x] Make `updateInterval` and `publishInterval` public APIs\n- [ ] API for `postTitleMinLength`\n- [ ] Comment.archived and subplebbit.settings.archiveTimestampOlderThan, archiveLastReplyTimestampOlderThan\n- [ ] Spec for public gateway providers and public pubsub providers challenges\n- [x] Retry infinity getComment, getSubplebbit, getPage with a global timeout in plebbitOptions\n- [ ] Comment.linkRemoved to remove only the link, like on 4chan\n- [ ] image galleries\n- [ ] video/audio playlists\n- [ ] frames like farcaster\n- [ ] \"sage\" option like 4chan to reply to a post without bumping it in the active sort. Unclear what this API should be called at the moment\n\n## `plebbit-react`\n\n- [ ] Moderator/about pages\n  - [ ] Queues\n    - [ ] Mod queue\n    - [ ] Reports\n    - [ ] Spam\n    - [ ] Edited\n    - [ ] Unmoderated\n- [ ] Create multisub page\n- [ ] Manage multisub page\n- [ ] Migrate to typescript\n- [ ] Comment edit log\n- [ ] Comment vote log\n- [ ] Integrated crypto wallet for desktop client\n- [ ] Encrypt private key PEM with password at rest (similar to MetaMask)\n- [ ] Interface to choose and sign NFT avatars so users don't have to go to Etherscan\n- [ ] Securely embed Twitter/Youtube/etc. (if possible to do securely)\n- [ ] Lazy resolve author addresses\n- [x] Add markdown XSS examples in content mock\n- [ ] Make list of warnings and display them randomly in feeds, e.g. warn that subplebbits can be hacked and display scams. Maybe have a removable sticky with a list of common scams\n- [ ] Embed IPFS webui inside the electron app in the settings or profile page\n- [x] Notification count in ( ) and post.title in meta title\n- [ ] Web of trust recommendations from authors, i.e. look at the authors I upvote and find the subs they post in and recommend them\n- [ ] Playlist with autoplay for video/audio\n\n## `plebbit-react-hooks`\n\n- [ ] Accounts actions\n  - [ ] publishReport\n  - [ ] saveComment\n  - [ ] followComment\n  - [x] hideComment\n  - [ ] followAuthor\n  - [ ] limitAddress\n- [ ] Multisubs\n  - [ ] `usePlebbitDefaults()`\n  - [ ] `useMultisub`\n  - [ ] `useMultisubs`\n  - [ ] incorporate multisubs with useFeed()\n  - [ ] `createMultisub()`\n- [ ] Define all types\n- [ ] Remove all typescript any and @ts-ignore\n- [ ] Progressive scrolling of replies in a post for posts with 100+ replies\n- [ ] Include accountComments and accountVotes when importing/exporting\n- [ ] Don't subscribe to all accountComments at once, queue new ones with higher priority, and old ones with lower priority\n- [ ] Add statuses to all hooks, like success, error, ready, progress, etc\n- [ ] Sort by active\n- [ ] Indicator to what HTML tag to use by analyzing comment.link (e.g. `useCommentLinkTagName(commentLink?: string): 'a' | 'img' | 'video' | 'audio'`)\n- [ ] Implement useThumbnailUrl() on desktop and android\n- [ ] Hook for plebbit and IPFS stats\n- [ ] Block communities / comments / authors based on keyword / tag / language / etc\n\n## Misc\n\n- [ ] PLEB reward interface for best posts by plebbit team\n- [ ] ERC20 reward interface for best posts by subplebbit owners\n- [ ] PLEB DAO vote for curated NFT collection\n- [ ] PLEB DAO vote for curated multisubs\n- [ ] Moderator log (a `Page` of CommentEdit publications available both on `Subplebbit.posts` and `Comment.replies`)\n- [ ] Vote log (a `Page` of CommentEdit publications available both on `Subplebbit.posts` and `Comment.replies`)\n- [ ] Event/Meetup post type (to compete with Facebook and Meetup.com events)\n- [ ] Marketplace post type (to compete with Facebook marketplace, Shopify, Amazon)\n- [ ] Fundraiser post type (to compete with Gofundme and Kickstarter)\n- [ ] Sync accounts between multiple devices\n- [ ] Encrypt private key with password at rest (similar to MetaMask)\n- [ ] Publish Android APK on F-Droid\n- [ ] Make pubsub-provider and ipfs gateway more spam resistant using provider catchas on top of subplebbit captchas (as part of the protocol)\n- [ ] Share provider (a server that caches a plebbit page and hosts it on a random domain for 24h to easily share on other social medias)\n- [x] 4chan interface\n- [ ] Discourse interface\n- [x] Validate IPFS CIDs and content gotten from public IPFS gateways (because they can lie)\n- [ ] Update desktop version over IPFS\n- [ ] CLI client\n- [ ] JSON-RPC client\n- [ ] Build open source plebbit archiver\n- [ ] Integrate P2P DMs from another project\n- [ ] Integrate P2P live threads (chat) from another project\n- [ ] Integrate comment.link for livestreaming (with live thread)\n- [ ] Develop a tool to scrape a subreddit and copy its posts to Plebbit\n- [ ] Fallback to IPFS provider on desktop app when P2P not supported, like on cellular\n- [ ] Subplebbit uptime monitor and alerter\n- [ ] Video/audio player android/android tv client, similar to youtube, to play youtube, soundcloud, rumble, etc links directly, without ads and without visiting the original video site\n- [ ] ENS over IPFS, create a trie of all ENS domains, and resolve the new trie daily using IPNS, to resolve ENS over IPFS, without needing an ETH provider\n- [ ] Configurable search and recommendation RPC, several centralized providers could provide their API and the user can choose which API to use\n- [ ] Substack / patreon / medium like interface, to publish long text and paywalled content\n- [ ] Stackexchange like interface with LaTeX support\n- [ ] Centralized service to index/search plebbit, like warosu.org\n- [ ] Centralized service to run subs for others for free\n- [ ] vBulletin v3 client\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplebbit%2Froadmap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplebbit%2Froadmap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplebbit%2Froadmap/lists"}