Launch Week Day 5: Introducing Reachability for PHP.Learn More
Socket
Book a DemoSign in
Socket

react-cron-generator

Package Overview
Dependencies
Maintainers
2
Versions
74
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-cron-generator

A powerful React component for building cron expressions with support for both Unix (5 fields) and Quartz (7 fields) formats. Features validation, format conversion, TypeScript support, and accessibility.

latest
Source
npmnpm
Version
2.4.0
Version published
Maintainers
2
Created
Source

🕐 React Cron Generator

A powerful, user-friendly React component for building cron expressions with support for both Unix and Quartz formats

npm version Downloads license React TypeScript

🎮 Try it Live!

Interactive Demo →

✨ Features

  • 🎯 Dual Format Support - Works with both Unix (5 fields) and Quartz (7 fields) cron formats
  • 🔄 Automatic Conversion - Seamlessly convert between Unix and Quartz formats
  • Built-in Validation - Comprehensive cron expression validation
  • 🌍 Internationalization - Full i18n support with custom translation functions
  • Accessible - WCAG compliant with keyboard navigation and screen reader support
  • 📱 Responsive - Mobile-friendly design that works on all devices
  • 🎨 Customizable - Easy to style and configure
  • 🔒 Type Safe - Full TypeScript support with comprehensive type definitions
  • Performance Optimized - Memoized computations and efficient re-renders
  • 🛡️ Error Boundaries - Graceful error handling built-in

📦 Installation

npm install react-cron-generator

or

yarn add react-cron-generator

🚀 Quick Start

Basic Usage (Quartz Format)

import React, { useState } from 'react';
import Cron from 'react-cron-generator';
import 'react-cron-generator/build/cron-builder.css';

function App() {
  const [value, setValue] = useState('0 0 00 1/1 * ? *');

  return (
    <Cron
      onChange={(cronValue, humanReadable) => {
        setValue(cronValue);
        console.log('Cron:', cronValue);
        console.log('Human:', humanReadable);
      }}
      value={value}
      showResultText={true}
      showResultCron={true}
    />
  );
}

Unix Format

import React, { useState } from 'react';
import Cron from 'react-cron-generator';
import 'react-cron-generator/build/cron-builder.css';

function App() {
  const [value, setValue] = useState('*/5 * * * *');

  return (
    <Cron
      onChange={(cronValue, humanReadable) => {
        setValue(cronValue);
      }}
      value={value}
      showResultText={true}
      showResultCron={true}
      isUnix={true}  // Enable Unix format
    />
  );
}

📸 Screenshots

Cron Generator Interface

Cron Generator Options

📖 Documentation

Props

PropTypeDefaultDescription
valuestringundefinedInitial cron expression (Unix: 5 fields, Quartz: 6 or 7 fields)
onChange(value: string, text: string) => voidRequiredCallback fired when cron value changes. Receives cron expression and human-readable text
onHeaderChange(header: string) => voidundefinedCallback fired when the selected tab/header changes. Receives header value ('Minutes', 'Hourly', 'Daily', 'Weekly', 'Monthly', 'Custom'). Called on initial mount and whenever tabs changes
showResultTextbooleanfalseDisplay human-readable description below the builder
showResultCronbooleanfalseDisplay the cron expression below the builder
isUnixbooleanfalseUse Unix format (5 fields) instead of Quartz. Cannot be used with use6FieldQuartz
use6FieldQuartzbooleanfalseUse 6-field Quartz format instead of 7-field. Cannot be used with isUnix
translateFn(key: string) => stringundefinedCustom translation function for i18n support
localestring'en'Locale for cronstrue (human-readable text)
options{ headers: HeaderType[] }All headersCustomize which tabs are available
disabledbooleanfalseDisable the entire component

Format Comparison

FeatureUnix (5 fields)Quartz (6 fields)Quartz (7 fields)
Formatminute hour day month day-of-weeksecond minute hour day month day-of-weeksecond minute hour day month day-of-week year
Example*/5 * * * *0 */5 * * * ?0 0/5 * * * ? *
Day of Week0-6 (Sunday=0)1-7 (Sunday=1) or SUN-SAT1-7 (Sunday=1) or SUN-SAT
Special Chars* , - /* , - / ? L W #* , - / ? L W #
Used ByLinux/Unix cron, most cron implementationsQuartz Scheduler (legacy)Quartz Scheduler, Spring Framework, Java apps

6-Field Quartz Format Support

The component supports both 6-field and 7-field Quartz formats:

  • 6-field format: second minute hour day month day-of-week (e.g., 0 0 12 * * ?)
  • 7-field format: second minute hour day month day-of-week year (e.g., 0 0 12 * * ? *)

Format Behavior:

The use6FieldQuartz prop controls the output format:

// Default: 7-field Quartz format
<Cron
  value="0 0 12 * * ?"  // 6-field input
  onChange={(value) => {
    console.log(value);  // "0 0 12 * * ? *" - converted to 7-field
  }}
  showResultText={true}
  showResultCron={true}
/>

// Explicitly use 6-field Quartz format
<Cron
  value="0 0 12 * * ? *"  // 7-field input
  onChange={(value) => {
    console.log(value);  // "0 0 12 * * ?" - converted to 6-field
  }}
  showResultText={true}
  showResultCron={true}
  use6FieldQuartz={true}  // Enable 6-field format
/>

Rules:

  • use6FieldQuartz={false} (default): Always outputs 7-field format, even if 6-field input is provided
  • use6FieldQuartz={true}: Always outputs 6-field format, even if 7-field input is provided
  • Cannot use both isUnix={true} and use6FieldQuartz={true} together - this will throw an error
  • Internally, the component always works with 7-field format for processing

🔧 Advanced Usage

Format Conversion

import { 
  unixToQuartz, 
  quartzToUnix, 
  detectCronFormat 
} from 'react-cron-generator';

// Convert Unix to Quartz
const quartzCron = unixToQuartz('*/5 * * * *');
console.log(quartzCron); // '0 */5 * * * ? *'

