Troubleshooting
August 17, 2026 ยท View on GitHub
Node.js is too old
node-GTFS requires Node.js 22 or newer.
node --version
Install a current Node.js release, start a new terminal, and run the command again if the reported major version is lower than 22.
gtfs-import is not found
Install node-GTFS in the current project and run the local command through
npx:
npm install gtfs
npx gtfs-import --help
If you installed with npm install --global gtfs, restart the terminal and
check that npm's global binary directory is on your PATH. A local installation
is usually easier to reproduce.
The database disappeared after import
SQLite defaults to an in-memory database when sqlitePath is omitted. An
in-memory database is deleted when the process exits. Import again with a file:
npx gtfs-import --gtfsPath ./data/gtfs.zip --sqlitePath ./gtfs.sqlite
Use that exact same path when querying, updating realtime data, or exporting.
The database is empty or has no GTFS tables
Common causes are:
- Importing into one database path and querying another
- Running commands from different directories with relative paths
- Importing into the default in-memory database
- Continuing after an error with
ignoreErrors: true - Excluding the table you expected to query
Use absolute paths temporarily if you are unsure which file a command opens. Review the import summary and any preceding warnings or errors.
The configuration file cannot be found
Without --configPath, commands look for config.json in the current working
directory, not necessarily beside your JavaScript file.
npx gtfs-import --configPath ./config/import.json
Check the current directory and make sure the filename uses the same letter case as the command.
The configuration is invalid JSON
JSON requires double quotes around keys and strings and does not allow trailing commas or comments. This is valid:
{
"agencies": [
{
"path": "./data/gtfs.zip"
}
],
"sqlitePath": "./gtfs.sqlite"
}
If you need functions, environment variables, or comments, configure node-GTFS in JavaScript instead of JSON.
SQLite cannot open the database
The parent directory must already exist and be writable. For example, create
data before using ./data/gtfs.sqlite:
mkdir data
Also check whether another process has locked the file and whether the path points to a directory instead of a database file.
The GTFS ZIP cannot be read
A GTFS ZIP should contain .txt files at its top level or inside one
subdirectory. Archives containing multiple feed subdirectories should be split
and listed as separate agency entries.
If importing an extracted directory, point path at the directory containing
agency.txt, stops.txt, and the other GTFS files.
better-sqlite3 does not install
better-sqlite3 is a native dependency. Start by using a supported Node.js
version and a current npm release:
node --version
npm --version
npm install gtfs
When a prebuilt binary is unavailable for your operating system or CPU, npm may need local compiler tools. The error output normally identifies the missing tool. Avoid suppressing install scripts because the native module needs its installation step.
Imports take a long time
Large feeds, especially those with shapes.txt and stop_times.txt, can use
substantial CPU, memory, and disk space. Let the import finish, make sure the
destination has free space, and exclude tables you do not need:
{
"agencies": [
{
"path": "./data/gtfs.zip",
"exclude": ["shapes"]
}
],
"sqlitePath": "./gtfs.sqlite"
}
Getting more diagnostic output
Use logLevel: "info", which is the default. Do not use ignoreErrors while
diagnosing an import unless you specifically need to inspect a partial import.
When opening an issue, include:
- node-GTFS version (
npx gtfs-import --version) - Node.js version (
node --version) - Operating system
- Command or minimal JavaScript example
- Complete error output
- A public feed URL, when possible
Remove credentials and private URLs before posting.