A highly customizable RSS feed generator built with Bun, designed for testing RSS feed consumers, ingesting tools, and feed parsers. This project generates realistic RSS content with configurable field behaviors, multiple output formats, and a web-based UI for easy configuration.
- RSS (multiple versions: RSS 2.0, RSS 0.91, RSS 0.92)
- ATOM feeds
- JSON Feed format
- XML generic format
- NEWSML and NEWSML-G2 (News Markup Language)
- NITF (News Industry Text Format)
- Source Parameter - Use
?source=nameto create different feed providers - Seeded Generation - Each source generates consistent but unique content
- Source Identification - Titles include source names for easy identification
- Provider Isolation - No URL conflicts between different providers
- Configurable field presence - Control probability of each field being included
- Realistic content generation - Lorem ipsum with proper capitalization and formatting
- Media support - Images, videos, and embedded content
- Flexible date ranges - Realistic timestamps or sequential dates
- Author patterns - Customizable author name generation
- Category support - Multiple categories per item
- Real-time configuration - Modify settings without restarting
- Items editor - Browse, filter, and edit generated items (GUIDs stay stable until you regenerate)
- Endpoint management - Enable/disable specific feed formats
- Field behavior controls - Adjust probabilities with sliders
- Force empty/invalid fields - Perfect for testing error handling
- Feed metadata - Title, description, language, base URL
- Item count - Control number of generated feed items
- Content options - Length ranges, media inclusion, HTML support
- Update intervals - Auto-regeneration with configurable timing
- Regenerate on config change - Optional; when disabled, items only refresh when you call regenerate or on first boot
- Field behaviors - Fine-grained control over field presence probabilities
- Bun runtime (recommended) or Node.js
# Clone the repository
git clone <repository-url>
cd rss-generator
# Install dependencies
bun install# Start the server (default port 3000)
bun run index
# Or specify a custom port
PORT=8080 bun run indexThe server will display a startup banner showing available endpoints.
Access the web dashboard at http://localhost:3000/ui (or your configured port).
- View all available feed URLs
- Copy endpoint URLs with one click
- See format types for each endpoint
- Regenerate Items - Generate new feed content immediately
- Reset Config - Restore default settings
- Update Interval - Set auto-regeneration timing (use
0for no timer-driven regeneration) - Regenerate items when config changes - When off, changing sliders or feed settings does not replace items; use Regenerate Items for new GUIDs
- Feed Title - Main feed title
- Description - Feed description
- Base URL - Root URL for generated links
- Item Count - Number of items to generate
- Title/Content Length - Min/max character ranges
- Image/Video Settings - Count ranges and inclusion toggles
- Category Settings - Number of categories per item
- Date Options - Realistic dates vs sequential
- HTML Support - Include HTML in content
Control the probability (0-100%) of each field appearing:
- Presence Tab - Set probabilities for all fields
- Force Empty - Select fields to always be empty
- Force Invalid - Select fields with invalid values
- Full list of generated items with filter by title or GUID
- Edit any item in a modal (title, summary, HTML content, links, dates, categories); GUIDs are not changed by edits
- Quick actions: Set updated to now / Set published to now for feed-update testing
- Keyboard: Escape closes the editor; Ctrl/Cmd+S saves
- Note: Edits apply to the default stored feed (
GET /feedwithout?source=). Feeds with?source=nameare generated on-demand and are not these items.
| Endpoint | Format | Description |
|---|---|---|
/feed |
RSS 2.0 | Standard RSS feed |
/feed/rss091 |
RSS 0.91 | Legacy RSS format |
/feed/rss092 |
RSS 0.92 | Legacy RSS format |
/feed/atom |
ATOM | Atom syndication format |
/feed/json |
JSON | JSON Feed format |
/feed/xml |
XML | Generic XML format |
/feed/newsml |
NEWSML | News Markup Language |
/feed/newsml-g2 |
NEWSML-G2 | NewsML Generation 2 |
/feed/nitf |
NITF | News Industry Text Format |
All feed endpoints support a ?source= query parameter to create multiple distinct feed providers:
# Default feed
GET /feed
# Provider-specific feeds
GET /feed?source=cnn
GET /feed?source=bbc
GET /feed?source=foxnews
# Works with all formats
GET /feed/atom?source=techcrunch
GET /feed/json?source=hackernewsEach source generates consistent but unique content, with titles including the source name for identification.
GET /api/config- Get current configurationPATCH /api/config- Update feed settingsPATCH /api/config/content-options- Update content generation settingsPATCH /api/config/field-behavior- Update field behavior settingsPOST /api/config/reset- Reset to default configurationPOST /api/regenerate- Regenerate feed itemsGET /api/state- Get generator stateGET /api/items- Get generated feed items (default feed only)PATCH /api/items/:index- Partial update of one item by index (JSON body). Omitguid;publishedAt/lastModifiedAtas ISO stringsPATCH /api/items- Partial update by GUID: JSON body must include"guid": "<id>"plus fields to changeGET /api/endpoints- Get available feed endpoints
- Set
regenerateOnConfigChangetofalse(viaPATCH /api/configor the UI) andupdateIntervalMsto0to avoid automatic item churn while you edit items or config. - The first config load after startup still regenerates items once so the feed matches
config.json. POST /api/regeneratealways creates new items and new GUIDs.
The generator uses a JSON configuration file (config.json) that is automatically created with sensible defaults. Settings can be modified through the web UI or by editing the config file directly.
{
"title": "Test RSS Feed Generator",
"description": "A highly customizable RSS feed for testing ingestors",
"link": "http://localhost:3000",
"language": "en-us",
"regenerateOnConfigChange": true
}{
"contentOptions": {
"titleLength": { "min": 20, "max": 70 },
"contentLength": { "min": 500, "max": 3000 },
"includeImages": true,
"includeVideos": true,
"authorPatterns": ["John Smith", "Jane Doe"]
}
}{
"fieldBehavior": {
"titlePresence": 1.0,
"summaryPresence": 0.9,
"contentPresence": 1.0,
"authorPresence": 0.95,
"forceEmptyFields": [],
"forceInvalidValues": []
}
}src/
โโโ config.ts # Configuration management
โโโ feed-generator.ts # Content generation logic
โโโ formatters/ # Feed format formatters
โโโ routes/ # API and UI route handlers
โโโ server.ts # HTTP server setup
โโโ types.ts # TypeScript type definitions
# Type checking
bun run tsc --noEmit
# Development (with hot reload)
bun run indexThis tool is perfect for testing RSS feed parsers, aggregators, and ingestion systems. Use the field behavior controls to simulate various edge cases:
- Missing fields - Test how consumers handle optional fields
- Invalid data - Verify error handling with malformed content
- Large feeds - Performance testing with many items
- Rich content - HTML, images, and embedded media
- Multiple formats - Ensure compatibility across feed types
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request