By submitting a pull request, you irrevocably assign all copyright and related rights in your contribution to the project maintainer, and waive any moral rights you may hold in such contribution to the fullest extent permitted by applicable law. You represent that you are legally entitled to make this assignment and that your contribution is your original work.
If you are contributing on behalf of your employer, you confirm that your employer has authorized you to make this assignment.
Contributions are welcome for the open-source modules:
- hijarr-proxy: DNS hijacking, Torznab fission search, SRN subtitle sync, Sonarr integration
- hijarr-uploader: SRN upload SDK/CLI
The scraping and cleaning core (hijarr-scraper) is not open-source and does not accept external contributions.
- Go 1.25+
CGO_ENABLED=0— the project usesmodernc.org/sqlite(pure Go SQLite). CGO must be disabled to avoid compiler conflicts.- The
SRNApiClientshared module is a local dependency:replace github.com/DeliYuxiang/SRNApiClient => ../srnrelay. Clone it as a sibling directory before building.
-
Read the docs first — in order:
CLAUDE.md— build commands, architecture, constraintsdocs/CODEREF.md— auto-generated symbol indexdocs/progress.md— active risks and current project state
-
Build before and after every change:
CGO_ENABLED=0 go build ./...
-
Run all tests:
CGO_ENABLED=0 go test ./... -
Regenerate the code symbol index if you changed Go source files:
CGO_ENABLED=0 go run ./tools/coderef > docs/CODEREF.md -
Keep PRs focused — one concern per PR.
Use Conventional Commits:
feat: new feature
fix: bug fix
chore: CI, deps, config
docs: documentation only
test: tests only
refactor: code restructuring without behavior change
- Never skip
CGO_ENABLED=0—modernc.org/sqliterequires pure Go mode. - Never register extra Gin routes adjacent to
/*pathwildcard routes — causes a Gin panic. All SPA catch-all routes are registered at the end ofRegisterRoutes. - Never implement feeder/scraper-side logic (disk scan, RSS, qBittorrent, LLM subtitle cleaning) in this repository — those belong in
srnfeeder. - Never modify
docs/CODEREF.mdmanually — it is auto-generated bygo run ./tools/coderef.
- Branch off
main CGO_ENABLED=0 go build ./...— confirm clean build before and afterCGO_ENABLED=0 go test ./...— all tests must pass- If code changed:
CGO_ENABLED=0 go run ./tools/coderef > docs/CODEREF.md - Keep PRs focused — one concern per PR