A modern, open-source job scheduler built with Elixir and Phoenix
- HTTP Task Scheduling: Trigger any API endpoint on a schedule
- Full Cron Syntax: Supports standard cron expressions with seconds precision
- Retry Mechanism: Automatic retries with exponential backoff
- Web UI & REST API: Manage jobs through both interfaces
- Lightweight: Minimal resource usage
Live demo: croniq.ilaletdinov.ru
The Croniq web interface allows you to manage scheduled jobs through a modern dashboard:
![]() Task List View all jobs, their statuses, and schedules |
![]() Create Task Convenient form for creating a new job |
![]() Request Log Execution history and HTTP request logs |
Requirements:
- Elixir 1.14+
- PostgreSQL 12+
- Node.js 16+ (for assets)
Installation:
git clone https://github.com/yourusername/croniq.git
cd croniq
mix deps.get
cd assets && npm install && cd ..
mix ecto.setup
mix phx.server
Visit http://localhost:4000 in your browser.
curl -X POST http://localhost:4000/api/jobs \
-H "Content-Type: application/json" \
-d '{
"name": "daily-backup",
"schedule": "0 3 * * *",
"url": "https://api.example.com/backup",
"method": "POST",
"headers": {
"Authorization": "Bearer your-token"
},
"body": {
"database": "production"
}
}'
curl http://localhost:4000/api/jobs
- View, create, edit, and delete scheduled tasks via the web dashboard.
- Real-time status and logs for each job.
- All configuration is managed via
config/*.exs
. - Database settings:
config/dev.exs
,config/prod.exs
- Environment variables can be used for secrets and production settings.
- Elixir + Phoenix: Robust, concurrent backend.
- Quantum: Used for cron-like scheduling.
- Ecto: Task persistence in PostgreSQL.
- HTTPoison: Executes HTTP requests for tasks.
How it works:
- Each task is stored in the database and scheduled via Quantum.
- When a task is due, Croniq sends an HTTP request as specified.
- Retries and status updates are handled automatically.
- Both REST API and Web UI are available for management.
We welcome contributions! To get started:
- Fork the repository
- Create a new branch (
git checkout -b feature/my-feature
) - Make your changes
- Commit and push (
git commit -am 'Add new feature' && git push origin feature/my-feature
) - Open a Pull Request
- All user input is validated and sanitized.
- Built-in CSRF protection and secure session management.
- Please report vulnerabilities via GitHub Issues.
- Task history and logs
- Advanced authentication (OAuth, SSO)
- Multi-tenant support
- More integrations (Slack, Email, etc.)
- Retry Mechanism
Q: Can I use custom HTTP headers?
A: Yes, just specify them in the headers
field when creating a job.
This project is licensed under the MIT License. See the LICENSE file for details.
Made with ❤️ by the Croniq community