Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
openaec-foundation avatar

Frappe Core Utils

  • 1 installs
  • 159 repo stars
  • Updated July 8, 2026
  • openaec-foundation/erpnext_anthropic_claude_development_skill_package

Covers Frappe utility functions in frappe.utils for date/time, number and money formatting, string operations, validation, and file paths.

About

A reference skill for Frappe utility functions covering date, number, string, and validation helpers in frappe.utils. A developer uses it to reuse built-in helpers instead of stdlib code that breaks timezone or locale handling.

  • frappe.utils for date/time, number/money, string, and validation
  • Avoids stdlib alternatives that break timezone or locale handling

Frappe Core Utils by the numbers

  • 1 all-time installs (skills.sh)
  • Ranked #3,836 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/openaec-foundation/erpnext_anthropic_claude_development_skill_package --skill frappe-core-utils

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1
repo stars159
Last updatedJuly 8, 2026
Repositoryopenaec-foundation/erpnext_anthropic_claude_development_skill_package

What it does

Covers Frappe utility functions in frappe.utils for date/time, number and money formatting, string operations, validation, and file paths.

Files

SKILL.mdMarkdownGitHub ↗

Frappe Utility Functions

Quick Reference: Python

NeedFunctionReturns
Current datenowdate() / today()datetime.date
Current datetimenow_datetime()datetime.datetime
Parse date stringgetdate(str)datetime.date
Parse datetime stringget_datetime(str)datetime.datetime
Add daysadd_days(date, n)datetime.date
Add monthsadd_months(date, n)datetime.date
Date differencedate_diff(end, start)int (days)
Format for userformat_date(dt)str (user locale)
Relative timepretty_date(dt)str ("2 hours ago")
Safe floatflt(val, precision)float
Safe intcint(val)int
Safe stringcstr(val)str
Safe boolsbool(val)bool
Safe divisionsafe_div(a, b)float [v15+]
Money formatfmt_money(amt, currency)str
Money in wordsmoney_in_words(amt, cur)str
Strip HTMLstrip_html(text)str
List to prosecomma_and(items)str ("a, b, and c")
Validate emailvalidate_email_address(e)str or ""
Validate URLvalidate_url(url)bool
Parse JSONparse_json(s)Any
Files pathget_files_path(is_private)str
Site pathget_site_path(*parts)str
Unique listunique(seq)list
Hashgenerate_hash(s, length)str
ALL imports: from frappe.utils import nowdate, flt, ... in controllers/whitelisted methods.
In Server Scripts: Use frappe.utils.nowdate() directly — NO import statements allowed.

---

Decision Tree: "Which function do I use?"

Need a date/time value?
├─ Current date → nowdate() or today()
├─ Current datetime → now_datetime()
├─ Parse a string → getdate() or get_datetime()
├─ Add/subtract time → add_days(), add_months(), add_to_date()
├─ Difference → date_diff() (days), month_diff(), time_diff_in_seconds()
├─ Period boundary → get_first_day(), get_last_day(), get_quarter_start()
└─ Display to user → format_date(), format_datetime(), pretty_date()

Need a number?
├─ Convert safely → flt(), cint(), cstr(), sbool()
├─ Round → rounded() (banker's rounding)
├─ Safe divide → safe_div(a, b, default=0) [v15+]
├─ Format money → fmt_money(amount, currency)
└─ Money to words → money_in_words(amount, currency)

Need string processing?
├─ HTML → strip_html(), escape_html(), is_html()
├─ Join list → comma_and(), comma_or(), comma_sep()
├─ Markdown ↔ HTML → to_markdown(), md_to_html()
└─ Mask sensitive → mask_string(input, show_first=4) [v16+]

Need validation?
├─ Email → validate_email_address(email, throw=False)
├─ URL → validate_url(url, valid_schemes=["https"])
├─ Phone → validate_phone_number(phone, throw=False)
├─ JSON → validate_json_string(s)
└─ IBAN → validate_iban(iban) [v16+]

Need file/path?
├─ Public files → get_files_path()
├─ Private files → get_files_path(is_private=True)
├─ Site directory → get_site_path("private", "backups")
├─ Bench root → get_bench_path()
└─ File size → get_file_size(path, format=True)

---

Critical Anti-Patterns

NEVER use Python stdlib when frappe.utils exists

NEVER (stdlib)ALWAYS (frappe.utils)Why
datetime.datetime.now()now_datetime()Ignores system timezone
datetime.date.today()nowdate()Ignores system timezone
float(val)flt(val, precision)Crashes on None/empty
int(val)cint(val)Crashes on None/empty
round(val, 2)rounded(val, 2)Inconsistent rounding
val1 / val2safe_div(val1, val2)ZeroDivisionError [v15+]
json.loads(s)parse_json(s)Crashes on None/empty
json.dumps(obj)frappe.as_json(obj)Inconsistent serialization
"{:,.2f}".format(a)fmt_money(a, currency)Ignores locale/currency
os.path.join(...)get_site_path(...)Breaks multi-tenancy
", ".join(items)comma_and(items)No localized "and"
dt.strftime(fmt)format_date(dt)Ignores user preference
re.sub(r'<.*?>', '', h)strip_html(h)Misses edge cases

Server Script Sandbox

# ❌ NEVER in Server Scripts
from frappe.utils import nowdate, flt
import json

# ✅ ALWAYS in Server Scripts (no imports allowed)
today = frappe.utils.nowdate()
amount = frappe.utils.flt(doc.amount, 2)
data = frappe.parse_json(doc.json_field)

---

JavaScript Quick Reference

NeedFunction
Escape HTMLfrappe.utils.escape_html(txt)
HTML to textfrappe.utils.html2text(html)
Check if HTMLfrappe.utils.is_html(txt)
Parse JSONfrappe.utils.parse_json(str)
Validate URLfrappe.utils.is_url(txt)
Title casefrappe.utils.to_title_case(str)
Join with "and"frappe.utils.comma_and(list)
Unique arrayfrappe.utils.unique(list)
Copy clipboardfrappe.utils.copy_to_clipboard(txt)
Scroll to elementfrappe.utils.scroll_to(el)
Is mobilefrappe.utils.is_mobile()
Throttlefrappe.utils.throttle(fn, delay)
Debouncefrappe.utils.debounce(fn, delay)
Format valuefrappe.format(value, df, options, doc)
Duration displayfrappe.utils.get_formatted_duration(secs)

---

Version Differences

Functionv14v15v16
safe_div()--AddedYes
duration_to_seconds()--AddedYes
guess_date_format()--AddedYes
validate_duration_format()--AddedYes
mask_string()----Added
validate_iban()----Added
validate_name()----Added
safe_json_loads()----Added
groupby_metric()----Added
Core functionsYesYesYes

---

Reference Files

  • Date/Time Functions — Complete date/time API with signatures
  • Number & Money Functions — flt, fmt_money, rounding
  • String & Validation Functions — HTML, join, validate
  • JavaScript Utilities — Client-side frappe.utils.*
  • Anti-patterns — stdlib vs frappe.utils comparison

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.