diff --git a/apps/guides/hosting/4.x/adding-tls-certificates/index.html b/apps/guides/hosting/4.x/adding-tls-certificates/index.html index beecda9ab..a76b99484 100644 --- a/apps/guides/hosting/4.x/adding-tls-certificates/index.html +++ b/apps/guides/hosting/4.x/adding-tls-certificates/index.html @@ -1,8 +1,8 @@ Adding TLS certificates in CHT 4.x | Community Health Toolkit

Adding TLS certificates in CHT 4.x

How to add TLS certificates to your docker hosted CHT 4.x instance

By default, CHT 4.x will create a self-signed certificate for every deployment. These instructions are for changing to either a pre-existing certificate or automatically creating and renewing a Certbot based certificate using ACME, like Let’s Encrypt.

This guide assumes you’ve already met the hosting requirements, specifically around Docker being installed.

Pre-existing certificate

To load your certificates into your CHT instance, we’ll be creating an interstitial container called cht-temp-tls which will enable you to copy your local certificate files into the native docker volume.

Prerequisites

You have two files locally on your workstation in the directory you’re currently in:

  • key.pem - the private key for your TLS certificate
  • cert.pem - both the public and any interstitial keys concatenated into one file

Also, be sure you have started your CHT instance once and all your volumes are created.

Loading the certificate

  1. Find the name of your cht-ssl volume with this call:

    docker volume ls --filter "name=cht-ssl"
    + Create documentation issue
    + Create project issue

    Adding TLS certificates in CHT 4.x

    How to add TLS certificates to your docker hosted CHT 4.x instance

    By default, CHT 4.x will create a self-signed certificate for every deployment. These instructions are for changing to either a pre-existing certificate or automatically creating and renewing a Certbot based certificate using ACME, like Let’s Encrypt.

    This guide assumes you’ve already met the hosting requirements, specifically around Docker being installed.

    Pre-existing certificate

    To load your certificates into your CHT instance, we’ll be creating an interstitial container called cht-temp-tls which will enable you to copy your local certificate files into the native docker volume.

    Prerequisites

    You have two files locally on your workstation in the directory you’re currently in:

    • key.pem - the private key for your TLS certificate
    • cert.pem - both the public and any interstitial keys concatenated into one file

    Also, be sure you have started your CHT instance once and all your volumes are created.

    Loading the certificate

    1. Find the name of your cht-ssl volume with this call:

      docker volume ls --filter "name=cht-ssl"
       

      It is very likely that cht_cht-ssl is the name of our cht-ssl volume.

    2. Using the volume name found in step 1, start a container called temp which allow us to copy files into the docker volume:

      docker run -d --rm --name temp -v cht_cht-ssl:/etc/nginx/private/ alpine tail -f /dev/null
       
    3. Copy the two pem files into the volume via the temporary container:

      docker cp key.pem temp:/etc/nginx/private/.
       docker cp cert.pem temp:/etc/nginx/private/.
      @@ -330,8 +330,11 @@
       
  2. Run this command to find the name of your CHT ngnix container:
    docker ps --filter "name=nginx"  --format '{{ .Names }}'
     
  3. Assuming the name is cht_nginx_1 from the prior step, reload your nginx config with this command:
    docker exec -it cht_nginx_1 nginx -s reload
     
  4. Attempt to renew your certificates once a week by adding this cronjob via crontab -e. Certbot will only renew them as needed:
    0 0 * * 0 cd /home/ubuntu/cht/certbot&&docker compose up
    -
-

\ No newline at end of file diff --git a/apps/guides/hosting/4.x/index.xml b/apps/guides/hosting/4.x/index.xml index fb3049e25..b7b9f30bf 100644 --- a/apps/guides/hosting/4.x/index.xml +++ b/apps/guides/hosting/4.x/index.xml @@ -558,7 +558,17 @@ docker cp cert.pem temp:/etc/nginx/private/. <li>Attempt to renew your certificates once a week by adding this cronjob via <code>crontab -e</code>. Certbot will only renew them as needed: <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">0</span> <span style="color:#0000cf;font-weight:bold">0</span> * * <span style="color:#0000cf;font-weight:bold">0</span> <span style="color:#204a87">cd</span> /home/ubuntu/cht/certbot<span style="color:#ce5c00;font-weight:bold">&amp;&amp;</span>docker compose up </span></span></code></pre></div></li> -</ol>Apps: Viewing server logs in CHT 4.xhttps://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/logs/Mon, 01 Jan 0001 00:00:00 +0000https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/logs/ +</ol> +<h2 id="troubleshooting">Troubleshooting</h2> +<h3 id="proxying">Proxying</h3> +<h4 id="err_tls_cert_altname_invalid">ERR_TLS_CERT_ALTNAME_INVALID</h4> +<p>When proxying to HTTPS from HTTP (for example where an ingress does TLS termination in an SNI environment and then the traffic is proxied to an HTTPS service (eg, haproxy)), not including a <code>servername</code> for a request to the HTTPS server (eg, def.org) produces the following error:</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#4e9a06">&#39;ERR_TLS_CERT_ALTNAME_INVALID&#39;</span> +</span></span><span style="display:flex;"><span><span style="color:#4e9a06">&#34;RequestError: Error [ERR_TLS_CERT_ALTNAME_INVALID]: Hostname/IP does not match certificate&#39;s altnames: +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">Host: abc.com. is not in the cert&#39;s altnames: DNS:def.org&#34;</span> +</span></span></code></pre></div><p>The addition of <code>servername</code> resolves this error by providing routing information. See docs for <code>tls.connect(options[, callback])</code>&rsquo; (<a href="https://nodejs.org/api/tls.html)">https://nodejs.org/api/tls.html)</a>: &ldquo;Server name for the SNI (Server Name Indication) TLS extension. It is the name of the host being connected to, and must be a host name, and not an IP address.&rdquo;.</p> +<p>A <code>servername</code> parameter may be added to all requests to the haproxy/couchdb by setting the environment variable <code>ADD_SERVERNAME_TO_HTTP_AGENT</code> to <code>true</code>.</p> +<p>A similar change can be made for the http clients used in the application by setting <code>PROXY_CHANGE_ORIGIN</code> to <code>true</code>. This sets the <code>changeOrigin</code> parameter of all the <code>http-proxy</code> clients to <code>true</code>, which &ldquo;changes the origin of the host header to the target URL&rdquo;. See <a href="https://www.npmjs.com/package/http-proxy#options">http-proxy: options</a>.</p>Apps: Viewing server logs in CHT 4.xhttps://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/logs/Mon, 01 Jan 0001 00:00:00 +0000https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/logs/ <p>CHT 4.x has the following services running via Docker and each can have its logs queried:</p> <ul> <li>nginx</li> diff --git a/apps/guides/hosting/4.x/self-hosting/index.xml b/apps/guides/hosting/4.x/self-hosting/index.xml index 61002f964..d5f21c448 100644 --- a/apps/guides/hosting/4.x/self-hosting/index.xml +++ b/apps/guides/hosting/4.x/self-hosting/index.xml @@ -27,21 +27,26 @@ </span></span><span style="display:flex;"><span>curl -s -o ./upgrade-service/docker-compose.yml https://raw.githubusercontent.com/medic/cht-upgrade-service/main/docker-compose.yml </span></span></code></pre></div><h2 id="prepare-environment-variables-file">Prepare Environment Variables file</h2> <p>Prepare a <code>.env</code> file by running this code:</p> -<pre tabindex="0"><code>sudo apt install wamerican -uuid=$(uuidgen) -couchdb_secret=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr &#39;\n&#39; &#39;-&#39; | tr -d &#34;&#39;&#34; | cut -d&#39;-&#39; -f1,2,3,4,5,6,7) -couchdb_password=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr &#39;\n&#39; &#39;-&#39; | tr -d &#34;&#39;&#34; | cut -d&#39;-&#39; -f1,2,3,4,5,6,7) -cat &gt; /home/ubuntu/cht/upgrade-service/.env &lt;&lt; EOF -CHT_COMPOSE_PROJECT_NAME=cht -COUCHDB_SECRET=${couchdb_secret} -DOCKER_CONFIG_PATH=/home/ubuntu/cht/upgrade-service -COUCHDB_DATA=/home/ubuntu/cht/couchdb -CHT_COMPOSE_PATH=/home/ubuntu/cht/compose -COUCHDB_USER=medic -COUCHDB_PASSWORD=${couchdb_password} -COUCHDB_UUID=${uuid} -EOF -</code></pre><p>Note that secure passwords and UUIDs were generated on the first four calls and saved in the resulting <code>.env</code> file.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>sudo apt install wamerican +</span></span><span style="display:flex;"><span><span style="color:#000">uuid</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span>uuidgen<span style="color:#204a87;font-weight:bold">)</span> +</span></span><span style="display:flex;"><span><span style="color:#000">couchdb_secret</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span>shuf -n7 /usr/share/dict/words --random-source<span style="color:#ce5c00;font-weight:bold">=</span>/dev/random <span style="color:#000;font-weight:bold">|</span> tr <span style="color:#4e9a06">&#39;\n&#39;</span> <span style="color:#4e9a06">&#39;-&#39;</span> <span style="color:#000;font-weight:bold">|</span> tr -d <span style="color:#4e9a06">&#34;&#39;&#34;</span> <span style="color:#000;font-weight:bold">|</span> cut -d<span style="color:#4e9a06">&#39;-&#39;</span> -f1,2,3,4,5,6,7<span style="color:#204a87;font-weight:bold">)</span> +</span></span><span style="display:flex;"><span><span style="color:#000">couchdb_password</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span>shuf -n7 /usr/share/dict/words --random-source<span style="color:#ce5c00;font-weight:bold">=</span>/dev/random <span style="color:#000;font-weight:bold">|</span> tr <span style="color:#4e9a06">&#39;\n&#39;</span> <span style="color:#4e9a06">&#39;-&#39;</span> <span style="color:#000;font-weight:bold">|</span> tr -d <span style="color:#4e9a06">&#34;&#39;&#34;</span> <span style="color:#000;font-weight:bold">|</span> cut -d<span style="color:#4e9a06">&#39;-&#39;</span> -f1,2,3,4,5,6,7<span style="color:#204a87;font-weight:bold">)</span> +</span></span><span style="display:flex;"><span>cat &gt; /home/ubuntu/cht/upgrade-service/.env <span style="color:#4e9a06">&lt;&lt; EOF +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">CHT_COMPOSE_PROJECT_NAME=cht +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_SECRET=${couchdb_secret} +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">DOCKER_CONFIG_PATH=/home/ubuntu/cht/upgrade-service +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_DATA=/home/ubuntu/cht/couchdb +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">CHT_COMPOSE_PATH=/home/ubuntu/cht/compose +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_USER=medic +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_PASSWORD=${couchdb_password} +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_UUID=${uuid} +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"># &lt;ADD_SERVERNAME_TO_HTTP_AGENT&gt;: (optional, default: false, configures: api) Adds &#39;servername&#39; to HTTP agent for certificate issues in receiving traffic when proxying HTTPS-&gt;HTTP in SNI environments with external TLS termination. +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"># See &#39;tls.connect(options[, callback])&#39; (https://nodejs.org/api/tls.html). May resolve &#39;ERR_TLS_CERT_ALTNAME_INVALID&#39; error. +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"># ADD_SERVERNAME_TO_HTTP_AGENT=true +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"># &lt;PROXY_CHANGE_ORIGIN&gt;: (optional, default: false, configures: api) See http-proxy (https://www.npmjs.com/package/http-proxy#options). Sets &#39;changeOrigin&#39; to &#39;true&#39; for HTTP clients. For certificate issues in proxying HTTP-&gt;HTTPS +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"># PROXY_CHANGE_ORIGIN=true +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">EOF</span> +</span></span></code></pre></div><p>Note that secure passwords and UUIDs were generated on the first four calls and saved in the resulting <code>.env</code> file. Uncomment optional items if required.</p> <h2 id="launch-containers">Launch containers</h2> <div class="alert alert-primary" role="alert"> <h4 class="alert-heading">Note</h4> @@ -157,19 +162,24 @@ docker compose up --detach </ol> <h3 id="prepare-environment-variables-file">Prepare Environment Variables file</h3> <p>Prepare an <code>.env</code> file by running this code:</p> -<pre tabindex="0"><code>sudo apt install wamerican -uuid=$(uuidgen) -couchdb_secret=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr &#39;\n&#39; &#39;-&#39; | tr -d &#34;&#39;&#34; | cut -d&#39;-&#39; -f1,2,3,4,5,6,7) -couchdb_password=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr &#39;\n&#39; &#39;-&#39; | tr -d &#34;&#39;&#34; | cut -d&#39;-&#39; -f1,2,3,4,5,6,7) -cat &gt; /home/ubuntu/cht/upgrade-service/.env &lt;&lt; EOF -CHT_COMPOSE_PROJECT_NAME=cht -DOCKER_CONFIG_PATH=/home/ubuntu/cht/upgrade-service -CHT_COMPOSE_PATH=/home/ubuntu/cht/compose -COUCHDB_USER=medic -COUCHDB_PASSWORD=${couchdb_password} -COUCHDB_SERVERS=couchdb-1.local,couchdb-2.local,couchdb-3.local -EOF -</code></pre><p>Note that secure passwords and UUIDs were generated on the first four calls and saved in the resulting <code>.env</code> file.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>sudo apt install wamerican +</span></span><span style="display:flex;"><span><span style="color:#000">uuid</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span>uuidgen<span style="color:#204a87;font-weight:bold">)</span> +</span></span><span style="display:flex;"><span><span style="color:#000">couchdb_secret</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span>shuf -n7 /usr/share/dict/words --random-source<span style="color:#ce5c00;font-weight:bold">=</span>/dev/random <span style="color:#000;font-weight:bold">|</span> tr <span style="color:#4e9a06">&#39;\n&#39;</span> <span style="color:#4e9a06">&#39;-&#39;</span> <span style="color:#000;font-weight:bold">|</span> tr -d <span style="color:#4e9a06">&#34;&#39;&#34;</span> <span style="color:#000;font-weight:bold">|</span> cut -d<span style="color:#4e9a06">&#39;-&#39;</span> -f1,2,3,4,5,6,7<span style="color:#204a87;font-weight:bold">)</span> +</span></span><span style="display:flex;"><span><span style="color:#000">couchdb_password</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span>shuf -n7 /usr/share/dict/words --random-source<span style="color:#ce5c00;font-weight:bold">=</span>/dev/random <span style="color:#000;font-weight:bold">|</span> tr <span style="color:#4e9a06">&#39;\n&#39;</span> <span style="color:#4e9a06">&#39;-&#39;</span> <span style="color:#000;font-weight:bold">|</span> tr -d <span style="color:#4e9a06">&#34;&#39;&#34;</span> <span style="color:#000;font-weight:bold">|</span> cut -d<span style="color:#4e9a06">&#39;-&#39;</span> -f1,2,3,4,5,6,7<span style="color:#204a87;font-weight:bold">)</span> +</span></span><span style="display:flex;"><span>cat &gt; /home/ubuntu/cht/upgrade-service/.env <span style="color:#4e9a06">&lt;&lt; EOF +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">CHT_COMPOSE_PROJECT_NAME=cht +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">DOCKER_CONFIG_PATH=/home/ubuntu/cht/upgrade-service +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">CHT_COMPOSE_PATH=/home/ubuntu/cht/compose +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_USER=medic +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_PASSWORD=${couchdb_password} +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_SERVERS=couchdb-1.local,couchdb-2.local,couchdb-3.local +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"># &lt;ADD_SERVERNAME_TO_HTTP_AGENT&gt;: (optional, default: false, configures: api) Adds &#39;servername&#39; to HTTP agent for certificate issues in receiving traffic when proxying HTTPS-&gt;HTTP in SNI environments with external TLS termination. +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"># See &#39;tls.connect(options[, callback])&#39; (https://nodejs.org/api/tls.html). May resolve &#39;ERR_TLS_CERT_ALTNAME_INVALID&#39; error. +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"># ADD_SERVERNAME_TO_HTTP_AGENT=true +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"># &lt;PROXY_CHANGE_ORIGIN&gt;: (optional, default: false, configures: api) See http-proxy (https://www.npmjs.com/package/http-proxy#options). Sets &#39;changeOrigin&#39; to &#39;true&#39; for HTTP clients. For certificate issues in proxying HTTP-&gt;HTTPS +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"># PROXY_CHANGE_ORIGIN=true +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">EOF</span> +</span></span></code></pre></div><p>Note that secure passwords and UUIDs were generated on the first four calls and saved in the resulting <code>.env</code> file. Uncomment optional items if required.</p> <h3 id="download-compose-files">Download compose files</h3> <p>The following 2 <code>curl</code> commands download CHT version <code>4.0.1</code> compose files, which you can change as needed. Otherwise, call:</p> <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#204a87">cd</span> /home/ubuntu/cht/ @@ -201,19 +211,19 @@ This section has the first use of <code>docker compose</code>. This should <p>First, <strong>on the CHT Core node</strong>, get your CouchDB password with this command:</p> <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>grep COUCHDB_PASSWORD /home/ubuntu/cht/upgrade-service/.env <span style="color:#000;font-weight:bold">|</span> cut -d<span style="color:#4e9a06">&#39;=&#39;</span> -f2 </span></span></code></pre></div><p>Now, <strong>on all 3 CouchDB nodes</strong>, create an <code>.env</code> file by running this code. You&rsquo;ll need to replace <code>PASSWORD-FROM-ABOVE</code> so it is the same on all three nodes:</p> -<pre tabindex="0"><code>sudo apt install wamerican -mkdir -p /home/ubuntu/cht/srv -uuid=$(uuidgen) -couchdb_secret=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr &#39;\n&#39; &#39;-&#39; | tr -d &#34;&#39;&#34; | cut -d&#39;-&#39; -f1,2,3,4,5,6,7) -cat &gt; /home/ubuntu/cht/.env &lt;&lt; EOF -CHT_COMPOSE_PROJECT_NAME=cht -COUCHDB_SECRET=${couchdb_secret} -COUCHDB_DATA=/home/ubuntu/cht/couchdb -COUCHDB_USER=medic -COUCHDB_PASSWORD=PASSWORD-FROM-ABOVE -COUCHDB_UUID=${uuid} -EOF -</code></pre><p>Note that secure passwords and UUIDs were generated and saved in the resulting <code>.env</code> file.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>sudo apt install wamerican +</span></span><span style="display:flex;"><span>mkdir -p /home/ubuntu/cht/srv +</span></span><span style="display:flex;"><span><span style="color:#000">uuid</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span>uuidgen<span style="color:#204a87;font-weight:bold">)</span> +</span></span><span style="display:flex;"><span><span style="color:#000">couchdb_secret</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span>shuf -n7 /usr/share/dict/words --random-source<span style="color:#ce5c00;font-weight:bold">=</span>/dev/random <span style="color:#000;font-weight:bold">|</span> tr <span style="color:#4e9a06">&#39;\n&#39;</span> <span style="color:#4e9a06">&#39;-&#39;</span> <span style="color:#000;font-weight:bold">|</span> tr -d <span style="color:#4e9a06">&#34;&#39;&#34;</span> <span style="color:#000;font-weight:bold">|</span> cut -d<span style="color:#4e9a06">&#39;-&#39;</span> -f1,2,3,4,5,6,7<span style="color:#204a87;font-weight:bold">)</span> +</span></span><span style="display:flex;"><span>cat &gt; /home/ubuntu/cht/.env <span style="color:#4e9a06">&lt;&lt; EOF +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">CHT_COMPOSE_PROJECT_NAME=cht +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_SECRET=${couchdb_secret} +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_DATA=/home/ubuntu/cht/couchdb +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_USER=medic +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_PASSWORD=PASSWORD-FROM-ABOVE +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">COUCHDB_UUID=${uuid} +</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">EOF</span> +</span></span></code></pre></div><p>Note that secure passwords and UUIDs were generated and saved in the resulting <code>.env</code> file.</p> <h4 id="couchdb-node-1">CouchDB Node 1</h4> <p>Create <code>/home/ubuntu/cht/docker-compose.yml</code> on Node 1 by running this code:</p> <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#204a87">cd</span> /home/ubuntu/cht/ diff --git a/apps/guides/hosting/4.x/self-hosting/multiple-nodes/index.html b/apps/guides/hosting/4.x/self-hosting/multiple-nodes/index.html index 40faf57e8..9c5839028 100644 --- a/apps/guides/hosting/4.x/self-hosting/multiple-nodes/index.html +++ b/apps/guides/hosting/4.x/self-hosting/multiple-nodes/index.html @@ -1,8 +1,8 @@ Self Hosting in CHT 4.x - Multiple CouchDB Nodes on Docker Swarm | Community Health Toolkit