// Convert Quartz to Unix
const unixCron = quartzToUnix('0 0/5 * * * ? *');
console.log(unixCron); // '*/5 * * * *'

// Auto-detect format
const format = detectCronFormat('*/5 * * * *');
console.log(format); // 'unix'

Validation

import { validateCron } from 'react-cron-generator';

// Validate any format (auto-detects Unix or Quartz)
const result = validateCron('*/5 * * * *');
console.log(result);
// { isValid: true, format: 'unix' }

// Check validation result
if (result.isValid) {
  console.log('Valid cron expression!');
} else {
  console.error('Invalid:', result.error);
}

Custom Tabs

import Cron, { HEADER } from 'react-cron-generator';

const options = {
  headers: [
    HEADER.MINUTES,
    HEADER.HOURLY,
    HEADER.DAILY,
    HEADER.WEEKLY,
    HEADER.MONTHLY,
    HEADER.CUSTOM
  ]
};

<Cron options={options} {...otherProps} />

Internationalization

import Cron from 'react-cron-generator';

const translations = {
  'Every': 'Cada',
  'minute(s)': 'minuto(s)',
  // ... more translations
};

function translateFn(key) {
  return translations[key] || key;
}

<Cron
  translateFn={translateFn}
  locale="es"  // For cronstrue
  {...otherProps}
/>

🎨 Styling

The component comes with default styles. Import the CSS file:

import 'react-cron-generator/build/cron-builder.css';

You can override styles by targeting the CSS classes:

.cron_builder {
  /* Your custom styles */
}

.cron_builder .nav-link {
  /* Customize tabs */
}

.cron_builder_bordering {
  /* Customize content area */
}

📚 API Reference

Exported Components

  • Cron - Main cron builder component (default export)

Exported Utilities

  • unixToQuartz(cron: string): string - Convert Unix to Quartz format
  • quartzToUnix(cron: string): string - Convert Quartz to Unix format
  • detectCronFormat(cron: string): 'unix' | 'quartz' - Detect cron format
  • validateCron(cron: string): ValidationResult - Validate any cron format (auto-detects Unix or Quartz)
  • HEADER - Constants for tab headers
  • cronstrue - Human-readable cron descriptions (from cronstrue/i18n)

Exported Types

  • CronProps - Props for Cron component
  • CronFormat - 'unix' | 'quartz'
  • CronValidationResult - Validation result interface
  • TranslateFn - Translation function type
  • And many more...

🎯 Examples

Example 1: Every 5 Minutes

Unix: */5 * * * *
Quartz: 0 0/5 * * * ? *
Human: "Every 5 minutes"

Example 2: Every Day at 2:30 PM

Unix: 30 14 * * *
Quartz: 0 30 14 * * ? *
Human: "At 02:30 PM"

Example 3: Every Monday at 9:00 AM

Unix: 0 9 * * 1
Quartz: 0 0 9 ? * MON *
Human: "At 09:00 AM, only on Monday"

Example 4: First Day of Every Month

Unix: 0 0 1 * *
Quartz: 0 0 0 1 * ? *
Human: "At 12:00 AM, on day 1 of the month"

🔍 Browser Support

  • Chrome (latest)
  • Firefox (latest)
  • Safari (latest)
  • Edge (latest)
  • Mobile browsers

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  • Fork the repository
  • Create your feature branch (git checkout -b feature/AmazingFeature)
  • Commit your changes (git commit -m 'Add some AmazingFeature')
  • Push to the branch (git push origin feature/AmazingFeature)
  • Open a Pull Request

📝 License

This project is licensed under the ISC License - see the LICENSE file for details.

🙏 Acknowledgments

👨‍💻 Author

Sojin Antony

🌟 Show Your Support

Give a ⭐️ if this project helped you!

📊 Stats

npm GitHub stars GitHub issues

Made with ❤️ by Sojin Antony

Keywords

react

FAQs

Package last updated on 10 Apr 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts