# dukascopy-node > Free historical tick and OHLC data for 1,499 forex pairs, stocks, indices, commodities and crypto. Download CSV or JSON for backtesting with Node.js or the CLI. Current version: 1.51.1. Requires Node.js >=20. Install with `npm install dukascopy-node`, or run the CLI with `npx dukascopy-node -i -from -to -t -f `. 1499 instruments are supported; ids are lowercase, e.g. eurusd, btcusd, aaplususd. ## Getting started - [Installation](https://www.dukascopy-node.app/installation): Install dukascopy-node with npm, pnpm or yarn, then run the CLI once to check that everything works. - [Quick start](https://www.dukascopy-node.app/quick-start): Download your first historical price dataset in under a minute, from the command line or from Node.js, and learn what the output looks like. ## Guides - [Forex data for backtesting](https://www.dukascopy-node.app/download-free-forex-tick-data): Download free historical forex tick data and 1-minute candles as CSV for backtesting, for EUR/USD, gold and hundreds of other currency pairs. - [Output formats](https://www.dukascopy-node.app/output-formats): dukascopy-node returns data as arrays, JSON objects or CSV. See the exact shape of candles and ticks in every format. - [Downloading tick data](https://www.dukascopy-node.app/downloading-tick-data): Download every price change, with bid and ask prices and volumes, for forex, stocks, crypto and more. Plus tips for large tick downloads. - [Date formats & time zones](https://www.dukascopy-node.app/custom-date-format-and-timezone-conversion): Format dukascopy-node timestamps as readable dates or ISO strings, and convert them to any time zone, from the CLI and from Node.js. - [Real-time data](https://www.dukascopy-node.app/downloading-real-time-data): Fetch the latest ticks and candles, including the period that is still in progress, with getRealTimeRates in Node.js. - [Using the cache](https://www.dukascopy-node.app/using-cache): Store downloaded data on disk so repeated or overlapping requests are served locally instead of from the network. - [Batching & rate limits](https://www.dukascopy-node.app/custom-batching): Control how fast dukascopy-node sends requests, what happens when Dukascopy rate-limits them, and how to tune large downloads. - [Errors & empty data](https://www.dukascopy-node.app/errors-and-empty-data): Handle invalid configs, failed requests, empty datasets, rate limits and refused access when downloading market data with dukascopy-node. - [TypeScript](https://www.dukascopy-node.app/with-typescript): dukascopy-node ships its own type definitions. The return type follows your config, and every instrument id autocompletes in your editor. - [Debugging](https://www.dukascopy-node.app/debugging): Turn on dukascopy-node's debug logs to see the resolved config, every request, cache hits and rate limiting. ## Reference - [Configuration](https://www.dukascopy-node.app/config): How dukascopy-node options map between Node.js and the CLI, the supported timeframes, date formats and defaults. - [CLI reference](https://www.dukascopy-node.app/config/cli): Every dukascopy-node command-line option, with its alias, default value and the matching Node.js property. - [Node.js API](https://www.dukascopy-node.app/config/node): The getHistoricalRates and getRealTimeRates functions and every config option of the dukascopy-node Node.js API, with types and defaults. ## Resources - [Instruments](https://www.dukascopy-node.app/instruments) - [Changelog](https://www.dukascopy-node.app/changelog) ## Optional - [Instrument index (JSON)](https://www.dukascopy-node.app/instruments.json): every instrument id with its name and description - [Source code](https://github.com/Leo4815162342/dukascopy-node) - [npm package](https://www.npmjs.com/package/dukascopy-node)