Hajk is an open source web GIS solution based on React, Material UI and OpenLayers. It is developed in Sweden and used by various municipalities and government agencies, as well as by public and private enterprises.
Please refer to CONTRIBUTING.md.
If you are a new user of Hajk, please visit our welcome page (Swedish only).
You can easily reach out to our community using the Discussions on GitHub.
The official, automatic build of the latest version can be found here: https://hajk-demo.netlify.app/.
For some real-life examples, see the following solutions:
- Halmstad municipality's map
- Kungsbacka municipality's map
- The City of Gothenburg's map
- The Gothenburg Region's map
- Varberg municipality's map
- Uddevalla municipality's map
Community extensions are additions developed by the community outside the scope of the core Hajk distribution. These can include anything from rewrites in other programming languages to customized integrations with specific business systems.
For a list of community extensions, please refer to this page.
Please refer to Hajk's official installation guide.
Note that Hajk consists of 3 applications: Client UI (which is the web map front end), Admin UI (which basically is a frontend for Client UI's configuration files) and a Backend service (the server application that provides the REST API consumed by the two UI applications).
Clone the repository: git clone https://github.com/hajkmap/Hajk.git
.
Note: There are currently two available backends for Hajk - you need to pick only one:
- NodeJS backend - platform agnostic and container-friendly. Can be deployed on any platform supported by NodeJS.
- NET backend - a re-implementation of the original (now deprecated) .NET backend, intended to implement the same API specification as the NodeJS API. Requires Windows and IIS.
If unsure on which backend to pick, it is recommended to choose the NodeJS solution. It is easier to setup because it only requires NodeJS (which you already have if you want to develop for Hajk anyway).
- In
hajk
repo dir, go toapps/backend
and install dependencies:
cd apps/backend
npm install
- Review the settings in
.env
. It's fine to leave the defaults. Note whichPORT
is specified, by default it is3002
. - Start the backend in development mode:
npm run dev
- Verify that the server is up and running by navigating to
http://localhost:3002
. There's also a nice API explorer available onhttp://localhost:3002/api-explorer/
.
- Make sure that you have a recent, supported version of Visual Studio and IIS installed.
- Open the SLN-files in
backend-dotnet
- Build and publish.
- Deploy to IIS.
See Docker README for more information.
Now when Backend is up and running, it's time to start the Client UI (and optionally Admin UI).
- You must tell the Client app the location of the running Backend. The configuration is made by editing
apps/client/public/appConfig.json
. Make sure thatmapserviceBase
is a valid URL to a running instance of the Backend (if you're using the NodeJS application and your Backend is running on port 3002, you should setmapserviceBase
to"http://localhost:3002/api/v2"
. - The client application resides inside
apps/client
. Go there (apps/client
) and install the dependencies and start by typing:npm i && npm start
. - Verify that Client is running on
http://localhost:3000
.
This process is similar to the Client app.
- Set the correct URL to Backend by editing
apps/admin/public/config.json
.
Map operations have moved to mapconfig so"url_map", "url_map_list", "url_map_create", "url_map_delete"
needs to point toward"http://localhost:3002/api/v2/mapconfig..."
, the rest is the same as forclient/
- The admin application is located in
apps/admin
. To get it running docd apps/admin && npm i && npm start
. - Verify that Admin is running on
http://localhost:3001
.
The provided NodeJS backend comes with a built-in, optional static files server that allows you to deploy the Client and Admin applications through the Hajk's backend application (hence leverage the optional Active Directory connection to restrict access to e.g. the Admin UI app). For details, see this section in Backend's README.