@mikimatsub/ttui 0.0.0-stage → 1.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CROSSTERM-LICENSE +21 -0
- package/LICENSE +21 -0
- package/README.md +209 -2
- package/RUST-STDLIB-LICENSE.html +29357 -0
- package/THIRD_PARTY_NOTICES.txt +15990 -0
- package/bin/linux-x64/ttui +0 -0
- package/bin/ttui.mjs +31 -0
- package/bin/win32-x64/ttui.exe +0 -0
- package/checksums.json +4 -0
- package/package.json +13 -4
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2019 Timon
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 mikimatsub
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,210 @@
|
|
|
1
|
-
#
|
|
1
|
+
# T-TUI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Terminal client for Tinder.** Discover people, browse profiles, keep up with conversations, and edit your bio and discovery preferences with the keyboard or the mouse.
|
|
4
|
+
|
|
5
|
+
The session lives only on this machine. Tokens are masked and saved atomically: Unix uses owner-readable (`0600`) files; Windows protects credentials with current-user DPAPI. Drafts and settings remain readable JSON. T-TUI parses a pasted cURL command for headers and does not execute it. It does not bypass verification, buy credits, or submit reports.
|
|
6
|
+
|
|
7
|
+
Tinder can change these endpoints or send you back to the website to finish verification. Request shapes were cross-checked on 2026-09-18 against the [tinder-api client](https://github.com/Miguelo981/tinder-api/blob/main/src/tinder.ts). Local contract tests are not a substitute for checking a signed-in account. The supported surface and the remaining website-only workflows are in [FEATURES.md](FEATURES.md).
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Preparing 1.0
|
|
12
|
+
|
|
13
|
+
The current source is **1.0.0-rc.2**. Linux and native Windows are equal priorities. A stable release is not yet published. [CHANGELOG.md](CHANGELOG.md) records changes, [PLAN.md](PLAN.md) tracks execution, and [docs/RELEASING.md](docs/RELEASING.md) defines release gates.
|
|
14
|
+
|
|
15
|
+
Check [GitHub Releases](https://github.com/mikimatsub/T-Tui/releases) for standalone x86-64 candidate binaries and their checksums. `@mikimatsub/ttui` is the planned npm convenience package; WinGet is planned after a public stable release and Microsoft review. A downloadable npm tarball in a GitHub release is not an npm registry publication. ARM and macOS are outside the 1.0 support promise.
|
|
16
|
+
|
|
17
|
+
The release candidate is intended for acceptance testing. Automated checks use fictional accounts; live login, synchronization and mutations still need validation before stable 1.0.
|
|
18
|
+
|
|
19
|
+
## Quick start
|
|
20
|
+
|
|
21
|
+
You need:
|
|
22
|
+
|
|
23
|
+
- A matching standalone binary from GitHub Releases, or Rust and Cargo to build from source
|
|
24
|
+
- An interactive terminal. The layout works from 50 × 16 cells. 100 × 30 or larger shows the full split view
|
|
25
|
+
- For sharp photos, a terminal with native graphics, such as Foot (Sixel), Kitty, or iTerm2. Other terminals use a truecolor text fallback
|
|
26
|
+
|
|
27
|
+
### Install
|
|
28
|
+
|
|
29
|
+
For a standalone candidate, download the archive for your system and its `.sha256` file from [GitHub Releases](https://github.com/mikimatsub/T-Tui/releases). Compare its SHA-256 before extracting. Linux archives contain `ttui`; Windows archives contain `ttui.exe`. Run the executable directly or put its directory on your PATH. These downloads do not require Node or Rust.
|
|
30
|
+
|
|
31
|
+
To build and install from this repository on Linux:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
./scripts/install.sh
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
On Windows, run `./scripts/install.ps1` in PowerShell with Rust and the MSVC C++ build tools installed. It installs to `%LOCALAPPDATA%\Programs\T-TUI`. Add that directory to your user PATH or launch `ttui.exe` directly. The script does not change PATH or require administrator privileges.
|
|
38
|
+
|
|
39
|
+
The installer builds a release binary and copies it to `~/.local/bin/ttui`. Set `TTUI_INSTALL_DIR` to use another directory. That directory must be on your `PATH`. The install needs no administrator privileges and no system package. Your saved account and settings stay in the config directory, so the installed command keeps working if you move or remove this repository. Rerun the installer after source updates.
|
|
40
|
+
|
|
41
|
+
### Run
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
ttui # your account
|
|
45
|
+
ttui --mock # offline demo with fictional profiles
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
To run from a checkout instead of the installed command:
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
./ttui # your account
|
|
52
|
+
./ttui --mock # offline demo
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`./ttui` builds an optimized binary the first time you launch it.
|
|
56
|
+
|
|
57
|
+
### Verify it works
|
|
58
|
+
|
|
59
|
+
Offline, with no account and no network:
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
ttui --mock
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The inbox opens with fictional profiles. Press `F1` for keys. Press `Ctrl-Q` to quit. In the demo, every Like becomes a match so you can walk the whole flow.
|
|
66
|
+
|
|
67
|
+
After a real session is saved, this check is read-only. It sends no messages and no swipes:
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
ttui --check
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
A healthy session prints `Account connection: OK`, then inbox, history, profile, discovery, sync, and photo lines, and ends with `Read-only checks complete; no messages or swipes sent.`
|
|
74
|
+
|
|
75
|
+
| Command | What it does |
|
|
76
|
+
|---|---|
|
|
77
|
+
| `ttui` | Open the saved account. This is the default. |
|
|
78
|
+
| `ttui --mock`, `ttui --demo` | Offline demo. Settings and drafts stay in `demo.json`. |
|
|
79
|
+
| `ttui --live` | Use the real account. Same as running `ttui` with no flag. |
|
|
80
|
+
| `ttui --login`, `ttui --browser-login` | Experimental Chromium extraction; ambiguous profiles require explicit selection. |
|
|
81
|
+
| `ttui --check` | Read-only check of the saved session. |
|
|
82
|
+
| `ttui --import-session` | Read one copied cURL request from stdin and save the session. |
|
|
83
|
+
| `ttui --version`, `ttui -V` | Print the installed version. |
|
|
84
|
+
| `ttui --doctor` | Local diagnostics without reading account data or contacting Tinder. |
|
|
85
|
+
| `ttui --clear-cache` | Remove managed cached photos; run with T-TUI closed. |
|
|
86
|
+
| `ttui --help`, `ttui -h` | Print usage and the config path. |
|
|
87
|
+
|
|
88
|
+
## Connect your account
|
|
89
|
+
|
|
90
|
+
### Browser login
|
|
91
|
+
|
|
92
|
+
This is experimental. Chromium storage layouts may change. Use manual session import if it fails. When multiple Tinder profiles are present, set `TTUI_BROWSER_PROFILE` to the intended absolute Chromium profile directory. T-TUI will not silently choose the newest account. Sign in on Tinder Web first, then try:
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
ttui --login
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Or press **Ctrl-B** or click **[Browser Login]** on the connection screen. T-TUI opens Tinder, attempts extraction from one selected profile, and verifies the credentials before saving. Browser login is disabled in offline demo mode.
|
|
99
|
+
|
|
100
|
+
### Manual connection
|
|
101
|
+
|
|
102
|
+
1. Sign in to [Tinder Web](https://tinder.com).
|
|
103
|
+
2. Open developer tools (`F12`), select **Network**, and reload Tinder.
|
|
104
|
+
3. Choose a request to **api.gotinder.com**. Right-click it, then **Copy → Copy as cURL (bash)**.
|
|
105
|
+
4. Paste into the **Auth token** field with your terminal paste shortcut, usually `Ctrl-Shift-V`.
|
|
106
|
+
5. Press **Enter** to connect.
|
|
107
|
+
|
|
108
|
+
You can also paste `x-auth-token` and `persistent-device-id` from the request headers into their own fields. A refresh token in the third field renews the session. A refresh token and device ID are enough when the auth token is already expired.
|
|
109
|
+
|
|
110
|
+
Treat the copied request as a password. Paste it only into your own T-TUI. An expired session with no refresh token returns you to the connection screen.
|
|
111
|
+
|
|
112
|
+
On Linux you can import the clipboard without printing the request:
|
|
113
|
+
|
|
114
|
+
```sh
|
|
115
|
+
wl-paste --no-newline | ttui --import-session
|
|
116
|
+
ttui --check
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Everyday keys
|
|
120
|
+
|
|
121
|
+
| Where | Keys |
|
|
122
|
+
|---|---|
|
|
123
|
+
| Everywhere | `F1` help, `F2` themes, `Ctrl-O` account, `Ctrl-Q` / `Ctrl-C` quit |
|
|
124
|
+
| Inbox | `↑↓` or `j/k` select, `Enter` chat, `→` profile, `/` search, `Esc` clear search |
|
|
125
|
+
| Inbox tools | `f` filter, `o` sort, `p` pin or unpin, `a` mark all read on this device |
|
|
126
|
+
| Inbox | `d` discover, `s` settings, `r` refresh, `Home` / `End` first or last |
|
|
127
|
+
| Discovery | `y` like, `n` pass, `←→` photos, `↑↓` profile details, `m` inbox, `r` refresh |
|
|
128
|
+
| Discovery extras | `u` Super Like, `b` Boost (both ask for confirmation), `w` Tinder Web |
|
|
129
|
+
| Chat on Linux | Type normally, `Enter` send, `Alt-Enter` newline, `Esc` save the draft and return |
|
|
130
|
+
| Chat on Windows | `Ctrl-S` or **Send** sends; `Enter` inserts a newline. This keeps multiline terminal paste in the draft. |
|
|
131
|
+
| Chat editing | `←→`, `Home` / `End`, `Backspace` / `Delete`, `Ctrl-U` clear |
|
|
132
|
+
| Chat tools | `Ctrl-P` profile, `Ctrl-R` restore a failed message; settings: `Ctrl-S` on Linux or `Esc` then `s` on Windows |
|
|
133
|
+
| Chat safety | `Ctrl-X` unmatch (confirmation required). **Report help** opens Tinder's reporting instructions |
|
|
134
|
+
| Chat history | `↑↓` scroll, `PgUp` fetch older history, `PgDn` scroll toward the latest |
|
|
135
|
+
| Profile | `←→` photos, `↑↓` scroll, `Enter` chat, `v` external viewer, `Esc` back |
|
|
136
|
+
| Settings | `↑↓` select, `Enter` change, `Esc` return |
|
|
137
|
+
| Account | `Tab` / `Shift-Tab` choose a field, type to edit, `Ctrl-U` clear, `Ctrl-S` save, `Esc` inbox |
|
|
138
|
+
| Themes | `↑↓` or the mouse wheel to preview, `Enter` apply, `Esc` cancel |
|
|
139
|
+
|
|
140
|
+
Like and Pass run only from their buttons or from `y` and `n`. The arrow keys change photos. A card stays put when the server rejects the swipe. Further keypresses are ignored while a swipe is in flight.
|
|
141
|
+
|
|
142
|
+
Drafts save after 750 ms without changes, when you leave a conversation, or when you quit. Newlines in a bracketed paste stay in the draft and do not send. A message is first pending, then unconfirmed. If a send times out, delivery is uncertain: read the conversation before you send it again. Restoring a failed message puts the text back for review and does not send it.
|
|
143
|
+
|
|
144
|
+
## Mouse, photos, and themes
|
|
145
|
+
|
|
146
|
+
Click the top tabs, a conversation row, or any bracketed action. Click either half of a profile photo to move backward or forward. The wheel scrolls the pane under the pointer: inbox, history, profile details, settings, account fields, help, or themes. Click or drag in the composer to place the cursor. Unicode characters stay intact. A dialog captures clicks so they cannot reach the screen under it. Mouse capture is restored on exit. Hold **Shift** for the terminal's own text selection where the terminal supports it.
|
|
147
|
+
|
|
148
|
+
On Unix, T-TUI detects Sixel, Kitty, or iTerm2 graphics and the terminal's pixel size at startup. Photos keep their aspect ratio. Avatars fill their tiles. Resizing runs in background workers. **Settings → In-terminal photos** shows the detected renderer. The three **Text** size settings affect only the text fallback. Native photos fit the space they are given. Rendering uses [ratatui-image](https://github.com/ratatui/ratatui-image).
|
|
149
|
+
|
|
150
|
+
Open **Themes** or press **F2**. **Apply** saves the palette. **Cancel** restores the previous one. A saved dark or light choice from an older config still loads.
|
|
151
|
+
|
|
152
|
+
Included palettes: T-TUI Dark (the default), T-TUI Light, Dracula, Catppuccin Mocha, Macchiato, Frappe, and Latte, Nord, Gruvbox Dark and Light, Tokyo Night, Storm, and Day, One Dark and Light, Solarized Dark and Light, Rose Pine, Moon, and Dawn, Monokai, Material Ocean, and GitHub Dark and Light. These are T-TUI adaptations of the editor themes.
|
|
153
|
+
|
|
154
|
+
Inbox tools are All, Unread, New, Drafts, and Pinned filters, Recent, Name, and Newest sorting, search across names and message previews, persistent pins, and local read markers. Pinned conversations sort first. Filters and search apply only to loaded conversations. **More** or uppercase **L** expands the session limit by 100, up to 1,000. It refetches the expanded inbox through existing server pagination. Pins and read markers stay on this device.
|
|
155
|
+
|
|
156
|
+
## Configuration
|
|
157
|
+
|
|
158
|
+
| Name | Default | Notes |
|
|
159
|
+
|---|---|---|
|
|
160
|
+
| `TTUI_INSTALL_DIR` | `~/.local/bin` | Destination used by `scripts/install.sh`. |
|
|
161
|
+
| `TTUI_DATA_DIR` | Platform directories | Optional isolated root with `config` and `cache` subdirectories. |
|
|
162
|
+
| Windows account file | `%APPDATA%\ttui\config.json` | Credentials use current-user DPAPI; drafts and settings remain readable JSON. |
|
|
163
|
+
| Windows photo cache | `%LOCALAPPDATA%\ttui\photos` | Managed cache files; `--clear-cache` removes them. |
|
|
164
|
+
| Account file | `$XDG_CONFIG_HOME/ttui/config.json` | Usually `~/.config/ttui/config.json`. Mode `0600`. Holds the session, drafts, pins, read markers, and settings. |
|
|
165
|
+
| Demo file | `demo.json` in that same directory | Separate settings and drafts for `--mock`. |
|
|
166
|
+
| Photo cache | `$XDG_CACHE_HOME/ttui/photos` | Usually `~/.cache/ttui/photos`. |
|
|
167
|
+
| Inbox size | 60 | Initial load 20–100; **More** increases it up to 1,000 for this session. |
|
|
168
|
+
| Poll interval | 5000 ms | Backs off after failures. |
|
|
169
|
+
| In-terminal photos | On | Turn off to force the text fallback. |
|
|
170
|
+
| Text photo size | 46 × 26 cells, avatars 10 | Used only by the text fallback. |
|
|
171
|
+
| External viewer | Off | `v` uses the Windows shell or Linux `xdg-open` after you enable it. |
|
|
172
|
+
| Theme | T-TUI Dark | Saved when you apply a palette. |
|
|
173
|
+
|
|
174
|
+
Account edits send only the fields you changed, and only after **Save**. Bio (500 characters), age range, distance in miles, gender preference, discovery visibility, and gender display are supported. **Discard** restores the loaded values. Unsaved edits survive navigation in memory. They are dropped when you quit. **Account → Preview** shows your own profile. **Account → Tinder Web** opens the website for workflows the terminal does not cover.
|
|
175
|
+
|
|
176
|
+
Super Like and Boost ask for confirmation and require credits the account already has. A rejected action leaves the current card in place. An ambiguous response is reported for you to review.
|
|
177
|
+
|
|
178
|
+
Unmatch asks for confirmation. Local conversation state is removed after the server acknowledges it. **Report help** opens [Tinder's reporting instructions](https://www.help.tinder.com/hc/en-us/articles/115003822043-Reporting-profiles-and-content). It does not file a report.
|
|
179
|
+
|
|
180
|
+
Sign out, after confirmation, removes the saved credentials, drafts, and read markers from this machine. Your Tinder account and the conversations on the server stay. The photo cache stays on disk, capped at 256 MiB and seven days; close T-TUI and use `--clear-cache` to remove it.
|
|
181
|
+
|
|
182
|
+
## Build and verify
|
|
183
|
+
|
|
184
|
+
Day-to-day use stops at [Quick start](#quick-start). This section is for changing the source.
|
|
185
|
+
|
|
186
|
+
```sh
|
|
187
|
+
cargo build --release --locked
|
|
188
|
+
cargo test --locked
|
|
189
|
+
cargo clippy --locked --all-targets -- -D warnings
|
|
190
|
+
cargo fmt --package ttui -- --check
|
|
191
|
+
python -m pip install --require-hashes -r scripts/test-requirements.txt
|
|
192
|
+
python scripts/pty_e2e.py --binary target/release/ttui
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Unit and HTTP contract tests cover session recovery, stale responses, message acknowledgement, opaque pagination cursors, swipes, config file permissions, Unicode input, and resizing. They use isolated local HTTP servers and a fictional offline backend. The PTY suite drives the real binary with temporary settings and cache, checks the terminal cells, and writes screenshots under `/tmp/ttui-qa`. It emulates Sixel replies to check pixel size, frame caching, carousels, overlays, resizing, and the photo toggle. It does not connect to a real account or change one.
|
|
196
|
+
|
|
197
|
+
After editing source, run `./scripts/install.sh` to refresh the installed command. For the project launcher only, `cargo build --release --locked` is enough. `./ttui` uses the release binary when it is already built.
|
|
198
|
+
|
|
199
|
+
## Documentation
|
|
200
|
+
|
|
201
|
+
- [FEATURES.md](FEATURES.md): implemented workflows, website-only gaps, how the tests are bounded, and the API sources used on 2026-09-18
|
|
202
|
+
- [PROGRESS.md](PROGRESS.md): what landed in 0.3.0 and the checks that were run
|
|
203
|
+
|
|
204
|
+
## License
|
|
205
|
+
|
|
206
|
+
[MIT](LICENSE). See [SECURITY.md](SECURITY.md) for local storage and reporting guidance.
|
|
207
|
+
|
|
208
|
+
## Trademarks
|
|
209
|
+
|
|
210
|
+
Tinder is a trademark of Match Group, LLC. This project is not affiliated with, endorsed by, or sponsored by Tinder or Match Group.
|