{"id":30442353,"url":"https://github.com/interline-io/transitland-server","last_synced_at":"2025-08-23T08:03:57.700Z","repository":{"id":37182298,"uuid":"386461336","full_name":"interline-io/transitland-server","owner":"interline-io","description":"Transitland Server","archived":false,"fork":false,"pushed_at":"2025-08-22T02:46:13.000Z","size":10755,"stargazers_count":8,"open_issues_count":2,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-22T03:47:51.373Z","etag":null,"topics":["golang","graphql-api","gtfs","gtfs-realtime","rest-api","transit","transitland","transportation"],"latest_commit_sha":null,"homepage":"https://pkg.go.dev/github.com/interline-io/transitland-server","language":"Go","has_issues":false,"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/interline-io.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}},"created_at":"2021-07-16T00:32:17.000Z","updated_at":"2025-08-22T02:46:14.000Z","dependencies_parsed_at":"2023-12-26T06:37:16.575Z","dependency_job_id":"68b97546-bda5-45eb-b4b7-d53772393ac1","html_url":"https://github.com/interline-io/transitland-server","commit_stats":{"total_commits":357,"total_committers":3,"mean_commits":119.0,"dds":0.06442577030812324,"last_synced_commit":"28c3a90e6af62d338e4e98dd6b303a6e1fa6b10f"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/interline-io/transitland-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interline-io%2Ftransitland-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interline-io%2Ftransitland-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interline-io%2Ftransitland-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interline-io%2Ftransitland-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/interline-io","download_url":"https://codeload.github.com/interline-io/transitland-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interline-io%2Ftransitland-server/sbom","scorecard":{"id":491373,"data":{"date":"2025-08-11","repo":{"name":"github.com/interline-io/transitland-server","commit":"fe9ca16d6231e65846a9dc6094d37700296f0eea"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.9,"checks":[{"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":"Maintained","score":10,"reason":"16 commit(s) and 0 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":"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/check-go-generate.yaml:9","Warn: no topLevel permission defined: .github/workflows/test.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":"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":"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":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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"}},{"name":"Pinned-Dependencies","score":1,"reason":"dependency not pinned by hash detected -- score normalized to 1","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check-go-generate.yaml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/interline-io/transitland-server/check-go-generate.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check-go-generate.yaml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/interline-io/transitland-server/check-go-generate.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check-go-generate.yaml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/interline-io/transitland-server/check-go-generate.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/interline-io/transitland-server/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/interline-io/transitland-server/test.yml/main?enable=pin","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 goCommand 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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (23) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":4,"reason":"6 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0635","Warn: Project is vulnerable to: GO-2022-0646","Warn: Project is vulnerable to: GO-2025-3770 / GHSA-vrw8-fxc6-2r93","Warn: Project is vulnerable to: GO-2025-3787 / GHSA-fv92-fjc5-jj9h","Warn: Project is vulnerable to: GO-2024-2937 / GHSA-9phm-fm57-rhg8","Warn: Project is vulnerable to: GO-2025-3488 / GHSA-6v2p-p543-phr9"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T19:15:16.201Z","repository_id":37182298,"created_at":"2025-08-19T19:15:16.201Z","updated_at":"2025-08-19T19:15:16.201Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271746016,"owners_count":24813533,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"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":["golang","graphql-api","gtfs","gtfs-realtime","rest-api","transit","transitland","transportation"],"created_at":"2025-08-23T08:02:06.659Z","updated_at":"2025-08-23T08:03:57.673Z","avatar_url":"https://github.com/interline-io.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Interline Transitland Server \u003c!-- omit in toc --\u003e\n\n[![GoDoc](https://godoc.org/github.com/interline-io/transitland-server?status.svg)](https://godoc.org/github.com/interline-io/transitland-server) ![Go Report Card](https://goreportcard.com/badge/github.com/interline-io/transitland-server)\n\n## Table of Contents \u003c!-- omit in toc --\u003e\n\u003c!-- to update use https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one --\u003e\n- [Installation](#installation)\n- [Usage](#usage)\n- [Usage as a web service](#usage-as-a-web-service)\n- [Development](#development)\n- [Licenses](#licenses)\n\n\n## Installation\n\n`cd cmd/tlserver \u0026\u0026 go install .`\n\n## Usage\n\nThe resulting [`tlserver`](docs/cli/tlserver.md) binary includes several core commands from `transitland-lib` and adds the `server` command.\n\nThe main subcommands are:\n* [tlserver server](docs/cli/tlserver_server.md)\t - Run transitland server\n* [tlserver version](docs/cli/tlserver_version.md)\t - Program version and supported GTFS and GTFS-RT versions\n* [tlserver fetch](docs/cli/tlserver_fetch.md)\t - Fetch GTFS data and create feed versions\n* [tlserver import](docs/cli/tlserver_import.md)\t - Import feed versions\n* [tlserver sync](docs/cli/tlserver_sync.md)\t - Sync DMFR files to database\n* [tlserver unimport](docs/cli/tlserver_unimport.md)\t - Unimport feed versions\n* [tlserver rebuild-stats](docs/cli/tlserver_rebuild-stats.md)\t - Rebuild statistics for feeds or specific feed versions\n\n## Usage as a web service\n\nTo start the server with the REST API endpoints, GraphQL API endpoint, GraphQL explorer UI, and image generation endpoints:\n\n```\ntlserver server --dburl \"postgres://your_host/your_database\"\n```\n\nAlternatively, the database connection string can be specified using `TL_DATABASE_URL` environment variable. For local development environments, you will usually need to add `?sslmode=disable` to the connection string.\n\nOpen http://localhost:8080/ in your web browser to see the GraphQL browser, or use the endpoints at `/query` or `/rest/...`\n\nThe REST API is documented with OpenAPI 3.0:\n- **Interactive documentation**: http://localhost:8080/rest/openapi.json\n- **Static schema**: [docs/openapi/rest.json](docs/openapi/rest.json)\n\nThe \"example\" server instance configured by the  `tlserver` command runs without authentication or authorization. Auth configuration is beyond the scope of this example command but can be added by configuring the server in your own package and adding HTTP middlewares to set user context and permissions data. You can use `cmd/tlserver/main.go` as an example to get started; it uses only public APIs from this package. (Earlier versions of `tlserver` included more built-in auth middlewares, but in our experience these are almost always custom per-installation, and were removed from this repo.) Additionally, this example server configuration exposes Go profiler endpoints on `/debug/pprof/...`. \n\n## Development\n\n1. Install `go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest`\n2. On macOS, you will need the GNU timeout command: `brew install coreutils`\n3. You will also need GDAL tools for importing reference data sets: `apt-get install gdal-bin`, or `brew install gdal-bin`, etc.\n4. Check out `github.com/interline-io/transitland-lib` which contains the necessary schema and migrations.\n5. Set `TL_TEST_SERVER_DATABASE_URL` to the connection string to a test database\n   - e.g. `postgresql://localhost:5432/tlv2_test_server?sslmode=disable`\n   - You must also set `PGHOST=localhost`, `PGDATABASE=tlv2_test_server`, etc., to match this url\n   - This requirement may be removed in the future\n1. Initialize test fixtures: `./testdata/server/test_setup.sh`\n   - This will create the `tlv2_test_server` database in postgres\n   - Will halt with an error (intentionally) if this database already exists\n   - Runs migrations in `transitland-lib/schema/postgres/migrations`\n   - Unpacks and imports the Natural Earth datasets bundled with `transitland-lib`\n   - Builds and installs the `cmd/tlserver` command\n   - Sets up test feeds contained in `testdata/server/server-test.dmfr.json`\n   - Fetches and imports feeds contained in `testdata/server/gtfs`\n   - Creates additional fixtures defined in `testdata/server/test_supplement.pgsql`\n   - Note that temporary files will be created in `testdata/server/tmp`; these are excluded in `.gitignore`\n2. Optional: Set `TL_TEST_REDIS_URL` to run some GBFS tests\n3. Optional: Set `TL_TEST_FGA_ENDPOINT` to a running [OpenFGA](https://github.com/openfga/openfga) server to run authorization tests\n4. Run all tests with `go test -v ./...`\n\nTest cases generally run within transactions; you do not need to regenerate the fixtures unless you are testing migrations or changes to data import functionality.\n  \n## Licenses\n\n`transitland-server` is released under a \"dual license\" model:\n\n- open-source for use by all under the [GPLv3](LICENSE) license\n- also available under a flexible commercial license from [Interline](mailto:info@interline.io)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finterline-io%2Ftransitland-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finterline-io%2Ftransitland-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finterline-io%2Ftransitland-server/lists"}