{"_id":"@didrod2539/calforge","_rev":"2-3c81a5167d1f6ab444bee49b41c419b6","name":"@didrod2539/calforge","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@didrod2539/calforge","version":"0.1.0","keywords":["ics","icalendar","ical","add-to-calendar","calendar","rfc5545","google-calendar","outlook","event","vevent","calendar-link","zero-dependency"],"author":{"url":"https://github.com/didrod205","name":"didrod205"},"license":"MIT","_id":"@didrod2539/calforge@0.1.0","maintainers":[{"name":"didrod2539","email":"ykc205@naver.com"}],"homepage":"https://didrod205.github.io/calforge/","bugs":{"url":"https://github.com/didrod205/calforge/issues"},"dist":{"shasum":"3ca37951e18f4eeb07a2fb40ab306590b9126e90","tarball":"https://registry.npmjs.org/@didrod2539/calforge/-/calforge-0.1.0.tgz","fileCount":9,"integrity":"sha512-d+p8DhsR+BFjH3o///o6guChTabkYca4Xgc1SDxn+xlG3X55P/ea9mMFSu5g7DHORLPi1xK/99eZmNMl9OZNEQ==","signatures":[{"sig":"MEQCIFIW93OIrYWrBJSFJwk+t2rWL1oyefd3MCJq75vaLnDLAiADkX3qBJ57HhrTm8Z97pp4qS05RKwc9+eM0gdLBLWR/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66028},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"fc70ceb866f54a019b1f1e24239a2fafbcb0d32c","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"tsup","build:web":"vite build","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"didrod2539","email":"ykc205@naver.com"},"repository":{"url":"git+https://github.com/didrod205/calforge.git","type":"git"},"_npmVersion":"11.12.1","description":"Generate valid .ics calendar files and 'Add to Calendar' links (Google, Outlook, Yahoo, Apple) entirely locally — no third-party service, no tracking, no API key. RFC 5545 correct, zero dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vite":"^6.0.0","vitest":"^2.1.8","typescript":"^5.7.2"},"_npmOperationalInternal":{"tmp":"tmp/calforge_0.1.0_1780110899762_0.33678391842949673","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@didrod2539/calforge","version":"0.2.0","publishConfig":{"access":"public"},"description":"Generate valid .ics calendar files and 'Add to Calendar' links (Google, Outlook, Yahoo, Apple) entirely locally — no third-party service, no tracking, no API key. RFC 5545 correct, zero dependencies.","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"sideEffects":false,"engines":{"node":">=18"},"scripts":{"build":"tsup","build:web":"vite build","dev":"vite","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","lint":"tsc --noEmit","prepublishOnly":"npm run build"},"keywords":["ics","icalendar","ical","add-to-calendar","calendar","rfc5545","google-calendar","outlook","event","vevent","calendar-link","zero-dependency","cli"],"author":{"name":"didrod205","url":"https://github.com/didrod205"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/didrod205/calforge.git"},"bugs":{"url":"https://github.com/didrod205/calforge/issues"},"homepage":"https://didrod205.github.io/calforge/","devDependencies":{"@types/node":"^22.19.19","tsup":"^8.3.5","typescript":"^5.7.2","vite":"^6.0.0","vitest":"^2.1.8"},"bin":{"calforge":"dist/cli.js"},"gitHead":"a5b2cb0265bc8da1c3f590c122573362db98ccb7","_id":"@didrod2539/calforge@0.2.0","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-ICCzj7Uf02FmiaqYmSYTZRwcZ4I4zs/zbK59XR9rWpZ9hMAfxWzSwmpq8IQgxgaiXSXdf0K8h9vUuCBlt5AMwA==","shasum":"56eb9a88c620670108daf3f1ff0866adb6cd9ad7","tarball":"https://registry.npmjs.org/@didrod2539/calforge/-/calforge-0.2.0.tgz","fileCount":15,"unpackedSize":112762,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDpJ+rVHOvqNxevF4YUCRD2MRiLKCVcbUPKWQl1XfthbQIgMYHC5KRdsWN9cz7qRFKdI51xUFmirBMs6k2ngtjcoNk="}]},"_npmUser":{"name":"didrod2539","email":"ykc205@naver.com"},"directories":{},"maintainers":[{"name":"didrod2539","email":"ykc205@naver.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/calforge_0.2.0_1780374860826_0.67971487824525"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-30T03:14:59.643Z","modified":"2026-06-02T04:34:21.089Z","0.1.0":"2026-05-30T03:14:59.908Z","0.2.0":"2026-06-02T04:34:20.981Z"},"bugs":{"url":"https://github.com/didrod205/calforge/issues"},"author":{"name":"didrod205","url":"https://github.com/didrod205"},"license":"MIT","homepage":"https://didrod205.github.io/calforge/","keywords":["ics","icalendar","ical","add-to-calendar","calendar","rfc5545","google-calendar","outlook","event","vevent","calendar-link","zero-dependency","cli"],"repository":{"type":"git","url":"git+https://github.com/didrod205/calforge.git"},"description":"Generate valid .ics calendar files and 'Add to Calendar' links (Google, Outlook, Yahoo, Apple) entirely locally — no third-party service, no tracking, no API key. RFC 5545 correct, zero dependencies.","maintainers":[{"name":"didrod2539","email":"ykc205@naver.com"}],"readme":"<div align=\"center\">\n\n# 📅 calforge\n\n### Make a real \"Add to Calendar\" link & `.ics` file — locally, in milliseconds.\n\n[![npm version](https://img.shields.io/npm/v/@didrod2539/calforge.svg?color=success)](https://www.npmjs.com/package/@didrod2539/calforge)\n[![bundle size](https://img.shields.io/bundlephobia/minzip/@didrod2539/calforge?label=gzip)](https://bundlephobia.com/package/@didrod2539/calforge)\n[![CI](https://github.com/didrod205/calforge/actions/workflows/ci.yml/badge.svg)](https://github.com/didrod205/calforge/actions/workflows/ci.yml)\n[![types](https://img.shields.io/npm/types/@didrod2539/calforge.svg)](https://www.npmjs.com/package/@didrod2539/calforge)\n[![license](https://img.shields.io/npm/l/@didrod2539/calforge.svg)](./LICENSE)\n\n**[🌐 Try the free web app →](https://didrod205.github.io/calforge/)** &nbsp;·&nbsp; fill in an event, get an `.ics` + provider links. No sign-up, nothing tracked.\n\n</div>\n\n---\n\nThat \"Add to Calendar\" button in marketing emails and event pages? It's almost\nalways powered by a **paid, tracking third-party service** (AddEvent, AddToCalendar,\n…). And rolling your own is deceptively hard: the `.ics` format (RFC 5545) has\nstrict rules — `CRLF` line endings, **75-octet line folding**, escaping `,`, `;`\nand `\\`, exact UTC timestamps, `UID`, `DTSTAMP` — and one mistake makes Apple\nCalendar or Outlook silently refuse the file.\n\n**calforge** generates a spec-correct `.ics` **and** the deep-links for Google,\nOutlook and Yahoo from one event object — with **zero dependencies**, **no\nservice**, **no tracking**, running entirely **in your browser or any JS\nruntime**.\n\n> 📸 _Screenshot / demo GIF:_ `./web/screenshot.png` — record the [live app](https://didrod205.github.io/calforge/) filling an event and clicking each calendar button.\n\n## Why it exists\n\n- **AI can't do this reliably.** RFC 5545's folding/escaping/timestamp rules are\n  exact and unforgiving — a chatbot will happily produce an `.ics` that won't\n  import. A small, tested, deterministic library gets it right every time.\n- **No third party.** \"Add to Calendar\" widgets phone home and track opens.\n  calforge runs on your machine; the only thing that leaves is the link *you*\n  share.\n- **One event in, everything out.** A downloadable `.ics` (Apple Calendar,\n  Outlook desktop) **plus** Google/Outlook/Yahoo deep-links — from a single call.\n\n## Who it's for\n\n**Marketers** (event invites, webinars, launches), **creators** (streams, drops,\nAMAs), **operators** (maintenance windows, on-call), **event organizers**, and\n**developers** who want a tiny library to power an \"Add to Calendar\" button\nwithout a SaaS.\n\n## Install\n\n**No install —** just open the **[web app](https://didrod205.github.io/calforge/)**.\n\n**Command line:**\n\n```bash\nnpx @didrod2539/calforge --title \"Standup\" --start 2026-07-01T09:00:00 --duration 30 > standup.ics\nnpx @didrod2539/calforge -t \"Conf\" --start 2026-09-10 --all-day --location Berlin --links\n```\n\n**Library:**\n\n```bash\nnpm install @didrod2539/calforge\n```\n\n> Published on npm under the `@didrod2539` scope (`@didrod2539/calforge`). The\n> import name matches the package name; everything else is identical.\n\nZero dependencies. ESM + CJS + TypeScript types. Runs in the browser, Node, Deno and Bun.\n\n## CLI\n\n```bash\ncalforge --title <t> --start <when> [options] > event.ics\n```\n\nRequired: `-t/--title`, `--start` (ISO datetime, or `YYYY-MM-DD` for all-day).\nOptions: `--end`, `--duration`, `--all-day`, `--location`, `--description`,\n`--url`, `--rrule`, `--alarm`, `--links` (print provider deep-links), `-o/--out`.\n\n## Usage\n\n### Generate an `.ics`\n\n```ts\nimport { toICS } from \"@didrod2539/calforge\";\n\nconst ics = toICS({\n  title: \"Product launch 🚀\",\n  start: \"2026-06-01T17:00:00Z\",\n  durationMinutes: 60,            // or pass `end`\n  location: \"Zoom\",\n  description: \"Join us for the reveal.\",\n  alarmMinutes: 30,               // reminder\n});\n// → valid VCALENDAR text; write it to a .ics file or offer it as a download.\n```\n\n### Get \"Add to Calendar\" links\n\n```ts\nimport { links } from \"@didrod2539/calforge\";\n\nconst l = links({\n  title: \"Team offsite\",\n  start: \"2026-09-10T09:00:00Z\",\n  end: \"2026-09-10T17:00:00Z\",\n  location: \"Lisbon\",\n});\n\nl.google;       // https://calendar.google.com/calendar/render?...\nl.outlook;      // https://outlook.live.com/calendar/...\nl.yahoo;        // https://calendar.yahoo.com/?...\nl.icsDataUri;   // data: URI for an <a download> (Apple / Outlook desktop)\nl.ics;          // the raw .ics text\n```\n\n### All-day & recurring\n\n```ts\ntoICS({ title: \"Launch day\", start: \"2026-12-25\", allDay: true });\ntoICS({ title: \"Standup\", start: \"2026-06-01T09:00:00Z\", rrule: \"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR\" });\n```\n\n### Browser download\n\n```ts\nconst ics = toICS(event);\nconst url = URL.createObjectURL(new Blob([ics], { type: \"text/calendar\" }));\n// <a href={url} download=\"event.ics\">Add to Calendar</a>\n```\n\n## API\n\n| Function | Description |\n| -------- | ----------- |\n| `toICS(event \\| event[])` | Build a complete `.ics` (VCALENDAR) string. |\n| `links(event)` | `{ ics, icsDataUri, google, outlook, office365, yahoo }`. |\n| `googleUrl` / `outlookUrl` / `office365Url` / `yahooUrl(event)` | Individual provider links. |\n| `icsDataUri(icsText)` | A `data:` URI for downloads. |\n| `normalize(event)` | The resolved event (dates, defaults, derived UID). |\n\n`EventInput`: `title`, `start`, `end?` / `durationMinutes?`, `allDay?`,\n`description?`, `location?`, `url?`, `organizer?`, `geo?`, `alarmMinutes?`,\n`rrule?`, `status?`, `uid?`, `dtstamp?`.\n\n## FAQ\n\n**Does it phone home or track anyone?**\nNo. Generation is 100% local — no server, no telemetry, works offline. Provider\nlinks open the user's own calendar.\n\n**Will the `.ics` actually import into Apple Calendar / Outlook?**\nYes — output follows RFC 5545 (CRLF, 75-octet folding, TEXT escaping, UTC\n`DTSTART`/`DTEND`, `UID`, `DTSTAMP`), the things that make pickier clients accept it.\n\n**What time zone are events in?**\nTimed events are serialized in **UTC** (`…Z`), which every calendar interprets\ncorrectly. All-day events use floating `VALUE=DATE`. (Named-VTIMEZONE output is on\nthe roadmap.)\n\n**Can I put multiple events in one file?**\nYes — pass an array to `toICS`.\n\n**How is this different from the `ics` / `ical-generator` npm packages?**\ncalforge is zero-dependency and browser-first, and it bundles the provider\n**deep-links** + a ready `data:` URI for an \"Add to Calendar\" UI — not just file\ngeneration.\n\n## Contributing\n\nContributions welcome! See [CONTRIBUTING.md](./CONTRIBUTING.md) and the\n[Code of Conduct](./CODE_OF_CONDUCT.md).\n\n```bash\ngit clone https://github.com/didrod205/calforge.git\ncd calforge\nnpm install\nnpm test          # run the suite\nnpm run dev       # run the web app locally\n```\n\n## 💖 Sponsor\n\ncalforge is free, MIT-licensed, and built in spare time. If it saved you a\nSaaS subscription (or a debugging afternoon), please consider supporting it:\n\n- ⭐ **Star this repo** — free, and it genuinely helps others find it.\n- 🍋 **[Sponsor via Lemon Squeezy](https://elab-studio.lemonsqueezy.com/checkout/buy/5d059b89-51d0-456b-b33a-ed56994f7010)** — one-time or recurring support.\n\n**Where your support goes:** named time-zone (VTIMEZONE) output, attendees &\nRSVP, a copy-paste \"Add to Calendar\" web component, recurrence helpers, more\nproviders, keeping the free web app online, and fast issue responses.\n\n## License\n\n[MIT](./LICENSE) © calforge contributors\n","readmeFilename":"README.md"}