MCPSERV.CLUB
Stringer

Stringer

Self-Hosted

Self-hosted anti-social RSS reader

Active(96)
4.1kstars
0views
Updated 2 days ago
Stringer screenshot 1
1 / 5

Overview

Discover what makes Stringer powerful

Stringer is a lightweight, self‑hosted RSS reader built with Ruby on Rails and a PostgreSQL back‑end. It deliberately eschews external services, social networking hooks, or machine learning pipelines in favor of a deterministic, privacy‑first architecture. The core application exposes both a web UI and a Fever‑compatible REST API, allowing it to be paired with any mobile client that supports the Fever protocol. This dual‑mode interface makes Stringer a flexible integration point for developers who want to expose RSS content to custom front‑ends or third‑party readers without sacrificing control over data.

Backend

Database

Frontend

Containerization

Overview

Stringer is a lightweight, self‑hosted RSS reader built with Ruby on Rails and a PostgreSQL back‑end. It deliberately eschews external services, social networking hooks, or machine learning pipelines in favor of a deterministic, privacy‑first architecture. The core application exposes both a web UI and a Fever‑compatible REST API, allowing it to be paired with any mobile client that supports the Fever protocol. This dual‑mode interface makes Stringer a flexible integration point for developers who want to expose RSS content to custom front‑ends or third‑party readers without sacrificing control over data.

Architecture

  • Backend: Ruby on Rails 7, leveraging ActiveRecord for ORM and ActionCable for real‑time updates. Background jobs are processed with GoodJob, which can use PostgreSQL’s pg_job table or an external queue such as Sidekiq, giving developers the option to scale asynchronously.
  • Database: PostgreSQL is the sole data store, providing ACID guarantees for feed metadata, user credentials, and story content. Stringer ships with a schema that supports sharding via logical partitioning of stories by feed, which can be extended to multiple databases for horizontal scaling.
  • Frontend: Backbone.js powers the client‑side MVC layer, enabling a single‑page experience with keyboard shortcuts and instant navigation. The UI is rendered server‑side for SEO and initial page load, then hydrated client‑side for interactivity.
  • Containerization: Docker images are available in the repo, with a docker-compose.yml that wires Rails, PostgreSQL, and GoodJob together. The Dockerfile is minimal, exposing only the necessary ports (default 5000) and environment variables (DATABASE_URL, LOCALE).

Core Capabilities

  • Feed Management: CRUD operations for feeds, including automatic RSS/Atom parsing via the feedjira gem. Developers can hook into feed ingestion with custom parsers or filters.
  • Story Lifecycle: Stories are stored in a stories table with status flags (read, starred). A rake task (cleanup_old_stories) demonstrates how to purge stale data programmatically.
  • API: The Fever clone exposes endpoints for authentication, fetching feeds, marking stories read/starred, and retrieving unread counts. The API is stateless and can be consumed by any HTTP client; authentication uses basic auth with a single user per instance.
  • Internationalization: Locale files are stored in config/locales, and the LOCALE env var switches languages at runtime. Integration with LocaleApp allows community‑driven translations without code changes.

Deployment & Infrastructure

Stringer runs on any Ruby‑compatible environment: Heroku, VPS (Ubuntu/Debian), Docker, or OpenShift. The Heroku buildpack automatically installs dependencies and sets up the database via DATABASE_URL. For VPS deployments, the repo provides a VPS.md guide that assumes systemd and bundler. The Docker image can be orchestrated with Kubernetes or Docker‑Compose; the container exposes a single port and uses environment variables for configuration, making it straightforward to integrate with CI/CD pipelines. GoodJob’s background worker can be scaled horizontally by adding more pods or workers, and its PostgreSQL backend removes the need for a separate Redis instance.

Integration & Extensibility

  • Plugins: While Stringer has no formal plugin API, its modular Rails structure allows developers to fork the repository and add custom controllers or background jobs. The app/jobs folder is a natural place to introduce new ingestion strategies.
  • Webhooks: The Fever API can be extended with custom endpoints; for example, a webhook that pushes new stories to a Slack channel or a custom notification service.
  • Keyboard Shortcuts: The Backbone.js front‑end exposes ? for help, and developers can augment the shortcut map by adding new actions in app/assets/javascripts/shortcuts.js.
  • Customization: Themes can be swapped by overriding CSS in app/assets/stylesheets. Because the UI is rendered with ERB, developers can inject custom components or third‑party widgets.

Developer Experience

Stringer’s codebase is small and highly testable: RSpec covers the Ruby logic, while JavaScript tests run with rake test_js. The repository includes a comprehensive README and several documentation files (docs/Heroku.md, docs/VPS.md, docs/Docker.md) that walk through deployment scenarios. Community support is active via GitHub issues, and the project’s maintainability score on Code Climate indicates a clean architecture. The use of standard Rails conventions (routes, controllers, models) means that developers familiar with Rails can contribute quickly.

Use Cases

  1. Private Feed Hub – Deploy on a personal VPS to aggregate work blogs, tech news, and newsletters without exposing data to third‑party analytics.
  2. Custom Mobile Reader – Pair Stringer’s Fever API with a bespoke Android/iOS app that implements unique UX patterns or offline caching.
  3. Team Knowledge Base – Host a shared instance for internal documentation feeds, leveraging the cleanup_old_stories rake task to keep storage lean.
  4. Embedded Widget – Embed the web UI in a corporate intranet, customizing the theme to match branding while retaining full control over data.

Advantages

  • Privacy‑First: No external dependencies or telemetry; all data stays on the host.
  • Performance: Rails + PostgreSQL provide fast query execution for feed lookups, while GoodJob handles background fetching

Open SourceReady to get started?

Join the community and start self-hosting Stringer today

Weekly Views

Loading...
Support Us

Featured Project

$30/month

Get maximum visibility with featured placement and special badges

Repository Health

Loading health data...

Information

Category
other
License
MIT
Stars
4.1k
Technical Specs
Pricing
Open Source
Database
PostgreSQL
Docker
Dockerfile
Supported OS
LinuxDocker
Author
stringer-rss
stringer-rss
Last Updated
2 days ago