Self Hosting in CHT 4.x - Multiple CouchDB Nodes on Docker Swarm

Hosting the CHT on self run infrastructure with horizontally scaled CouchDB nodes

The clustered multi-node hosting described below is recommended for deployments that need increased performance gains. These gains will increase the complexity of troubleshooting and decrease the ease ongoing maintenance.

If you are unsure which deployment to use check out Self-hosting recommendations.

About clustered deployments

In a clustered CHT setup, there are multiple CouchDB nodes responding to users. The ability to horizontally scale a CHT instance was added in version CHT 4.0.0. In this document we set up a three node CouchDB cluster. We require all three CouchDB nodes to be running and healthy before installing the CHT. Our healthcheck service determines the health of the CouchDB nodes and turns off the CHT if any single node is not functional.

Nodes

  • CHT Core (1x) - Core functionality of the CHT including API and sentinel
  • CouchDB (3x) - 3 node CouchDB cluster

Prerequisites

Servers

Provision four Ubuntu servers (22.04 as of this writing) that meet our hosting requirements including installing Docker and Docker Compose on all of them. This guide assumes you’re using the ubuntu user, with a home directory of /home/ubuntu and that it has sudo-less access to Docker.

Network

Make sure the following ports are open for all nodes:

  • 7946 TCP/UDP - For Docker communication amongst nodes
  • 2377 TCP - Docker cluster management communication
  • 4789 UDP - Docker overlay network traffic
  • ICMP - For ping

As a security measure, be sure to restrict the IP addresses of the four nodes only to be able to connect to these ports.

Create an Overlay Network

To set up a private network that only the four nodes can use, we’ll use docker swarm’s overlay network feature. You’ll first need to initialize the swarm on the CHT Core node and then join the swarm on each of the three CouchDB nodes.

CHT Core node

Initialize swarm mode by running:

docker swarm init
 

This will output:

1
 2
@@ -315,19 +315,24 @@
                   |-- couchdb/
                   |-- upgrade-service/
 

By calling this mkdir commands:

mkdir -p /home/ubuntu/cht/{compose,certs,upgrade-service,couchdb}
-
  1. compose - docker-compose files for cht-core and CouchDB
  2. certs - TLS certificates directory
  3. upgrade-service - where docker-compose file for the upgrade-service
  4. couchdb - the path for the docker-compose file of the upgrade-service (not used in multi-node)

Prepare Environment Variables file

Prepare an .env file by running this code:

sudo apt install wamerican
-uuid=$(uuidgen)
-couchdb_secret=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr '\n' '-' | tr -d "'" | cut -d'-' -f1,2,3,4,5,6,7)
-couchdb_password=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr '\n' '-' | tr -d "'" | cut -d'-' -f1,2,3,4,5,6,7)
-cat > /home/ubuntu/cht/upgrade-service/.env << EOF
-CHT_COMPOSE_PROJECT_NAME=cht
-DOCKER_CONFIG_PATH=/home/ubuntu/cht/upgrade-service
-CHT_COMPOSE_PATH=/home/ubuntu/cht/compose
-COUCHDB_USER=medic
-COUCHDB_PASSWORD=${couchdb_password}
-COUCHDB_SERVERS=couchdb-1.local,couchdb-2.local,couchdb-3.local
-EOF
-

Note that secure passwords and UUIDs were generated on the first four calls and saved in the resulting .env file.

Download compose files

The following 2 curl commands download CHT version 4.0.1 compose files, which you can change as needed. Otherwise, call:

cd /home/ubuntu/cht/
+
  1. compose - docker-compose files for cht-core and CouchDB
  2. certs - TLS certificates directory
  3. upgrade-service - where docker-compose file for the upgrade-service
  4. couchdb - the path for the docker-compose file of the upgrade-service (not used in multi-node)

