πFeed User Guide
πFeed is a single-file microblogging server and RSS aggregator built with Python, Bottle, and SQLite.
It provides chronological timelines, threaded discussions, external feed syndication, and integrated media handling.
Timelines & Home Feed
Timelines are strictly chronological. The Home feed streams updates from:
- Accounts you follow
- Your own posts and replies
- Subscribed circles
- @mentions directed at your username
- Subscribed external feeds (when toggled to appear in Home)
The Public timeline displays all public posts from instance users, accessible to visitors and external readers.
Circles
Circles are dedicated group and topic feeds separate from the main timeline:
- Posts can be published directly to a circle or kept on the main timeline.
- Authors and administrators can move posts between circles and Home after publishing.
- Users can subscribe to circles to include their posts directly in the Home feed, or browse them individually on the Circles page.
- Every circle generates a dedicated Atom XML feed for external RSS readers.
External Feeds & Podcasts
PiFeed aggregates external RSS and Atom feeds into the timeline:
- Add feed URLs on the Feeds page. Feeds are polled periodically in the background (or via cron in CGI deployments).
- Subscribe to individual feeds to merge their items into your Home feed, or read them from dedicated feed views.
- Content Tweaks: Automatic embed generation for YouTube videos, asciinema terminal casts, and XKCD hover text.
- Podcasts: Enclosure detection, inline HTML5 audio streaming, and direct episode downloads.
Media & Document Attachments
Posts support file attachments with built-in viewer integration:
- Images: PNG, JPEG, GIF, and WebP attachments display inline and open in an interactive lightbox viewer.
- PDFs: Attached PDF documents open directly in the lightbox document viewer.
- HTML Archives: Uploaded HTML files are previewed in an isolated iframe sandbox (
/html/<filename>) with restricted permissions to prevent session cookie access.
Cards
A card is a structured greeting or recognition post (type = 'card') for occasions such as congratulations, thank-yous, birthdays, and milestones.
- Start one from the 💌 Card button above the composer, user profiles, or /card (or press
Ctrl+K and type "card").
- Recipient: Free-form text shown verbatim. If the name matches an instance user, a mention is created so the card appears in their Home feed.
- Art: Selected via occasion presets or typed directly with emoji shortcodes (e.g.
:tada:).
- Photo: Supports a single attached photo displayed in the card header and viewable in the lightbox.
- Reply Notes: Direct replies to a card are rendered directly on the card as signed notes in an alternating layout. Replies to notes continue as standard posts in the thread view.
- Cards support standard post actions including editing, moving between circles, reactions, and deletion.
Post Visibility & Privacy
- Public Posts: When "Public" is checked, posts appear on the public timeline, user profiles, and public Atom feeds.
- Followers-Only Posts: When "Public" is unchecked, posts are visible only to your logged-in followers.
- Reactions: Emoji reactions are visible to anyone who has access to view the post.
- Private RSS Feeds: Each user account includes a private feed token for subscribing to their personal Home timeline via Atom XML in external readers. Tokens can be rotated in profile settings or via admin.
Keyboard Shortcuts & Navigation
j / k or ↓ / ↑ — Scroll and select between posts
Ctrl+K — Open the command palette to search and jump to Home, users, circles, or feeds
Ctrl+Enter — Submit any post, card, or reply form
@ then Tab — Autocomplete user mentions
: — Open emoji shortcode suggestions in supported inputs
πFeed — Back to Home