{"id":20767779,"url":"https://github.com/dmnsgn/snowdev","last_synced_at":"2025-04-30T11:21:32.688Z","repository":{"id":57364784,"uuid":"347443137","full_name":"dmnsgn/snowdev","owner":"dmnsgn","description":"Zero configuration, unbundled, opinionated development and prototyping server for simple ES modules development: types generation, format and linting, dev server and TypeScript support.","archived":false,"fork":false,"pushed_at":"2025-01-21T21:35:00.000Z","size":2773,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-20T22:32:22.143Z","etag":null,"topics":["boilerplate","browser-sync","dev","dev-server","development","es-modules","eslint","esm","esmodules","jsdoc","prettier","prototyping","scaffold","server","template","types","typescript","unbundled","zero-configuration"],"latest_commit_sha":null,"homepage":"https://dmnsgn.medium.com/javascript-package-development-for-the-es-modules-era-32cba6a5694a","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dmnsgn.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2021-03-13T18:05:15.000Z","updated_at":"2025-01-21T21:35:04.000Z","dependencies_parsed_at":"2024-03-14T23:27:20.213Z","dependency_job_id":"03a596e3-8445-4960-ac62-dea494210b47","html_url":"https://github.com/dmnsgn/snowdev","commit_stats":{"total_commits":124,"total_committers":1,"mean_commits":124.0,"dds":0.0,"last_synced_commit":"cdd0fbf4edbb5ec86347f8e8f8b571fa11bd8384"},"previous_names":[],"tags_count":64,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmnsgn%2Fsnowdev","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmnsgn%2Fsnowdev/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmnsgn%2Fsnowdev/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmnsgn%2Fsnowdev/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dmnsgn","download_url":"https://codeload.github.com/dmnsgn/snowdev/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251688999,"owners_count":21627814,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["boilerplate","browser-sync","dev","dev-server","development","es-modules","eslint","esm","esmodules","jsdoc","prettier","prototyping","scaffold","server","template","types","typescript","unbundled","zero-configuration"],"created_at":"2024-11-17T11:33:22.970Z","updated_at":"2025-04-30T11:21:32.648Z","avatar_url":"https://github.com/dmnsgn.png","language":"JavaScript","readme":"# snowdev\n\n[![npm version](https://img.shields.io/npm/v/snowdev)](https://www.npmjs.com/package/snowdev)\n[![stability-stable](https://img.shields.io/badge/stability-stable-green.svg)](https://www.npmjs.com/package/snowdev)\n[![npm minzipped size](https://img.shields.io/bundlephobia/minzip/snowdev)](https://bundlephobia.com/package/snowdev)\n[![dependencies](https://img.shields.io/librariesio/release/npm/snowdev)](https://github.com/dmnsgn/snowdev/blob/main/package.json)\n[![types](https://img.shields.io/npm/types/snowdev)](https://github.com/microsoft/TypeScript)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-fa6673.svg)](https://conventionalcommits.org)\n[![styled with prettier](https://img.shields.io/badge/styled_with-Prettier-f8bc45.svg?logo=prettier)](https://github.com/prettier/prettier)\n[![linted with eslint](https://img.shields.io/badge/linted_with-ES_Lint-4B32C3.svg?logo=eslint)](https://github.com/eslint/eslint)\n[![license](https://img.shields.io/github/license/dmnsgn/snowdev)](https://github.com/snowdev/snowdev/blob/main/LICENSE)\n\n\u003e Zero configuration, unbundled, opinionated, development and prototyping server for simple ES modules development: types generation, format and linting, dev server and TypeScript support.\n\n[![paypal](https://img.shields.io/badge/donate-paypal-informational?logo=paypal)](https://paypal.me/dmnsgn)\n[![coinbase](https://img.shields.io/badge/donate-coinbase-informational?logo=coinbase)](https://commerce.coinbase.com/checkout/56cbdf28-e323-48d8-9c98-7019e72c97f3)\n[![twitter](https://img.shields.io/twitter/follow/dmnsgn?style=social)](https://twitter.com/dmnsgn)\n\n## Installation\n\n```bash\nnpm install -g snowdev\n```\n\n## Features\n\n- No configuration needed (but still possible via [cosmiconfig](https://github.com/davidtheclark/cosmiconfig))\n- Spiritual successor to [budō](https://github.com/mattdesl/budo/)\n\n### Develop packages\n\n- Initialise a common structure for all your packages\n- Optionally use TypeScript with sensible defaults\n- Generate TypeScript types automatically (via `JSDoc` for JS only packages or using `src/**.ts` files)\n- Generate API documentation automatically (via `JSDoc` for JS only packages and inserted in README or via `typedoc` in a `docs` folder for TypeScript packages)\n- Prettier formatter and ESLint linter on build\n- Keep package.json keys sorted for consistency\n\n### Write examples\n\n- Simple Browsersync dev server to watch and reload on changes with HMR (Hot Module Replacement) support via `import.meta.hot` similar to [Vite](https://vitejs.dev/guide/api-hmr.html#hmr-api)\n- Write examples using standard [ES Modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) directly with [import-map](https://github.com/WICG/import-maps). See [template/index.html](template/index.html).\n- Build examples dependencies using [browserlist](https://github.com/browserslist/browserslist) with targets `defaults and supports es6-module` to publish as GitHub pages with decent browser support.\n- Choose which dependencies to convert to ESM (devDependencies, dependencies or hardcoded list)\n\n### Release\n\n- Write commits using the [Conventional Commits Specification](https://www.conventionalcommits.org/en/v1.0.0/)\n- Release with StandardVersion to bump the version based on the commits (patch/minor/major = fix/feat/BREAKING CHANGE), generate CHANGELOG release, create a new commit with git tag\n\n## Usage\n\n```bash\n# Create folder\nmkdir ~/Projects/package-name\ncd ~/Projects/package-name\n\n# Generate folder structure (entry: index.js)\nnpx snowdev init\n# ...optionally use a TypeScript structure (entry: src/index.ts)\nnpx snowdev init --ts\n# ...optionally passing your GitHub username if different from `npm whoami`\nnpx snowdev init --ts --gitHubUsername YourUsername\n\n# Start a dev server and compile dependencies to ESM in web_modules\nnpx snowdev dev\n# ...optionally passing options to browser-sync\nnpx snowdev dev --port 8080\n# ...optionally watching ts files\nnpx snowdev dev --ts\n# ...optionally watching ts files without dev server\nnpx snowdev dev --ts --no-serve\n\n# Write code and commit all changes\ngit add -A \u0026\u0026 git commit -m \"feat: add feature\"\n\n# Build package:\n# - lint and format sources\n# - generate documentation and insert it directly in README\n# - generate TypeScript types from JSDoc\nnpx snowdev build\n# ...optionally generate documentation in docs folder and compiling ts\n# files and types using tsconfig.json\nnpx snowdev build --ts\n\n# or directly prepare a release\n# (build then run \"commit-and-tag-version\" committing all artefacts eg. docs)\nnpx snowdev release\n# ...optionally passing options to \"commit-and-tag-version\" like prerelease\n# setting a specific package distribution tag for \"npm i package@alpha\"\nnpx snowdev release --prerelease alpha\n# ...optionally passing options to \"commit-and-tag-version\" like --dry-run\n# to test release without committing to git or updating files\n# or --first-release to only generate an initial changelog\nnpx snowdev release --first-release --dry-run\n\n# and push/publish it\ngit push --follow-tags origin main \u0026\u0026 npm publish\n```\n\n## API\n\n```bash\n$ npx snowdev --help\nsnowdev\n\nStart dev server and install ESM dependencies.\n\nCommands:\n  snowdev init     Create simple package structure.\n  snowdev dev      Start dev server and install ESM dependencies.      [default]\n  snowdev build    Lint and Format sources, run TypeScript, update README API.\n  snowdev bundle   Bundle dependencies for development or production.\n  snowdev release  Bump the version, generate changelog release, create a new co\n                   mmit with git tag.\n  snowdev deploy   Deploy to gh-pages.\n  snowdev install  Install ESM dependencies.\n\nInput/meta options:\n  --cwd             Specify the current working directory for all commands.\n                                               [string] [default: process.cwd()]\n  --username        Specify a user name for the init command.\n                                      [string] [default: $ npm profile get name]\n  --gitHubUsername  Specify a GitHub user name for the init command. Default fro\n                    m current npm profile or scraped from profile page.\n                                            [string] [default: options.username]\n  --authorName      Specify an author name for the init command. Default from cu\n                    rrent npm profile or scraped from profile page.\n                                  [string] [default: $ npm profile get fullname]\n  --name            Specify an package name for the init command. Default to cwd\n                     directory name.   [string] [default: basename(options.cwd)]\n  --files           A glob pattern for files to be processed by build command. A\n                    ll JS and TS files in root or \"src/\" folder.\n                      [string] [default: \"{*.+(t|j||mj)s,src/**/*.+(t|j||mj)s}\"]\n  --ignore          Files to be ignored by build command.\n                  [array] [default: [\"**/node_modules/**\", \"**/web_modules/**\"]]\n  --dependencies    Install all dependencies from package.json, only devDependen\n                    cies (\"dev\"), only dependencies (\"prod\") or an array of depe\n                    ndency as ES module into web_modules.\n                         [string] [choices: \"all\", \"dev\", \"prod\"] [default: all]\n  --updateVersions  Update package.json engines with current Node.js/npm version\n                     from template, and currently used snowdev version.\n                                                       [boolean] [default: true]\n  --npmPath         Specify a path for the \"npm\" package. If null, commands will\n                     use \"npm\" from shell.              [string] [default: null]\n\nCommands options:\n  --NODE_ENV              Define \"process.env.NODE_ENV\" and minify dependencies\n                          if set to \"production\".[string] [default: development]\n  --ts                    Use TypeScript for init, dev and build commands (creat\n                          e index.ts, watch files or build files). Auto-detected\n                           if a \"tsconfig.json\" is detected with a \"compilerOpti\n                          ons.outDir\" set.        [boolean] [default: undefined]\n  --serve                 Start Browsersync on dev command.\n                                                       [boolean] [default: true]\n  --lint                  Lint on build command.       [boolean] [default: true]\n  --format                Format on build command.     [boolean] [default: true]\n  --types                 Run TypeScript (generate types or compile) on build co\n                          mmand or watch on dev command.\n                                                       [boolean] [default: true]\n  --docs                  Generate documentation (using \"JSDoc\" or \"typedoc\") in\n                           file (between \"options.docsStart\" and \"options.docsEn\n                          d\") or directory. Default to \"README.md\" but \"docs\" if\n                           \"options.ts\".           [string] [default: undefined]\n  --docsFormat            Default to \"md\" but \"html\" if \"options.ts\".\n                           [string] [choices: \"md\", \"html\"] [default: undefined]\n  --commitAndTagVersion   Bump the version, generate changelog release, create a\n                           new commit with git tag on release command.\n                                                                 [default: true]\n  --crossOriginIsolation  Add Cross-Origin-Opener-Policy (COOP) and Cross-Origin\n                          -Embedder-Policy (COEP) headers to browsersync. Requir\n                          ed for the use of SharedArrayBuffer.\n                                                      [boolean] [default: false]\n  --http2                 Serve with \"node:http2\".     [boolean] [default: true]\n  --hmr                   Add Hot Module Replacement to browsersync. Requires \"e\n                          s-module-shims\" with \"shimMode\".\n                                                       [boolean] [default: true]\n\nOptions:\n  --version  Show version number                                       [boolean]\n  --help     Show help                                                 [boolean]\n```\n\n## License\n\nMIT. See [license file](https://github.com/dmnsgn/snowdev/blob/main/LICENSE.md).\n","funding_links":["https://paypal.me/dmnsgn"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmnsgn%2Fsnowdev","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdmnsgn%2Fsnowdev","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmnsgn%2Fsnowdev/lists"}