slipstream-cli 2.2.0

Simple CLI `slipfeed` server, with web support and a TUI reader.
<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/).

![web screenshot](./examples/media/web.png)

### 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.

![cli screenshot](./examples/media/cli.png)

## 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.