{"_id":"@burakboduroglu/skadi","_rev":"6-205fbe1895e27e63291f899f8797a408","name":"@burakboduroglu/skadi","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@burakboduroglu/skadi","version":"0.1.0","keywords":["subscriptions","subscription-tracker","pocketbase","self-hosted","selfhosted","glance","dashboard","personal-finance","cashback","no-telemetry"],"author":"Burak Boduroğlu","license":"MIT","_id":"@burakboduroglu/skadi@0.1.0","maintainers":[{"name":"burakboduroglu","email":"burakboduroglu0@gmail.com"}],"homepage":"https://github.com/burakboduroglu/skadi#readme","bugs":{"url":"https://github.com/burakboduroglu/skadi/issues"},"bin":{"skadi":"bin/skadi.js"},"dist":{"shasum":"543a8612ff8b8771d956fbc384d48613ad37ce9c","tarball":"https://registry.npmjs.org/@burakboduroglu/skadi/-/skadi-0.1.0.tgz","fileCount":12,"integrity":"sha512-fiTTCdM0l+Rn9VUmbhHeYoli5CRDhExzfk8Al8Na2nzOSGkIhwn9HDkedTBGRb05Gr2VhNYR6DsacFZqU8+8Fw==","signatures":[{"sig":"MEQCIGHte/tucbNIyYyuPDCaq0Bmne1ia6RUjcT2YzLZiqMVAiBZ3rVDNrLU3eZ4BSLvrcV88K56j4JGySJbPHC4AbBSMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86047},"type":"module","shasum":"543a8612ff8b8771d956fbc384d48613ad37ce9c","engines":{"node":">=18"},"_npmUser":{"name":"burakboduroglu","email":"burakboduroglu0@gmail.com"},"_integrity":"sha512-fiTTCdM0l+Rn9VUmbhHeYoli5CRDhExzfk8Al8Na2nzOSGkIhwn9HDkedTBGRb05Gr2VhNYR6DsacFZqU8+8Fw==","repository":{"url":"git+https://github.com/burakboduroglu/skadi.git","type":"git"},"_npmVersion":"10.8.3","description":"Self-hosted subscription tracking that rides an existing PocketBase instance. Two collections, one summary route, one static page. No database of its own, no container, no telemetry.","directories":{},"_nodeVersion":"26.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skadi_0.1.0_1788898716115_0.5090073989661208","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@burakboduroglu/skadi","version":"0.1.1","keywords":["subscriptions","subscription-tracker","pocketbase","self-hosted","selfhosted","glance","dashboard","personal-finance","cashback","no-telemetry"],"author":"Burak Boduroğlu","license":"MIT","_id":"@burakboduroglu/skadi@0.1.1","maintainers":[{"name":"burakboduroglu","email":"burakboduroglu0@gmail.com"}],"homepage":"https://github.com/burakboduroglu/skadi#readme","bugs":{"url":"https://github.com/burakboduroglu/skadi/issues"},"bin":{"skadi":"bin/skadi.js"},"dist":{"shasum":"be727b3289a95f7827c24f9596a3a7435b2c702b","tarball":"https://registry.npmjs.org/@burakboduroglu/skadi/-/skadi-0.1.1.tgz","fileCount":12,"integrity":"sha512-sBwEY6nwD5k1IPoNlRn3hcnAx697JviiNAbwEPmDzGbsQ9rHNVyW7nZH1NnmZNhGM3owOrimD32vmO1tgrWHYw==","signatures":[{"sig":"MEYCIQCF/n+dSTYX4in12Ax/npGFmORWULMWZFfA8BeBkhvyWAIhAIrgrVLbq2MHy7gN9AHRPU9bIcWbT5WyARpHfvomn5fK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87984},"type":"module","shasum":"be727b3289a95f7827c24f9596a3a7435b2c702b","engines":{"node":">=18"},"_npmUser":{"name":"burakboduroglu","email":"burakboduroglu0@gmail.com"},"_integrity":"sha512-sBwEY6nwD5k1IPoNlRn3hcnAx697JviiNAbwEPmDzGbsQ9rHNVyW7nZH1NnmZNhGM3owOrimD32vmO1tgrWHYw==","repository":{"url":"git+https://github.com/burakboduroglu/skadi.git","type":"git"},"_npmVersion":"10.8.3","description":"Self-hosted subscription tracking that rides an existing PocketBase instance. Two collections, one summary route, one static page. No database of its own, no container, no telemetry.","directories":{},"_nodeVersion":"26.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skadi_0.1.1_1788899718057_0.048831810714048185","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@burakboduroglu/skadi","version":"0.1.2","keywords":["subscriptions","subscription-tracker","pocketbase","self-hosted","selfhosted","glance","dashboard","personal-finance","cashback","no-telemetry"],"author":"Burak Boduroğlu","license":"MIT","_id":"@burakboduroglu/skadi@0.1.2","maintainers":[{"name":"burakboduroglu","email":"burakboduroglu0@gmail.com"}],"homepage":"https://github.com/burakboduroglu/skadi#readme","bugs":{"url":"https://github.com/burakboduroglu/skadi/issues"},"bin":{"skadi":"bin/skadi.js"},"dist":{"shasum":"152a23bc3c3e7e12fc332a5830f18e9f01b2ade5","tarball":"https://registry.npmjs.org/@burakboduroglu/skadi/-/skadi-0.1.2.tgz","fileCount":12,"integrity":"sha512-bxZDpF1QA72Zoy/V9sIZkkH5IwsM0WVUqEHyOY27LYr+2cqSj85pRhm9hJ2iuw4kcaO0CwTbL1FVEnJe1rfU9Q==","signatures":[{"sig":"MEUCIQDYEUBI9MFXJUKw5KjyAmt7YyoFHBTaB5uMoiE3UYUGvgIgVWiKEMx9AiNxQXYF4M9yO5hfce76XhyTrSrVfk+mqmM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84117},"type":"module","shasum":"152a23bc3c3e7e12fc332a5830f18e9f01b2ade5","engines":{"node":">=18"},"_npmUser":{"name":"burakboduroglu","email":"burakboduroglu0@gmail.com"},"_integrity":"sha512-bxZDpF1QA72Zoy/V9sIZkkH5IwsM0WVUqEHyOY27LYr+2cqSj85pRhm9hJ2iuw4kcaO0CwTbL1FVEnJe1rfU9Q==","repository":{"url":"git+https://github.com/burakboduroglu/skadi.git","type":"git"},"_npmVersion":"10.8.3","description":"Self-hosted subscription tracking that rides an existing PocketBase instance. Two collections, one summary route, one static page. No database of its own, no container, no telemetry.","directories":{},"_nodeVersion":"26.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skadi_0.1.2_1788900515488_0.5678420723350559","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@burakboduroglu/skadi","version":"0.1.3","keywords":["subscriptions","subscription-tracker","pocketbase","self-hosted","selfhosted","glance","dashboard","personal-finance","cashback","no-telemetry"],"author":{"name":"Burak Boduroğlu"},"license":"MIT","_id":"@burakboduroglu/skadi@0.1.3","maintainers":[{"name":"burakboduroglu","email":"burakboduroglu0@gmail.com"}],"homepage":"https://github.com/burakboduroglu/skadi#readme","bugs":{"url":"https://github.com/burakboduroglu/skadi/issues"},"bin":{"skadi":"bin/skadi.js"},"dist":{"shasum":"450ea000558b0f6acd98337662c124e803d7ed28","tarball":"https://registry.npmjs.org/@burakboduroglu/skadi/-/skadi-0.1.3.tgz","fileCount":15,"integrity":"sha512-fOmP9jPIJ0DU6IZyhUDl7EtqrfMnB/m4QslLo3LIuRUwoTDO0Ml9R4TMHDtV/QS/yMB2D0guFNxV48hWO7wcMw==","signatures":[{"sig":"MEUCIQCL27BcbW52F5sSv9SCxF/euvqRpzPnGpZT2ZY4lfBFlAIgarsS3dl0M+KXw3oTWN1Q4zY8fiX3EjtEUJpjiIqppYU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97646},"type":"module","engines":{"node":">=18"},"gitHead":"deae4364adf4ae86c43baaf0cdc82cd8280e64ab","scripts":{"dev":"bun --cwd web dev","build":"bun --cwd web build","prepack":"bun --cwd web build","preview":"bun --cwd web preview"},"_npmUser":{"name":"burakboduroglu","email":"burakboduroglu0@gmail.com"},"repository":{"url":"git+https://github.com/burakboduroglu/skadi.git","type":"git"},"_npmVersion":"11.19.0","description":"<div align=\"center\">","directories":{},"_nodeVersion":"26.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skadi_0.1.3_1788972339918_0.12506894823397152","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@burakboduroglu/skadi","version":"0.1.4","keywords":["subscriptions","subscription-tracker","pocketbase","self-hosted","selfhosted","glance","dashboard","personal-finance","cashback","no-telemetry"],"author":{"name":"Burak Boduroğlu"},"license":"MIT","_id":"@burakboduroglu/skadi@0.1.4","maintainers":[{"name":"burakboduroglu","email":"burakboduroglu0@gmail.com"}],"homepage":"https://github.com/burakboduroglu/skadi#readme","bugs":{"url":"https://github.com/burakboduroglu/skadi/issues"},"bin":{"skadi":"bin/skadi.js"},"dist":{"shasum":"3ac4121c8452513d1498b4036cb289b6b4ed1129","tarball":"https://registry.npmjs.org/@burakboduroglu/skadi/-/skadi-0.1.4.tgz","fileCount":15,"integrity":"sha512-bWRSTHTpOnNsEtmxBZ4CD4TqDPFBy6btwVtuK0cBW6BDJ2UjjGMGUrUpSL07dczehQ/TQBw3n3v1hhsLhjpLxg==","signatures":[{"sig":"MEUCIQC6ZwI1RErTHInrnBTKpKW4QvagpUzi7zfoHCh3gyXTCwIgWIlTTQDbXYKRWSd2lMs+I1Rg0kJFEfCgVgQHWIgXQgI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@burakboduroglu%2fskadi@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":97632},"type":"module","engines":{"node":">=18"},"gitHead":"65026a58e2253c8a0d78e4b578a68912ddca184c","scripts":{"dev":"bun --cwd web dev","build":"bun --cwd web build","prepack":"bun --cwd web build","preview":"bun --cwd web preview"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ee55ce0-785a-4034-a807-803894f7840f"}},"repository":{"url":"git+https://github.com/burakboduroglu/skadi.git","type":"git"},"_npmVersion":"12.0.2","description":"<div align=\"center\">","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skadi_0.1.4_1788976227460_0.2913339896987084","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"_id":"@burakboduroglu/skadi@0.1.5","bin":{"skadi":"bin/skadi.js"},"bugs":{"url":"https://github.com/burakboduroglu/skadi/issues"},"dist":{"shasum":"063ef9a559313e1ca36ab304b685a266049c3ba6","tarball":"https://registry.npmjs.org/@burakboduroglu/skadi/-/skadi-0.1.5.tgz","fileCount":15,"integrity":"sha512-7VWCQpf8m7jQVN2wb2MNOmXNYNnYGXSjnxzHrWmZx/hiTFtXMl5t7ETW/3Ru0g+RnRytc52SOsB7BSOBeAKNLw==","signatures":[{"sig":"MEQCIC2IuBMhl1/KI9EJF5YczUWaKfulM1pPbZanNlH9toZ/AiAr9AUqk8rlg2+58WN0cJmaV1ZyaDwLxUFQfI3U9BCdWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGsGRTheqhMFykG96a1xaWf7dDGwKeozq9lEVr/ENydTAiEAqs7RNoRFaRdWlmvg+P/CBX6wXbhsX9F0l4ZGQw4BgWM="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@burakboduroglu%2fskadi@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":98828},"name":"@burakboduroglu/skadi","type":"module","author":{"name":"Burak Boduroğlu"},"engines":{"node":">=18"},"gitHead":"adcfe2ef2a0a9e1fa72892ce738e6f44fc666f0a","license":"MIT","scripts":{"dev":"bun --cwd web dev","test":"cd web && bun test","build":"bun --cwd web build","prepack":"bun --cwd web build","preview":"bun --cwd web preview"},"version":"0.1.5","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3ee55ce0-785a-4034-a807-803894f7840f"}},"homepage":"https://github.com/burakboduroglu/skadi#readme","keywords":["subscriptions","subscription-tracker","pocketbase","self-hosted","selfhosted","glance","dashboard","personal-finance","cashback","no-telemetry"],"repository":{"url":"git+https://github.com/burakboduroglu/skadi.git","type":"git"},"_npmVersion":"12.1.0","description":"<div align=\"center\">","directories":{},"maintainers":[{"name":"burakboduroglu","email":"burakboduroglu0@gmail.com"}],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/skadi_0.1.5_1790534413769_0.36077860453302457"}}},"time":{"created":"2026-09-08T20:18:35.912Z","modified":"2026-09-27T18:40:14.189Z","0.1.0":"2026-09-08T20:18:36.283Z","0.1.1":"2026-09-08T20:35:18.218Z","0.1.2":"2026-09-08T20:48:35.618Z","0.1.3":"2026-09-09T16:45:40.075Z","0.1.4":"2026-09-09T17:50:27.621Z","0.1.5":"2026-09-27T18:40:13.861Z"},"bugs":{"url":"https://github.com/burakboduroglu/skadi/issues"},"author":{"name":"Burak Boduroğlu"},"license":"MIT","homepage":"https://github.com/burakboduroglu/skadi#readme","keywords":["subscriptions","subscription-tracker","pocketbase","self-hosted","selfhosted","glance","dashboard","personal-finance","cashback","no-telemetry"],"repository":{"url":"git+https://github.com/burakboduroglu/skadi.git","type":"git"},"description":"<div align=\"center\">","maintainers":[{"name":"burakboduroglu","email":"burakboduroglu0@gmail.com"}],"readme":"<div align=\"center\">\n\n<img src=\"https://raw.githubusercontent.com/burakboduroglu/skadi/main/assets/logo.png\" alt=\"Skadi logo\" width=\"112\">\n\n# Skadi\n\n**Subscription tracking that rides a PocketBase instance you already run.**\n\n[![npm](https://img.shields.io/npm/v/@burakboduroglu/skadi?style=flat-square&color=000)](https://www.npmjs.com/package/@burakboduroglu/skadi)\n[![License](https://img.shields.io/npm/l/@burakboduroglu/skadi?style=flat-square&color=000)](LICENSE)\n![Self-hosted](https://img.shields.io/badge/self--hosted-only-000?style=flat-square)\n![No telemetry](https://img.shields.io/badge/telemetry-none-000?style=flat-square)\n![No Docker](https://img.shields.io/badge/Docker-not_required-000?style=flat-square&logo=docker)\n![Bun](https://img.shields.io/badge/Bun-runtime-000?style=flat-square&logo=bun)\n\n</div>\n\n---\n\n<div align=\"center\">\n\n<img src=\"https://raw.githubusercontent.com/burakboduroglu/skadi/main/assets/screenshot-list.png\" alt=\"The list: totals, live rates, and every subscription with its own logo\" width=\"620\">\n\n<img src=\"https://raw.githubusercontent.com/burakboduroglu/skadi/main/assets/screenshot-dialog.png\" alt=\"Adding a subscription: paste a link, the name and logo resolve server-side\" width=\"305\">\n<img src=\"https://raw.githubusercontent.com/burakboduroglu/skadi/main/assets/screenshot-menu.png\" alt=\"Language and display currency, both stored per browser\" width=\"305\">\n\n</div>\n\nSkadi is not an application you deploy. It is three migrations, two hook files\nand one static page, copied into a PocketBase directory you already have. The\ndatabase, auth, HTTP server, admin UI and backups are already running — a\ndedicated subscription tracker would duplicate all of them.\n\n## What it is\n\nAdd a subscription by pasting a **link**. Google Play, a Wikipedia article, or a\ndirect image URL: the server resolves it to a name and a logo, so a full entry is\nusually a link, an amount and a date.\n\nCharge dates **advance on their own**, clamped to the day a subscription actually\nbills on, so one charged on the 31st does not sink to the 28th after a February.\nAmounts can be **TRY, USD, EUR or GBP**, with totals quoted in whichever you pick\nand rates cached six hours. A stale rate is labelled as stale, never passed off\nas today's, and anything unconvertible is counted rather than silently zeroed.\n\n**Cashback is one number per subscription**, in its own currency. No campaign\nwindows, no expiry alerting — when a deal changes you edit the number.\n\n## Highlights\n\n|     | Feature | How it works |\n| --- | ------- | ------------ |\n| 🧩 | **No infrastructure of its own** | Files copied into an existing PocketBase. No container, no second database, no extra port. |\n| 🔗 | **Paste a link, get a name and a logo** | Play `og:image`/`og:title`, Wikimedia `File:` via the MediaWiki API, or any direct image by content type. |\n| 📅 | **Dates that move themselves** | Passed charges roll forward by cycle, clamped to an anchor day. |\n| 💱 | **Four currencies, one honest total** | Stale rates labelled, unconvertible rows counted, never zeroed. |\n| 🔒 | **Superuser-only by default** | Null API rules: anonymous and ordinary tokens get 403 before any proxy. |\n| 🌍 | **Turkish and English** | Two dictionaries and a lookup. No i18n runtime. |\n| 📵 | **No telemetry** | Two outbound requests exist: the FX quote, and the link you asked it to resolve. |\n| 📊 | **Dashboard optional** | A Glance widget is included; plain JSON for anything else; nothing at all is fine. |\n\n## Footprint\n\nMeasured on a 2 vCPU / 3.7 GiB Debian box running PocketBase 0.40:\n\n| | |\n| --- | --- |\n| Installed files | **96 KB** — migrations 12 KB, hooks 24 KB, page 60 KB |\n| Database growth | **~45 KB** for the three collections plus a handful of subscriptions |\n| Resident memory | **~22 MB**, and that is the whole PocketBase process |\n| Extra processes | none |\n| Extra ports | none |\n\nThe memory figure is PocketBase serving Skadi and nothing else, so it is an\nupper bound rather than Skadi's own cost — the hooks run inside PocketBase's own\nJS runtime and add no process of their own. If PocketBase is already running,\nthe marginal cost of Skadi is closer to the file sizes than to the memory line.\n\n## Install\n\n```bash\nbunx @burakboduroglu/skadi install /path/to/pocketbase\n```\n\nWrites `pb_migrations/`, `pb_hooks/` and `pb_public/subs/`. It never touches\n`pb_data/`, and refuses a directory holding neither a `pocketbase` binary nor a\n`pb_data`.\n\nThen restart PocketBase so the migrations run. **If it was already running, stop\nit before copying and start it afterwards** — PocketBase watches `pb_hooks` and\nrestarts itself when those change, which races a service manager doing the same.\n\nThe page is served at `/subs/`. Two config snippets are yours to place:\n\n```bash\nskadi caddy                                    # required\nskadi glance --url https://your.host/subs/     # optional, --lang en|tr\n```\n\n## How it works\n\n```\nbrowser ──▶ /subs/                            static page, superuser login\n        └─▶ /api/collections/subscriptions    superuser-only CRUD\n        └─▶ /api/subs/rates                   superuser-only, FX for the totals\n\ndashboard ─▶ 127.0.0.1:8090/api/subs/summary  no auth, unreachable from outside\n```\n\n`subscriptions` holds the contracts, `cards` the payment methods you pick from,\nand `fx_rates` a single cached row updated in place.\n\n## Security\n\nTwo layers, either sufficient alone:\n\n1. **PocketBase rules** — both collections are superuser-only, enforced with no\n   proxy involved.\n2. **Whatever you put in front** — `/subs/` is a login form anyone can reach\n   until you gate it. Skadi does not ship an auth layer.\n\n`GET /api/subs/summary` takes no token, because a dashboard reads it over\nloopback rather than through your proxy. The line `skadi caddy` prints is what\nremoves the only path in from outside. **Drop it and the endpoint is public.**\n\nThe page authenticates as a superuser and keeps that token in `localStorage` — a\ndeliberate trade for a single-operator tool, and why every rendered field is\nescaped. Details in [SECURITY.md](SECURITY.md).\n\n## What it deliberately does not do\n\nNo reminders. No campaign expiry tracking. No scheduled job — rates refresh when\nsomething asks. No multi-user. No import.\n\n## Stack\n\nPocketBase for storage, auth, HTTP and backups. JavaScript in PocketBase's hook\nruntime, and a SolidJS + Vite UI compiled to static files under\n`pb_public/subs/` — no CSS library, no UI server. Bun as the package manager.\n\nThe name is Skaði, the Norse goddess of winter and the mountains, who chose a\nhusband by looking only at the feet. Apt for something that makes you look at\nwhat you are actually paying.\n\n## Develop the UI\n\nSource lives in `web/` (SolidJS + Vite, visual language shared with Nors).\nThe shipped page is built output — `pb_public/subs/` is not committed; `prepack`\nbuilds it into the npm tarball, and CI builds it and runs the tests on every push.\n\n```bash\nbun --cwd web install\nbun run build      # root script — emits pb_public/subs/\nbun run dev        # local UI; /api proxied to :8090 (SKADI_PB_PORT to move it)\nbun run test       # unit tests (bun test)\n```\n\nAgainst a tunneled production box: `ssh -N -L 8090:127.0.0.1:8090 hetzner`,\nthen `bun run dev` — the browser stays on localhost, so neither CORS nor\nCloudflare Access is in the path.\n\n## Contributing\n\nBug reports, logo-resolution failures and translation fixes are welcome; the\nthings above are not. See [CONTRIBUTING.md](CONTRIBUTING.md) and\n[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). Security problems go through\n[a private advisory](https://github.com/burakboduroglu/skadi/security/advisories/new),\nnever a public issue.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","readmeFilename":"README.md"}