Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
8dc1b1c
ci(package): update core workflow
frgfm Jul 11, 2025
06a04fd
ci(release): clean release template
frgfm Jul 11, 2025
4bb6fef
ci(templates): clean up issue templates
frgfm Jul 11, 2025
d17bcd2
docs(installation): clean up installation instructions
frgfm Jul 11, 2025
f6dc33e
docs(makefile): switch to trusted publishing
frgfm Jul 11, 2025
9d0b4f4
docs(reference): add CLI reference
frgfm Jul 11, 2025
7ec5f4d
refactor(cli): rename account to accounts
frgfm Jul 11, 2025
f7be350
docs(snippet): update code snippets
frgfm Jul 11, 2025
36cb5aa
style(scripts): fix lint
frgfm Jul 11, 2025
658b664
refactor(core): remove duplicate constant
frgfm Jul 11, 2025
915fad8
docs(reference): clean up reference
frgfm Jul 11, 2025
2aa0b8b
style: fix format
frgfm Jul 11, 2025
f422be2
feat(imap): improve imap resolution
frgfm Jul 11, 2025
3febfeb
test(imap): update tests
frgfm Jul 11, 2025
9faa94b
docs(providers): clean up docstrings
frgfm Jul 11, 2025
9bb6b9c
docs(changelog): update changelog
frgfm Jul 11, 2025
4d91edc
docs(changelog): fix legacy syntax
frgfm Jul 11, 2025
4a770b9
ci(package): improve triggers
frgfm Jul 11, 2025
55463e4
fix(core): fix legacy import
frgfm Jul 11, 2025
54273e2
ci(package): improve CI triggers
frgfm Jul 11, 2025
13a1a5f
ci(package): add reference doc
frgfm Jul 11, 2025
af8cbec
fix(cli): fix command import
frgfm Jul 11, 2025
d36ef33
build(deps): remove support for Python 3.10
frgfm Jul 11, 2025
0998c29
fix(core): fix provider resolution
frgfm Jul 11, 2025
8b87a21
test(core): update test suite
frgfm Jul 11, 2025
f45aab4
style: fix lint
frgfm Jul 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
name: 🐛 Bug report
description: Create a report to help us improve the project
assignees:

labels: ["bug"]
body:
- type: markdown
attributes:
value: >
#### Before reporting a bug, please check that the issue hasn't already been addressed in [the existing and past issues](https://github.com/relaycli/relay/issues?q=is%3Aissue).
- type: textarea
attributes:
label: Bug description
label: Summary
description: |
A clear and concise description of what the bug is.

Expand All @@ -23,18 +22,18 @@ body:
attributes:
label: Code snippet to reproduce the bug
description: |
Sample code to reproduce the problem.
Minimal code snippet to reproduce the problem.

Please wrap your code snippet with ```` ```triple quotes blocks``` ```` for readability.
placeholder: |
```python
Sample code to reproduce the problem
Minimal code snippet to reproduce the problem
```
validations:
required: true
- type: textarea
attributes:
label: Error traceback
label: Console output
description: |
The error message you received running the code snippet, with the full traceback.

