{"id":37136618,"url":"https://github.com/techquestsdev/crontab-guru","last_synced_at":"2026-01-14T15:55:26.971Z","repository":{"id":319924970,"uuid":"1080029047","full_name":"techquestsdev/crontab-guru","owner":"techquestsdev","description":"Interactive terminal-based cron expression editor built with Go and Bubble Tea, featuring real-time validation, human-readable descriptions, and next run time previews.","archived":false,"fork":false,"pushed_at":"2025-11-05T18:16:31.000Z","size":225,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-05T20:34:51.586Z","etag":null,"topics":["bubbletea","cli","cron","crontab","developer-tools","go","interactive","scheduler","terminal","tui"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/techquestsdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-20T19:00:56.000Z","updated_at":"2025-11-05T18:16:35.000Z","dependencies_parsed_at":"2025-10-21T01:09:26.371Z","dependency_job_id":"a608de75-08dc-440f-bd35-e98f59350313","html_url":"https://github.com/techquestsdev/crontab-guru","commit_stats":null,"previous_names":["techquestsdev/crontab-guru"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/techquestsdev/crontab-guru","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techquestsdev%2Fcrontab-guru","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techquestsdev%2Fcrontab-guru/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techquestsdev%2Fcrontab-guru/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techquestsdev%2Fcrontab-guru/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/techquestsdev","download_url":"https://codeload.github.com/techquestsdev/crontab-guru/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techquestsdev%2Fcrontab-guru/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28425570,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T15:24:48.085Z","status":"ssl_error","status_checked_at":"2026-01-14T15:23:41.940Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bubbletea","cli","cron","crontab","developer-tools","go","interactive","scheduler","terminal","tui"],"created_at":"2026-01-14T15:55:26.198Z","updated_at":"2026-01-14T15:55:26.965Z","avatar_url":"https://github.com/techquestsdev.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Crontab Expression Editor\n\nAn interactive terminal-based cron expression editor built with Go and Bubble Tea. Create, edit, and validate crontab schedules with real-time human-readable descriptions and next run time calculations.\n\n![Go Version](https://img.shields.io/github/go-mod/go-version/techquestsdev/crontab-guru?logo=go\u0026logoColor=white)\n![Build Status](https://github.com/techquestsdev/crontab-guru/workflows/CI/badge.svg)\n[![codecov](https://codecov.io/gh/techquestsdev/crontab-guru/branch/main/graph/badge.svg)](https://codecov.io/gh/techquestsdev/crontab-guru)\n![License](https://img.shields.io/github/license/techquestsdev/crontab-guru)\n![Latest Release](https://img.shields.io/github/v/release/techquestsdev/crontab-guru?include_prereleases)\n\n![demo](docs/demo.gif)\n\n## Features\n\n- **Beautiful TUI Interface** - Clean, colorful terminal interface with responsive design\n- **Real-time Validation** - Instant feedback as you type with field-aware validation\n- **Human-Readable Descriptions** - Converts cron expressions to natural language\n- **Clipboard Integration** - Copy cron expressions to clipboard with one keystroke\n- **Robust Error Handling** - Comprehensive validation prevents crashes and invalid expressions\n- **Intuitive Navigation** - Tab, arrow keys, and shortcuts for efficient editing\n- **Field-Specific Validation** - Smart validation for each cron field (minute, hour, day, month, weekday)\n- **Next Execution Times** - Preview when your cron job will run next\n\n## Installation\n\n### Quick Install (Recommended)\n\n#### Using Go Install\n\n```bash\ngo install github.com/techquestsdev/crontab-guru@latest\n```\n\nThen run with: `crontab-guru`\n\n#### Using Homebrew (MacOS/Linux)\n\n```bash\nbrew tap techquestsdev/tap\nbrew install crontab-guru\n```\n\n#### Download Binary\n\nDownload the latest release for your platform from the [Releases page](https://github.com/techquestsdev/crontab-guru/releases):\n\n- **Linux** (amd64, arm64)\n- **MacOS** (Intel, Apple Silicon)\n- **Windows** (amd64)\n\n```bash\n# Example: Download and install on Linux/MacOS\ncurl -L https://github.com/techquestsdev/crontab-guru/releases/latest/download/crontab-guru_Linux_x86_64.tar.gz | tar xz\nsudo mv crontab-guru /usr/local/bin/\n```\n\n### Build from Source\n\n#### Prerequisites\n\n- **Go** 1.25.3 or higher\n- **Terminal** with color support\n- **Make** (optional, for using Makefile commands)\n\n#### Clone and Build\n\n```bash\n# Clone the repository\ngit clone https://github.com/techquestsdev/crontab-guru.git\ncd crontab-guru\n\n# Download dependencies\ngo mod download\n\n# Build the application\nmake build\n# Or without Make:\ngo build -o bin/crontab-guru .\n\n# Install to your system\nmake install\n# Or without Make:\ngo install\n\n# Run it\n./bin/crontab-guru\n```\n\n#### Using Make (Developer Workflow)\n\n```bash\n# See all available commands (23 targets)\nmake help\n\n# Build the application\nmake build\n\n# Run tests with coverage\nmake test-coverage\n\n# Check code quality (fmt + vet + lint)\nmake check\n```\n\n#### Quick Run (Development)\n\n```bash\nmake run\n# Or without Make:\ngo run main.go\n```\n\n## Usage\n\n### Basic Usage\n\n1. Launch the application\n2. Use **Tab/Space/Enter** to navigate between fields\n3. Type your cron expression values\n4. See the description update in real-time\n5. Press **y** to copy the expression to clipboard\n6. Press **Esc** or **Ctrl+C** to quit\n\n### Keyboard Shortcuts\n\n| Key                       | Action                             |\n| ------------------------- | ---------------------------------- |\n| `?`                       | Toggle help text                   |\n| `Tab` / `Space` / `Enter` | Navigate between fields (forward)  |\n| `Shift+Tab`               | Navigate between fields (backward) |\n| `y`                       | Copy cron expression to clipboard  |\n| `Esc` / `Ctrl+C`          | Quit application                   |\n\n## Cron Expression Format\n\nThe editor uses the standard cron format with 5 fields:\n\n```text\n┌───────────── minute (0 - 59)\n│ ┌───────────── hour (0 - 23)\n│ │ ┌───────────── day of month (1 - 31)\n│ │ │ ┌───────────── month (1 - 12 or JAN-DEC)\n│ │ │ │ ┌───────────── day of week (0 - 6 or SUN-SAT)\n│ │ │ │ │\n* * * * *\n```\n\n### Supported Syntax\n\n- **Wildcards**: `*` (any value)\n- **Specific values**: `5` (at minute 5)\n- **Ranges**: `1-5` (1 through 5)\n- **Steps**: `*/15` (every 15 minutes)\n- **Lists**: `1,15,30` (at 1, 15, and 30)\n- **Month names**: `JAN`, `FEB`, `MAR`, etc. (month field only)\n- **Day names**: `SUN`, `MON`, `TUE`, etc. (weekday field only)\n\n### Examples\n\n| Expression        | Description              |\n| ----------------- | ------------------------ |\n| `* * * * *`       | Every minute             |\n| `0 * * * *`       | Every hour               |\n| `0 0 * * *`       | Every day at midnight    |\n| `0 9 * * MON-FRI` | At 9:00 AM on weekdays   |\n| `*/15 * * * *`    | Every 15 minutes         |\n| `0 9,17 * * *`    | At 9:00 AM and 5:00 PM   |\n| `0 0 1 * *`       | First day of every month |\n| `0 0 * * SUN`     | Every Sunday at midnight |\n\n## Architecture\n\nThe application follows the [**Elm Architecture**](https://guide.elm-lang.org/architecture/) (Model-View-Update pattern) via Bubble Tea:\n\n```text\n┌───────────────────────────────────────┐\n│                 Model                 │\n│  (State: 5 text inputs, error, etc.)  │\n└─────┬─────────────────────────────────┘\n      │\n      ├──► Update (Handle events)\n      │     ├─ Key presses\n      │     ├─ Field validation\n      │     └─ Navigation\n      │\n      └──► View (Render UI)\n            ├─ Title\n            ├─ Input fields\n            ├─ Description\n            └─ Help/Error text\n```\n\n### Key Components\n\n- **Model**: Holds application state (5 textinput fields, cursor, description, error)\n- **Update**: Processes user input and updates state\n- **View**: Renders the current state to terminal\n- **Validation**: Field-aware validation prevents invalid input\n\n### Field-Aware Validation\n\nThe editor implements sophisticated validation rules:\n\n- **Minute/Hour/Day** (fields 0-2): Only numeric values, no letters\n- **Month** (field 3): Numbers 1-12 or month abbreviations (JAN-DEC)\n- **Weekday** (field 4): Numbers 0-6 or day abbreviations (SUN-SAT)\n- **Minimum length**: Letter values must be at least 3 characters\n- **Abbreviation validation**: Checks that abbreviations are valid for that field\n\n## Testing\n\nThe project has comprehensive test coverage and zero linting issues, leveraging Go's testing framework and `golangci-lint` for code quality.\n\n### Run Tests\n\n```bash\n# Run all tests\nmake test\n# Or:\ngo test -v\n\n# Run tests with coverage\nmake test-coverage\n# Or:\ngo test -v -cover\n\n# Generate detailed coverage report\nmake test-coverage-view\n# Or:\ngo test -coverprofile=coverage.out\ngo tool cover -html=coverage.out\n\n# Run benchmarks\nmake bench\n```\n\n### Linting and Formatting\n\n```bash\n# Run linter\nmake lint\n\n# Auto-fix linting issues\nmake lint-fix\n\n# Format code\nmake fmt\n\n# Run vet\nmake vet\n\n# Check everything (format + lint + test)\nmake check\n\n# Run all checks and build\nmake all\n```\n\n### Test Categories\n\n- Input validation (numeric, alphabetic, special characters)\n- Navigation (tab, arrows, home, end)\n- Field-specific validation (month/day names)\n- Error handling (invalid expressions)\n- Edge cases (empty fields, bounds, single letters)\n- Clipboard operations\n- Help toggle\n- Window resize\n- Complex cron expressions\n\n## Dependencies\n\n- [github.com/charmbracelet/bubbletea](https://github.com/charmbracelet/bubbletea) - Terminal UI framework\n- [github.com/charmbracelet/bubbles](https://github.com/charmbracelet/bubbles) - Text input components\n- [github.com/charmbracelet/lipgloss](https://github.com/charmbracelet/lipgloss) - Terminal styling\n- [github.com/lnquy/cron](https://github.com/lnquy/cron) - Cron expression descriptions\n- [github.com/robfig/cron/v3](https://github.com/robfig/cron/v3) - Cron expression parsing\n- [github.com/atotto/clipboard](https://github.com/atotto/clipboard) - Clipboard integration\n\n## Development\n\n### Project Structure\n\n```text\n.\n├── .github           # GitHub configuration\n├── .gitignore        # Git ignore file\n├── .golangci.yml     # GolangCI-Lint configuration\n├── .goreleaser.yml   # Goreleaser configuration\n├── docs              # Documentation files\n├── go.mod            # Go module dependencies\n├── go.sum            # Dependency checksums\n├── LICENSE           # Project license\n├── main_test.go      # Test suite\n├── main.go           # Main application code\n├── Makefile          # Build and test commands\n└── README.md         # This file\n```\n\n### Coding Standards\n\n- Follow [Effective Go](https://golang.org/doc/effective_go.html) guidelines\n- Maintain test coverage above 90%\n- Use meaningful variable and function names\n- Add comments for complex logic\n- Run `go fmt` before committing\n\n## Known Limitations\n\n- Requires terminal with color support for best experience\n- Clipboard operations require clipboard utilities (xclip on Linux, pbcopy on MacOS) and will gracefully fall back with a notification if unavailable\n- Advanced cron features (L, W, #) are not fully supported in descriptions\n\n## Contributing\n\nContributions are welcome! Please follow these steps:\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'feat: add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a [Pull Request](https://github.com/techquestsdev/crontab-guru/pulls)\n\n### Before Submitting\n\n- Ensure all tests pass (`go test -v`)\n- Maintain or improve code coverage\n- Follow existing code style\n- Add tests for new features\n- Update documentation as needed\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\n- [crontab.guru](https://crontab.guru/) for the project inspiration\n- [Charm](https://charm.sh/) for the amazing Bubble Tea framework\n- [robfig](https://github.com/robfig) for the robust cron parser\n- [lnquy](https://github.com/lnquy) for the cron description library\n\n## Contact\n\nAndré Nogueira - [@aanogueira](https://github.com/aanogueira)\n\nProject Link: [https://github.com/techquestsdev/crontab-guru](https://github.com/techquestsdev/crontab-guru)\n\n---\n\n### Made with ❤️ and Go\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechquestsdev%2Fcrontab-guru","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftechquestsdev%2Fcrontab-guru","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechquestsdev%2Fcrontab-guru/lists"}