{"id":36676613,"url":"https://github.com/harakeishi/gopose","last_synced_at":"2026-01-12T10:51:14.517Z","repository":{"id":297455523,"uuid":"996796755","full_name":"harakeishi/gopose","owner":"harakeishi","description":"gopose (Go Port Override Solution Engine) is a tool that automatically detects and resolves Docker Compose port binding and network conflicts.  ","archived":false,"fork":false,"pushed_at":"2025-10-17T07:43:38.000Z","size":26613,"stargazers_count":14,"open_issues_count":4,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-24T18:02:42.798Z","etag":null,"topics":["docker-compose","go"],"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/harakeishi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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":"2025-06-05T13:29:39.000Z","updated_at":"2025-11-17T06:52:29.000Z","dependencies_parsed_at":"2025-08-12T14:07:05.928Z","dependency_job_id":"98a47f5c-0792-4803-ba00-67e60edf116c","html_url":"https://github.com/harakeishi/gopose","commit_stats":null,"previous_names":["harakeishi/gopose"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/harakeishi/gopose","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harakeishi%2Fgopose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harakeishi%2Fgopose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harakeishi%2Fgopose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harakeishi%2Fgopose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/harakeishi","download_url":"https://codeload.github.com/harakeishi/gopose/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harakeishi%2Fgopose/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338846,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T10:40:25.642Z","status":"ssl_error","status_checked_at":"2026-01-12T10:39:27.820Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["docker-compose","go"],"created_at":"2026-01-12T10:51:11.378Z","updated_at":"2026-01-12T10:51:14.492Z","avatar_url":"https://github.com/harakeishi.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gopose - Docker Compose Port Conflict Auto-Resolution Tool\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"logo.png\" alt=\"gopose logo\" width=\"200\"/\u003e\n  \n  [![Go Version](https://img.shields.io/badge/Go-1.21+-00ADD8?style=for-the-badge\u0026logo=go)](https://golang.org/)\n  [![License](https://img.shields.io/badge/License-MIT-blue?style=for-the-badge)](LICENSE)\n  [![Go Report Card](https://goreportcard.com/badge/github.com/harakeishi/gopose?style=for-the-badge)](https://goreportcard.com/report/github.com/harakeishi/gopose)\n\u003c/div\u003e\n\n## Overview\n\n**gopose** (Go Port Override Solution Engine) is a tool that automatically detects and resolves Docker Compose port binding and network conflicts.\n\nIt generates a `compose.override.yml` without modifying the original `compose.yml`, and automatically deletes the `override.yml` after resolving port and network conflicts.\n\n### 🎯 Key Features\n\n- ✅ **Non-destructive**: Does not modify the original `compose.yml` file\n- ✅ **Auto-detection**: Automatically detects conflicts with system ports in use\n- ✅ **Auto-resolution**: Automatically assigns available ports\n- ✅ **Network conflict avoidance**: Automatically detects and avoids Docker network subnet conflicts\n- ✅ **Auto-cleanup**: Automatically deletes `override.yml` on process termination\n- ✅ **SOLID principles**: Designed for maintainability and extensibility\n- ✅ **Structured logging**: Detailed log output and debugging capabilities\n- ✅ **Cross-platform**: Supports Linux, macOS, and Windows\n- ✅ **Parallel processing**: Performs port scanning in parallel\n\n## Installation\n\n### Binary Releases\n\nDownload the appropriate binary from [GitHub Releases](https://github.com/harakeishi/gopose/releases):\n\n```bash\n# Linux (amd64)\ncurl -L https://github.com/harakeishi/gopose/releases/latest/download/gopose_linux_amd64.tar.gz | tar xz\nsudo mv gopose /usr/local/bin/\n\n# macOS (arm64)\ncurl -L https://github.com/harakeishi/gopose/releases/latest/download/gopose_darwin_arm64.tar.gz | tar xz\nsudo mv gopose /usr/local/bin/\n\n# Windows (amd64)\ncurl -L https://github.com/harakeishi/gopose/releases/latest/download/gopose_windows_amd64.zip -o gopose.zip\nunzip gopose.zip\n```\n\n### Go Install\n\n```bash\ngo install github.com/harakeishi/gopose@latest\n```\n\n### Build from Source\n\n```bash\ngit clone https://github.com/harakeishi/gopose.git\ncd gopose\nmake build\nsudo make install\n```\n\n## Usage\n\n### Basic Usage\n\n```bash\n# Detect and resolve port/network conflicts and prepare Docker Compose\ngopose up\n\n# Check version\ngopose version\n```\n\n### Advanced Usage\n\n#### File Specification and Port Range Settings\n\n```bash\n# Specify a custom file\ngopose up -f custom-compose.yml\n\n# Specify port range\ngopose up --port-range 9000-9999\n\n# Specify multiple port ranges\ngopose up --port-range 8000-8999,9000-9999\n```\n\n#### Reserved Ports Configuration\n\n```bash\n# Reserve specific ports (will never be assigned even if unused)\n# Use configuration file for persistent settings\n```\n\nYou can reserve specific ports in `.gopose.yaml` to prevent them from being assigned:\n\n```yaml\nport:\n  reserved: [8080, 8443, 9000, 9090]  # These ports will never be assigned\n```\n\n**Important**: Reserved ports are guaranteed to be skipped during port allocation, regardless of whether they are currently in use or not. This is useful for:\n- Preventing conflicts with services you plan to start later\n- Reserving ports for manual debugging or testing\n- Avoiding specific ports that may be used by other tools or services\n\n#### Output and Logging Settings\n\n```bash\n# Dry run (no actual changes)\ngopose up --dry-run\n\n# Verbose logging\ngopose up --verbose\n\n# Display with detailed information\ngopose up --detail # Shows timestamps and fields\n\n# Check status in JSON format\ngopose status --output json\n\n# Set log level\ngopose up --log-level debug\n```\n\n### Configuration File\n\nYou can place a configuration file (`.gopose.yaml`) in your home or project directory:\n\n```yaml\nport:\n  range:\n    start: 8000\n    end: 9999\n  # Reserved ports: These ports will NEVER be assigned, even if they are not in use\n  # Useful for preventing conflicts with services you plan to start later\n  reserved: [8080, 8443, 9000, 9090]\n  exclude_privileged: true\n\nfile:\n  compose_file: \"compose.yml\"\n  override_file: \"compose.override.yml\"\n  backup_enabled: true\n\nwatcher:\n  interval: \"5s\"\n  cleanup_delay: \"30s\"\n\nlog:\n  level: \"info\"\n  format: \"text\"\n  file: \"~/.gopose/logs/gopose.log\"\n\nresolver:\n  strategy: \"minimal_change\"  # minimal_change, sequential, random\n  preserve_dependencies: true\n  port_proximity: true\n```\n\n#### Configuration Priority\n\nConfiguration settings are applied in the following order (later values override earlier ones):\n\n1. Default configuration (built-in)\n2. Configuration file (`.gopose.yaml`)\n3. CLI options (e.g., `--port-range`)\n\n**Note**: Reserved ports from the configuration file are always preserved, even when using CLI options to override the port range.\n\n### Output Example\n\n```\n$ gopose up\nポート衝突解決を開始\nDocker Composeファイル検出開始\nDocker Composeファイル発見\nDocker Composeファイル検出完了\nDocker Composeファイルを自動検出\nDocker Composeファイル解析開始\nDocker Composeバージョンが指定されていません\nDocker Composeファイル解析完了\nポート衝突検出開始\nnetstatを使用してポートスキャンを開始\nポートスキャン完了\nシステムポート衝突検出\nポート衝突検出完了\nポート衝突検出完了\nポート衝突解決開始\nnetstatを使用してポートスキャンを開始\nポートスキャン完了\n範囲内ポートフィルタリング完了\nポート割り当て成功\n解決案最適化開始\n解決案最適化完了\nポート衝突解決完了\nポート解決\nOverride生成開始\nポートマッピング更新\nOverride生成完了\nOverride検証開始\nOverrideのバージョンが指定されていませんが、Docker Composeの最新バージョンでは非推奨のため許可します\nOverride検証完了\nOverrideファイル書き込み開始\nOverrideファイル書き込み完了\nOverride.ymlファイルが生成されました\n既存Dockerネットワークを検出しました\nDocker Composeネットワーク設定を検出\nネットワークサブネット競合を検出\nネットワークサブネット競合を解決\n既存のコンテナを停止してからDocker Composeを起動\n[+] Running 2/2\n ✔ Container gopose-web-1  Removed                                                                                         0.0s\n ✔ Network gopose_default  Removed                                                                                         0.2s\nDocker Composeを起動\nDocker Composeを実行\n[+] Running 2/2\n ✔ Network gopose_default  Created                                                                                         0.0s\n ✔ Container gopose-web-1  Created                                                                                         0.0s\nAttaching to web-1\n```\n\n#### With --detail flag\n\n```\n$ gopose up --detail\ntime=2025-06-10T23:31:03.179+09:00 level=INFO msg=ポート衝突解決を開始 component=gopose timestamp=2025-06-10T23:31:03.178+09:00 dry_run=false compose_file=docker-compose.yml output_file=\"\" strategy=auto port_range=8000-9999 skip_compose_up=false\ntime=2025-06-10T23:31:03.179+09:00 level=INFO msg=\"Docker Composeファイル検出完了\" component=gopose timestamp=2025-06-10T23:31:03.179+09:00 directory=/Users/keishi.hara/src/github.com/harakeishi/gopose found_count=1\ntime=2025-06-10T23:31:03.179+09:00 level=INFO msg=\"Docker Composeファイルを自動検出\" component=gopose timestamp=2025-06-10T23:31:03.179+09:00 file=/Users/keishi.hara/src/github.com/harakeishi/gopose/compose.yml\ntime=2025-06-10T23:31:03.180+09:00 level=WARN msg=\"Docker Composeバージョンが指定されていません\" component=gopose timestamp=2025-06-10T23:31:03.180+09:00\ntime=2025-06-10T23:31:03.180+09:00 level=INFO msg=\"Docker Composeファイル解析完了\" component=gopose timestamp=2025-06-10T23:31:03.180+09:00 file=/Users/keishi.hara/src/github.com/harakeishi/gopose/compose.yml services_count=1\ntime=2025-06-10T23:31:03.191+09:00 level=INFO msg=ポートスキャン完了 component=gopose timestamp=2025-06-10T23:31:03.191+09:00 found_ports_count=18\ntime=2025-06-10T23:31:03.191+09:00 level=WARN msg=システムポート衝突検出 component=gopose timestamp=2025-06-10T23:31:03.191+09:00 port=3000 service=web\ntime=2025-06-10T23:31:03.191+09:00 level=INFO msg=ポート衝突検出完了 component=gopose timestamp=2025-06-10T23:31:03.191+09:00 conflicts_count=1\ntime=2025-06-10T23:31:03.191+09:00 level=INFO msg=ポート衝突検出完了 component=gopose timestamp=2025-06-10T23:31:03.191+09:00 conflicts_count=1\ntime=2025-06-10T23:31:03.202+09:00 level=INFO msg=ポートスキャン完了 component=gopose timestamp=2025-06-10T23:31:03.202+09:00 found_ports_count=18\ntime=2025-06-10T23:31:03.202+09:00 level=INFO msg=解決案最適化完了 component=gopose timestamp=2025-06-10T23:31:03.202+09:00 original_count=1 optimized_count=1\ntime=2025-06-10T23:31:03.202+09:00 level=INFO msg=ポート衝突解決完了 component=gopose timestamp=2025-06-10T23:31:03.202+09:00 resolved_conflicts=1\ntime=2025-06-10T23:31:03.202+09:00 level=INFO msg=ポート解決 component=gopose timestamp=2025-06-10T23:31:03.202+09:00 service=web from=3000 to=8001 reason=\"ポート 3000 から 8001 への自動変更\"\ntime=2025-06-10T23:31:03.205+09:00 level=INFO msg=\"既存Dockerネットワークを検出しました\" component=gopose timestamp=2025-06-10T23:31:03.205+09:00 network_count=3\ntime=2025-06-10T23:31:03.205+09:00 level=INFO msg=\"Docker Composeネットワーク設定を検出\" component=gopose timestamp=2025-06-10T23:31:03.205+09:00 network_count=1\ntime=2025-06-10T23:31:03.205+09:00 level=WARN msg=\"ネットワークサブネット競合を検出\" component=gopose timestamp=2025-06-10T23:31:03.205+09:00 network=default conflicting_subnet=\"172.20.0.0/24\"\ntime=2025-06-10T23:31:03.205+09:00 level=INFO msg=\"ネットワークサブネット競合を解決\" component=gopose timestamp=2025-06-10T23:31:03.205+09:00 network=default original_subnet=\"172.20.0.0/24\" new_subnet=\"10.20.0.0/24\"\ntime=2025-06-10T23:31:03.202+09:00 level=INFO msg=Override生成完了 component=gopose timestamp=2025-06-10T23:31:03.202+09:00 services_count=1\ntime=2025-06-10T23:31:03.202+09:00 level=INFO msg=Override検証完了 component=gopose timestamp=2025-06-10T23:31:03.202+09:00\ntime=2025-06-10T23:31:03.202+09:00 level=INFO msg=Overrideファイル書き込み完了 component=gopose timestamp=2025-06-10T23:31:03.202+09:00 output_path=compose.override.yml file_size=607\ntime=2025-06-10T23:31:03.202+09:00 level=INFO msg=Override.ymlファイルが生成されました component=gopose timestamp=2025-06-10T23:31:03.202+09:00 output_file=compose.override.yml\ntime=2025-06-10T23:31:03.202+09:00 level=INFO msg=\"既存のコンテナを停止してからDocker Composeを起動\" component=gopose timestamp=2025-06-10T23:31:03.202+09:00\n[+] Running 2/2\n ✔ Container gopose-web-1  Removed                                                                                         0.2s\n ✔ Network gopose_default  Removed                                                                                         0.2s\ntime=2025-06-10T23:31:03.779+09:00 level=INFO msg=\"Docker Composeを起動\" component=gopose timestamp=2025-06-10T23:31:03.779+09:00\ntime=2025-06-10T23:31:03.780+09:00 level=INFO msg=\"Docker Composeを実行\" component=gopose timestamp=2025-06-10T23:31:03.780+09:00 command=\"docker compose -f /Users/keishi.hara/src/github.com/harakeishi/gopose/compose.yml -f compose.override.yml up --force-recreate --remove-orphans\"\n[+] Running 2/2\n ✔ Network gopose_default  Created                                                                                         0.0s\n ✔ Container gopose-web-1  Created                                                                                         0.0s\nAttaching to web-1\n```\n\n## Reserved Ports\n\nThe `reserved` configuration allows you to specify ports that should never be assigned by gopose, regardless of whether they are currently in use.\n\n### Use Cases\n\n- **Future services**: Reserve ports for services you plan to start later\n- **Manual debugging**: Keep specific ports available for manual testing\n- **External tools**: Avoid conflicts with ports used by other development tools\n- **Consistency**: Ensure certain ports remain free across different environments\n\n### Example Configuration\n\n```yaml\n# .gopose.yaml\nport:\n  range:\n    start: 8000\n    end: 8100\n  reserved:\n    - 8080  # Reserved for main application\n    - 8443  # Reserved for HTTPS proxy\n    - 9000  # Reserved for debugging\n    - 9090  # Reserved for monitoring tools\n  exclude_privileged: true\n```\n\n### Behavior\n\nWith the above configuration:\n- If gopose needs to assign ports for Docker Compose services with conflicts on ports 80 and 443\n- It will skip ports 8080, 8443, 9000, and 9090 (even if they are not in use)\n- Available ports like 8000-8079, 8081-8442, 8444-8999, 9001-9089, 9091-8100 will be considered\n- For example, ports 8000, 8001, etc. might be assigned instead\n\n### Testing Reserved Ports\n\nYou can verify that reserved ports are working correctly:\n\n```bash\n# Create a test configuration\ncat \u003e .gopose.yaml \u003c\u003c EOF\nport:\n  range:\n    start: 8000\n    end: 8100\n  reserved: [8000, 8001, 8002, 8050]\nEOF\n\n# Run gopose - it will skip the reserved ports\ngopose up --dry-run\n\n# Check the generated compose.override.yml\n# You should see ports starting from 8003 (skipping 8000-8002)\n```\n\n## Network Conflict Avoidance\n\ngopose automatically detects subnet conflicts with existing Docker networks and assigns safe alternative subnets.\n\n### Feature Overview\n\n- **Auto-detection**: Automatically detects existing Docker network subnets\n- **Conflict avoidance**: Automatically generates safe alternative subnets when Docker Compose-defined network subnets conflict with existing networks\n- **Priority order**: Selects safe subnets in order: `10.x.x.x/24` \u003e `192.168.x.x/24` \u003e `172.x.x.x/24`\n- **Conflict avoidance**: Avoids Docker default ranges (`172.17-29.x.x`) and common home router ranges\n\n### Subnet Assignment Strategy\n\n1. **10.x.x.x/24 range**: Safest (starting from `10.20.0.0/24`)\n2. **192.168.x.x/24 range**: Avoids common home router ranges (starting from `192.168.100.0/24`)\n3. **172.x.x.x/24 range**: Last resort (starting from `172.30.0.0/24`, avoiding Docker default ranges)\n\n### Example\n\n```yaml\n# Original docker-compose.yml\nnetworks:\n  app-network:\n    ipam:\n      config:\n        - subnet: 172.20.0.0/24  # Conflicts with other Docker networks\n\n# Generated compose.override.yml\nnetworks:\n  app-network:\n    ipam:\n      config:\n        - subnet: 10.20.0.0/24  # Automatically changed to safe subnet\n```\n\n## Directory Structure\n\n```\ngopose/\n├── cmd/                 # CLI commands\n│   ├── root.go         # Cobra root command + DI container\n│   ├── up.go           # up subcommand\n│   ├── clean.go        # clean subcommand\n│   ├── status.go       # status subcommand\n│   ├── version.go      # version subcommand\n│   └── wire.go         # Dependency injection configuration (Wire)\n├── internal/           # Internal implementation\n│   ├── app/           # Application layer\n│   ├── scanner/       # Port scanning\n│   ├── parser/        # Docker Compose parsing\n│   ├── resolver/      # Conflict resolution\n│   ├── generator/     # Override generation\n│   ├── file/          # File operations\n│   ├── watcher/       # Process monitoring\n│   ├── cleanup/       # Auto-cleanup\n│   ├── config/        # Configuration management\n│   ├── logger/        # Logging functionality\n│   └── errors/        # Error handling\n├── pkg/               # Public packages\n│   ├── types/         # Type definitions\n│   └── testutil/      # Test utilities\n├── test/              # Tests\n│   ├── unit/          # Unit tests\n│   ├── integration/   # Integration tests\n│   └── e2e/           # E2E tests\n├── docs/              # Documentation\n├── scripts/           # Scripts\n└── deployments/       # Deployment configurations\n```\n\n## Development\n\n### Development Environment Setup\n\n```bash\n# Clone repository\ngit clone https://github.com/harakeishi/gopose.git\ncd gopose\n\n# Install dependencies\nmake deps\n\n# Development build\nmake dev\n\n# Run tests\nmake test\n\n# Code quality check\nmake check\n```\n\n### Make Tasks\n\n```bash\n# Build\nmake build              # Regular build\nmake build-all          # Build for all platforms\nmake dev                # Development build\n\n# Testing\nmake test               # Run all tests\nmake test-unit          # Unit tests\nmake test-integration   # Integration tests\nmake test-e2e           # E2E tests\nmake test-coverage      # Generate coverage\n\n# Code Quality\nmake fmt                # Code formatting\nmake lint               # Run linter\nmake vet                # Run go vet\nmake check              # Run all checks\n\n# Development\nmake run                # Execute\nmake clean              # Clean up\nmake deps               # Install dependencies\n\n# Release\nmake release            # Release build\nmake docker-build       # Docker image build\n```\n\n### Testing\n\n```bash\n# Run all tests\ngo test ./...\n\n# Test with coverage\ngo test -race -coverprofile=coverage.out ./...\n\n# Benchmark tests\ngo test -bench=. ./...\n\n# Run specific tests only\ngo test -run TestPortScanner ./internal/scanner/\n```\n\n## License\n\nThis project is published under the [MIT License](LICENSE).\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/t-daisuke\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/50610194?v=4?s=100\" width=\"100px;\" alt=\"doskoi\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003edoskoi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/harakeishi/gopose/commits?author=t-daisuke\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/litencatt\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/17349045?v=4?s=100\" width=\"100px;\" alt=\"Kosuke Nakamura\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKosuke Nakamura\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/harakeishi/gopose/commits?author=litencatt\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003eDeveloped by \u003ca href=\"https://github.com/harakeishi\"\u003eharakeishi\u003c/a\u003e\u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/harakeishi/gopose/issues\"\u003e🐛 Bug Reports\u003c/a\u003e •\n    \u003ca href=\"https://github.com/harakeishi/gopose/discussions\"\u003e💬 Discussions\u003c/a\u003e •\n    \u003ca href=\"https://github.com/harakeishi/gopose/wiki\"\u003e📖 Wiki\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharakeishi%2Fgopose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharakeishi%2Fgopose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharakeishi%2Fgopose/lists"}