{"id":13398913,"url":"https://github.com/sipcapture/homer","last_synced_at":"2026-05-31T00:03:06.791Z","repository":{"id":15480647,"uuid":"18214229","full_name":"sipcapture/homer","owner":"sipcapture","description":"HOMER - 100% Open-Source SIP, VoIP, RTC Packet Capture \u0026 Monitoring","archived":false,"fork":false,"pushed_at":"2026-05-29T19:01:24.000Z","size":7698,"stargazers_count":1962,"open_issues_count":0,"forks_count":255,"subscribers_count":117,"default_branch":"homer11","last_synced_at":"2026-05-29T20:21:29.785Z","etag":null,"topics":["analytics","callflow","capture-agent","cdr","correlation","encapsulation","flow","hep","kamailio","monitoring","opensips","packet-capture","packet-sniffer","pcap","rtc","sip","statistics","troubleshooting","voip","webrtc"],"latest_commit_sha":null,"homepage":"http://sipcapture.org","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sipcapture.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},"funding":{"github":["qxip"],"custom":["https://www.paypal.me/sipcapture","https://bunq.me/qxip"]}},"created_at":"2014-03-28T14:11:48.000Z","updated_at":"2026-05-29T18:58:33.000Z","dependencies_parsed_at":"2023-01-13T18:26:57.256Z","dependency_job_id":"e5deea1b-a63b-482a-8f03-ff0c653ab916","html_url":"https://github.com/sipcapture/homer","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/sipcapture/homer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sipcapture%2Fhomer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sipcapture%2Fhomer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sipcapture%2Fhomer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sipcapture%2Fhomer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sipcapture","download_url":"https://codeload.github.com/sipcapture/homer/tar.gz/refs/heads/homer11","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sipcapture%2Fhomer/sbom","scorecard":{"id":827493,"data":{"date":"2025-08-11","repo":{"name":"github.com/sipcapture/homer","commit":"e14bff856a2181b9e1bd1c140948c4b17bbf537b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.4,"checks":[{"name":"Maintained","score":10,"reason":"8 commit(s) and 8 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/heplify-server-builder.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/sipcapture/homer/heplify-server-builder.yml/homer10?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/heplify-server-builder.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/sipcapture/homer/heplify-server-builder.yml/homer10?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/heplify-server-builder.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/sipcapture/homer/heplify-server-builder.yml/homer10?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/homer-app-builder.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/sipcapture/homer/homer-app-builder.yml/homer10?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/homer-app-builder.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/sipcapture/homer/homer-app-builder.yml/homer10?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/homer-app-builder.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/sipcapture/homer/homer-app-builder.yml/homer10?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/star.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/sipcapture/homer/star.yml/homer10?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/submodules.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/sipcapture/homer/submodules.yml/homer10?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/heplify-server-builder.yml:16","Info: jobLevel 'contents' permission set to 'read': .github/workflows/homer-app-builder.yml:16","Warn: no topLevel permission defined: .github/workflows/heplify-server-builder.yml:1","Warn: no topLevel permission defined: .github/workflows/homer-app-builder.yml:1","Warn: no topLevel permission defined: .github/workflows/star.yml:1","Warn: no topLevel permission defined: .github/workflows/submodules.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU Affero General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'homer10'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}}]},"last_synced_at":"2025-08-23T16:54:18.249Z","repository_id":15480647,"created_at":"2025-08-23T16:54:18.249Z","updated_at":"2025-08-23T16:54:18.249Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33714034,"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-05-30T02:00:06.278Z","response_time":92,"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":["analytics","callflow","capture-agent","cdr","correlation","encapsulation","flow","hep","kamailio","monitoring","opensips","packet-capture","packet-sniffer","pcap","rtc","sip","statistics","troubleshooting","voip","webrtc"],"created_at":"2024-07-30T19:00:32.668Z","updated_at":"2026-05-31T00:03:06.783Z","avatar_url":"https://github.com/sipcapture.png","language":"Go","funding_links":["https://github.com/sponsors/qxip","https://www.paypal.me/sipcapture","https://bunq.me/qxip"],"categories":["Contribution Guidelines","Shell","Interconnect","Install from Source","Monitoring and Capturing","Apps","analytics","Go","Operations"],"sub_categories":["Full-Stack Applications","SBC, IMS","Troubleshooting","Monitoring"],"readme":"\u003cimg src=\"https://github.com/user-attachments/assets/85d47c71-0feb-452a-b45a-2519b44a7fac\" width=215 /\u003e\n\n# homer eleven\n\u003e 100% Opensource Telecom Observability since 2011\n\n`homer` is the *all-in-one* HEP capture and API server monolith powering Homer 11.x data lake\n\n\u003cimg width=\"600\"  alt=\"homer11\" src=\"https://github.com/user-attachments/assets/1ee359d4-f2e1-41d3-9965-22a244d06e1e\" /\u003e\n\n## Features\n\n- All-in-One Application *(Writer, Reader, Coordinator, Compactor, API)*\n- Modern Codebase in golang for X64/ARM64 on Linux/MacOS\n- Powered by DuckDB 1.5 and Apache Arrow/IPC/Parquet\n- Datalake design based on DuckLake Catalog and Local/Object Storage\n- End-to-End Columnar OTLP Design w/ on-demand query execution\n- Linear Scaling to query over shared Object Storage catalog/pool\n- Flexible Schema support for growing problems and protocols\n- Backwards compatible with all HEPv3 Agents\n- Easy to maintain, operate and scale *(down to zero!)*\n- Cloud Native Design for K8s and standard deployments\n- Built-In User Interface for Humans\n- MCP support and LLM/Agent friendly design *(steal our boring jobs)*\n\n\n## Architecture\n\nHomer uses a modular architecture with four main components:\n\n```\n┌─────────────────────────────────────────────────────────────────────────────┐\n│                           Homer Core                                        │\n│                                                                             │\n│  ┌─────────────┐   ┌─────────────┐   ┌──────────┐   ┌─────────────────┐     │\n│  │   Ingest    │   │   Storage   │   │   Node   │   │   Coordinator   │     │\n│  │  (HEP recv) │──▶│  (DuckLake) │──▶│ gRPC/HTTP│──▶│    (REST API)   │     │\n│  └─────────────┘   └─────────────┘   └──────────┘   └─────────────────┘     │\n│   UDP/TCP/HTTP      Parquet+S3     Airport :50051     HTTP :8080            │\n│                                    FlightSQL :50055  (opt. proxy :32010)    │\n└─────────────────────────────────────────────────────────────────────────────┘\n```\n\n### Modules\n\n| Module | Description |\n|--------|-------------|\n| **Ingest** | Receives HEP packets via UDP/TCP/TLS/HTTP/HTTPS |\n| **Storage** | Writes data to DuckLake (Parquet + catalog) |\n| **Node** | Airport gRPC + HTTP `/query`; optional Arrow FlightSQL for Grafana ([docs/FLIGHTSQL.md](docs/FLIGHTSQL.md)) |\n| **Coordinator** | REST API gateway for UI and external applications |\n\n## Quick Start\n\n### Install Options\n\n- Download a [release](https://github.com/sipcapture/homer/releases) and install the `homer` package on your OS/arch\n- Use the official [docker builds](https://github.com/sipcapture/homer/pkgs/container/homer) and [compose examples](https://github.com/sipcapture/homer/tree/homer11/examples/docker)\n- Build your own release locally _(keep reading)_\n\n### All-in-One Deployment\n\n```json\n{\n  \"ingest\": {\n    \"enable\": true,\n    \"udp\": { \"enable\": true, \"port\": 9060 },\n    \"tcp\": { \"enable\": true, \"port\": 9061 },\n    \"http\": { \"enable\": true, \"port\": 9080 }\n  },\n  \"storage\": {\n    \"enable\": true,\n    \"ducklake\": {\n      \"catalog_path\": \"/data/homer/homer_catalog.sqlite\",\n      \"data_path\": \"/data/homer/parquet\"\n    }\n  },\n  \"node\": {\n    \"enable\": true,\n    \"flight_server\": { \"port\": 50051 }\n  },\n  \"coordinator\": {\n    \"enable\": true,\n    \"http_server\": { \"port\": 8080 }\n  }\n}\n```\n\n\u003e For more storage options consult the available [STORAGE POLICIES](https://github.com/sipcapture/homer/blob/homer11/docs/STORAGE_POLICIES.md)\n\n\n### Build \u0026 Run\n\n```bash\n# Build\nmake\n\n# Run as server (default mode)\n./homer --config-path /etc/homer/homer.json\n\n# With debug logging\n./homer --config-path /etc/homer/homer.json --log-level debug\n```\n\n## Subcommands\n\nHomer uses a subcommand-based CLI. Running `homer` without arguments starts the server.\n\n```\nhomer                         Run the server (default)\nhomer search [flags]          Search Homer data via coordinator API\nhomer cli [flags]             Interactive DuckLake SQL shell\nhomer system [flags]          System operations (compaction, extensions, reload)\nhomer wizard [flags]          Interactive config generator wizard\nhomer mcp [flags]             Start MCP stdio server\nhomer version                 Show version\nhomer help                    Show full help with all flags\n```\n\n### Server Mode (default)\n\n```bash\nhomer --config-path /etc/homer/homer.json\nhomer --config-path /etc/homer/homer.json --log-level debug --syslog-disable\n```\n\n| Flag | Description |\n|------|-------------|\n| `--config-path \u003cpath\u003e` | Path to config file or directory |\n| `--log-level \u003clevel\u003e` | Log level: debug, info, warn, error, trace |\n| `--syslog-disable` | Disable syslog, use only stdout |\n| `--pid-file \u003cpath\u003e` | PID file path (default: /var/run/homer-core.pid) |\n\n### Search (via coordinator API)\n\nSearch Homer data from the command line with table, vertical, CSV, JSON, chart, call flow, or **PCAP** output (SIP only; use `--format pcap` with `-o` / `--output`).\n\n```bash\n# Basic SIP search (last hour)\nhomer search --host 10.0.0.1:8081 --user admin --pass secret\n\n# Search INVITE messages with call flow diagram\nhomer search --host 10.0.0.1:8081 --method INVITE --format callflow\n\n# Export SIP messages to a pcap file (same framing as API /transactions/export/pcap)\nhomer search --host 10.0.0.1:8081 --call-id \"abc123@host\" --format pcap -o /tmp/call.pcap\n\n# Search by Call-ID\nhomer search --host 10.0.0.1:8081 --call-id \"abc123@host\" --format vertical\n\n# Post-filter: only INVITEs and BYEs, exclude provisional responses\nhomer search --host 10.0.0.1:8081 --grep \"INVITE,BYE\" --exclude \"100,183\"\n\n# Interactive TUI mode\nhomer search --host 10.0.0.1:8081 --interactive\n```\n\nSee [docs/SEARCH.md](docs/SEARCH.md) for full documentation and examples.\n\n### CLI (DuckLake SQL Shell)\n\nInteractive SQL shell for direct DuckLake queries:\n\n```bash\n# Start interactive CLI\nhomer cli --config-path /etc/homer/homer.json\n\n# Execute single query and exit\nhomer cli --config-path /etc/homer/homer.json --query \"SELECT COUNT(*) FROM homer_lake.main.hep_proto_1_call\"\n```\n\n| Command | Description |\n|---------|-------------|\n| `help`, `\\h`, `\\?` | Show help |\n| `tables`, `\\dt` | List available tables |\n| `clear`, `\\c` | Clear screen |\n| `exit`, `quit`, `\\q` | Exit CLI |\n\n### System Operations\n\n```bash\n# Run full compaction\nhomer system --config-path /etc/homer/homer.json --compaction-force\n\n# Install DuckDB extensions\nhomer system --config-path /etc/homer/homer.json --install-extensions\n\n# Show DuckDB version\nhomer system --config-path /etc/homer/homer.json --duckdb-version\n\n# Generate example config\nhomer system --generate-example-config \u003e homer.json\n\n# Reload running process\nhomer system --reload\n```\n\n### Wizard (Config Generator)\n\nInteractive wizard that generates a complete `homer.json` config:\n\n```bash\n# Interactive TUI wizard\nhomer wizard\n\n# Non-interactive: generate config for a specific deployment profile\nhomer wizard --profile all-in-one --output homer.json\nhomer wizard --profile writer --output homer-writer.json\nhomer wizard --profile coordinator --output homer-coordinator.json\nhomer wizard --profile edge --output homer-edge.json\nhomer wizard --profile node --output homer-node.json\n```\n\n| Profile | Modules Enabled |\n|---------|----------------|\n| `all-in-one` | ingest + storage + node + coordinator |\n| `writer` | ingest + storage |\n| `edge` | ingest + storage + node |\n| `coordinator` | coordinator only |\n| `node` | node only |\n\n## Configuration Examples\n\nSee the `examples/` directory:\n\n| File | Description |\n|------|-------------|\n| `homer.json` | All-in-one deployment |\n| `homer-writer.json` | Ingest + Storage + Node |\n| `homer-node.json` | Node only (read-only) |\n| `homer-coordinator.json` | Coordinator only |\n| `homer-edge.json` | Edge deployment |\n\n## Documentation\n\n**Published docs (GitHub Pages):** [https://sipcapture.github.io/homer/](https://sipcapture.github.io/homer/) — built from `docs/` via MkDocs on push to `homer11`. Enable **Settings → Pages → Build and deployment: GitHub Actions** once after the first workflow run.\n\n```bash\npython3 -m venv .venv-docs \u0026\u0026 .venv-docs/bin/pip install -r docs-requirements.txt\n.venv-docs/bin/mkdocs serve   # http://127.0.0.1:8000\n```\n\n- [Search CLI](docs/SEARCH.md) - Search from the command line (examples, formats, call flow)\n- [Config Wizard](docs/WIZARD.md) - Interactive config generator (TUI + presets)\n- [Ingest performance tuning](docs/INGEST_PERFORMANCE.md) - multicore, DuckLake batch size, Prometheus flush interval; **`scripts/profile_ingest_load.sh`** / **`make profile-ingest`** for repeatable CPU profiles\n- [Coordinator Module](docs/COORDINATOR.md) - REST API gateway\n- [MCP UI Guide](docs/MCP_UI_GUIDE.md) - Natural-language query assistant (configuration + UI usage)\n- [Node Module](docs/NODE.md) - FlightSQL data server\n- [Storage Architecture](docs/STORAGE_ARCHITECTURE.md) - DuckLake storage\n- [Storage Policies](docs/STORAGE_POLICIES.md) - Tiered storage (hot/cold)\n- [Compaction Setup](docs/COMPACTION_SETUP.md) - File compaction\n\n## License\nReleased under the [AGPL-3.0 License](LICENSE.md)\n\n\u003e Copyright (C) 2025 QXIP BV\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsipcapture%2Fhomer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsipcapture%2Fhomer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsipcapture%2Fhomer/lists"}