{"id":51375833,"url":"https://github.com/aenawi/tagtastic","last_synced_at":"2026-07-03T12:14:42.642Z","repository":{"id":331441839,"uuid":"1126573707","full_name":"aenawi/tagtastic","owner":"aenawi","description":"TAGtastic is a lightweight CLI for generating human-readable release codenames. It is designed for release automation, CI/CD pipelines, and teams that want consistent naming with a clear audit trail.","archived":false,"fork":false,"pushed_at":"2026-06-13T02:25:27.000Z","size":4933,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-13T03:25:51.322Z","etag":null,"topics":["ci","cli","codenames","devops","devops-tools","github-actions","go","golang","golang-cli","release-codenames","release-management","releases","semantic-versioning","semver"],"latest_commit_sha":null,"homepage":"","language":"Go","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/aenawi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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-01-02T07:15:08.000Z","updated_at":"2026-06-13T02:25:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/aenawi/tagtastic","commit_stats":null,"previous_names":["infravillage/tagtastic","aenawi/tagtastic"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/aenawi/tagtastic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aenawi%2Ftagtastic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aenawi%2Ftagtastic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aenawi%2Ftagtastic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aenawi%2Ftagtastic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aenawi","download_url":"https://codeload.github.com/aenawi/tagtastic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aenawi%2Ftagtastic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35085196,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-03T02:00:05.635Z","response_time":110,"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":["ci","cli","codenames","devops","devops-tools","github-actions","go","golang","golang-cli","release-codenames","release-management","releases","semantic-versioning","semver"],"created_at":"2026-07-03T12:14:42.165Z","updated_at":"2026-07-03T12:14:42.626Z","avatar_url":"https://github.com/aenawi.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![TAGtastic banner](assets/banner.svg)\n\n# TAGtastic 🏷️\n\n[![Release](https://img.shields.io/github/actions/workflow/status/aenawi/tagtastic/release.yml?label=release\u0026logo=githubactions\u0026logoColor=white)](https://github.com/aenawi/tagtastic/actions/workflows/release.yml)\n[![CI](https://img.shields.io/github/actions/workflow/status/aenawi/tagtastic/ci.yml?branch=main\u0026label=ci\u0026logo=githubactions\u0026logoColor=white)](https://github.com/aenawi/tagtastic/actions/workflows/ci.yml)\n[![Go Version](https://img.shields.io/badge/go-1.24+-00ADD8?logo=go\u0026logoColor=white)](https://go.dev/doc/devel/release)\n[![Go Report Card](https://goreportcard.com/badge/github.com/aenawi/tagtastic)](https://goreportcard.com/report/github.com/aenawi/tagtastic)\n[![License](https://img.shields.io/github/license/aenawi/tagtastic?color=2C3E50)](LICENSE)\n\nTAGtastic is a deterministic release codename generator designed for CI/CD pipelines and release automation workflows.\n\nEngineered for DevOps teams and release engineers who require:\n\n- **Deterministic codename generation** with reproducible output\n- **CI/CD integration** via machine-readable formats (JSON, shell exports)\n- **Audit trail** through configuration versioning and changelog integration\n- **Zero external dependencies** for air-gapped or restricted environments\n\nTAGtastic follows Semantic Versioning, Keep a Changelog, and integrates with GoReleaser.\n\n## Overview\n\nTAGtastic generates human-readable codenames that complement version tags in release workflows. Each codename is deterministic (based on seed) and can be associated with SemVer tags for improved release communication.\n\n**Use cases:**\n\n- Assign memorable identifiers to releases in CI/CD pipelines\n- Generate codenames for internal builds, staging environments, or customer-facing releases\n- Maintain consistent naming conventions across distributed teams\n- Integrate with GoReleaser, GitHub Actions, GitLab CI, and other automation tools\n\n**Design philosophy:**\n\n- **Single responsibility:** Codename generation only (not release orchestration)\n- **Deterministic output:** Same seed produces same codename\n- **Configuration as code:** Version-controlled `.tagtastic.yaml` for reproducibility\n- **CI-first:** JSON errors, quiet mode, shell exports for automation\n\n## Installation\n\n### Pre-built Binaries\n\nDownload the latest release from [GitHub Releases](https://github.com/aenawi/tagtastic/releases):\n\n```bash\n# Linux (amd64)\ncurl -LO https://github.com/aenawi/tagtastic/releases/latest/download/tagtastic_linux_amd64.tar.gz\ntar -xzf tagtastic_linux_amd64.tar.gz\nsudo mv tagtastic /usr/local/bin/\n\n# macOS (arm64)\ncurl -LO https://github.com/aenawi/tagtastic/releases/latest/download/tagtastic_darwin_arm64.tar.gz\ntar -xzf tagtastic_darwin_arm64.tar.gz\nsudo mv tagtastic /usr/local/bin/\n```\n\n### Go Install\n\n```bash\ngo install github.com/aenawi/tagtastic/cmd/tagtastic@latest\n```\n\n### Build from Source\n\n```bash\ngit clone https://github.com/aenawi/tagtastic.git\ncd tagtastic/tagtastic-repo\nmake build\n# Binary available at: ./bin/tagtastic\n```\n\n### Docker\n\n```bash\ndocker run --rm ghcr.io/aenawi/tagtastic:latest generate --theme crayola_colors\n```\n\n## Quick Start\n\n```bash\n# Generate a codename (random seed from timestamp)\ntagtastic generate\n\n# Generate with deterministic seed\ntagtastic generate --theme crayola_colors --seed 42\n\n# List available themes\ntagtastic themes\n\n# Export for shell scripts\ntagtastic generate --format shell --quiet\n# Output: RELEASE_CODENAME=atomic-tangerine\n\n# JSON output for parsing\ntagtastic generate --format json\n# Output: {\"name\":\"Atomic Tangerine\",\"theme\":\"crayola_colors\"}\n```\n\n## Available Commands\n\n| Command        | Description                         | Example                                              |\n| -------------- | ----------------------------------- | ---------------------------------------------------- |\n| `generate`     | Generate a codename from a theme    | `tagtastic generate --theme birds --seed 1`          |\n| `list`         | List all codenames in a theme       | `tagtastic list --theme crayola_colors`              |\n| `themes`       | List available themes               | `tagtastic themes`                                   |\n| `validate`     | Validate a codename against a theme | `tagtastic validate \"Almond\" --theme crayola_colors` |\n| `config init`  | Initialize repository configuration | `tagtastic config init`                              |\n| `config show`  | Display current configuration       | `tagtastic config show`                              |\n| `config reset` | Reset configuration to defaults     | `tagtastic config reset`                             |\n| `version`      | Show version information            | `tagtastic version`                                  |\n\n### Command Options\n\n**Global flags:**\n\n- `--quiet, -q`: Suppress non-essential output (ideal for CI)\n- `--json-errors`: Emit errors in JSON format for machine parsing\n- `--config-path \u003cpath\u003e`: Override default config file location\n\n**Generate command:**\n\n- `--theme, -t \u003ctheme\u003e`: Theme to use (default: `arabian_birds`, since v0.2.0)\n- `--seed, -s \u003cint\u003e`: Random seed (0 uses current timestamp)\n- `--exclude, -e \u003citems\u003e`: Comma-separated items to exclude\n- `--format, -f \u003cformat\u003e`: Output format (`text`, `json`, `shell`)\n- `--record`: Write selected codename to `.tagtastic.yaml`\n\n**Shell format output:**\n\n```bash\nRELEASE_CODENAME=blue-heron\n```\n\n## Configuration\n\nTAGtastic loads configuration in the following precedence order:\n\n1. `--config-path \u003cpath\u003e` command-line flag\n2. `TAGTASTIC_CONFIG` environment variable\n3. `./.tagtastic.yaml` (repository-local configuration)\n\n### Repository Configuration\n\nRepository configuration (`.tagtastic.yaml`) is optional and recommended for release automation:\n\n```yaml\n# .tagtastic.yaml\n0.1.0-beta.1: Almond\n0.1.0-beta.2: Apricot\n0.1.1-beta.1: Aquamarine\n```\n\n**Configuration behavior:**\n\n- Never auto-created (explicit opt-in via `generate --record` or release helper)\n- Version-controlled for audit trail and reproducibility\n- Used by CI/CD workflows to ensure consistent codenames across environments\n\n### Initialize Configuration\n\n```bash\n# Preview without writing\ntagtastic config init --dry-run\n\n# Create .tagtastic.yaml\ntagtastic config init\n\n# Override location\ntagtastic config init --config-path /path/to/.tagtastic.yaml\n```\n\n## CI/CD Integration\n\n### GitHub Actions\n\n```yaml\nname: Release\n\non:\n  push:\n    tags:\n      - 'v*'\n\njobs:\n  release:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Install TAGtastic\n        run: |\n          curl -LO https://github.com/aenawi/tagtastic/releases/latest/download/tagtastic_linux_amd64.tar.gz\n          tar -xzf tagtastic_linux_amd64.tar.gz\n          sudo mv tagtastic /usr/local/bin/\n\n      - name: Generate Codename\n        id: codename\n        run: |\n          CODENAME=$(tagtastic generate --theme crayola_colors --format shell --quiet | cut -d= -f2)\n          echo \"codename=${CODENAME}\" \u003e\u003e $GITHUB_OUTPUT\n\n      - name: Create Release\n        uses: softprops/action-gh-release@v1\n        with:\n          name: ${{ github.ref_name }} – ${{ steps.codename.outputs.codename }}\n          body: |\n            Release ${{ github.ref_name }} (Codename: **${{ steps.codename.outputs.codename }}**)\n```\n\n### GitLab CI\n\n```yaml\nrelease:\n  stage: deploy\n  image: golang:1.25\n  script:\n    - go install github.com/aenawi/tagtastic/cmd/tagtastic@latest\n    - export CODENAME=$(tagtastic generate --format shell --quiet | cut -d= -f2)\n    - echo \"Release codename: $CODENAME\"\n    - echo \"RELEASE_CODENAME=$CODENAME\" \u003e\u003e release.env\n  artifacts:\n    reports:\n      dotenv: release.env\n  only:\n    - tags\n```\n\n### Jenkins Pipeline\n\n```groovy\npipeline {\n    agent any\n    stages {\n        stage('Generate Codename') {\n            steps {\n                script {\n                    sh 'curl -LO https://github.com/aenawi/tagtastic/releases/latest/download/tagtastic_linux_amd64.tar.gz'\n                    sh 'tar -xzf tagtastic_linux_amd64.tar.gz'\n                    env.RELEASE_CODENAME = sh(\n                        script: './tagtastic generate --format shell --quiet | cut -d= -f2',\n                        returnStdout: true\n                    ).trim()\n                    echo \"Release codename: ${env.RELEASE_CODENAME}\"\n                }\n            }\n        }\n    }\n}\n```\n\n### Docker Build Arguments\n\n```dockerfile\nARG RELEASE_CODENAME=unknown\nLABEL codename=\"${RELEASE_CODENAME}\"\nLABEL version=\"${VERSION}\"\n```\n\n```bash\nCODENAME=$(tagtastic generate --quiet)\ndocker build --build-arg RELEASE_CODENAME=\"$CODENAME\" -t myapp:v1.0.0 .\n```\n\n## Release Automation\n\n### Release Integration\n\nTAGtastic integrates with GoReleaser and provides a release helper (`cmd/tools/release`) to automate version management, changelog updates, and git tagging.\n\n**Codename lookup priority (in CI/CD):**\n\n1. Git tag annotation (preferred)\n2. `.tagtastic.yaml` entry for the version\n3. `CHANGELOG.md` entry for the version\n\n### Release Workflow\n\n#### Option 1: Automated (Recommended for CI/CD)\n\n```bash\n# Release helper auto-selects next codename, updates files, creates tag\ngo run ./cmd/tools/release 0.1.0-beta.2 --commit\ngit push origin v0.1.0-beta.2\n```\n\n#### Option 2: Manual\n\n```bash\n# Select next codename\nCODENAME=$(make codename -s)\n\n# Update CHANGELOG.md and VERSION manually\nvim CHANGELOG.md VERSION\n\n# Create annotated tag with codename\ngit tag -a v0.1.0-beta.2 -m \"v0.1.0-beta.2 – ${CODENAME}\"\ngit push origin v0.1.0-beta.2\n```\n\n### Release Helper Tool\n\nThe release helper (`cmd/tools/release`) provides:\n\n- **SemVer validation:** Refuses downgrades or version reuse\n- **Atomic updates:** `CHANGELOG.md`, `VERSION`, `.tagtastic.yaml` updated together\n- **Auto-bump:** `--bump patch|minor|major` for version increments\n- **Prerelease support:** `--pre alpha|beta|rc` with optional `--pre-num N`\n- **Dry-run mode:** Preview changes without modifying files\n\n**Examples:**\n\n```bash\n# Basic release (dry-run by default without --commit)\ngo run ./cmd/tools/release 0.1.0-beta.2\n\n# Commit changes and create tag\ngo run ./cmd/tools/release 0.1.0-beta.2 --commit\n\n# Auto-bump patch version\ngo run ./cmd/tools/release --bump patch --commit\n\n# Create prerelease\ngo run ./cmd/tools/release 0.2.0 --pre beta --commit\n\n# Custom codename override\ngo run ./cmd/tools/release 0.1.0-beta.2 --codename \"Custom Name\" --commit\n\n# CI/CD mode (quiet, JSON errors)\ngo run ./cmd/tools/release --bump patch --commit --quiet --json-errors\n```\n\n**Makefile shortcuts:**\n\n```bash\n# Prepare release with specific version\nmake release-prep VERSION=0.1.0-beta.2\n\n# Auto-bump version\nmake release-bump BUMP=patch\n\n# Prerelease with auto-bump\nmake release-bump BUMP=minor PRE=beta\n```\n\n### GoReleaser Integration\n\nTAGtastic codenames are injected into GoReleaser via environment variables:\n\n```yaml\n# .goreleaser.yaml\nrelease:\n  name_template: \"v{{ .Version }} – {{ .Env.RELEASE_CODENAME }}\"\n\narchives:\n  - name_template: \"{{ .ProjectName }}_{{ .Version }}-{{ .Env.RELEASE_CODENAME_SLUG }}_{{ .Os }}_{{ .Arch }}\"\n```\n\n**GitHub Actions workflow:** See [`.github/workflows/release.yml`](.github/workflows/release.yml) for codename extraction logic.\n\n### Release Naming Convention\n\nStarting with **v0.2.0**, this project uses **Arabian Peninsula bird\nnames** as release codenames. The list ships as the `arabian_birds` theme\ninside [`data/themes.yaml`](data/themes.yaml). Earlier releases\n(v0.1.0-alpha.1 through v0.2.0-beta.1) used Crayola crayon colours from\nthe `crayola_colors` theme, sourced from\n[Darius Kazemi's Corpora project](https://github.com/dariusk/corpora)\n(see [`data/colors/crayola.json`](https://github.com/dariusk/corpora/blob/master/data/colors/crayola.json) upstream).\n\nTo change the codename theme in the future, update the\n`codenameThemeID` constant in [`cmd/tools/next-codename/main.go`](cmd/tools/next-codename/main.go)\nand [`cmd/tools/release/main.go`](cmd/tools/release/main.go) to any\ntheme ID present in `data/themes.yaml`.\n\n**Rules:**\n\n- Codenames assigned in **alphabetical order** per release\n- Recorded in `CHANGELOG.md`, `.tagtastic.yaml`, and git tag annotations\n- SemVer tags remain the source of truth (`v1.0.0-beta.1`)\n\n**Example changelog entries:**\n\n```markdown\n## [0.2.0]         – \"Arabian Babbler\" – 2026-05-17   (new theme: arabian_birds)\n## [0.2.0-beta.1]  – \"Asparagus\"       – 2026-01-04   (legacy theme: crayola_colors)\n## [0.1.0-beta.1]  – \"Almond\"          – 2026-01-03   (legacy theme: crayola_colors)\n```\n\n**Data sources:**\n\n- [`data/themes.yaml`](data/themes.yaml) — master, editable theme catalogue (single source of truth)\n- [`internal/data/themes.yaml`](internal/data/themes.yaml) — embedded copy baked into the binary (sync with `make sync-themes`)\n\nSee [`data/README.md`](data/README.md) for why both files exist and the\nmaster → sync → embed flow.\n\n**Next codename:**\n```bash\nmake codename\n# or\ngo run ./cmd/tools/next-codename\n```\n\n## Themes\n\nTAGtastic ships nine embedded themes (run `tagtastic themes` to list them):\n\n| Theme              | Category | Notes                                                                               |\n| ------------------ | -------- | ----------------------------------------------------------------------------------- |\n| `crayola_colors`   | Colors   | Crayola crayon colors. Default theme; also drives TAGtastic's own release codenames |\n| `birds`            | Nature   | Generic bird species                                                                |\n| `cities`           | Places   | World cities                                                                        |\n| `landmarks`        | Places   | Famous natural landmarks                                                            |\n| `arabian_mammals`  | Nature   | Arabian Peninsula land mammals (EN + Arabic)                                        |\n| `arabian_birds`    | Nature   | Arabian Peninsula and Gulf birds (EN + Arabic)                                      |\n| `arabian_trees`    | Nature   | Native Arabian trees and woody plants (EN + Arabic)                                 |\n| `arabian_reptiles` | Nature   | Arabian lizards, snakes, and sea turtles (EN + Arabic)                              |\n| `arabian_marine`   | Nature   | Arabian Gulf, Sea of Oman, and Arabian Sea marine life (EN + Arabic)                |\n\nThe Arabian themes were curated from the corpora documented at\n[`docs/arabian-wildlife-datasets/`](../docs/arabian-wildlife-datasets/) and\nare attributed in the Credits section below.\n\n### Custom Themes\n\nEdit `data/themes.yaml` to add custom themes:\n\n```yaml\nthemes:\n  your_theme:\n    id: your_theme\n    name: \"Your Theme Name\"\n    description: \"Theme description\"\n    category: \"Category\"\n    items:\n      - name: \"Item One\"\n        aliases: [\"item-one\"]\n        description: \"Description\"\n```\n\nAfter editing, sync the embedded copy:\n\n```bash\nmake sync-themes\n# or\ngo run ./cmd/tools/sync-themes\n```\n\n## Development\n\n### Repository Structure\n\n```text\ntagtastic-repo/\n├── cmd/\n│   ├── tagtastic/          # CLI entrypoint\n│   └── tools/              # Release helper, codename generator, theme sync\n├── internal/\n│   ├── cli/                # Command implementations\n│   ├── config/             # Configuration handling\n│   ├── data/               # Theme repository and types\n│   └── output/             # Output formatters (text, JSON, shell)\n├── data/\n│   ├── README.md           # Why this folder exists; master → sync → embed flow\n│   └── themes.yaml         # Master, editable theme catalogue (single source of truth)\n├── .github/workflows/      # CI/CD automation\n├── .goreleaser.yaml        # GoReleaser configuration\n├── Makefile                # Build and development tasks\n└── CHANGELOG.md            # Release history\n```\n\n### Build and Test\n\n```bash\n# Build local binary\nmake build\n\n# Run tests with race detection and coverage\nmake test\n\n# Run linter\nmake lint\n\n# Format code\nmake fmt\n\n# Run all quality checks\nmake quality\n\n# Build release artifacts (GoReleaser)\nmake release\n```\n\n### Code Quality\n\n**Local validation:**\n```bash\n# Run golangci-lint, gofmt, go vet\nmake quality\n\n# Go Report Card (local)\ngo install github.com/gojp/goreportcard/cmd/goreportcard-cli@latest\ngoreportcard-cli\n```\n\n**CI/CD:** See [Go Report Card badge](https://goreportcard.com/report/github.com/aenawi/tagtastic) for hosted analysis.\n\n### Testing\n\n```bash\n# Run all tests\ngo test ./...\n\n# Run specific test\ngo test -v ./internal/cli -run TestGenerateCmd\n\n# Run tests with race detection\ngo test -race ./...\n\n# Generate coverage report\ngo test -coverprofile=coverage.out ./...\ngo tool cover -html=coverage.out\n```\n\n## Contributing\n\nContributions are welcome. Please review [CONTRIBUTING.md](CONTRIBUTING.md) for:\n\n- Development standards and coding style\n- Testing requirements (≥80% coverage)\n- Commit message conventions (Conventional Commits)\n- Pull request guidelines\n\n**Quick guidelines:**\n\n- Use `gofmt -s` and `goimports` for formatting\n- Run `make test` and `make lint` before submitting PRs\n- Follow [Keep a Changelog](https://keepachangelog.com/) for `CHANGELOG.md` updates\n- Use Conventional Commits: `feat(cli):`, `fix(data):`, `docs:`\n\n## Project Status\n\n- **Current focus:** Stabilizing v1 specification\n- **Release phases:** alpha → beta → stable\n- **Versioning:** Semantic Versioning 2.0.0\n- **Changelog:** Keep a Changelog 1.0.0\n\nScope expansion is intentional and conservative. Feature requests and architectural changes are evaluated against the core mission: deterministic codename generation for release automation.\n\n## Security\n\n### Reporting Security Issues\n\nIf you discover a security vulnerability in TAGtastic, please report it:\n\n1. **GitHub Issues:** Open an issue at \u003chttps://github.com/aenawi/tagtastic/issues\u003e\n2. **Include:** Detailed description, steps to reproduce, potential impact, and suggested fix (if available)\n3. **Response time:** We aim to acknowledge reports within 48 hours\n\n### Security Considerations\n\nTAGtastic is designed for use in CI/CD pipelines. Consider these security practices:\n\n- **Configuration files:** Never commit sensitive data to `.tagtastic.yaml` (it only stores codenames)\n- **Supply chain:** Verify release checksums and use pinned versions in production\n- **Air-gapped environments:** TAGtastic has zero external dependencies and can run offline\n- **Least privilege:** Run with minimal permissions required for file I/O\n- **Input validation:** All theme data is embedded at build time; no remote data fetching\n- **Security scanning:** This project is scanned with [gosec](https://github.com/securego/gosec) on every PR and commit\n\n### Supported Versions\n\n| Version | Supported          |\n| ------- | ------------------ |\n| 0.1.x   | :white_check_mark: |\n| \u003c 0.1   | :x:                |\n\nSecurity patches are applied to the latest minor version. Once v1.0.0 is released, we will maintain the latest stable major version.\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n\n## Credits\n\n**Tooling:**\n\n- **CLI Framework:** [Kong](https://github.com/alecthomas/kong) by Alec Thomas\n- **Release Automation:** [GoReleaser](https://goreleaser.com/)\n- **Security Scanning:** [gosec](https://github.com/securego/gosec)\n\n**Theme data sources:**\n\n- `crayola_colors` — [Corpora](https://github.com/dariusk/corpora) by Darius Kazemi (CC0 / public domain)\n- `arabian_mammals`, `arabian_birds`, `arabian_trees`, `arabian_reptiles`, `arabian_marine` — curated from the corpora pack at [`docs/arabian-wildlife-datasets/`](../docs/arabian-wildlife-datasets/), cross-validated against:\n  - [Saudi National Center for Wildlife (NCW)](https://www.ncw.gov.sa/en/open-data) — open-data portal\n  - [Environment Agency – Abu Dhabi (EAD)](https://www.ead.gov.ae/) — biodiversity authority\n  - [UAE Union Atlas – Wildlife](https://atlas.fgic.gov.ae/uaeatlas/Environment/WildLife?lang=en)\n  - [UAE Flora](https://www.uaeflora.ae/) and [Flora of Arabia](https://www.floraofarabia.com/)\n  - [Oman Open Data](https://opendata.gov.om/) — rescued animals/birds dataset\n  - [Fujairah Research Centre](https://www.frc.ae/) (Wadi Wurayah) and [Dubai Desert Conservation Reserve](https://www.ddcr.org/en/)\n  - Wikipedia regional articles (Fauna/Flora of UAE, SA, Oman, Qatar, Bahrain; Persian Gulf; List of birds of the UAE) — text portions licensed CC BY-SA 4.0\n  - Reference databases: [IUCN Red List](https://www.iucnredlist.org/), [GBIF](https://www.gbif.org/), [Avibase](https://avibase.bsc-eoc.org/), [AVONET](https://opentraits.org/datasets/avonet)\n\n  Full per-record provenance is captured in [`docs/arabian-wildlife-datasets/datasets/data/meta/sources.json`](../docs/arabian-wildlife-datasets/datasets/data/meta/sources.json). Source URLs are linked references only; each source carries its own terms — consult before redistribution beyond TAGtastic's MIT-licensed embedded use.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faenawi%2Ftagtastic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faenawi%2Ftagtastic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faenawi%2Ftagtastic/lists"}