{"id":49273803,"url":"https://github.com/soderlind/browser-native","last_synced_at":"2026-04-25T15:04:45.171Z","repository":{"id":342544405,"uuid":"1173677579","full_name":"soderlind/browser-native","owner":"soderlind","description":"Scan your JavaScript project's dependencies and find which ones can be replaced with modern browser/runtime built-in APIs.","archived":false,"fork":false,"pushed_at":"2026-03-13T10:47:51.000Z","size":30,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-07T03:07:12.203Z","etag":null,"topics":["dependency-checker","javascript","native-javascript"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@soderlind/browser-native","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/soderlind.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-05T16:21:41.000Z","updated_at":"2026-03-13T13:31:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/soderlind/browser-native","commit_stats":null,"previous_names":["soderlind/browser-native"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/soderlind/browser-native","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soderlind%2Fbrowser-native","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soderlind%2Fbrowser-native/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soderlind%2Fbrowser-native/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soderlind%2Fbrowser-native/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soderlind","download_url":"https://codeload.github.com/soderlind/browser-native/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soderlind%2Fbrowser-native/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32265999,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T09:15:33.318Z","status":"ssl_error","status_checked_at":"2026-04-25T09:15:31.997Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dependency-checker","javascript","native-javascript"],"created_at":"2026-04-25T15:04:26.459Z","updated_at":"2026-04-25T15:04:45.130Z","avatar_url":"https://github.com/soderlind.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# browser-native\n\nScan your JavaScript project's dependencies and find which ones can be replaced with modern browser/runtime built-in APIs.\n\n**Zero dependencies.** This tool practices what it preaches.\n\n## Install as a Copilot Skill\n\n```bash\nnpx skills add https://github.com/soderlind/browser-native --skill browser-native -g\n```\n\nOnce installed, ask Copilot to scan your project:\n\n\u003e \"Scan my dependencies for browser-native replacements\"\n\n## Install as a CLI\n\n```bash\nnpm install -g @soderlind/browser-native\n```\n\nOr run directly with npx:\n\n```bash\nnpx @soderlind/browser-native\n```\n\n## CLI Usage\n\n```bash\n# Scan current project\nbrowser-native\n\n# Scan a specific directory\nbrowser-native ../my-app\n\n# Output as Markdown with before/after code examples\nbrowser-native --md\n\n# Save markdown report to file\nbrowser-native --md --out report.md\n\n# Output as JSON (pipe to jq, etc.)\nbrowser-native --json\nbrowser-native --json | jq '.summary'\n\n# Show help\nbrowser-native --help\n```\n\n## What it detects\n\nThe tool checks your `dependencies` and `devDependencies` against a database of **[100+ npm packages](skills/browser-native/references/replacements-guide.md)** that have native browser/runtime equivalents:\n\n| Category | Example packages | Native replacement |\n|---|---|---|\n| HTTP | axios, node-fetch, request, unfetch | `fetch()` |\n| URL / Query | query-string, qs, url-parse, url-search-params-polyfill | `URL`, `URLSearchParams` |\n| Object Utils | lodash.clonedeep, object-assign, object.values, object.hasown | `structuredClone()`, `Object.assign()`, `Object.values()`, `Object.hasOwn()` |\n| Array Utils | lodash.flatten, lodash.find, lodash.uniq | `.flat()`, `.find()`, `[...new Set()]` |\n| UUID | uuid, nanoid, shortid | `crypto.randomUUID()` |\n| Date | moment, moment-timezone | `Intl.DateTimeFormat` |\n| Promises | bluebird, q, promise-polyfill, promise.allsettled | `Promise`, `Promise.allSettled()` |\n| Strings | left-pad, repeat-string, string.prototype.matchall | `.padStart()`, `.repeat()`, `.matchAll()` |\n| Type checks | is-number, isarray, is-promise | `typeof`, `Array.isArray()` |\n| Encoding | base-64, js-base64 | `btoa()`, `atob()` |\n| Polyfills | abort-controller, text-encoding, globalthis | Native globals |\n| Observers | intersection-observer, resize-observer-polyfill | Native APIs |\n| Crypto | crypto-js (partial) | `crypto.subtle` |\n| Streams | web-streams-polyfill | `ReadableStream` |\n| FormData | form-data, formdata-polyfill | `FormData` |\n\n## Output formats\n\n### Terminal (default)\n\nColored table with package name, category, replacement API, and confidence level.\n\n### Markdown (`--md`)\n\nDetailed report grouped by category, with:\n- Before/after code examples\n- Browser support tables (Chrome, Firefox, Safari, Edge, Node.js)\n- Confidence indicators and caveats\n\n### JSON (`--json`)\n\nStructured output for piping into other tools:\n\n```json\n{\n  \"summary\": {\n    \"scannedFiles\": 1,\n    \"totalDependencies\": 42,\n    \"replaceableCount\": 8,\n    \"fullReplacements\": 5,\n    \"partialReplacements\": 3\n  },\n  \"replaceable\": [...]\n}\n```\n\n## Confidence levels\n\n- **Full** — drop-in replacement. The native API covers the same functionality.\n- **Partial** — covers most common use cases, but the package may have features the native API doesn't (e.g., `qs` supports nested objects, `URLSearchParams` does not).\n\n## CI usage\n\nThe tool exits with code **1** if replaceable dependencies are found, **0** if none. Use in CI to flag outdated polyfills:\n\n```yaml\n- run: npx @soderlind/browser-native\n  continue-on-error: true\n```\n\n## Monorepo support\n\nAutomatically scans `packages/`, `apps/`, `libs/`, and `modules/` subdirectories for additional `package.json` files.\n\n## Requirements\n\nNode.js 18+\n\n## Project structure\n\n```\nskills/\n  browser-native/\n    SKILL.md                        # Copilot skill definition\n    scripts/\n      cli.js                        # CLI entry point\n      scanner.js                    # Package.json scanner\n      replacements.js               # Database of 100+ replaceable packages\n      formatters/\n        table.js                    # ANSI terminal table\n        markdown.js                 # Markdown report with code examples\n        json.js                     # JSON output\n    references/\n      replacements-guide.md         # Detailed replacement reference\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoderlind%2Fbrowser-native","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoderlind%2Fbrowser-native","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoderlind%2Fbrowser-native/lists"}