<p align="center">
<a href="https://github.com/harrisonhall/slipstream" align="center">
<img alt="slipstream" src="./crates/slipstream/src/modes/serve/web/content/favicon.png" width="100" />
</a>
</p>
<h1 align="center">slipstream</h1>
Feed fetcher, filterer, and aggregator.
## Crates
- `slipstream-cli` - Simple CLI `slipfeed` server and reader utilizing a simple
[config](examples/config/slipstream.toml).
- `slipstream-feeds` (`slipfeed`) - Feed fetcher, filterer, and aggregator
library.
## Getting Started
### slipstream
`slipstream` is a command-line application for serving filtered/aggregated feeds
from existing feeds a la Yahoo Pipes. A simple configuration file (e.g.
[slipstream.toml](examples/config/slipstream.toml)) is used to define feeds,
relationships, and filters.
#### Serve
Running `slipstream --config <your-config.toml> serve --port <your-port>` will
start a web server that exposes the following endpoints:
- `/config` for viewing the config (toml).
- `/all` (or `/`) for viewing all entries (html).
- `/feed/<feed_name>` for viewing a specific feed (html).
- `/tag/<tag_name>` for viewing a feed for entries with a specific tag (html).
- `/all/feed` for viewing all entries (atom).
- `/feed/<feed_name>/feed` for viewing a specific feed (atom).
- `/tag/<tag_name>/feed` for viewing a feed for entries with a specific tag
(atom).
An example can be found at my personal website
[feeds.hachha.dev](https://feeds.hachha.dev/).

### Read
Running `slipstream --config <your-config.toml> read` will launch a local tui.
The slipstream reader supports the following features:
- Custom commands
- Custom keybindings
- Custom colors
- Responsive layout (horizontal and vertical)
- Hooks
Check out the example [config](./examples/config/slipreader.toml) to see
additional configuration options.

## Roadmap
While the `slipfeed` and `slipstream` APIs may not be stable, they are
essentially complete as-is. `slipstream` development was originally intended to
be separate, but it has since been merged into `slipknot` (now named
`slipstream`).
- `slipfeed`
- [ ] Add other built-in feed implementations (e.g. activitypub)
- `slipstream` (general)
- [ ] Add more filters (regex/pomsky, allowlists, etc.)
- [ ] OPML conversion support
- [ ] Use sqlite for storing entries and feed definitions
- `slipstream` (reader)
- [ ] Support pagination (or make automatic)
- [ ] Indicate pending updates
- [ ] Improve help menu
- `slipstream` (api)
- [ ] Allow syncing tags to a slipstream server
- [ ] Add support for a shared secret in an http header
## Contributing
Simple bug fixes and suggestions are welcome. At this time, more in-depth
contributions will likely be rejected unless discussed ahead-of-time.