Prepare Environment Variables file

Prepare an .env file by running this code:

sudo apt install wamerican
+uuid=$(uuidgen)
+couchdb_secret=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr '\n' '-' | tr -d "'" | cut -d'-' -f1,2,3,4,5,6,7)
+couchdb_password=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr '\n' '-' | tr -d "'" | cut -d'-' -f1,2,3,4,5,6,7)
+cat > /home/ubuntu/cht/upgrade-service/.env << EOF
+CHT_COMPOSE_PROJECT_NAME=cht
+DOCKER_CONFIG_PATH=/home/ubuntu/cht/upgrade-service
+CHT_COMPOSE_PATH=/home/ubuntu/cht/compose
+COUCHDB_USER=medic
+COUCHDB_PASSWORD=${couchdb_password}
+COUCHDB_SERVERS=couchdb-1.local,couchdb-2.local,couchdb-3.local
+# <ADD_SERVERNAME_TO_HTTP_AGENT>: (optional, default: false, configures: api) Adds 'servername' to HTTP agent for certificate issues in receiving traffic when proxying HTTPS->HTTP in SNI environments with external TLS termination. 
+# See 'tls.connect(options[, callback])' (https://nodejs.org/api/tls.html). May resolve 'ERR_TLS_CERT_ALTNAME_INVALID' error.
+# ADD_SERVERNAME_TO_HTTP_AGENT=true
+# <PROXY_CHANGE_ORIGIN>: (optional, default: false, configures: api) See http-proxy (https://www.npmjs.com/package/http-proxy#options). Sets 'changeOrigin' to 'true' for HTTP clients. For certificate issues in proxying HTTP->HTTPS
+# PROXY_CHANGE_ORIGIN=true
+EOF
+

Note that secure passwords and UUIDs were generated on the first four calls and saved in the resulting .env file. Uncomment optional items if required.

Download compose files

The following 2 curl commands download CHT version 4.0.1 compose files, which you can change as needed. Otherwise, call:

cd /home/ubuntu/cht/
 curl -s -o ./compose/cht-core.yml https://staging.dev.medicmobile.org/_couch/builds_4/medic:medic:4.3.1/docker-compose/cht-core.yml
 curl -s -o ./upgrade-service/docker-compose.yml https://raw.githubusercontent.com/medic/cht-upgrade-service/main/docker-compose.yml
 

Compose file overrides

We need to override the networks: in the two compose files we just created. Create the override file with this code:

cat > /home/ubuntu/cht/compose/cluster-overrides.yml << EOF
@@ -342,19 +347,19 @@
 sleep 120
 docker kill $(docker ps --quiet)
 

With docker volume having been created, see the TLS Certificates page for how to import your certificates on the CHT Core node.

CouchDB installation on 3 nodes

Now that CHT Core is installed, we need to install CouchDB on the three nodes. Be sure all 3 nodes meet the prerequisites before proceeding.

Prepare Environment Variables file

First, on the CHT Core node, get your CouchDB password with this command:

grep COUCHDB_PASSWORD /home/ubuntu/cht/upgrade-service/.env | cut -d'=' -f2
-

Now, on all 3 CouchDB nodes, create an .env file by running this code. You’ll need to replace PASSWORD-FROM-ABOVE so it is the same on all three nodes:

sudo apt install wamerican
-mkdir -p /home/ubuntu/cht/srv
-uuid=$(uuidgen)
-couchdb_secret=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr '\n' '-' | tr -d "'" | cut -d'-' -f1,2,3,4,5,6,7)
-cat > /home/ubuntu/cht/.env << EOF
-CHT_COMPOSE_PROJECT_NAME=cht
-COUCHDB_SECRET=${couchdb_secret}
-COUCHDB_DATA=/home/ubuntu/cht/couchdb
-COUCHDB_USER=medic
-COUCHDB_PASSWORD=PASSWORD-FROM-ABOVE
-COUCHDB_UUID=${uuid}
-EOF
-

Note that secure passwords and UUIDs were generated and saved in the resulting .env file.

CouchDB Node 1

Create /home/ubuntu/cht/docker-compose.yml on Node 1 by running this code:

cd /home/ubuntu/cht/
+

Now, on all 3 CouchDB nodes, create an .env file by running this code. You’ll need to replace PASSWORD-FROM-ABOVE so it is the same on all three nodes:

sudo apt install wamerican
+mkdir -p /home/ubuntu/cht/srv
+uuid=$(uuidgen)
+couchdb_secret=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr '\n' '-' | tr -d "'" | cut -d'-' -f1,2,3,4,5,6,7)
+cat > /home/ubuntu/cht/.env << EOF
+CHT_COMPOSE_PROJECT_NAME=cht
+COUCHDB_SECRET=${couchdb_secret}
+COUCHDB_DATA=/home/ubuntu/cht/couchdb
+COUCHDB_USER=medic
+COUCHDB_PASSWORD=PASSWORD-FROM-ABOVE
+COUCHDB_UUID=${uuid}
+EOF
+

Note that secure passwords and UUIDs were generated and saved in the resulting .env file.

CouchDB Node 1

Create /home/ubuntu/cht/docker-compose.yml on Node 1 by running this code:

cd /home/ubuntu/cht/
 curl -s -o ./docker-compose.yml https://staging.dev.medicmobile.org/_couch/builds_4/medic:medic:4.3.1/docker-compose/cht-couchdb.yml
 

Now create the override file to have Node 1 join the cht-net overlay network we created above. As well, we’ll set some services: specific overrides:

cat > /home/ubuntu/cht/cluster-overrides.yml << EOF
 version: '3.9'
@@ -418,7 +423,7 @@
 d01343658f3f   public.ecr.aws/s5s3h4s7/cht-upgrade-service:latest            "node /app/src/index…"    17 minutes ago   Up 8 minutes                                                                              upgrade-service-cht-upgrade-service-1
 

This should show related to the CHT core are running

  • cht_nginx
  • cht_api
  • cht_sentinel
  • cht_healthcheck
  • cht_haproxy
  • cht-upgrade-service

Take note of the STATUS column and make sure no errors are displayed. If any container is restarting or mentioning any other error, check the logs using the docker logs <container-name> command.

If all has gone well, nginx should now be listening at both port 80 and port 443. Port 80 has a permanent redirect to port 443, so you can only access the CHT using https.

To login as the medic user in the web app, you can find your password with this command:

grep COUCHDB_PASSWORD /home/ubuntu/cht/upgrade-service/.env | cut -d'=' -f2
 

Upgrades

Upgrades are completely manual for the clustered setup right now. You have to go into each of the docker compose files and modify the image tag and take containers down and restart them.

-

\ No newline at end of file diff --git a/apps/guides/hosting/4.x/self-hosting/single-node/index.html b/apps/guides/hosting/4.x/self-hosting/single-node/index.html index a33d3a6b9..708ac32fa 100644 --- a/apps/guides/hosting/4.x/self-hosting/single-node/index.html +++ b/apps/guides/hosting/4.x/self-hosting/single-node/index.html @@ -1,8 +1,8 @@ Self Hosting in CHT 4.x - Single CouchDB Node | Community Health Toolkit

Self Hosting in CHT 4.x - Single CouchDB Node

Self Hosting in CHT 4.x - Single CouchDB Node

This for a single node CHT 4.x instance and is the recommended solution for small deployments. If you want a more powerful setup, check out the 4.x multi-node install docs.

Prerequisites

Be sure you have followed the requirements document including installing Docker and Docker Compose. This guide assumes you’re using the ubuntu user and that it has sudo-less access to Docker.

Directory Structure

Create the following directory structure:

|-- /home/ubuntu/cht/
                   |-- compose/
                   |-- certs/
@@ -300,21 +300,26 @@
 curl -s -o ./compose/cht-core.yml https://staging.dev.medicmobile.org/_couch/builds_4/medic:medic:4.3.1/docker-compose/cht-core.yml
 curl -s -o ./compose/cht-couchdb.yml https://staging.dev.medicmobile.org/_couch/builds_4/medic:medic:4.3.1/docker-compose/cht-couchdb.yml
 curl -s -o ./upgrade-service/docker-compose.yml https://raw.githubusercontent.com/medic/cht-upgrade-service/main/docker-compose.yml
-

Prepare Environment Variables file

Prepare a .env file by running this code:

sudo apt install wamerican
-uuid=$(uuidgen)
-couchdb_secret=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr '\n' '-' | tr -d "'" | cut -d'-' -f1,2,3,4,5,6,7)
-couchdb_password=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr '\n' '-' | tr -d "'" | cut -d'-' -f1,2,3,4,5,6,7)
-cat > /home/ubuntu/cht/upgrade-service/.env << EOF
-CHT_COMPOSE_PROJECT_NAME=cht
-COUCHDB_SECRET=${couchdb_secret}
-DOCKER_CONFIG_PATH=/home/ubuntu/cht/upgrade-service
-COUCHDB_DATA=/home/ubuntu/cht/couchdb
-CHT_COMPOSE_PATH=/home/ubuntu/cht/compose
-COUCHDB_USER=medic
-COUCHDB_PASSWORD=${couchdb_password}
-COUCHDB_UUID=${uuid}
-EOF
-

Note that secure passwords and UUIDs were generated on the first four calls and saved in the resulting .env file.

Launch containers

To start your CHT instance, run the following

cd /home/ubuntu/cht/upgrade-service
+

Prepare Environment Variables file

Prepare a .env file by running this code:

sudo apt install wamerican
+uuid=$(uuidgen)
+couchdb_secret=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr '\n' '-' | tr -d "'" | cut -d'-' -f1,2,3,4,5,6,7)
+couchdb_password=$(shuf -n7 /usr/share/dict/words --random-source=/dev/random | tr '\n' '-' | tr -d "'" | cut -d'-' -f1,2,3,4,5,6,7)
+cat > /home/ubuntu/cht/upgrade-service/.env << EOF
+CHT_COMPOSE_PROJECT_NAME=cht
+COUCHDB_SECRET=${couchdb_secret}
+DOCKER_CONFIG_PATH=/home/ubuntu/cht/upgrade-service
+COUCHDB_DATA=/home/ubuntu/cht/couchdb
+CHT_COMPOSE_PATH=/home/ubuntu/cht/compose
+COUCHDB_USER=medic
+COUCHDB_PASSWORD=${couchdb_password}
+COUCHDB_UUID=${uuid}
+# <ADD_SERVERNAME_TO_HTTP_AGENT>: (optional, default: false, configures: api) Adds 'servername' to HTTP agent for certificate issues in receiving traffic when proxying HTTPS->HTTP in SNI environments with external TLS termination. 
+# See 'tls.connect(options[, callback])' (https://nodejs.org/api/tls.html). May resolve 'ERR_TLS_CERT_ALTNAME_INVALID' error.
+# ADD_SERVERNAME_TO_HTTP_AGENT=true
+# <PROXY_CHANGE_ORIGIN>: (optional, default: false, configures: api) See http-proxy (https://www.npmjs.com/package/http-proxy#options). Sets 'changeOrigin' to 'true' for HTTP clients. For certificate issues in proxying HTTP->HTTPS
+# PROXY_CHANGE_ORIGIN=true
+EOF
+

Note that secure passwords and UUIDs were generated on the first four calls and saved in the resulting .env file. Uncomment optional items if required.

Launch containers

To start your CHT instance, run the following

cd /home/ubuntu/cht/upgrade-service
 docker compose up --detach
 

Docker will start the upgrade service, which in turn pulls the required images and starts all the services as defined by the compose files in /home/ubuntu/cht/compose.

To follow the progress tail the log of the upgrade service container by running this:

docker logs -f upgrade-service_cht-upgrade-service_1

To make sure everything is running correctly, call docker ps and make sure that 7 CHT containers show:

CONTAINER ID   IMAGE                                                         COMMAND                   CREATED          STATUS         PORTS                                                                      NAMES
 8c1c22d526f3   public.ecr.aws/s5s3h4s7/cht-nginx:4.0.1-4.0.1                 "/docker-entrypoint.…"    17 minutes ago   Up 8 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   cht_nginx_1
@@ -326,7 +331,7 @@
 d01343658f3f   public.ecr.aws/s5s3h4s7/cht-upgrade-service:latest            "node /app/src/index…"    17 minutes ago   Up 8 minutes                                                                              upgrade-service-cht-upgrade-service-1
 

