You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/configuration.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,7 +21,7 @@ Cronboard is built on [Textual](https://textual.textualize.io), which ships with
21
21
22
22
The active theme is saved automatically whenever you change it inside the application. The default theme is **`catppuccin-mocha`**.
23
23
24
-
To change the theme, use Textual's built-in theme picker (accessible via the command palette with `Ctrl+P` → `theme`).
24
+
To change the theme, open the command palette with **`Ctrl+P`** (or **`Ctrl+E`** on some setups), type `theme`, and choose a theme. Your choice is written to `config.toml` so it persists across restarts.
The **Local** tab shows all cron jobs for the currently logged-in user. Cronboard reads and writes your crontab directly.
3
+
The **Local** tab shows all cron jobs for the currently logged-in user. Cronboard reads and writes your crontab directly, so what you see in the table matches what `crontab -l` shows. Any change you make (create, edit, delete, pause) is written to your user crontab immediately.
4
4
5
5
---
6
6
7
7
## Viewing Cron Jobs
8
8
9
9
All jobs are displayed in a table with the following columns:
10
10
11
-
| Column | Description |
12
-
|---|---|
13
-
| ID | Comment attached to the job (used as identifier) |
14
-
| Expression | Raw cron expression |
15
-
| Command | Shell command to execute |
16
-
| Last Run | Previous scheduled execution time |
17
-
| Next Run | Next scheduled execution time |
18
-
| Status |`Active` (green), `Paused` (red), or `Inactive` (yellow) |
| ID | Comment attached to the job (used as identifier) |
14
+
| Expression | Raw cron expression |
15
+
| Command | Shell command to execute |
16
+
| Last Run | Previous scheduled execution time |
17
+
| Next Run | Next scheduled execution time |
18
+
| Status |`Active` (green), `Paused` (red), or `Inactive` (yellow) |
19
+
20
+
The table is read from your crontab when you open the app or when you press **`r`** to refresh. If you edit the crontab in another terminal, refresh in Cronboard to see the updates.
19
21
20
22
---
21
23
22
24
## Creating a Cron Job
23
25
24
-
Press **`c`** to open the creation form.
26
+
Press **`c`** to open the creation form. The form is the same for both new jobs and edits (when you press **`e`** on an existing job).
27
+
28
+

25
29
26
30
### Fields
27
31
28
-
| Field | Description |
29
-
|---|---|
30
-
| Expression | A valid cron expression or special alias (see below) |
31
-
| Command | The shell command to run. Supports path autocompletion with `Tab`|
32
-
| ID | A unique identifier stored as a crontab comment |
|`@daily` / `@midnight`|`0 0 * * *`| Every day at midnight|
56
+
|`@weekly`|`0 0 * * 0`| Every Sunday at midnight|
57
+
|`@monthly`|`0 0 1 * *`| First day of each month|
54
58
|`@yearly` / `@annually`|`0 0 1 1 *`| Once a year on January 1st |
55
59
56
-
As you type the expression, a **live description** is shown below the field (e.g. *"At 00:00 on day-of-month 1"*).
60
+
As you type the expression, a **live description** is shown below the field (e.g. _"At 00:00 on day-of-month 1"_). Use it to confirm the schedule before saving.
57
61
58
62
---
59
63
@@ -63,6 +67,8 @@ As you type the expression, a **live description** is shown below the field (e.g
63
67
2. Press **`e`** to open the edit form — pre-filled with the current values.
64
68
3. Modify the fields and press **Save**.
65
69
70
+
The job is updated in your crontab and the table refreshes.
71
+
66
72
---
67
73
68
74
## Deleting a Cron Job
@@ -71,6 +77,8 @@ As you type the expression, a **live description** is shown below the field (e.g
71
77
2. Press **`D`** (uppercase).
72
78
3. Confirm the deletion in the confirmation dialog.
73
79
80
+
The job is removed from your crontab. This cannot be undone from within Cronboard, so use with care.
81
+
74
82
---
75
83
76
84
## Pausing and Resuming
@@ -80,8 +88,10 @@ Press **`p`** on a selected job to toggle its active state:
80
88
-**Active → Paused**: the job is commented out in the crontab and will not run.
81
89
-**Paused → Active**: the job is uncommented and resumes its schedule.
82
90
91
+
Pausing is useful when you want to keep the job definition but temporarily disable it (e.g. for debugging or maintenance) without losing the expression or command.
92
+
83
93
---
84
94
85
95
## Refreshing
86
96
87
-
Press **`r`** to reload the crontab from disk at any time.
97
+
Press **`r`** to reload the crontab from disk at any time. Use this if you changed the crontab outside Cronboard or if you want to see the latest state after an external edit.
Cronboard can connect to remote servers via SSH and manage their cron jobs exactly like local ones.
3
+
Cronboard can connect to remote servers via SSH and manage their cron jobs exactly like local ones. You use the same keyboard shortcuts and forms; the only difference is that changes are applied to the remote user’s crontab instead of your local one.
4
4
5
5
---
6
6
@@ -10,28 +10,30 @@ Cronboard can connect to remote servers via SSH and manage their cron jobs exact
10
10
2. Press **`a`** to open the **Add Server** dialog.
11
11
3. Fill in the fields:
12
12
13
-
| Field | Description |
14
-
|---|---|
15
-
| Hostname | Server hostname or IP. Append `:port` for a non-standard port (e.g. `myserver.com:2222`). Defaults to port `22`. |
16
-
| Username | SSH login username |
17
-
| Password | Leave empty to use an SSH key instead |
| Hostname | Server hostname or IP. Append `:port` for a non-standard port (e.g. `myserver.com:2222`). Defaults to port `22`.|
16
+
| Username | SSH login username|
17
+
| Password | Leave empty to use an SSH key instead|
18
18
| Crontab user | Optional. Manage cron jobs for a different user (requires `sudo` permissions). Leave empty to use the current user. |
19
19
20
20
4. Click **Add Server**.
21
21
22
-
Servers are saved persistently in `~/.config/cronboard/servers.toml`. Passwords are stored encrypted.
22
+
Servers are saved persistently in `~/.config/cronboard/servers.toml`. Passwords are stored encrypted (bcrypt), never in plain text.
23
+
24
+

23
25
24
26
---
25
27
26
28
## SSH Key Authentication
27
29
28
-
If you leave the **Password** field empty, Cronboard will connect using your SSH key. It looks for the `known_hosts` file in the default location:
30
+
If you leave the **Password** field empty, Cronboard will connect using your SSH key. It looks for keys and the `known_hosts` file in the default location:
29
31
30
32
```
31
-
~/.ssh/known_hosts
33
+
~/.ssh/
32
34
```
33
35
34
-
Make sure the server's host key is already trusted (i.e. you have connected to it manually at least once).
36
+
Make sure the server's host key is already trusted (i.e. you have connected to it at least once, e.g. with `ssh user@host` from the terminal). That way the first connection from Cronboard won’t prompt for host key confirmation.
35
37
36
38
---
37
39
@@ -44,17 +46,19 @@ Once connected, the cron table for that server appears on the right and supports
You can only be connected to one server at a time. To work on another server, disconnect with **`d`** first, then connect to the other.
50
+
47
51
---
48
52
49
53
## Managing Another User's Cron Jobs
50
54
51
-
If you entered a **Crontab user** when adding the server, Cronboard will run `crontab -u <user>` on the remote server. This requires your SSH user to have `sudo` (or equivalent) privileges on the remote machine.
55
+
If you entered a **Crontab user** when adding the server, Cronboard will run `crontab -u <user>` on the remote server. This requires your SSH user to have `sudo` (or equivalent) privileges on the remote machine so it can act on behalf of that user.
52
56
53
57
---
54
58
55
59
## Disconnecting
56
60
57
-
Press **`d`** to disconnect from the current server. The tree view remains intact so you can reconnect later.
61
+
Press **`d`** to disconnect from the current server. The tree view remains intact so you can reconnect later. Your crontab changes on the server are already saved; disconnecting does not discard them.
58
62
59
63
---
60
64
@@ -63,4 +67,4 @@ Press **`d`** to disconnect from the current server. The tree view remains intac
63
67
1. Navigate to the server in the tree view.
64
68
2. Press **`D`** (uppercase) and confirm.
65
69
66
-
This removes the server from both the tree view and the saved configuration file.
70
+
This removes the server from both the tree view and the saved configuration file. It does not remove any cron jobs on the remote server; it only removes the saved connection details from your machine.
Cronboard includes a built-in search feature that lets you quickly find cron jobs by keyword.
3
+
Cronboard includes a built-in search feature that lets you quickly find cron jobs by keyword. It’s useful when you have many jobs and want to jump to one that matches a script name, ID, or expression.
4
4
5
5
---
6
6
@@ -14,28 +14,32 @@ The search is **case-insensitive** and matches against:
14
14
- Cron **expression**
15
15
-**Command**
16
16
17
+
For example, typing `backup` will match any job whose ID, expression, or command contains “backup”. You don’t need to type the whole word; partial matches count.
18
+
19
+

20
+
17
21
---
18
22
19
23
## Navigating Matches
20
24
21
-
After a search is performed, matching rows are highlighted in **bold yellow**.
25
+
After a search is performed, matching rows are highlighted in **bold yellow**. If there is more than one match, move between them with the keys below.
22
26
23
-
| Key | Action |
24
-
|---|---|
25
-
|`n`| Jump to the **next** match |
27
+
| Key | Action |
28
+
|---|------------------------------ |
29
+
|`n`| Jump to the **next** match |
26
30
|`N`| Jump to the **previous** match |
27
31
28
-
A notification shows the total number of matches found (e.g. *"3 match(es) for 'backup'"*).
32
+
A notification shows the total number of matches found (e.g. _"3 match(es) for 'backup'"_). If there are no matches, you’ll see a message saying so and the table stays unchanged.
29
33
30
34
---
31
35
32
36
## Clearing a Search
33
37
34
-
Press **`Escape`** to clear the current search and restore the table to its normal view.
38
+
Press **`Escape`** to clear the current search and restore the table to its normal view. You can also start a new search by pressing **`/`** again and typing a different query.
35
39
36
40
---
37
41
38
42
## Notes
39
43
40
-
- Search works in both the **Local** tab and on **Remote Server** tables.
41
-
- The table must have at least one row for search to be available.
44
+
- Search works in both the **Local** tab and on **Remote Server** tables. The behavior is the same in both.
45
+
- The table must have at least one row for search to be available. If the table is empty, the search shortcut may not open the prompt.
Copy file name to clipboardExpand all lines: docs/getting-started.md
+21-13Lines changed: 21 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,14 +8,18 @@ After [installing](installation.md), start the application with:
8
8
cronboard
9
9
```
10
10
11
+
The app reads your user crontab on startup. If you have no cron jobs yet, the table will be empty; you can add your first job in a few steps (see [Your First Cron Job](#your-first-cron-job)).
12
+
11
13
---
12
14
13
15
## Interface Overview
14
16
15
-
When Cronboard opens you will see:
17
+
When Cronboard opens you will see a single window with a header, tab bar, main table, and footer. The layout is fixed so you always know where to look.
18
+
19
+

16
20
17
-
-**Header** — shows the app name and current version.
18
-
-**Tab bar** — switch between **Local** (your local cron jobs) and **Servers** (remote SSH servers).
21
+
-**Header** — shows the app name and current version. Useful to confirm you’re running the version you expect.
22
+
-**Tab bar** — switch between **Local** (your local cron jobs) and **Servers** (remote SSH servers). Only one tab is active at a time; the main table shows the jobs for the active tab.
19
23
-**Main table** — lists all cron jobs with the following columns:
20
24
21
25
| Column | Description |
@@ -27,32 +31,36 @@ When Cronboard opens you will see:
27
31
| Next Run | When the job will run next |
28
32
| Status |`Active`, `Paused`, or `Inactive`|
29
33
30
-
-**Footer** — displays all available keyboard bindings for the current context.
34
+
-**Footer** — displays all available keyboard bindings for the current context. The bindings change depending on whether you’re in the table, a form, or the Servers panel, so it’s worth glancing at the footer when you switch context.
31
35
32
36
---
33
37
34
38
## Your First Cron Job
35
39
36
-
1. Press **`c`** to open the **Create** form.
37
-
2. Enter a valid cron expression in the **Expression** field.
38
-
As you type, a human-readable description appears below the field in real time (e.g. *"Every hour"*).
39
-
3. Enter the **Command** to execute. Use **`Tab`** to autocomplete file paths.
40
-
4. Give the job a unique **ID** (stored as a crontab comment).
40
+
Creating a job is the main way to get started. The flow is the same for local and remote (after connecting to a server).
41
+
42
+
1. Press **`c`** to open the **Create** form. The form has three fields: Expression, Command, and ID.
43
+
2. Enter a valid cron expression in the **Expression** field (e.g. `0 * * * *` for every hour).
44
+
As you type, a human-readable description appears below the field in real time (e.g. *"Every hour"*). This helps you confirm the schedule before saving.
45
+
3. Enter the **Command** to execute. Use **`Tab`** to autocomplete file paths so you don’t have to type full paths by hand.
46
+
4. Give the job a unique **ID** (stored as a crontab comment). The ID helps you recognize the job in the table and in raw `crontab -l` output.
41
47
5. Press **Save**.
42
48
43
-
The table refreshes automatically and your new job appears immediately.
49
+
The table refreshes automatically and your new job appears immediately. No need to restart the app.
50
+
51
+

44
52
45
53
---
46
54
47
55
## Switching Between Local and Remote
48
56
49
57
Use the **`Tab`** key to switch focus between panels, or click the **Local** / **Servers** tabs at the top.
50
58
51
-
-**Local** — manages your current user's crontab.
52
-
-**Servers** — lists saved SSH servers. See [Remote Servers](features/remote-servers.md) for setup.
59
+
-**Local** — manages your current user's crontab. Changes are written directly to your system crontab.
60
+
-**Servers** — lists saved SSH servers. Add servers once; they’re stored in config so you can reconnect anytime. See [Remote Servers](features/remote-servers.md) for setup and connecting.
53
61
54
62
---
55
63
56
64
## Quitting
57
65
58
-
Press **`q`** or **`Ctrl+Q`** to exit Cronboard.
66
+
Press **`q`** or **`Ctrl+Q`** to exit Cronboard. Your crontab (and any remote crontabs you edited) are already saved; there is no separate “save before quit” step.
Copy file name to clipboardExpand all lines: docs/index.md
+12Lines changed: 12 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,13 +14,25 @@ Cronboard gives you a keyboard-driven TUI (Terminal User Interface) to:
14
14
- Search through jobs using keywords
15
15
- See human-readable descriptions of cron expressions in real time
16
16
17
+
You manage everything from the terminal: no web UI, no extra services. Your crontab stays the standard system crontab, so existing tools and backups keep working.
18
+
19
+
---
20
+
21
+
## See it in action
22
+
23
+
Below is a short overview of Cronboard’s interface. The [Getting Started](getting-started.md) guide walks through each step with more detail and examples.
24
+
25
+

26
+
17
27
---
18
28
19
29
## Requirements
20
30
21
31
- Python **3.13** or later
22
32
-`cron` / `crontab` available on the system
23
33
34
+
Your system must have `cron` installed and the `crontab` command available (e.g. `crontab -l` runs without error). On macOS and most Linux distributions this is already the case.
0 commit comments