Expand All @@ -45,15 +44,34 @@ body:
```
validations:
required: true
- type: input
attributes:
label: Platform
description: What operating system and architecture are you using? (see `uname -orsm`)
placeholder: e.g., macOS 14 arm64, Windows 11 x86_64, Ubuntu 20.04 amd64
validations:
required: true
- type: input
attributes:
label: Version
description: What version of relaycli are you using? (see `relay version`)
placeholder: e.g., relay 0.0.1
validations:
required: true
- type: input
attributes:
label: Python version
description: What version of Python are you using? (see `python --version`)
placeholder: e.g., Python 3.11.10
validations:
required: false
- type: textarea
attributes:
label: Environment
label: Additional information
description: |
Being able to reproduce the behaviour is key to resolving bugs. Share a few information about your setup:
placeholder: |
- OS: Mac/Windows/Linux
- From source: Y/N
- Release version:
- Commit hash:
validations:
required: true
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: 🚀 Feature request
description: Submit a proposal/request for a new feature for the companion API
description: Submit a proposal/request for a new feature for the CLI
assignees:

body:
Expand Down
6 changes: 6 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
blank_issues_enabled: true
contact_links:
- name: Documentation
url: https://docs.relaycli.com/
about: Please consult the documentation before creating an issue.
- name: Community
url: https://discord.gg/T4zbT7RcVy
about: Join our Discord community to ask questions and collaborate.
- name: Usage questions
url: https://github.com/relaycli/relay/discussions
about: Ask questions and discuss with other Relay community members
6 changes: 3 additions & 3 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,12 @@
# CLI-specific
########################################################

'commands: account':
'commands: accounts':
- changed-files:
- any-glob-to-any-file:
- relay/cli/commands/account/*

'commands: auth':
'commands: messages':
- changed-files:
- any-glob-to-any-file:
- relay/cli/commands/auth/*
- relay/cli/commands/messages/*
12 changes: 3 additions & 9 deletions .github/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,11 @@ changelog:
labels:
- ignore-for-release
categories:
- title: Breaking Changes 🛠
- title: Breaking changes 🛠
labels: ["type: breaking change"]
- title: New Features
labels: ["type: feat"]
- title: New features & enhancements
labels: ["type: feat", "type: enhancement"]
- title: Bug Fixes 🐛
labels: ["type: fix"]
- title: Dependencies
labels: ["dependencies"]
- title: Documentation 📖
labels: ["service: docs"]
- title: Improvements
labels: ["type: improvement"]
- title: Other changes
labels: ["*"]
40 changes: 25 additions & 15 deletions .github/workflows/core.yml → .github/workflows/package.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
name: core
name: package

on:
push:
branches: main
paths:
- '.github/workflows/package.yml'
- 'relay/**'
- 'cli/**'
- 'tests/**'
- 'pyproject.toml'
- 'Makefile'
- '.github/workflows/core.yml'
pull_request:
branches: main
paths:
- '.github/workflows/package.yml'
- 'relay/**'
- 'cli/**'
- 'tests/**'
- 'pyproject.toml'
- 'Makefile'
- '.github/workflows/core.yml'
release:
types: [published]

Expand All @@ -28,12 +28,16 @@ env:
jobs:
install:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python: ['3.11', '3.12', '3.13']
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
python-version: ${{ matrix.python }}
architecture: x64
- uses: astral-sh/setup-uv@v6
with:
Expand Down Expand Up @@ -126,13 +130,18 @@ jobs:
fail_ci_if_error: true

build:
if: github.event_name != 'release'
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
needs: install
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python: ['3.11', '3.12', '3.13']
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
python-version: ${{ matrix.python }}
architecture: x64
- uses: astral-sh/setup-uv@v6
with:
Expand Down Expand Up @@ -170,20 +179,21 @@ jobs:
echo "package_version=${BUILD_VERSION}" >> $GITHUB_OUTPUT
echo "BUILD_VERSION=${BUILD_VERSION}" >> $GITHUB_ENV
- name: Publish to PyPI
env:
UV_PUBLISH_USERNAME: __token__
UV_PUBLISH_PASSWORD: ${{ secrets.PYPI_TOKEN }}
run: |
make set-version
make build && make publish

verify-publish:
runs-on: ubuntu-latest
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python: ['3.11', '3.12', '3.13']
needs: publish
steps:
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
python-version: ${{ matrix.python }}
architecture: x64
- uses: astral-sh/setup-uv@v6
with:
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ build: ${PYPROJECT_CONFIG_FILE} ## Build the package
uv build ${ENGINE_DIR}

publish: ${ENGINE_DIR} ## Publish the package to PyPI
uv publish
uv publish --trusted-publishing always

lock: ${PYPROJECT_CONFIG_FILE}
uv lock --project ${ENGINE_DIR}
Expand Down
25 changes: 14 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,9 @@ Relay helps builds create apps on email workflows. See it as a crossover between
### Fetching your unread emails

```shell
$ relay messages ls --limit 10 --unread

