flyradar 0.2.1

Manage your Fly.io resources in style
<p align="center">
    <img src="https://raw.githubusercontent.com/furkankly/flyradar/main/website/priv/flyradar.png" width="600" />
</p>

<p align="center">
<em>Manage your Fly.io resources in style!</em>
</p>

<hr/>

<p align="center">
<a href="https://crates.io/crates/flyradar"><img src="https://img.shields.io/crates/v/flyradar.svg?style=flat&labelColor=1d1d1d&color=5b21b6&logo=Rust&logoColor=white" /></a>
<a href="https://github.com/furkankly/homebrew-tap"><img src="https://img.shields.io/badge/homebrew-available-success?style=flat&labelColor=1d1d1d&color=5b21b6&logo=homebrew&logoColor=white" /></a>
<a href="https://github.com/furkankly/flyradar/actions?query=workflow%3A%22release%22"><img src="https://img.shields.io/github/actions/workflow/status/furkankly/flyradar/release.yml?style=flat&labelColor=1d1d1d6&color=white&logo=GitHub%20Actions&logoColor=white&label=deploy" /></a>
</p>

<h4 align="center">
  <img src="https://raw.githubusercontent.com/furkankly/flyradar/main/website/priv/favicon.svg" width="24" ></img>
<a href="https://flyradar.fly.dev/">Website</a>
</h4>

πŸͺ flyradar 🌟 is a terminal UI for managing and monitoring your Fly.io resources, inspired by [k9s](https://github.com/derailed/k9s). It provides an intuitive, keyboard-driven interface to interact with your Fly.io apps, and moreβ€”all from your terminal.

<p align="center">
<em>Manage your Fly.io apps, VMs, volumes and secrets - all in your terminal</em>
</p>

## Quickstart

> [!NOTE]
>
> _flyradar_ is an OSS third-party tool and is not an official Fly.io project.

> [!IMPORTANT]
>
> _flyradar_ relies on the Fly CLI for authentication and its built-in agent for operational functionality. Make sure you have [flyctl]https://fly.io/docs/hands-on/install-flyctl/ installed on your system before proceeding.

Install `flyradar` with `cargo`:

```bash
cargo install flyradar
```

> [!NOTE]  
> See the other [installation methods]https://flyradar.fly.dev/#installation πŸ“¦

Make sure you are authenticated into `fly`:

```bash
fly auth login
```

Just run `flyradar`:

```bash
flyradar
```

![Demo](website/priv/quickstart.gif)

## Features

- πŸ’» Interactive terminal UI for managing Fly.io resources
- πŸ”„ Real-time monitoring of your applications and other resources
- πŸ” Quick access to resource logs with filtering and dumping capabilities
- 🎯 Focused on operational workflows (viewing, monitoring, deleting, logging) for existing resources
  - Creation workflows are intentionally left to the Fly CLI, as they tend to be more complex and change more frequently
  - Operational workflows have more stable interfaces and are naturally well-suited for a terminal UI

![Features](website/priv/features.gif)

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

### Development Guidelines

- This project follows [Conventional Commits]https://www.conventionalcommits.org/ for all commit messages (e.g., `feat(logs): add dumping logs`, `fix(tui): fix tab completion for command input`)
- Before submitting a PR, please run:
  - `cargo fmt` to ensure consistent code formatting
  - `cargo clippy` to catch common mistakes and improve code quality
  - `cargo test` to verify your changes don't break existing functionality

### Project Structure

This project implements parts of several components from [flyctl](https://github.com/superfly/flyctl) in Rust, with a focus on maintaining equivalent functionality:

- `src/agent` β†’ [flyctl/agent]https://github.com/superfly/flyctl/tree/master/agent (client-side only)
- `src/logs` β†’ [flyctl/logs]https://github.com/superfly/flyctl/tree/master/logs
- `src/ops` β†’ [flyctl/internal/command]https://github.com/superfly/flyctl/tree/master/internal/command
- `src/wireguard` β†’ [flyctl/internal/wireguard/wg.go]https://github.com/superfly/flyctl/blob/master/internal/wireguard/wg.go
- `src/fly_rust` β†’ [fly-go]https://github.com/superfly/fly-go

> [!NOTE]
>
> Only the necessary functionality from these components are implemented while aiming to maintain the same behavior and interfaces where possible.

This project uses a patched version of the [async-nats](https://github.com/nats-io/nats.rs/tree/main) crate to enable IPC communication with the Fly agent. You can find the [fork here](https://github.com/furkankly/nats.rs/tree/ipc-support).

## License

This project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details.

## Acknowledgements

- [Fly.io]https://fly.io for their amazing platform
- [k9s]https://github.com/derailed/k9s for inspiration