{"componentChunkName":"component---src-templates-developers-js","path":"/en/developers/user-interfaces/1-digitransit-ui/","result":{"data":{"childPages":{"edges":[{"node":{"fields":{"slug":"/en/developers/"},"frontmatter":{"title":"For developers","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/"},"frontmatter":{"title":"System architecture","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/api-registration/"},"frontmatter":{"title":"API portal and registration","order":-12,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/changes/"},"frontmatter":{"title":"Changes","order":-10,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/user-interfaces/"},"frontmatter":{"title":"User interfaces","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/deprecations/"},"frontmatter":{"title":"Deprecations","order":-11,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/docker-guide/"},"frontmatter":{"title":"Docker guide","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/"},"frontmatter":{"title":"APIs","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/"},"frontmatter":{"title":"Routing API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/2-routing-data-api/"},"frontmatter":{"title":"Routing data API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/4-map-api/"},"frontmatter":{"title":"Map API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/"},"frontmatter":{"title":"API architecture","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/6-api-faq/"},"frontmatter":{"title":"FAQ","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/"},"frontmatter":{"title":"Realtime APIs","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/3-geocoding-api/"},"frontmatter":{"title":"Geocoding API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/7-terms-of-use/"},"frontmatter":{"title":"Terms of use","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/user-interfaces/1-digitransit-ui/"},"frontmatter":{"title":"Digitransit-ui","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/0-graphql/"},"frontmatter":{"title":"GraphQL","order":10,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/3-realtime-information/"},"frontmatter":{"title":"Real-time information","order":40,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/2-glossary/"},"frontmatter":{"title":"Glossary","order":30,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/canceled-trips/"},"frontmatter":{"title":"Canceled trips","order":80,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/disruption-info/"},"frontmatter":{"title":"Disruption info","order":70,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/4-translations/"},"frontmatter":{"title":"Translation","order":50,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/routes/"},"frontmatter":{"title":"Routes","order":100,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/stops/"},"frontmatter":{"title":"Stops","order":110,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/bicycles-scooters-cars/"},"frontmatter":{"title":"Bicycles, cars and e-scooters","order":60,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/itinerary-planning/"},"frontmatter":{"title":"Itinerary planning","order":90,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/1-routing-api/"},"frontmatter":{"title":"Routing API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/2-routing-data-api/"},"frontmatter":{"title":"Routing Data","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/4-map-api/"},"frontmatter":{"title":"Map API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/5-realtime-api/"},"frontmatter":{"title":"Real-time APIs","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/3-geocoding-api/"},"frontmatter":{"title":"Geocoding API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/1-routing-api/1-graphiql/"},"frontmatter":{"title":"GraphiQL","order":20,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/4-map-api/background-map/"},"frontmatter":{"title":"Background map","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/1-getting-started/"},"frontmatter":{"title":"Getting started","order":10,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/3-geocoding-api/address-search/"},"frontmatter":{"title":"Address search","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/3-geocoding-api/autocomplete/"},"frontmatter":{"title":"Autocomplete","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/trip-updates/"},"frontmatter":{"title":"Trip updates","order":30,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/service-alerts/"},"frontmatter":{"title":"Service alerts","order":20,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/3-geocoding-api/address-lookup/"},"frontmatter":{"title":"Address lookup","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/4-map-api/pois/"},"frontmatter":{"title":"Points of interest","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/vehicle-positions/"},"frontmatter":{"title":"Vehicle positions","order":40,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/3-geocoding-api/data-container/"},"frontmatter":{"title":"Data builder and container","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/architecture/x-apis/3-geocoding-api/api/"},"frontmatter":{"title":"API","order":null,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/vehicle-positions/high-frequency-positioning/"},"frontmatter":{"title":"High-frequency positioning","order":20,"redirect":null}}},{"node":{"fields":{"slug":"/en/developers/apis/5-realtime-api/vehicle-positions/digitransit-mqtt/"},"frontmatter":{"title":"Digitransit MQTT broker","order":10,"redirect":null}}}]},"markdownRemark":{"fields":{"slug":"/en/developers/user-interfaces/1-digitransit-ui/"},"frontmatter":{"title":"Digitransit-ui","redirect":null,"toc":null,"description":{"info":"Digitransit-ui is a mobile friendly User interface built to work with Digitransit APIs.","architecture":"https://raw.githubusercontent.com/HSLdevcom/digitransit-site/master/src/pages/en/developers/user-interfaces/1-digitransit-ui/architecture.xml"},"assets":[{"title":"source","url":"https://github.com/HSLdevcom/digitransit-ui"},{"title":"DockerHub","url":"https://hub.docker.com/r/hsldevcom/digitransit-ui/"},{"title":"Dockerfile","url":"https://github.com/HSLdevcom/digitransit-ui/blob/v3/Dockerfile"}],"technologies":[{"title":"React","url":"https://react.dev/"},{"title":"Leaflet","url":"http://leafletjs.com/"},{"title":"Relay","url":"https://relay.dev/"}],"docker":{"dockerfile":"https://github.com/HSLdevcom/digitransit-ui/blob/v3/Dockerfile","imageName":"hsldevcom/digitransit-ui:v3-prod","buildScript":null,"runContainer":"docker run -p 8080:8080 -it -e CONFIG=hsl -e API_URL=https://api.digitransit.fi -e MAP_URL=https://cdn.digitransit.fi -e NODE_OPTS=--max_old_space_size=1500 -e API_SUBSCRIPTION_QUERY_PARAMETER_NAME=digitransit-subscription-key -e API_SUBSCRIPTION_HEADER_NAME=digitransit-subscription-key -e API_SUBSCRIPTION_TOKEN=<your subscription key> hsldevcom/digitransit-ui:v3-prod","accessContainer":"http://localhost:8080/"}},"html":"<p>Application is built with React. React components can access data in two different ways:</p>\n<ul>\n<li>Routing-API queries with Relay</li>\n<li>Other API with Flux model</li>\n</ul>\n<p>Basically, division between alternatives is:</p>\n<ul>\n<li>GraphQL is used to fetch data from server</li>\n<li>If server endpoint does not support GraphQL, flux can be used to retrieve that data</li>\n<li>Flux stores are mainly used to store application state</li>\n</ul>\n<h2 id=\"installation\" style=\"position:relative;\"><a href=\"#installation\" aria-label=\"installation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Installation</h2>\n<p>Installation instructions are <a href=\"https://github.com/HSLdevcom/digitransit-ui/blob/v3/docs/Installation.md\">available at GitHub</a></p>\n<h2 id=\"tests\" style=\"position:relative;\"><a href=\"#tests\" aria-label=\"tests permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Tests</h2>\n<p>Unit testing is used.</p>\n<h2 id=\"service-dependencies\" style=\"position:relative;\"><a href=\"#service-dependencies\" aria-label=\"service dependencies permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Service dependencies</h2>\n<table>\n<thead>\n<tr>\n<th>Asset</th>\n<th>Url</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Routing - API</td>\n<td><a href=\"https://digitransit.fi/en/developers/apis/1-routing-api/\">https://digitransit.fi/en/developers/apis/1-routing-api/</a></td>\n</tr>\n<tr>\n<td>Realtime HSL - API</td>\n<td><a href=\"https://digitransit.fi/en/developers/apis/5-realtime-api/\">https://digitransit.fi/en/developers/apis/5-realtime-api/</a></td>\n</tr>\n<tr>\n<td>Map - API</td>\n<td><a href=\"https://digitransit.fi/en/developers/apis/4-map-api/\">https://digitransit.fi/en/developers/apis/4-map-api/</a></td>\n</tr>\n<tr>\n<td>Geocoding - API</td>\n<td><a href=\"https://digitransit.fi/en/developers/apis/3-geocoding-api/\">https://digitransit.fi/en/developers/apis/3-geocoding-api/</a></td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"key-service-delivery-activities\" style=\"position:relative;\"><a href=\"#key-service-delivery-activities\" aria-label=\"key service delivery activities permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Key service delivery activities</h2>\n<ol>\n<li>Keep up with key project dependencies on GitHub</li>\n</ol>\n<table>\n<thead>\n<tr>\n<th>Dependecy</th>\n<th>url</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>React</td>\n<td><a href=\"https://github.com/facebook/react\">https://github.com/facebook/react</a></td>\n</tr>\n<tr>\n<td>React-leaflet</td>\n<td><a href=\"https://github.com/PaulLeCam/react-leaflet\">https://github.com/PaulLeCam/react-leaflet</a></td>\n</tr>\n<tr>\n<td>React-router</td>\n<td><a href=\"https://github.com/rackt/react-router\">https://github.com/rackt/react-router</a></td>\n</tr>\n<tr>\n<td>React-autosuggest</td>\n<td><a href=\"https://github.com/moroshko/react-autosuggest\">https://github.com/moroshko/react-autosuggest</a></td>\n</tr>\n<tr>\n<td>react-router-relay</td>\n<td><a href=\"https://github.com/relay-tools/react-router-relay\">https://github.com/relay-tools/react-router-relay</a></td>\n</tr>\n<tr>\n<td>Relay</td>\n<td><a href=\"https://github.com/facebook/relay\">https://github.com/facebook/relay</a></td>\n</tr>\n<tr>\n<td>Babel relay plugin</td>\n<td><a href=\"https://github.com/facebook/relay\">https://github.com/facebook/relay</a></td>\n</tr>\n<tr>\n<td>Fluxible</td>\n<td><a href=\"https://github.com/yahoo/fluxible\">https://github.com/yahoo/fluxible</a></td>\n</tr>\n<tr>\n<td>Leaflet</td>\n<td><a href=\"https://github.com/Leaflet/Leaflet\">https://github.com/Leaflet/Leaflet</a></td>\n</tr>\n<tr>\n<td>MQTT.js</td>\n<td><a href=\"https://github.com/mqttjs/MQTT.js\">https://github.com/mqttjs/MQTT.js</a></td>\n</tr>\n<tr>\n<td>Polyfill-service</td>\n<td><a href=\"https://github.com/Financial-Times/polyfill-service\">https://github.com/Financial-Times/polyfill-service</a></td>\n</tr>\n<tr>\n<td>PBF</td>\n<td><a href=\"https://github.com/mapbox/pbf\">https://github.com/mapbox/pbf</a></td>\n</tr>\n<tr>\n<td>Webpack</td>\n<td><a href=\"https://github.com/webpack/webpack\">https://github.com/webpack/webpack</a></td>\n</tr>\n</tbody>\n</table>\n<ol start=\"2\">\n<li>Follow GraphQL specification<br/>\n<a href=\"https://graphql.org/https://graphql.org/\">https://graphql.org/https://graphql.org/</a></li>\n<li>From time to time check HSL style guide<br/>\n<a href=\"https://www.hsl.fi/tyyliopas\">https://www.hsl.fi/tyyliopas</a></li>\n<li>Follow EcmaScript, and browser development<br/>\n<a href=\"https://esdiscuss.org/\">https://esdiscuss.org/</a><br/>\n<a href=\"https://discuss.babeljs.io/\">https://discuss.babeljs.io/</a><br/>\n<a href=\"http://www.ecma-international.org/news/index.html\">http://www.ecma-international.org/news/index.html</a><br/>\n<a href=\"http://caniuse.com/#info_news\">http://caniuse.com/#info_news</a></li>\n</ol>","tableOfContents":"<ul>\n<li><a href=\"/en/developers/user-interfaces/1-digitransit-ui/#installation\">Installation</a></li>\n<li><a href=\"/en/developers/user-interfaces/1-digitransit-ui/#tests\">Tests</a></li>\n<li><a href=\"/en/developers/user-interfaces/1-digitransit-ui/#service-dependencies\">Service dependencies</a></li>\n<li><a href=\"/en/developers/user-interfaces/1-digitransit-ui/#key-service-delivery-activities\">Key service delivery activities</a></li>\n</ul>","excerpt":"Application is built with React. React components can access data in two different ways: Routing-API queries with Relay Other API with Flux model Basically, division between alternatives is: GraphQL…"}},"pageContext":{"slug":"/en/developers/user-interfaces/1-digitransit-ui/"}},"staticQueryHashes":["3675773199","4050193485"]}