Skip to Content
Kenat is a work in progress · contributions welcome on GitHub

The Ethiopian calendar, computed for your code.

Date conversion, holidays, Bahire Hasab, Ge'ez numerals and headless calendar UI. One engine, published for JavaScript, Python, Dart, PHP and the command line.

npm install kenat kenat-ui
TodayLive
Computed in your browser by kenat

Try the engine

Change a date, step through a month, pick a year. Every value on the left is computed in your browser by the same calls shown on the right.

Date conversion

Ethiopian → Gregorian

Gregorian 2026/7/2

Gregorian → Ethiopian

Ethiopian 2018/10/25

example.js
import { toEC, toGC } from 'kenat';

// 1. Convert Gregorian to Ethiopian
const ecDate = toEC(2026, 7, 2);
// Returns: { year: 2018, month: 10, day: 25 }

// 2. Convert Ethiopian to Gregorian
const gcDate = toGC(2018, 10, 25);
// Returns: { year: 2026, month: 7, day: 2 }
npm install kenat

What the engine knows

kenat has no dependencies. It parses, converts, counts and formats Ethiopian dates the way the calendar itself does.

  • Date conversion

    Convert between Ethiopian and Gregorian dates in both directions, including Pagume and leap years.

    toEC() · toGC()
  • Calendar grids

    Generate a month as rows of days with weekday headers, Ge'ez numerals, Gregorian twins and holidays attached.

    new MonthGrid()
  • Date arithmetic

    Add or subtract days, months and years, compare dates and measure the distance between them on the Ethiopian calendar.

    addDays() · diffInDays()
  • Ge'ez numerals

    Write any number in Ge'ez script and read it back, so dates look the way Ethiopian readers expect.

    toGeez() · toArabic()
  • Bahire Hasab

    Compute the movable fasts and feasts of any year — Nineveh, Lent, Fasika — from the traditional reckoning.

    getBahireHasab(year)
  • Holiday system

    Fixed and movable holidays with tags such as PUBLIC and RELIGIOUS, in Amharic or English.

    getHolidaysForYear()

Calendar UI without the styling you'd have to undo.

kenat-ui is headless: React hooks for date pickers, month grids, clocks and converters that manage state and leave every pixel to you — Tailwind, CSS modules or your own design system.

  • useDatePicker()
  • useMonthGrid()
  • useEthiopianClock()
  • useDateConverter()
  • useTimeConverter()
kenat-ui docs
MonthView.jsx
import { useMonthGrid } from 'kenat-ui'

const { grid, controls } = useMonthGrid({
  weekdayLang: 'amharic',
  weekStart: 1,
})

// grid.headers, grid.days — render them
// with your own markup and styles.
controls.goNext()

One engine, six bindings

The same conversion rules and holiday tables, kept in parity across every language Kenat ships for.

Start building with Kenat.

The guide walks through installation, conversion, formatting, holidays and Bahire Hasab, with an API reference for every call.