{"id":19004963,"url":"https://github.com/dhis2/app-hub","last_synced_at":"2025-07-20T13:33:01.901Z","repository":{"id":12894546,"uuid":"73070140","full_name":"dhis2/app-hub","owner":"dhis2","description":"DHIS2 Application Hub","archived":false,"fork":false,"pushed_at":"2025-07-10T12:50:23.000Z","size":56986,"stargazers_count":9,"open_issues_count":36,"forks_count":4,"subscribers_count":31,"default_branch":"master","last_synced_at":"2025-07-10T20:03:04.973Z","etag":null,"topics":["backend","frontend","synced-settings","tx","web-app"],"latest_commit_sha":null,"homepage":"https://apps.dhis2.org","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dhis2.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2016-11-07T11:04:57.000Z","updated_at":"2025-07-10T12:50:25.000Z","dependencies_parsed_at":"2024-11-08T18:31:30.012Z","dependency_job_id":"6471128a-adc9-4a2d-a127-7ad44cffd5a0","html_url":"https://github.com/dhis2/app-hub","commit_stats":null,"previous_names":[],"tags_count":112,"template":false,"template_full_name":null,"purl":"pkg:github/dhis2/app-hub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhis2%2Fapp-hub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhis2%2Fapp-hub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhis2%2Fapp-hub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhis2%2Fapp-hub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dhis2","download_url":"https://codeload.github.com/dhis2/app-hub/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhis2%2Fapp-hub/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266135013,"owners_count":23881774,"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","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":["backend","frontend","synced-settings","tx","web-app"],"created_at":"2024-11-08T18:25:31.976Z","updated_at":"2025-07-20T13:33:01.884Z","avatar_url":"https://github.com/dhis2.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# App Hub for DHIS 2\n\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n# Environments\n\n| Branch                                                   | Environment | URL                             | Build status                                                                                                |\n| -------------------------------------------------------- | ----------- | ------------------------------- | ----------------------------------------------------------------------------------------------------------- |\n| [`next`](https://github.com/dhis2/app-hub/tree/next)     | staging     | https://staging.apps.dhis2.org/ | ![app-hub staging](https://github.com/dhis2/app-hub/workflows/dhis2-docker%20ci/badge.svg?branch=next)      |\n| [`master`](https://github.com/dhis2/app-hub/tree/master) | production  | https://apps.dhis2.org/         | ![app-hub production](https://github.com/dhis2/app-hub/workflows/dhis2-docker%20ci/badge.svg?branch=master) |\n\n# Getting started\n\n## Docker Compose\n\nSee docs in [dhis2/docker-compose/app-hub](https://github.com/dhis2/docker-compose/blob/master/app-hub/README.md).\n\n## Local Installation\n\n1. Install dependencies with `yarn install`\n2. Copy `server/.env.template` to `server/.env` (`cp server/.env.template server/.env`) and edit `server/.env`. For development, your config will\n   probably look something like:\n    ```\n    NODE_ENV=development\n    RDS_USERNAME=postgres\n    RDS_PASSWORD=postgres\n    NO_AUTH_MAPPED_USER_ID=true\n    ```\n3. Create database tables with `yarn db:migrate`.\n4. Seed the database with `yarn db:seed`\n\n### Run\n\n`yarn start`\n\n### Reset database\n\n`yarn db:reset`\n\n## Backend config file\n\nThe backend config file `server/.env` contains credentials for the database, AWS S3 bucket and Auth0.\n\nAvailable options are documented in [`.env.template`](server/.env.template).\n\nSee [`server/knexfile.js`](server/knexfile.js) to specify which database connections/credentials or server to use depending on the value of `process.env.NODE_ENV`.\n\n## Frontend config\n\nThe frontend needs to know some basic information about the server to configure routes and API endpoints.\nThis is located in [`client/default.config.js`](client/default.config.js).\n\nYou can rename or copy this file to override the settings.\n\nConfig files are loaded in the following order:\n\n1. `default.config.js`\n2. `config.js`\n\nEnvironment specific configurations are also supported, and are loaded if `process.env.NODE_ENV` is set to either `development` or `production`.\n\n-   `development.config.js`\n-   `production.config.js`\n\nNote that the exported objects from each config file are merged with the previous, so any options not changed are kept from the previous config.\n\n_Note: If you make any changes, you will need to rebuild or restart webpack-dev-server for the changes to take effect._\n\n### Example Development Config\n\n```javascript\n// development.config.js\n\nmodule.exports = {\n    api: {\n        baseURL: 'http://localhost:3000/api/',\n        redirectURL: 'http://localhost:3000/user',\n    },\n    routes: {\n        baseAppName: '',\n    },\n}\n```\n\n##### Base app name\n\nThis is the basename of where the app is located, used by routes. If it's hosted at `http://localhost:3000/someUrl` this should be `someUrl` otherwise leave empty.\n\n```javascript\nroutes.baseAppName: ''\n```\n\n##### API BaseURL\n\nThe endpoint of the backend API to be used.\n\n```javascript\napi.baseURL: 'http://localhost:3000/api/',\n```\n\n##### API Redirect URL\n\nThe URL to be used when auth0 has successfully logged in a user, and is redirected back to the page. Note that this URL needs to be whitelisted on the auth0 side aswell.\n\n```javascript\napi.redirectURL: 'http://localhost:3000/user/'\n```\n\n# Run the project\n\n`yarn start` will start both the frontend and backend.\n\nFrontend available at `localhost:8080`.\nWeb API available at `localhost:3000/api/v1`.\n\nSwagger UI available at `localhost:3000/documentation`\nSwagger specs available at `localhost:3000/swagger.json`\n\n# Clone the existing production App Hub (approved/published apps) to your own local App Hub\n\n```bash\nyarn start\n```\n\nand then in another terminal:\n\n```bash\nyarn run clone\n```\n\n# Release\n\nThis application is automatically released when merging into controlled\nbranches.\n\n-   The `next` branch is deployed to **staging**.\n-   The `master` branch is deployed to **production**.\n\nSo: **all work should be merged to `next`, and then `next` is merged to\n`master` when we decide to cut a release**.\n\n## Report an issue\n\nThe issue tracker can be found in [DHIS2 JIRA](https://jira.dhis2.org)\nunder the [HUB](https://jira.dhis2.org/projects/HUB) project.\n\nDeep links:\n\n-   Client:\n\n    -   [Bug](https://jira.dhis2.org/secure/CreateIssueDetails!init.jspa?pid=10100\u0026issuetype=10006\u0026components=10314)\n    -   [Feature](https://jira.dhis2.org/secure/CreateIssueDetails!init.jspa?pid=10100\u0026issuetype=10300\u0026components=10314)\n    -   [Task](https://jira.dhis2.org/secure/CreateIssueDetails!init.jspa?pid=10100\u0026issuetype=10003\u0026components=10314)\n\n-   Server:\n    -   [Bug](https://jira.dhis2.org/secure/CreateIssueDetails!init.jspa?pid=10100\u0026issuetype=10006\u0026components=10315)\n    -   [Feature](https://jira.dhis2.org/secure/CreateIssueDetails!init.jspa?pid=10100\u0026issuetype=10300\u0026components=10315)\n    -   [Task](https://jira.dhis2.org/secure/CreateIssueDetails!init.jspa?pid=10100\u0026issuetype=10003\u0026components=10315)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhis2%2Fapp-hub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdhis2%2Fapp-hub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhis2%2Fapp-hub/lists"}