relay messages ls --limit 10 --unread
```
```
Using account: piedpiper
Messages from [email protected]
┏━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┓
Expand Down Expand Up @@ -80,8 +81,9 @@ Showing 5 of 5 unread messages
### Reading email details

```shell
$ relay messages cat 15443

relay messages cat 15443
```
```
Using account: piedpiper

Message Details
Expand All @@ -96,7 +98,7 @@ BCC: N/A
Message Body:
The migration is done. Obviously.

While you were all probably panicking about downtime (which never happened),
While you were all probably panicking about downtime (which never happened),
I successfully migrated our entire server infrastructure to the new data center.

Key accomplishments:
Expand All @@ -105,13 +107,13 @@ Key accomplishments:
- Optimized database queries by 340%
- Fixed 23 security vulnerabilities

Richard, the system is now running at 99.97% efficiency. The remaining 0.03%
Richard, the system is now running at 99.97% efficiency. The remaining 0.03%
is due to the laws of physics, which even I cannot override.

Dinesh, I've documented everything in a way that even you might comprehend,
Dinesh, I've documented everything in a way that even you might comprehend,
though I make no guarantees.

The servers are purring like a well-fed cat. You may now return to your
The servers are purring like a well-fed cat. You may now return to your
regularly scheduled mediocrity.

--
Expand All @@ -137,15 +139,16 @@ pip install relaycli
```
#### 2 - Connect your email account
```shell
relay account add
relay accounts add
```
Follow the instructions to connect your email account.

#### 3 - Play with the CLI

```shell
$ relay messages --help

relay messages --help
```
```
Usage: relay messages [OPTIONS] COMMAND [ARGS]...

Email message commands
Expand Down
6 changes: 3 additions & 3 deletions docs/changelog/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ The changelog below reflects new product developments and updates on a monthly b

### 🔧 CLI Commands

* `relay account add` - Connect your email accounts (Gmail, Outlook, Yahoo, custom IMAP)
* `relay account ls` - List all connected accounts
* `relay accounts add` - Connect your email accounts (Gmail, Outlook, Yahoo, custom IMAP)
* `relay accounts ls` - List all connected accounts
* `relay messages ls` - Fetch and list recent emails
* `relay messages grep` - Search your inbox with powerful text matching
* `relay messages cat` - Read full message content and metadata
Expand All @@ -40,6 +40,6 @@ The changelog below reflects new product developments and updates on a monthly b

### 🚀 Getting Started

Install with `pip install relaycli` and run `relay account add` to connect your first inbox.
Install with `pip install relaycli` and run `relay accounts add` to connect your first inbox.
Check out our [quickstart guide](/documentation/getting-started/quickstart) for a 5-minute setup walkthrough.
</Update>
17 changes: 15 additions & 2 deletions docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,18 @@
}
]
},
{
"tab": "Reference",
"groups": [
{
"group": "CLI reference",
"pages": [
"reference/cli/accounts",
"reference/cli/messages"
]
}
]
},
{
"tab": "Changelog",
"groups": [
Expand Down Expand Up @@ -76,8 +88,9 @@
"navbar": {
"links": [
{
"label": "Support",
"href": "mailto:[email protected]"
"label": "Community",
"icon": "discord",
"href": "https://discord.gg/T4zbT7RcVy"
}
],
"primary": {
Expand Down
2 changes: 1 addition & 1 deletion docs/documentation/getting-started/introduction.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Your credentials stay local. Your data stays yours. No gatekeepers, no vendor lo

## Why we built it

Email is a billion-person communication protocol, but building on it sucks.
Email is a billion-person communication protocol, but building on it sucks.
We hit this wall building a voice assistant for founders when we received the bill for the security audit to validate Gmail permissions. You can read the full story [here](https://relaycli.com/manifesto).
So we built Relay: a clean, local-first CLI and Python library that handles the complexity while keeping you in control. No middlemen, no data harvesting, no artificial limits.

Expand Down
Loading