This should show related to the CHT core are running

  • cht_nginx
  • cht_api
  • cht_sentinel
  • cht_couchdb
  • cht_healthcheck
  • cht_haproxy
  • cht-upgrade-service

Take note of the STATUS column and make sure no errors are displayed there. If any container is restarting or mentioning any other error, check the logs using the docker logs <container-name> command.

If all has gone well, nginx should now be listening at both port 80 and port 443. Port 80 has a permanent redirect to port 443, so you can only access the CHT using https.

To login as the medic user in the web app, you can find your password with this command:

grep COUCHDB_PASSWORD /home/ubuntu/cht/upgrade-service/.env | cut -d'=' -f2
 

TLS Certificates

See the TLS Certificates page for how to import your certificates.

Upgrades

During upgrades, the CHT upgrade service updates the docker-compose files located in /home/ubuntu/cht/compose/. This means that any and all changes made to the docker-compose files will be overwritten. If there is ever a need to make any changes to the docker-compose files, be sure to re-do them post upgrades or should consider implementing them outside of those docker-compose files.

-

\ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index d80b0efe8..d88c275fe 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://docs.communityhealthtoolkit.org/apps/concepts/access/2024-02-07T09:01:15-08:00https://docs.communityhealthtoolkit.org/apps/features/integrations/android/2021-11-08T18:53:31-03:00https://docs.communityhealthtoolkit.org/apps/reference/api/2024-04-23T14:08:51-05:00https://docs.communityhealthtoolkit.org/core/overview/architecture/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/contribute/code/core/dev-environment/2024-03-20T14:16:45-07:00https://docs.communityhealthtoolkit.org/core/overview/watchdog/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/design/personas/chw-janet/2020-10-09T16:17:31-07:00https://docs.communityhealthtoolkit.org/contribute/code/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/continuous-discovery-overview/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/apps/features/integrations/custom/2022-01-13T15:14:41-05:00https://docs.communityhealthtoolkit.org/apps/features/integrations/dhis2/2021-04-19T17:24:37-04:00https://docs.communityhealthtoolkit.org/2024-04-17T08:14:28+01:00https://docs.communityhealthtoolkit.org/contribute/docs/2020-06-22T21:46:00-04:00https://docs.communityhealthtoolkit.org/contribute/code/releasing/feature_releases/2023-06-02T12:58:08-07:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/focused-groups/2023-11-01T13:43:59-04:00https://docs.communityhealthtoolkit.org/design/icons/forms_tasks_targets/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/apps/tutorials/local-setup/2023-11-19T22:00:28-08:00https://docs.communityhealthtoolkit.org/design/personas/partners/implementers/2020-06-01T11:01:54-07:00https://docs.communityhealthtoolkit.org/apps/guides/data/analytics/introduction/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/ux-research-repo/key-concepts/2023-05-16T13:11:09-07:00https://docs.communityhealthtoolkit.org/apps/examples/anc/2023-04-12T17:35:29+00:00https://docs.communityhealthtoolkit.org/design/icons/people_and_places/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/design/personas/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/contribute/medic/onboarding/product-team/2024-01-12T18:57:07+02:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/product-trio/product-trio-activities/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/running-programs/training/2024-03-28T02:15:04-07:00https://docs.communityhealthtoolkit.org/design/guides/designing-interviews/2022-04-28T12:11:31+03:00https://docs.communityhealthtoolkit.org/why-the-cht/2022-12-02T21:41:51-05:00https://docs.communityhealthtoolkit.org/contribute/docs/workflow/2023-04-12T10:00:06+00:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/ux-research-repo/about-interviews/2023-05-16T13:11:09-07:00https://docs.communityhealthtoolkit.org/contribute/medic/onboarding/all-the-things/2024-02-16T14:56:32+00:00https://docs.communityhealthtoolkit.org/contribute/code/android/development-setup/2024-03-18T10:03:08-05:00https://docs.communityhealthtoolkit.org/design/best-practices/2023-12-13T07:55:15+03:00https://docs.communityhealthtoolkit.org/contribute/code/core/build-commands/2023-11-28T15:41:06-06:00https://docs.communityhealthtoolkit.org/running-programs/2023-11-21T01:04:00-08:00https://docs.communityhealthtoolkit.org/core/overview/cht-sync/2024-04-03T15:51:38+00:00https://docs.communityhealthtoolkit.org/design/personas/chw-supervisor-ann/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/apps/concepts/2020-12-15T09:40:02-06:00https://docs.communityhealthtoolkit.org/apps/tutorials/couch2pg-setup/2023-10-12T08:47:28+13:00https://docs.communityhealthtoolkit.org/core/overview/db-schema/2023-08-07T01:42:44-07:00https://docs.communityhealthtoolkit.org/contribute/code/core/deploy-on-eks/2024-04-16T07:12:57-07:00https://docs.communityhealthtoolkit.org/apps/guides/data/hydration/2021-03-24T06:41:04+02:00https://docs.communityhealthtoolkit.org/apps/reference/forms/2020-10-19T08:47:55-07:00https://docs.communityhealthtoolkit.org/apps/guides/data/analytics/setup/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/design/personas/partners/local-governments/2020-06-01T11:01:54-07:00https://docs.communityhealthtoolkit.org/apps/concepts/navigation/2023-12-04T10:15:05+03:00https://docs.communityhealthtoolkit.org/core/overview/offline-first/2022-02-24T07:18:33+13:00https://docs.communityhealthtoolkit.org/apps/features/integrations/openmrs/2022-02-04T18:14:48-05:00https://docs.communityhealthtoolkit.org/core/overview/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/contribute/medic/product-core-competencies/2023-05-03T09:56:16+00:00https://docs.communityhealthtoolkit.org/core/overview/pwa/2022-04-08T10:38:39+12:00https://docs.communityhealthtoolkit.org/core/releases/2024-03-20T14:13:08-05:00https://docs.communityhealthtoolkit.org/apps/reference/resources/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/schedule-of-events/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/apps/reference/translations/2023-05-16T17:55:12+02:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/ux-research-repo/adding-nuggets/2023-05-16T13:11:09-07:00https://docs.communityhealthtoolkit.org/apps/2023-11-21T01:04:00-08:00https://docs.communityhealthtoolkit.org/design/components/2023-05-19T14:14:18+00:00https://docs.communityhealthtoolkit.org/apps/tutorials/contact-and-users-1/2023-03-29T07:55:19-05:00https://docs.communityhealthtoolkit.org/core/overview/data-flows-for-analytics/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/design/guides/empathy-map/2022-04-19T07:42:28+03:00https://docs.communityhealthtoolkit.org/apps/features/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/apps/concepts/forms/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/design/personas/partners/national-governments/2020-06-01T11:01:54-07:00https://docs.communityhealthtoolkit.org/contribute/medic/onboarding/2023-05-03T09:56:16+00:00https://docs.communityhealthtoolkit.org/apps/features/integrations/oppia/2020-12-17T15:05:43-08:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/product-trio/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/apps/guides/data/analytics/production/2024-04-01T15:02:08+00:00https://docs.communityhealthtoolkit.org/apps/features/integrations/rapidpro/2020-08-20T16:45:11-04:00https://docs.communityhealthtoolkit.org/design/personas/regional-manager-christina/2023-02-19T20:45:44+03:00https://docs.communityhealthtoolkit.org/contribute/code/android/releasing/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/contribute/tech-radar/2024-01-25T08:20:26+00:00https://docs.communityhealthtoolkit.org/contribute/medic/onboarding/technical-resources/2024-01-17T17:16:27+02:00https://docs.communityhealthtoolkit.org/apps/concepts/care-guides/2020-09-16T20:06:56-07:00https://docs.communityhealthtoolkit.org/core/2023-11-21T01:04:00-08:00https://docs.communityhealthtoolkit.org/contribute/code-of-conduct/2023-09-27T11:58:54+03:00https://docs.communityhealthtoolkit.org/apps/features/contacts/2022-09-15T09:07:15+07:00https://docs.communityhealthtoolkit.org/apps/tutorials/contact-and-users-2/2023-03-29T07:55:19-05:00https://docs.communityhealthtoolkit.org/apps/guides/data/analytics/environment-variables/2024-04-04T08:57:05+00:00https://docs.communityhealthtoolkit.org/apps/examples/2020-09-22T16:00:38-05:00https://docs.communityhealthtoolkit.org/design/icons/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/design/personas/nurse-mary/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/design/guides/problem-statement/2022-04-19T07:42:28+03:00https://docs.communityhealthtoolkit.org/apps/guides/android/publishing/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/contribute/code/releasing/publish-docker-image/2023-05-16T10:46:37-05:00https://docs.communityhealthtoolkit.org/core/overview/transitions/2023-06-14T09:53:43+03:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/ux-research-repo/synthesizing-nuggets/2023-05-16T13:11:09-07:00https://docs.communityhealthtoolkit.org/contribute/medic/onboarding/team-meetings/2024-04-16T10:19:29+00:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/ux-research-repo/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/accept_case_reports/2020-06-27T01:28:28-04:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/hierarchy/2022-06-17T14:30:45-05:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/dhis2/2020-07-09T16:39:14-07:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/forms/2022-05-03T07:56:17+05:45https://docs.communityhealthtoolkit.org/apps/reference/app-settings/header_tabs/2020-07-03T11:25:34+03:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/outbound/2024-01-22T11:08:37+03:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/patient_reports/2021-03-24T06:41:04+02:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/user-permissions/2023-08-14T19:41:47+07:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/registrations/2021-11-24T07:30:29+05:45https://docs.communityhealthtoolkit.org/apps/reference/app-settings/reminders/2020-07-14T15:02:10+12:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/replication_depth/2020-07-13T16:54:46+03:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/replications/2020-10-02T12:20:59-04:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/user-roles/2020-06-04T15:06:42-04:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/schedules/2023-10-25T18:04:48-04:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/sms/2022-11-24T11:08:37+13:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/token_login/2020-07-28T02:48:35+03:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/transitions/2023-04-03T21:22:37-04:00https://docs.communityhealthtoolkit.org/apps/reference/forms/app/2024-04-15T14:37:43+08:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/2023-08-31T09:59:32+05:45https://docs.communityhealthtoolkit.org/contribute/medic/2023-09-27T11:58:54+03:00https://docs.communityhealthtoolkit.org/contribute/code/repository-checklist/2023-05-08T14:34:53+00:00https://docs.communityhealthtoolkit.org/apps/reference/forms/collect/2021-10-05T16:38:24-04:00https://docs.communityhealthtoolkit.org/apps/reference/forms/contact/2024-01-15T13:28:55+02:00https://docs.communityhealthtoolkit.org/apps/reference/contact-page/2024-04-24T13:18:24+03:00https://docs.communityhealthtoolkit.org/contribute/medic/onboarding/daily-updates/2024-04-24T13:18:24+03:00https://docs.communityhealthtoolkit.org/design/personas/data-manager-paul/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/design/2020-06-01T11:16:07-07:00https://docs.communityhealthtoolkit.org/apps/reference/extension-libs/2023-05-08T06:38:08+12:00https://docs.communityhealthtoolkit.org/design/guides/mapping-hierarchy/2022-04-19T07:42:28+03:00https://docs.communityhealthtoolkit.org/apps/features/messaging/2020-09-21T15:56:39-07:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/ux-research-repo/publishing-insights/2023-05-16T13:11:09-07:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/quality-assistance/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/design/guides/2021-04-15T13:04:40+03:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/requirements/2023-10-06T16:32:03+02:00https://docs.communityhealthtoolkit.org/apps/tutorials/sms-forms/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/apps/reference/targets/2022-12-06T01:01:56-05:00https://docs.communityhealthtoolkit.org/apps/reference/tasks/2023-04-20T11:51:49+12:00https://docs.communityhealthtoolkit.org/core/overview/translations/2022-12-22T19:50:08+05:45https://docs.communityhealthtoolkit.org/apps/tutorials/2020-06-03T10:27:10-07:00https://docs.communityhealthtoolkit.org/apps/guides/forms/uhc-mode/2022-01-13T14:48:44-05:00https://docs.communityhealthtoolkit.org/apps/concepts/workflows/2020-12-10T15:03:59-05:00https://docs.communityhealthtoolkit.org/design/personas/app-builder/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/apps/tutorials/application-settings/2024-03-28T18:22:13+00:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/code-health/2023-04-04T10:38:58+12:00https://docs.communityhealthtoolkit.org/apps/concepts/hierarchy/2023-05-18T15:48:07-07:00https://docs.communityhealthtoolkit.org/apps/guides/2020-06-03T14:28:04-04:00https://docs.communityhealthtoolkit.org/apps/features/reports/2023-04-12T17:35:29+00:00https://docs.communityhealthtoolkit.org/apps/tutorials/sms-schedules/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/contribute/code/workflow/2024-04-17T07:37:21-05:00https://docs.communityhealthtoolkit.org/apps/tutorials/app-forms/2024-01-10T20:47:25+07:00https://docs.communityhealthtoolkit.org/apps/reference/2024-04-17T08:14:28+01:00https://docs.communityhealthtoolkit.org/contribute/code/releasing/2023-04-18T12:42:52+00:00https://docs.communityhealthtoolkit.org/apps/features/supervision/2023-06-26T07:18:05+03:00https://docs.communityhealthtoolkit.org/apps/features/tasks/2022-07-19T14:00:29-04:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/transparency-accountability/2024-03-29T17:47:52-04:00https://docs.communityhealthtoolkit.org/apps/concepts/users/2022-01-13T15:14:41-05:00https://docs.communityhealthtoolkit.org/contribute/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/apps/tutorials/form-properties/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/apps/concepts/interoperability/2024-01-15T13:28:55+02:00https://docs.communityhealthtoolkit.org/design/personas/partners/2020-06-01T11:16:07-07:00https://docs.communityhealthtoolkit.org/apps/features/targets/2023-12-13T07:55:15+03:00https://docs.communityhealthtoolkit.org/contribute/code/core/update-dependencies/2023-11-03T05:23:42+13:00https://docs.communityhealthtoolkit.org/apps/concepts/prerequisites/2023-05-14T21:33:28+03:00https://docs.communityhealthtoolkit.org/contribute/code/static-analysis/2024-02-09T11:50:30+01:00https://docs.communityhealthtoolkit.org/contribute/code/style-guide/2023-11-28T15:41:06-06:00https://docs.communityhealthtoolkit.org/apps/tutorials/tasks-1/2022-04-25T14:22:54+12:00https://docs.communityhealthtoolkit.org/apps/features/training/2023-04-11T06:24:09+07:00https://docs.communityhealthtoolkit.org/contribute/code/using-npm/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/3.x/ec2-setup-guide/2023-03-27T11:25:13-07:00https://docs.communityhealthtoolkit.org/contribute/code/core/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/gateway/2021-11-08T18:53:31-03:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/gateway/configuration/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/data-migration/2024-01-25T11:43:17+02:00https://docs.communityhealthtoolkit.org/glossary/2023-09-06T01:29:21-07:00https://docs.communityhealthtoolkit.org/apps/features/muting/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/core/overview/roadmap/2023-05-14T14:06:36-07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/self-hosting/2023-10-06T16:32:03+02:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/self-hosting/single-node/2023-12-07T07:04:43-08:00https://docs.communityhealthtoolkit.org/contribute/docs/style-guide/2023-10-09T09:09:53+02:00https://docs.communityhealthtoolkit.org/apps/tutorials/targets/2022-02-08T10:50:49+03:00https://docs.communityhealthtoolkit.org/apps/tutorials/contact-summary/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/apps/tutorials/death-reporting/2021-11-29T11:05:14-08:00https://docs.communityhealthtoolkit.org/apps/features/uhc-mode/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/apps/features/admin/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/contribute/code/core/automated-tests/2023-12-05T05:31:23+09:00https://docs.communityhealthtoolkit.org/apps/tutorials/condition-cards/2023-03-09T11:48:26+03:00https://docs.communityhealthtoolkit.org/apps/guides/android/branding/2024-04-23T09:23:45+05:45https://docs.communityhealthtoolkit.org/apps/tutorials/localizing-cht/2024-01-15T13:28:55+02:00https://docs.communityhealthtoolkit.org/apps/tutorials/application-graphics/2022-07-13T02:44:45+00:00https://docs.communityhealthtoolkit.org/apps/tutorials/application-tests/2023-04-12T10:00:06+00:00https://docs.communityhealthtoolkit.org/apps/guides/data/users-bulk-load/2024-01-22T12:03:58+03:00https://docs.communityhealthtoolkit.org/apps/guides/data/impact-metrics/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/apps/guides/training/onboarding/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/apps/guides/training/training-cards/2023-04-11T06:24:09+07:00https://docs.communityhealthtoolkit.org/apps/guides/training/training-cards-resources/2023-05-12T08:24:25+07:00https://docs.communityhealthtoolkit.org/apps/guides/data/training-instance/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/contribute/code/core/using-windows/2023-08-21T14:01:53+12:00https://docs.communityhealthtoolkit.org/apps/guides/data/invalid-reports/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/contribute/code/core/run-multiple-chrome-versions/2023-09-07T14:16:27-04:00https://docs.communityhealthtoolkit.org/apps/guides/data/csv-to-docs/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/africas-talking/2022-07-22T08:43:15+12:00https://docs.communityhealthtoolkit.org/contribute/code/android/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/2021-05-18T17:45:42-04:00https://docs.communityhealthtoolkit.org/apps/features/integrations/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/self-hosting/multiple-nodes/2023-12-07T07:04:43-08:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/self-hosting/self-hosting-k3s-multinode/2023-12-07T07:04:43-08:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/gateway/phones/2021-11-08T18:53:31-03:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/rapidpro/2022-12-08T13:31:35+01:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/3.x/self-hosting/2023-04-12T17:35:29+00:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/sms-states/2021-11-08T18:53:31-03:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/vertical-vs-horizontal/2023-12-21T11:56:09+03:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/shortcodes/2021-05-18T17:45:42-04:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/3.x/app-developer/2023-06-02T12:58:08-07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/app-developer/2024-02-05T17:31:34+00:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/3.x/ssl-cert-install/2022-10-31T14:34:56-07:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/message-loops/2021-05-18T17:45:42-04:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/gateway/troubleshooting/2023-03-10T04:36:47+05:45https://docs.communityhealthtoolkit.org/apps/guides/hosting/3.x/2023-03-27T11:25:13-07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/2023-10-06T16:32:03+02:00https://docs.communityhealthtoolkit.org/apps/guides/privacy/privacy-policy/2022-10-10T16:14:15-07:00https://docs.communityhealthtoolkit.org/apps/guides/data/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/database/2024-04-18T13:46:39+01:00https://docs.communityhealthtoolkit.org/apps/guides/debugging/2022-02-16T12:15:00+13:00https://docs.communityhealthtoolkit.org/apps/guides/forms/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/2023-03-27T11:25:13-07:00https://docs.communityhealthtoolkit.org/apps/guides/integrations/2022-07-05T04:16:58+03:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/monitoring/introduction/2023-05-23T09:47:40-05:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/monitoring/2023-05-03T16:27:47-07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/3.x/offline/2023-11-27T10:41:21+02:00https://docs.communityhealthtoolkit.org/apps/guides/performance/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/privacy/2021-04-19T17:19:45-07:00https://docs.communityhealthtoolkit.org/apps/guides/security/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/monitoring/setup/2023-09-19T08:44:27-05:00https://docs.communityhealthtoolkit.org/apps/guides/tasks/2022-01-07T17:06:14-05:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/adding-tls-certificates/2023-12-18T16:12:45+01:00https://docs.communityhealthtoolkit.org/apps/guides/training/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/apps/guides/updates/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/android/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/data/analytics/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/monitoring/production/2023-05-23T09:47:40-05:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/logs/2023-06-02T12:58:08-07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/backups/2023-10-06T16:32:03+02:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/monitoring/postgres-ingest/2023-09-06T13:24:27-07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/monitoring/integration/2023-10-06T16:32:03+02:00https://docs.communityhealthtoolkit.org/search/2022-07-27T20:41:57-05:00https://docs.communityhealthtoolkit.org/core/releases/0.4.15-and-earlier/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.10.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.10.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.10.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.10.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.11.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.11.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.11.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.11.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.12.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.12.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.12.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.12.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.12.4/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.12.5/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.4/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.5/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.6/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.7/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.14.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.14.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.14.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.14.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.15.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.16.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.16.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.17.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.18.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.18.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.6.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.6.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.6.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.6.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.7.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.7.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.7.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.7.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.8.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.8.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.8.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.8.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.8.4/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.8.5/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.9.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.9.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.0.0/2022-02-21T09:32:58-06:00https://docs.communityhealthtoolkit.org/core/releases/3.1.0/2022-02-21T09:32:58-06:00https://docs.communityhealthtoolkit.org/core/releases/3.10.0/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.10.1/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.10.2/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.10.3/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.10.4/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.10.5/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.11.0/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.11.1/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.11.2/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.11.3/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.12.0/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.12.1/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.13.0/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.14.0/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.14.1/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.14.2/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.15.0/2022-05-05T09:06:44+12:00https://docs.communityhealthtoolkit.org/core/releases/3.16.0/2022-08-10T08:20:54-05:00https://docs.communityhealthtoolkit.org/core/releases/3.16.1/2022-12-02T09:34:55+02:00https://docs.communityhealthtoolkit.org/core/releases/3.17.0/2022-10-11T09:43:26+07:00https://docs.communityhealthtoolkit.org/core/releases/3.17.1/2022-12-02T09:35:08+02:00https://docs.communityhealthtoolkit.org/core/releases/3.17.2/2023-10-10T19:56:20+13:00https://docs.communityhealthtoolkit.org/core/releases/3.2.0/2022-10-31T16:02:09-04:00https://docs.communityhealthtoolkit.org/core/releases/3.2.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.3.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.4.0/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.4.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.5.0/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.6.0/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.6.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.6.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.7.0/2022-08-01T16:02:39+12:00https://docs.communityhealthtoolkit.org/core/releases/3.7.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.8.0/2022-02-21T09:32:58-06:00https://docs.communityhealthtoolkit.org/core/releases/3.8.1/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.8.2/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.9.0/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.9.1/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.9.2/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/4.0.0/2022-12-13T11:43:27+13:00https://docs.communityhealthtoolkit.org/core/releases/4.0.1/2022-12-01T17:04:46+02:00https://docs.communityhealthtoolkit.org/core/releases/4.1.0/2022-12-13T10:21:02+01:00https://docs.communityhealthtoolkit.org/core/releases/4.1.1/2023-03-21T13:03:08+00:00https://docs.communityhealthtoolkit.org/core/releases/4.1.2/2023-06-21T07:36:02+12:00https://docs.communityhealthtoolkit.org/core/releases/4.2.0/2023-05-25T10:01:43+07:00https://docs.communityhealthtoolkit.org/core/releases/4.2.1/2023-06-10T09:20:32+03:00https://docs.communityhealthtoolkit.org/core/releases/4.2.2/2023-07-07T21:11:26+03:00https://docs.communityhealthtoolkit.org/core/releases/4.2.3/2023-09-25T14:17:56+02:00https://docs.communityhealthtoolkit.org/core/releases/4.2.4/2023-10-10T19:56:20+13:00https://docs.communityhealthtoolkit.org/core/releases/4.3.0/2023-08-18T11:58:28+03:00https://docs.communityhealthtoolkit.org/core/releases/4.3.1/2023-08-30T15:37:03+12:00https://docs.communityhealthtoolkit.org/core/releases/4.3.2/2023-10-10T19:56:20+13:00https://docs.communityhealthtoolkit.org/core/releases/4.4.0/2023-11-06T18:07:13-08:00https://docs.communityhealthtoolkit.org/core/releases/4.4.1/2023-10-10T19:56:20+13:00https://docs.communityhealthtoolkit.org/core/releases/4.4.2/2023-12-12T12:39:34+02:00https://docs.communityhealthtoolkit.org/core/releases/4.5.0/2023-11-20T09:25:50-05:00https://docs.communityhealthtoolkit.org/core/releases/4.5.1/2023-12-12T12:39:34+02:00https://docs.communityhealthtoolkit.org/core/releases/4.5.2/2024-02-09T15:11:30+07:00https://docs.communityhealthtoolkit.org/core/releases/4.6.0/2024-03-28T10:51:13-05:00https://docs.communityhealthtoolkit.org/apps/guides/forms/additional-docs/2022-06-17T14:30:45-05:00https://docs.communityhealthtoolkit.org/apps/guides/forms/app-form-sms/2023-06-27T05:11:38+05:45https://docs.communityhealthtoolkit.org/apps/guides/debugging/obtaining-logs/2023-05-16T09:10:36-05:00https://docs.communityhealthtoolkit.org/apps/reference/_partial_cht_api/2023-04-06T14:38:13-04:00https://docs.communityhealthtoolkit.org/apps/tutorials/tasks-2/2023-04-06T14:38:13-04:00https://docs.communityhealthtoolkit.org/apps/guides/database/muting_in_dashboards/2021-10-08T08:43:53+03:00https://docs.communityhealthtoolkit.org/apps/examples/contact-tracing/2020-09-23T18:04:11-04:00https://docs.communityhealthtoolkit.org/apps/guides/database/couch2pg-oom-errors/2022-10-31T14:34:56-07:00https://docs.communityhealthtoolkit.org/apps/guides/database/couchdb-authentication/2022-11-22T08:13:16+13:00https://docs.communityhealthtoolkit.org/apps/examples/phc-covid/2020-09-23T18:04:11-04:00https://docs.communityhealthtoolkit.org/apps/examples/covid-education/2021-01-11T16:12:16-05:00https://docs.communityhealthtoolkit.org/apps/examples/covid-rdt-reference-app/2021-09-27T06:46:22-07:00https://docs.communityhealthtoolkit.org/apps/guides/database/database-conflicts/2022-11-22T08:13:16+13:00https://docs.communityhealthtoolkit.org/apps/guides/integrations/dhis2-aggregate/2020-07-09T16:39:14-07:00https://docs.communityhealthtoolkit.org/apps/examples/direct-to-client/2024-03-26T10:51:24+05:45https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/_partial_docker_directories/2023-04-06T14:38:13-04:00https://docs.communityhealthtoolkit.org/apps/examples/ebs/2020-09-23T18:04:11-04:00https://docs.communityhealthtoolkit.org/apps/guides/updates/feature-flags/2023-05-04T10:39:42-04:00https://docs.communityhealthtoolkit.org/apps/guides/forms/google-drive/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/apps/guides/forms/form-inputs/2024-04-09T09:47:10-05:00https://docs.communityhealthtoolkit.org/apps/examples/learning-care/2021-03-03T16:27:50-05:00https://docs.communityhealthtoolkit.org/apps/tutorials/_partial_docker_setup/2023-10-06T16:32:03+02:00https://docs.communityhealthtoolkit.org/apps/examples/interoperability/2023-05-31T18:07:44+03:00https://docs.communityhealthtoolkit.org/apps/guides/privacy/policy/2023-06-29T09:58:29+12:00https://docs.communityhealthtoolkit.org/design/mockups/2023-03-10T03:00:38+03:00https://docs.communityhealthtoolkit.org/apps/guides/updates/moving-contacts/2021-10-22T17:25:03-04:00https://docs.communityhealthtoolkit.org/apps/guides/forms/multimedia/2022-06-17T14:30:45-05:00https://docs.communityhealthtoolkit.org/apps/guides/integrations/openmrs/2023-04-12T17:35:29+00:00https://docs.communityhealthtoolkit.org/apps/guides/integrations/oppia/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/apps/guides/tasks/pass-data-to-form/2023-04-06T14:38:13-04:00https://docs.communityhealthtoolkit.org/apps/examples/pharmacovigilance-reference-app/2024-01-16T12:23:53+03:00https://docs.communityhealthtoolkit.org/apps/examples/pih/2024-01-17T10:19:37+03:00https://docs.communityhealthtoolkit.org/apps/guides/updates/preparing-for-4/2023-04-18T12:42:52+00:00https://docs.communityhealthtoolkit.org/apps/guides/debugging/replicating-production-data-locally/2023-08-21T14:01:53+12:00https://docs.communityhealthtoolkit.org/apps/guides/performance/purging/2023-08-17T01:04:57+03:00https://docs.communityhealthtoolkit.org/apps/guides/database/querying_apdex_telemetry/2024-03-29T11:37:33+07:00https://docs.communityhealthtoolkit.org/apps/guides/tasks/query-task-data/2021-11-29T11:05:14-08:00https://docs.communityhealthtoolkit.org/apps/guides/forms/wealth-quintiles/2020-12-16T14:58:49-05:00https://docs.communityhealthtoolkit.org/apps/guides/integrations/rapidpro/2024-03-25T13:57:13-07:00https://docs.communityhealthtoolkit.org/apps/guides/database/rdbms-from-mac/2024-01-25T09:05:05+03:00https://docs.communityhealthtoolkit.org/apps/guides/database/rdbms-from-windows/2020-08-18T10:29:41-07:00https://docs.communityhealthtoolkit.org/apps/guides/updates/collect-forms-update/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/apps/examples/training/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/apps/guides/performance/replication/2020-08-19T12:19:51-07:00https://docs.communityhealthtoolkit.org/apps/guides/forms/report-titles/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/security/securely-onboarding-users-at-scale/2024-02-09T13:26:28-08:00https://docs.communityhealthtoolkit.org/apps/guides/debugging/secure-sharing-of-developer-instance/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/security/securing-android/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/debugging/sharing-4x-logs/2023-10-23T14:21:45-07:00https://docs.communityhealthtoolkit.org/apps/examples/stock-monitoring/2022-08-31T13:55:06-07:00https://docs.communityhealthtoolkit.org/apps/examples/supervisor-reference-app/2023-03-18T15:29:21+03:00https://docs.communityhealthtoolkit.org/apps/guides/tasks/task-schema-parameters/2021-11-29T11:05:14-08:00https://docs.communityhealthtoolkit.org/apps/guides/performance/telemetry/2024-03-18T22:18:10+07:00https://docs.communityhealthtoolkit.org/apps/reference/_partial_utils/2023-04-06T14:38:13-04:00https://docs.communityhealthtoolkit.org/apps/guides/forms/versioning/2022-08-05T10:25:51+12:00 \ No newline at end of file +https://docs.communityhealthtoolkit.org/apps/concepts/access/2024-02-07T09:01:15-08:00https://docs.communityhealthtoolkit.org/apps/features/integrations/android/2021-11-08T18:53:31-03:00https://docs.communityhealthtoolkit.org/apps/reference/api/2024-04-23T14:08:51-05:00https://docs.communityhealthtoolkit.org/core/overview/architecture/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/contribute/code/core/dev-environment/2024-03-20T14:16:45-07:00https://docs.communityhealthtoolkit.org/core/overview/watchdog/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/design/personas/chw-janet/2020-10-09T16:17:31-07:00https://docs.communityhealthtoolkit.org/contribute/code/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/continuous-discovery-overview/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/apps/features/integrations/custom/2022-01-13T15:14:41-05:00https://docs.communityhealthtoolkit.org/apps/features/integrations/dhis2/2021-04-19T17:24:37-04:00https://docs.communityhealthtoolkit.org/2024-04-17T08:14:28+01:00https://docs.communityhealthtoolkit.org/contribute/docs/2020-06-22T21:46:00-04:00https://docs.communityhealthtoolkit.org/contribute/code/releasing/feature_releases/2023-06-02T12:58:08-07:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/focused-groups/2023-11-01T13:43:59-04:00https://docs.communityhealthtoolkit.org/design/icons/forms_tasks_targets/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/apps/tutorials/local-setup/2023-11-19T22:00:28-08:00https://docs.communityhealthtoolkit.org/design/personas/partners/implementers/2020-06-01T11:01:54-07:00https://docs.communityhealthtoolkit.org/apps/guides/data/analytics/introduction/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/ux-research-repo/key-concepts/2023-05-16T13:11:09-07:00https://docs.communityhealthtoolkit.org/apps/examples/anc/2023-04-12T17:35:29+00:00https://docs.communityhealthtoolkit.org/design/icons/people_and_places/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/design/personas/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/contribute/medic/onboarding/product-team/2024-01-12T18:57:07+02:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/product-trio/product-trio-activities/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/running-programs/training/2024-03-28T02:15:04-07:00https://docs.communityhealthtoolkit.org/design/guides/designing-interviews/2022-04-28T12:11:31+03:00https://docs.communityhealthtoolkit.org/why-the-cht/2022-12-02T21:41:51-05:00https://docs.communityhealthtoolkit.org/contribute/docs/workflow/2023-04-12T10:00:06+00:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/ux-research-repo/about-interviews/2023-05-16T13:11:09-07:00https://docs.communityhealthtoolkit.org/contribute/medic/onboarding/all-the-things/2024-02-16T14:56:32+00:00https://docs.communityhealthtoolkit.org/contribute/code/android/development-setup/2024-03-18T10:03:08-05:00https://docs.communityhealthtoolkit.org/design/best-practices/2023-12-13T07:55:15+03:00https://docs.communityhealthtoolkit.org/contribute/code/core/build-commands/2023-11-28T15:41:06-06:00https://docs.communityhealthtoolkit.org/running-programs/2023-11-21T01:04:00-08:00https://docs.communityhealthtoolkit.org/core/overview/cht-sync/2024-04-03T15:51:38+00:00https://docs.communityhealthtoolkit.org/design/personas/chw-supervisor-ann/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/apps/concepts/2020-12-15T09:40:02-06:00https://docs.communityhealthtoolkit.org/apps/tutorials/couch2pg-setup/2023-10-12T08:47:28+13:00https://docs.communityhealthtoolkit.org/core/overview/db-schema/2023-08-07T01:42:44-07:00https://docs.communityhealthtoolkit.org/contribute/code/core/deploy-on-eks/2024-04-16T07:12:57-07:00https://docs.communityhealthtoolkit.org/apps/guides/data/hydration/2021-03-24T06:41:04+02:00https://docs.communityhealthtoolkit.org/apps/reference/forms/2020-10-19T08:47:55-07:00https://docs.communityhealthtoolkit.org/apps/guides/data/analytics/setup/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/design/personas/partners/local-governments/2020-06-01T11:01:54-07:00https://docs.communityhealthtoolkit.org/apps/concepts/navigation/2023-12-04T10:15:05+03:00https://docs.communityhealthtoolkit.org/core/overview/offline-first/2022-02-24T07:18:33+13:00https://docs.communityhealthtoolkit.org/apps/features/integrations/openmrs/2022-02-04T18:14:48-05:00https://docs.communityhealthtoolkit.org/core/overview/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/contribute/medic/product-core-competencies/2023-05-03T09:56:16+00:00https://docs.communityhealthtoolkit.org/core/overview/pwa/2022-04-08T10:38:39+12:00https://docs.communityhealthtoolkit.org/core/releases/2024-03-20T14:13:08-05:00https://docs.communityhealthtoolkit.org/apps/reference/resources/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/schedule-of-events/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/apps/reference/translations/2023-05-16T17:55:12+02:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/ux-research-repo/adding-nuggets/2023-05-16T13:11:09-07:00https://docs.communityhealthtoolkit.org/apps/2023-11-21T01:04:00-08:00https://docs.communityhealthtoolkit.org/design/components/2023-05-19T14:14:18+00:00https://docs.communityhealthtoolkit.org/apps/tutorials/contact-and-users-1/2023-03-29T07:55:19-05:00https://docs.communityhealthtoolkit.org/core/overview/data-flows-for-analytics/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/design/guides/empathy-map/2022-04-19T07:42:28+03:00https://docs.communityhealthtoolkit.org/apps/features/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/apps/concepts/forms/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/design/personas/partners/national-governments/2020-06-01T11:01:54-07:00https://docs.communityhealthtoolkit.org/contribute/medic/onboarding/2023-05-03T09:56:16+00:00https://docs.communityhealthtoolkit.org/apps/features/integrations/oppia/2020-12-17T15:05:43-08:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/product-trio/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/apps/guides/data/analytics/production/2024-04-01T15:02:08+00:00https://docs.communityhealthtoolkit.org/apps/features/integrations/rapidpro/2020-08-20T16:45:11-04:00https://docs.communityhealthtoolkit.org/design/personas/regional-manager-christina/2023-02-19T20:45:44+03:00https://docs.communityhealthtoolkit.org/contribute/code/android/releasing/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/contribute/tech-radar/2024-01-25T08:20:26+00:00https://docs.communityhealthtoolkit.org/contribute/medic/onboarding/technical-resources/2024-01-17T17:16:27+02:00https://docs.communityhealthtoolkit.org/apps/concepts/care-guides/2020-09-16T20:06:56-07:00https://docs.communityhealthtoolkit.org/core/2023-11-21T01:04:00-08:00https://docs.communityhealthtoolkit.org/contribute/code-of-conduct/2023-09-27T11:58:54+03:00https://docs.communityhealthtoolkit.org/apps/features/contacts/2022-09-15T09:07:15+07:00https://docs.communityhealthtoolkit.org/apps/tutorials/contact-and-users-2/2023-03-29T07:55:19-05:00https://docs.communityhealthtoolkit.org/apps/guides/data/analytics/environment-variables/2024-04-04T08:57:05+00:00https://docs.communityhealthtoolkit.org/apps/examples/2020-09-22T16:00:38-05:00https://docs.communityhealthtoolkit.org/design/icons/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/design/personas/nurse-mary/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/design/guides/problem-statement/2022-04-19T07:42:28+03:00https://docs.communityhealthtoolkit.org/apps/guides/android/publishing/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/contribute/code/releasing/publish-docker-image/2023-05-16T10:46:37-05:00https://docs.communityhealthtoolkit.org/core/overview/transitions/2023-06-14T09:53:43+03:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/ux-research-repo/synthesizing-nuggets/2023-05-16T13:11:09-07:00https://docs.communityhealthtoolkit.org/contribute/medic/onboarding/team-meetings/2024-04-16T10:19:29+00:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/ux-research-repo/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/accept_case_reports/2020-06-27T01:28:28-04:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/hierarchy/2022-06-17T14:30:45-05:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/dhis2/2020-07-09T16:39:14-07:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/forms/2022-05-03T07:56:17+05:45https://docs.communityhealthtoolkit.org/apps/reference/app-settings/header_tabs/2020-07-03T11:25:34+03:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/outbound/2024-01-22T11:08:37+03:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/patient_reports/2021-03-24T06:41:04+02:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/user-permissions/2023-08-14T19:41:47+07:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/registrations/2021-11-24T07:30:29+05:45https://docs.communityhealthtoolkit.org/apps/reference/app-settings/reminders/2020-07-14T15:02:10+12:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/replication_depth/2020-07-13T16:54:46+03:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/replications/2020-10-02T12:20:59-04:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/user-roles/2020-06-04T15:06:42-04:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/schedules/2023-10-25T18:04:48-04:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/sms/2022-11-24T11:08:37+13:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/token_login/2020-07-28T02:48:35+03:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/transitions/2023-04-03T21:22:37-04:00https://docs.communityhealthtoolkit.org/apps/reference/forms/app/2024-04-15T14:37:43+08:00https://docs.communityhealthtoolkit.org/apps/reference/app-settings/2023-08-31T09:59:32+05:45https://docs.communityhealthtoolkit.org/contribute/medic/2023-09-27T11:58:54+03:00https://docs.communityhealthtoolkit.org/contribute/code/repository-checklist/2023-05-08T14:34:53+00:00https://docs.communityhealthtoolkit.org/apps/reference/forms/collect/2021-10-05T16:38:24-04:00https://docs.communityhealthtoolkit.org/apps/reference/forms/contact/2024-01-15T13:28:55+02:00https://docs.communityhealthtoolkit.org/apps/reference/contact-page/2024-04-24T13:18:24+03:00https://docs.communityhealthtoolkit.org/contribute/medic/onboarding/daily-updates/2024-04-24T13:18:24+03:00https://docs.communityhealthtoolkit.org/design/personas/data-manager-paul/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/design/2020-06-01T11:16:07-07:00https://docs.communityhealthtoolkit.org/apps/reference/extension-libs/2023-05-08T06:38:08+12:00https://docs.communityhealthtoolkit.org/design/guides/mapping-hierarchy/2022-04-19T07:42:28+03:00https://docs.communityhealthtoolkit.org/apps/features/messaging/2020-09-21T15:56:39-07:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/ux-research-repo/publishing-insights/2023-05-16T13:11:09-07:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/quality-assistance/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/design/guides/2021-04-15T13:04:40+03:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/requirements/2023-10-06T16:32:03+02:00https://docs.communityhealthtoolkit.org/apps/tutorials/sms-forms/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/apps/reference/targets/2022-12-06T01:01:56-05:00https://docs.communityhealthtoolkit.org/apps/reference/tasks/2023-04-20T11:51:49+12:00https://docs.communityhealthtoolkit.org/core/overview/translations/2022-12-22T19:50:08+05:45https://docs.communityhealthtoolkit.org/apps/tutorials/2020-06-03T10:27:10-07:00https://docs.communityhealthtoolkit.org/apps/guides/forms/uhc-mode/2022-01-13T14:48:44-05:00https://docs.communityhealthtoolkit.org/apps/concepts/workflows/2020-12-10T15:03:59-05:00https://docs.communityhealthtoolkit.org/design/personas/app-builder/2020-05-30T19:36:05-04:00https://docs.communityhealthtoolkit.org/apps/tutorials/application-settings/2024-03-28T18:22:13+00:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/code-health/2023-04-04T10:38:58+12:00https://docs.communityhealthtoolkit.org/apps/concepts/hierarchy/2023-05-18T15:48:07-07:00https://docs.communityhealthtoolkit.org/apps/guides/2020-06-03T14:28:04-04:00https://docs.communityhealthtoolkit.org/apps/features/reports/2023-04-12T17:35:29+00:00https://docs.communityhealthtoolkit.org/apps/tutorials/sms-schedules/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/contribute/code/workflow/2024-04-17T07:37:21-05:00https://docs.communityhealthtoolkit.org/apps/tutorials/app-forms/2024-01-10T20:47:25+07:00https://docs.communityhealthtoolkit.org/apps/reference/2024-04-17T08:14:28+01:00https://docs.communityhealthtoolkit.org/contribute/code/releasing/2023-04-18T12:42:52+00:00https://docs.communityhealthtoolkit.org/apps/features/supervision/2023-06-26T07:18:05+03:00https://docs.communityhealthtoolkit.org/apps/features/tasks/2022-07-19T14:00:29-04:00https://docs.communityhealthtoolkit.org/contribute/medic/product-development-process/transparency-accountability/2024-03-29T17:47:52-04:00https://docs.communityhealthtoolkit.org/apps/concepts/users/2022-01-13T15:14:41-05:00https://docs.communityhealthtoolkit.org/contribute/2023-02-22T11:12:03+00:00https://docs.communityhealthtoolkit.org/apps/tutorials/form-properties/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/apps/concepts/interoperability/2024-01-15T13:28:55+02:00https://docs.communityhealthtoolkit.org/design/personas/partners/2020-06-01T11:16:07-07:00https://docs.communityhealthtoolkit.org/apps/features/targets/2023-12-13T07:55:15+03:00https://docs.communityhealthtoolkit.org/contribute/code/core/update-dependencies/2023-11-03T05:23:42+13:00https://docs.communityhealthtoolkit.org/apps/concepts/prerequisites/2023-05-14T21:33:28+03:00https://docs.communityhealthtoolkit.org/contribute/code/static-analysis/2024-02-09T11:50:30+01:00https://docs.communityhealthtoolkit.org/contribute/code/style-guide/2023-11-28T15:41:06-06:00https://docs.communityhealthtoolkit.org/apps/tutorials/tasks-1/2022-04-25T14:22:54+12:00https://docs.communityhealthtoolkit.org/apps/features/training/2023-04-11T06:24:09+07:00https://docs.communityhealthtoolkit.org/contribute/code/using-npm/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/3.x/ec2-setup-guide/2023-03-27T11:25:13-07:00https://docs.communityhealthtoolkit.org/contribute/code/core/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/gateway/2021-11-08T18:53:31-03:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/gateway/configuration/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/data-migration/2024-01-25T11:43:17+02:00https://docs.communityhealthtoolkit.org/glossary/2023-09-06T01:29:21-07:00https://docs.communityhealthtoolkit.org/apps/features/muting/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/core/overview/roadmap/2023-05-14T14:06:36-07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/self-hosting/2023-10-06T16:32:03+02:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/self-hosting/single-node/2024-04-25T10:28:20+02:00https://docs.communityhealthtoolkit.org/contribute/docs/style-guide/2023-10-09T09:09:53+02:00https://docs.communityhealthtoolkit.org/apps/tutorials/targets/2022-02-08T10:50:49+03:00https://docs.communityhealthtoolkit.org/apps/tutorials/contact-summary/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/apps/tutorials/death-reporting/2021-11-29T11:05:14-08:00https://docs.communityhealthtoolkit.org/apps/features/uhc-mode/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/apps/features/admin/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/contribute/code/core/automated-tests/2023-12-05T05:31:23+09:00https://docs.communityhealthtoolkit.org/apps/tutorials/condition-cards/2023-03-09T11:48:26+03:00https://docs.communityhealthtoolkit.org/apps/guides/android/branding/2024-04-23T09:23:45+05:45https://docs.communityhealthtoolkit.org/apps/tutorials/localizing-cht/2024-01-15T13:28:55+02:00https://docs.communityhealthtoolkit.org/apps/tutorials/application-graphics/2022-07-13T02:44:45+00:00https://docs.communityhealthtoolkit.org/apps/tutorials/application-tests/2023-04-12T10:00:06+00:00https://docs.communityhealthtoolkit.org/apps/guides/data/users-bulk-load/2024-01-22T12:03:58+03:00https://docs.communityhealthtoolkit.org/apps/guides/data/impact-metrics/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/apps/guides/training/onboarding/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/apps/guides/training/training-cards/2023-04-11T06:24:09+07:00https://docs.communityhealthtoolkit.org/apps/guides/training/training-cards-resources/2023-05-12T08:24:25+07:00https://docs.communityhealthtoolkit.org/apps/guides/data/training-instance/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/contribute/code/core/using-windows/2023-08-21T14:01:53+12:00https://docs.communityhealthtoolkit.org/apps/guides/data/invalid-reports/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/contribute/code/core/run-multiple-chrome-versions/2023-09-07T14:16:27-04:00https://docs.communityhealthtoolkit.org/apps/guides/data/csv-to-docs/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/africas-talking/2022-07-22T08:43:15+12:00https://docs.communityhealthtoolkit.org/contribute/code/android/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/2021-05-18T17:45:42-04:00https://docs.communityhealthtoolkit.org/apps/features/integrations/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/self-hosting/multiple-nodes/2024-04-25T10:28:20+02:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/self-hosting/self-hosting-k3s-multinode/2023-12-07T07:04:43-08:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/gateway/phones/2021-11-08T18:53:31-03:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/rapidpro/2022-12-08T13:31:35+01:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/3.x/self-hosting/2023-04-12T17:35:29+00:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/sms-states/2021-11-08T18:53:31-03:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/vertical-vs-horizontal/2023-12-21T11:56:09+03:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/shortcodes/2021-05-18T17:45:42-04:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/3.x/app-developer/2023-06-02T12:58:08-07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/app-developer/2024-02-05T17:31:34+00:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/3.x/ssl-cert-install/2022-10-31T14:34:56-07:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/message-loops/2021-05-18T17:45:42-04:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/gateways/gateway/troubleshooting/2023-03-10T04:36:47+05:45https://docs.communityhealthtoolkit.org/apps/guides/hosting/3.x/2023-03-27T11:25:13-07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/2023-10-06T16:32:03+02:00https://docs.communityhealthtoolkit.org/apps/guides/privacy/privacy-policy/2022-10-10T16:14:15-07:00https://docs.communityhealthtoolkit.org/apps/guides/data/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/database/2024-04-18T13:46:39+01:00https://docs.communityhealthtoolkit.org/apps/guides/debugging/2022-02-16T12:15:00+13:00https://docs.communityhealthtoolkit.org/apps/guides/forms/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/2023-03-27T11:25:13-07:00https://docs.communityhealthtoolkit.org/apps/guides/integrations/2022-07-05T04:16:58+03:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/monitoring/introduction/2023-05-23T09:47:40-05:00https://docs.communityhealthtoolkit.org/apps/guides/messaging/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/monitoring/2023-05-03T16:27:47-07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/3.x/offline/2023-11-27T10:41:21+02:00https://docs.communityhealthtoolkit.org/apps/guides/performance/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/privacy/2021-04-19T17:19:45-07:00https://docs.communityhealthtoolkit.org/apps/guides/security/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/monitoring/setup/2023-09-19T08:44:27-05:00https://docs.communityhealthtoolkit.org/apps/guides/tasks/2022-01-07T17:06:14-05:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/adding-tls-certificates/2024-04-25T10:28:20+02:00https://docs.communityhealthtoolkit.org/apps/guides/training/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/apps/guides/updates/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/android/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/data/analytics/2024-03-08T16:16:00+00:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/monitoring/production/2023-05-23T09:47:40-05:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/logs/2023-06-02T12:58:08-07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/backups/2023-10-06T16:32:03+02:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/monitoring/postgres-ingest/2023-09-06T13:24:27-07:00https://docs.communityhealthtoolkit.org/apps/guides/hosting/monitoring/integration/2023-10-06T16:32:03+02:00https://docs.communityhealthtoolkit.org/search/2022-07-27T20:41:57-05:00https://docs.communityhealthtoolkit.org/core/releases/0.4.15-and-earlier/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.10.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.10.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.10.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.10.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.11.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.11.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.11.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.11.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.12.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.12.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.12.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.12.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.12.4/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.12.5/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.4/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.5/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.6/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.13.7/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.14.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.14.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.14.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.14.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.15.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.16.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.16.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.17.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.18.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.18.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.6.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.6.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.6.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.6.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.7.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.7.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.7.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.7.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.8.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.8.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.8.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.8.3/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.8.4/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.8.5/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.9.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/2.9.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.0.0/2022-02-21T09:32:58-06:00https://docs.communityhealthtoolkit.org/core/releases/3.1.0/2022-02-21T09:32:58-06:00https://docs.communityhealthtoolkit.org/core/releases/3.10.0/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.10.1/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.10.2/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.10.3/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.10.4/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.10.5/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.11.0/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.11.1/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.11.2/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.11.3/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.12.0/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.12.1/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.13.0/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.14.0/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.14.1/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.14.2/2022-11-04T11:12:06-07:00https://docs.communityhealthtoolkit.org/core/releases/3.15.0/2022-05-05T09:06:44+12:00https://docs.communityhealthtoolkit.org/core/releases/3.16.0/2022-08-10T08:20:54-05:00https://docs.communityhealthtoolkit.org/core/releases/3.16.1/2022-12-02T09:34:55+02:00https://docs.communityhealthtoolkit.org/core/releases/3.17.0/2022-10-11T09:43:26+07:00https://docs.communityhealthtoolkit.org/core/releases/3.17.1/2022-12-02T09:35:08+02:00https://docs.communityhealthtoolkit.org/core/releases/3.17.2/2023-10-10T19:56:20+13:00https://docs.communityhealthtoolkit.org/core/releases/3.2.0/2022-10-31T16:02:09-04:00https://docs.communityhealthtoolkit.org/core/releases/3.2.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.3.0/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.4.0/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.4.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.5.0/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.6.0/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.6.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.6.2/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.7.0/2022-08-01T16:02:39+12:00https://docs.communityhealthtoolkit.org/core/releases/3.7.1/2021-11-24T11:32:41+13:00https://docs.communityhealthtoolkit.org/core/releases/3.8.0/2022-02-21T09:32:58-06:00https://docs.communityhealthtoolkit.org/core/releases/3.8.1/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.8.2/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.9.0/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.9.1/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/3.9.2/2022-01-14T11:19:07-05:00https://docs.communityhealthtoolkit.org/core/releases/4.0.0/2022-12-13T11:43:27+13:00https://docs.communityhealthtoolkit.org/core/releases/4.0.1/2022-12-01T17:04:46+02:00https://docs.communityhealthtoolkit.org/core/releases/4.1.0/2022-12-13T10:21:02+01:00https://docs.communityhealthtoolkit.org/core/releases/4.1.1/2023-03-21T13:03:08+00:00https://docs.communityhealthtoolkit.org/core/releases/4.1.2/2023-06-21T07:36:02+12:00https://docs.communityhealthtoolkit.org/core/releases/4.2.0/2023-05-25T10:01:43+07:00https://docs.communityhealthtoolkit.org/core/releases/4.2.1/2023-06-10T09:20:32+03:00https://docs.communityhealthtoolkit.org/core/releases/4.2.2/2023-07-07T21:11:26+03:00https://docs.communityhealthtoolkit.org/core/releases/4.2.3/2023-09-25T14:17:56+02:00https://docs.communityhealthtoolkit.org/core/releases/4.2.4/2023-10-10T19:56:20+13:00https://docs.communityhealthtoolkit.org/core/releases/4.3.0/2023-08-18T11:58:28+03:00https://docs.communityhealthtoolkit.org/core/releases/4.3.1/2023-08-30T15:37:03+12:00https://docs.communityhealthtoolkit.org/core/releases/4.3.2/2023-10-10T19:56:20+13:00https://docs.communityhealthtoolkit.org/core/releases/4.4.0/2023-11-06T18:07:13-08:00https://docs.communityhealthtoolkit.org/core/releases/4.4.1/2023-10-10T19:56:20+13:00https://docs.communityhealthtoolkit.org/core/releases/4.4.2/2023-12-12T12:39:34+02:00https://docs.communityhealthtoolkit.org/core/releases/4.5.0/2023-11-20T09:25:50-05:00https://docs.communityhealthtoolkit.org/core/releases/4.5.1/2023-12-12T12:39:34+02:00https://docs.communityhealthtoolkit.org/core/releases/4.5.2/2024-02-09T15:11:30+07:00https://docs.communityhealthtoolkit.org/core/releases/4.6.0/2024-03-28T10:51:13-05:00https://docs.communityhealthtoolkit.org/apps/guides/forms/additional-docs/2022-06-17T14:30:45-05:00https://docs.communityhealthtoolkit.org/apps/guides/forms/app-form-sms/2023-06-27T05:11:38+05:45https://docs.communityhealthtoolkit.org/apps/guides/debugging/obtaining-logs/2023-05-16T09:10:36-05:00https://docs.communityhealthtoolkit.org/apps/reference/_partial_cht_api/2023-04-06T14:38:13-04:00https://docs.communityhealthtoolkit.org/apps/tutorials/tasks-2/2023-04-06T14:38:13-04:00https://docs.communityhealthtoolkit.org/apps/guides/database/muting_in_dashboards/2021-10-08T08:43:53+03:00https://docs.communityhealthtoolkit.org/apps/examples/contact-tracing/2020-09-23T18:04:11-04:00https://docs.communityhealthtoolkit.org/apps/guides/database/couch2pg-oom-errors/2022-10-31T14:34:56-07:00https://docs.communityhealthtoolkit.org/apps/guides/database/couchdb-authentication/2022-11-22T08:13:16+13:00https://docs.communityhealthtoolkit.org/apps/examples/phc-covid/2020-09-23T18:04:11-04:00https://docs.communityhealthtoolkit.org/apps/examples/covid-education/2021-01-11T16:12:16-05:00https://docs.communityhealthtoolkit.org/apps/examples/covid-rdt-reference-app/2021-09-27T06:46:22-07:00https://docs.communityhealthtoolkit.org/apps/guides/database/database-conflicts/2022-11-22T08:13:16+13:00https://docs.communityhealthtoolkit.org/apps/guides/integrations/dhis2-aggregate/2020-07-09T16:39:14-07:00https://docs.communityhealthtoolkit.org/apps/examples/direct-to-client/2024-03-26T10:51:24+05:45https://docs.communityhealthtoolkit.org/apps/guides/hosting/4.x/_partial_docker_directories/2023-04-06T14:38:13-04:00https://docs.communityhealthtoolkit.org/apps/examples/ebs/2020-09-23T18:04:11-04:00https://docs.communityhealthtoolkit.org/apps/guides/updates/feature-flags/2023-05-04T10:39:42-04:00https://docs.communityhealthtoolkit.org/apps/guides/forms/google-drive/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/apps/guides/forms/form-inputs/2024-04-09T09:47:10-05:00https://docs.communityhealthtoolkit.org/apps/examples/learning-care/2021-03-03T16:27:50-05:00https://docs.communityhealthtoolkit.org/apps/tutorials/_partial_docker_setup/2023-10-06T16:32:03+02:00https://docs.communityhealthtoolkit.org/apps/examples/interoperability/2023-05-31T18:07:44+03:00https://docs.communityhealthtoolkit.org/apps/guides/privacy/policy/2023-06-29T09:58:29+12:00https://docs.communityhealthtoolkit.org/design/mockups/2023-03-10T03:00:38+03:00https://docs.communityhealthtoolkit.org/apps/guides/updates/moving-contacts/2021-10-22T17:25:03-04:00https://docs.communityhealthtoolkit.org/apps/guides/forms/multimedia/2022-06-17T14:30:45-05:00https://docs.communityhealthtoolkit.org/apps/guides/integrations/openmrs/2023-04-12T17:35:29+00:00https://docs.communityhealthtoolkit.org/apps/guides/integrations/oppia/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/apps/guides/tasks/pass-data-to-form/2023-04-06T14:38:13-04:00https://docs.communityhealthtoolkit.org/apps/examples/pharmacovigilance-reference-app/2024-01-16T12:23:53+03:00https://docs.communityhealthtoolkit.org/apps/examples/pih/2024-01-17T10:19:37+03:00https://docs.communityhealthtoolkit.org/apps/guides/updates/preparing-for-4/2023-04-18T12:42:52+00:00https://docs.communityhealthtoolkit.org/apps/guides/debugging/replicating-production-data-locally/2023-08-21T14:01:53+12:00https://docs.communityhealthtoolkit.org/apps/guides/performance/purging/2023-08-17T01:04:57+03:00https://docs.communityhealthtoolkit.org/apps/guides/database/querying_apdex_telemetry/2024-03-29T11:37:33+07:00https://docs.communityhealthtoolkit.org/apps/guides/tasks/query-task-data/2021-11-29T11:05:14-08:00https://docs.communityhealthtoolkit.org/apps/guides/forms/wealth-quintiles/2020-12-16T14:58:49-05:00https://docs.communityhealthtoolkit.org/apps/guides/integrations/rapidpro/2024-03-25T13:57:13-07:00https://docs.communityhealthtoolkit.org/apps/guides/database/rdbms-from-mac/2024-01-25T09:05:05+03:00https://docs.communityhealthtoolkit.org/apps/guides/database/rdbms-from-windows/2020-08-18T10:29:41-07:00https://docs.communityhealthtoolkit.org/apps/guides/updates/collect-forms-update/2021-07-16T08:15:33-05:00https://docs.communityhealthtoolkit.org/apps/examples/training/2023-03-09T15:46:54+07:00https://docs.communityhealthtoolkit.org/apps/guides/performance/replication/2020-08-19T12:19:51-07:00https://docs.communityhealthtoolkit.org/apps/guides/forms/report-titles/2020-06-05T14:27:01-04:00https://docs.communityhealthtoolkit.org/apps/guides/security/securely-onboarding-users-at-scale/2024-02-09T13:26:28-08:00https://docs.communityhealthtoolkit.org/apps/guides/debugging/secure-sharing-of-developer-instance/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/security/securing-android/2022-12-13T09:17:47+13:00https://docs.communityhealthtoolkit.org/apps/guides/debugging/sharing-4x-logs/2023-10-23T14:21:45-07:00https://docs.communityhealthtoolkit.org/apps/examples/stock-monitoring/2022-08-31T13:55:06-07:00https://docs.communityhealthtoolkit.org/apps/examples/supervisor-reference-app/2023-03-18T15:29:21+03:00https://docs.communityhealthtoolkit.org/apps/guides/tasks/task-schema-parameters/2021-11-29T11:05:14-08:00https://docs.communityhealthtoolkit.org/apps/guides/performance/telemetry/2024-03-18T22:18:10+07:00https://docs.communityhealthtoolkit.org/apps/reference/_partial_utils/2023-04-06T14:38:13-04:00https://docs.communityhealthtoolkit.org/apps/guides/forms/versioning/2022-08-05T10:25:51+12:00 \ No newline at end of file