{"id":48984030,"url":"https://github.com/tatsh/wiswa","last_synced_at":"2026-04-27T17:01:18.825Z","repository":{"id":346951096,"uuid":"1191152382","full_name":"Tatsh/wiswa","owner":"Tatsh","description":"A highly opinionated way to generate and maintain projects with Jsonnet.","archived":false,"fork":false,"pushed_at":"2026-04-25T11:59:17.000Z","size":7102,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-25T13:31:49.834Z","etag":null,"topics":["command-line","jsonnet","project-generator","project-management","scaffolding"],"latest_commit_sha":null,"homepage":"https://tatsh.github.io/wiswa/","language":"Python","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/Tatsh.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"Tatsh","ko_fi":"tatsh2","liberapay":"tatsh2","patreon":"tatsh2"}},"created_at":"2026-03-25T01:01:48.000Z","updated_at":"2026-04-25T11:59:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Tatsh/wiswa","commit_stats":null,"previous_names":["tatsh/wiswa"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/Tatsh/wiswa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fwiswa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fwiswa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fwiswa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fwiswa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tatsh","download_url":"https://codeload.github.com/Tatsh/wiswa/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fwiswa/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32345816,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["command-line","jsonnet","project-generator","project-management","scaffolding"],"created_at":"2026-04-18T12:04:27.292Z","updated_at":"2026-04-27T17:01:18.819Z","avatar_url":"https://github.com/Tatsh.png","language":"Python","funding_links":["https://github.com/sponsors/Tatsh","https://ko-fi.com/tatsh2","https://liberapay.com/tatsh2","https://patreon.com/tatsh2","https://buymeacoffee.com/Tatsh","https://www.patreon.com/Tatsh2"],"categories":[],"sub_categories":[],"readme":"# wiswa\n\n\u003c!-- WISWA-GENERATED-README:START --\u003e\n\n[![Python versions](https://img.shields.io/pypi/pyversions/wiswa.svg?color=blue\u0026logo=python\u0026logoColor=white)](https://www.python.org/)\n[![PyPI - Version](https://img.shields.io/pypi/v/wiswa)](https://pypi.org/project/wiswa/)\n[![GitHub tag (with filter)](https://img.shields.io/github/v/tag/Tatsh/wiswa)](https://github.com/Tatsh/wiswa/tags)\n[![License](https://img.shields.io/github/license/Tatsh/wiswa)](https://github.com/Tatsh/wiswa/blob/master/LICENSE.txt)\n[![GitHub commits since latest release (by SemVer including pre-releases)](https://img.shields.io/github/commits-since/Tatsh/wiswa/v0.3.1/master)](https://github.com/Tatsh/wiswa/compare/v0.3.1...master)\n[![CodeQL](https://github.com/Tatsh/wiswa/actions/workflows/codeql.yml/badge.svg)](https://github.com/Tatsh/wiswa/actions/workflows/codeql.yml)\n[![QA](https://github.com/Tatsh/wiswa/actions/workflows/qa.yml/badge.svg)](https://github.com/Tatsh/wiswa/actions/workflows/qa.yml)\n[![Tests](https://github.com/Tatsh/wiswa/actions/workflows/tests.yml/badge.svg)](https://github.com/Tatsh/wiswa/actions/workflows/tests.yml)\n[![Coverage Status](https://coveralls.io/repos/github/Tatsh/wiswa/badge.svg?branch=master)](https://coveralls.io/github/Tatsh/wiswa?branch=master)\n[![Dependabot](https://img.shields.io/badge/Dependabot-enabled-blue?logo=dependabot)](https://github.com/dependabot)\n[![Documentation Status](https://readthedocs.org/projects/wiswa/badge/?version=latest)](https://wiswa.readthedocs.org/?badge=latest)\n[![mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy-lang.org/)\n[![uv](https://img.shields.io/badge/uv-261230?logo=astral)](https://docs.astral.sh/uv/)\n[![pytest](https://img.shields.io/badge/pytest-zz?logo=Pytest\u0026labelColor=black\u0026color=black)](https://docs.pytest.org/en/stable/)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![Downloads](https://static.pepy.tech/badge/wiswa/month)](https://pepy.tech/project/wiswa)\n[![Stargazers](https://img.shields.io/github/stars/Tatsh/wiswa?logo=github\u0026style=flat)](https://github.com/Tatsh/wiswa/stargazers)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)\n[![Prettier](https://img.shields.io/badge/Prettier-black?logo=prettier)](https://prettier.io/)\n\n[![@Tatsh](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpublic.api.bsky.app%2Fxrpc%2Fapp.bsky.actor.getProfile%2F%3Factor=did%3Aplc%3Auq42idtvuccnmtl57nsucz72\u0026query=%24.followersCount\u0026label=Follow+%40Tatsh\u0026logo=bluesky\u0026style=social)](https://bsky.app/profile/Tatsh.bsky.social)\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Tatsh-black?logo=buymeacoffee)](https://buymeacoffee.com/Tatsh)\n[![Libera.Chat](https://img.shields.io/badge/Libera.Chat-Tatsh-black?logo=liberadotchat)](irc://irc.libera.chat/Tatsh)\n[![Mastodon Follow](https://img.shields.io/mastodon/follow/109370961877277568?domain=hostux.social\u0026style=social)](https://hostux.social/@Tatsh)\n[![Patreon](https://img.shields.io/badge/Patreon-Tatsh2-F96854?logo=patreon)](https://www.patreon.com/Tatsh2)\n\n\u003c!-- WISWA-GENERATED-README:STOP --\u003e\n\nA highly opinionated way to generate projects with Jsonnet.\n\n## Installation\n\nWe recommend a **global** install so `wiswa` and `wiswa-mcp` are on your `PATH`\nfrom any working directory:\n\n```shell\nuv tool install wiswa\n```\n\nOr with pipx:\n\n```shell\npipx install wiswa\n```\n\nIf you prefer not to install globally, add Wiswa as a **development dependency**\nof your project—for example `uv add --group dev wiswa`, or list `wiswa` under\n`dependency-groups.dev` in `pyproject.toml` and install inside the project\nvirtual environment with your usual workflow.\n\n## Usage\n\n![demo](demo.gif)\n\nAdd `-d` to show debug logs.\n\n```shell\nUsage: wiswa [OPTIONS] [FILE]\n\n  Entry point for the Wiswa CLI.\n\nOptions:\n  --cache-time INTEGER            Cache expiry time in seconds.  [default:\n                                  600]\n  -d, --debug                     Enable debug output.\n  -J, --jpath TEXT                Add a directory to the Jsonnet search path\n                                  (only used when evaluating settings).\n  --no-cache                      Disable HTTP response caching.\n  -o, --output-dir DIRECTORY      Output directory for generated files.\n  -q, --quiet                     Suppress the progress spinner.\n  --skip-jsonnet                  Skip project.jsonnet manifests; settings merge still runs.\n  --skip-postprocess              Skip post-processing steps.\n  --skip-remote                   Skip configuring the remote Git host (GitHub or GitLab).\n  --skip-static                   Skip copying static files.\n  --skip-templates                Skip Jinja2 template evaluation.\n  --skip-yarn                     Skip Yarn download.\n  -h, --help                      Show this message and exit.\n```\n\n## Remote API tokens (GitHub and GitLab)\n\nWhen Wiswa configures the remote (`wiswa` without `--skip-remote`), it calls the GitHub or GitLab\nAPI using a **personal access token**. Tokens are read from the environment when supported, or from\nthe system keyring. Service names include the **repository hostname** so different hosts (for\nexample GitHub.com, GitHub Enterprise, or self-managed GitLab) keep separate credentials.\n\nKeyring entries use the usual **service name** and **username** fields (for example as shown by\n`secret-tool` on Linux or Keychain Access on macOS). The **username** is normally your OS login\nname (`whoami`).\n\n### GitHub\n\n1. Service `wiswa-github:\u003chostname\u003e`, username your OS user. The hostname is taken from\n   `repository_uri` (for example `github.com` for `https://github.com/org/repo`).\n\nExample (hostname `github.com`, OS user `alice`):\n\n```shell\npython -m keyring set 'wiswa-github:github.com' alice\n# paste the token at the prompt\n```\n\n### GitLab\n\n1. **Environment:** `GITLAB_TOKEN` (if set, used first).\n2. **Preferred:** service `wiswa-gitlab:\u003chostname\u003e`, username your OS user (for example\n   `wiswa-gitlab:gitlab.com`).\n3. Same service with **username** equal to the hostname is also checked (for older or alternate\n   storage patterns).\n\nExample for `gitlab.com`:\n\n```shell\nexport GITLAB_TOKEN='glpat-...'   # optional; overrides keyring\n\npython -m keyring set 'wiswa-gitlab:gitlab.com' \"$(whoami)\"\n```\n\n## MCP Server\n\nWiswa includes an MCP server (`wiswa-mcp`) that exposes settings discovery tools for AI assistants.\n\n### Claude Code\n\n```shell\nclaude mcp add wiswa-mcp -- wiswa-mcp\n```\n\n### Cursor\n\nAdd to `.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"wiswa-mcp\": {\n      \"command\": \"wiswa-mcp\"\n    }\n  }\n}\n```\n\n### GitHub Copilot CLI\n\nAdd to `.github/copilot/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"wiswa-mcp\": {\n      \"command\": \"wiswa-mcp\"\n    }\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftatsh%2Fwiswa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftatsh%2Fwiswa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftatsh%2Fwiswa/lists"}