diff --git a/kytos/core/api_server.py b/kytos/core/api_server.py
index f10c3b0..ccc0c80 100644
--- a/kytos/core/api_server.py
+++ b/kytos/core/api_server.py
@@ -200,7 +200,10 @@ class APIServer:
 
     def web_ui(self):
         """Serve the index.html page for the admin-ui."""
-        return send_file(f"{self.flask_dir}/index.html")
+        index_path = f"{self.flask_dir}/index.html"
+        if os.path.exists(index_path):
+            return send_file(index_path)
+        return f"File '{index_path}' not found.", HTTPStatus.NOT_FOUND.value
 
     def update_web_ui(self, version='latest', force=True):
         """Update the static files for the Web UI.
@@ -227,6 +230,9 @@ class APIServer:
                 package = urlretrieve(uri)[0]
             except HTTPError:
                 return f"Uri not found {uri}."
+            except URLError:
+                self.log.warning("Error accessing URL %s.", uri)
+                return f"Error accessing URL {uri}."
 
             # test downloaded zip file
             zip_ref = zipfile.ZipFile(package, 'r')

diff --git a/tests/unit/test_core/test_api_server.py b/tests/unit/test_core/test_api_server.py
index 1d98e71..20ff2bd 100644
--- a/tests/unit/test_core/test_api_server.py
+++ b/tests/unit/test_core/test_api_server.py
@@ -113,13 +113,23 @@ class TestAPIServer(unittest.TestCase):
             self.assertEqual(response.json, expected_json)
             self.assertEqual(response.status_code, 200)
 
+    @patch('os.path')
     @patch('kytos.core.api_server.send_file')
-    def test_web_ui(self, mock_send_file):
+    def test_web_ui__success(self, mock_send_file, ospath_mock):
         """Test web_ui method."""
+        ospath_mock.exists.return_value = True
         self.api_server.web_ui()
 
         mock_send_file.assert_called_with('flask_dir/index.html')
 
+    @patch('os.path')
+    def test_web_ui__error(self, ospath_mock):
+        """Test web_ui method."""
+        ospath_mock.exists.return_value = False
+        _, error = self.api_server.web_ui()
+
+        self.assertEqual(error, 404)
+
     @patch('kytos.core.api_server.urlretrieve')
     @patch('kytos.core.api_server.urlopen')
     @patch('zipfile.ZipFile')

Remove hard dependency on github for UI
# The Issue

In order to execute `kytosd`, the kytos needs to be able to download the UI from github. This download may be inaccessible, either from github being unavailable, firewall blocking github, or DNS unable to find github.

# Proposed Solution

- Allow for executing kytos without running the web server for the UI, while still running the web server for the api.
- Provide a different mechanism to couple the Web server for the UI to the controller.
tests/unit/test_core/test_api_server.py::TestAPIServer::test_deprecation_warning tests/unit/test_core/test_api_server.py::TestAPIServer::test_disable_napp__error_not_enabling tests/unit/test_core/test_api_server.py::TestAPIServer::test_disable_napp__error_not_installed tests/unit/test_core/test_api_server.py::TestAPIServer::test_disable_napp__success tests/unit/test_core/test_api_server.py::TestAPIServer::test_enable_napp__error_not_enabling tests/unit/test_core/test_api_server.py::TestAPIServer::test_enable_napp__error_not_installed tests/unit/test_core/test_api_server.py::TestAPIServer::test_enable_napp__success tests/unit/test_core/test_api_server.py::TestAPIServer::test_get_napp_metadata tests/unit/test_core/test_api_server.py::TestAPIServer::test_get_napp_metadata__invalid_key tests/unit/test_core/test_api_server.py::TestAPIServer::test_get_napp_metadata__not_installed tests/unit/test_core/test_api_server.py::TestAPIServer::test_get_ui_components tests/unit/test_core/test_api_server.py::TestAPIServer::test_install_napp__error_not_installing tests/unit/test_core/test_api_server.py::TestAPIServer::test_install_napp__http_error tests/unit/test_core/test_api_server.py::TestAPIServer::test_install_napp__success tests/unit/test_core/test_api_server.py::TestAPIServer::test_install_napp__success_is_installed tests/unit/test_core/test_api_server.py::TestAPIServer::test_list_enabled_napps tests/unit/test_core/test_api_server.py::TestAPIServer::test_list_installed_napps tests/unit/test_core/test_api_server.py::TestAPIServer::test_run tests/unit/test_core/test_api_server.py::TestAPIServer::test_run_error tests/unit/test_core/test_api_server.py::TestAPIServer::test_static_web_ui__error tests/unit/test_core/test_api_server.py::TestAPIServer::test_static_web_ui__success tests/unit/test_core/test_api_server.py::TestAPIServer::test_status_api tests/unit/test_core/test_api_server.py::TestAPIServer::test_stop_api_server tests/unit/test_core/test_api_server.py::TestAPIServer::test_uninstall_napp__error_not_uninstalling tests/unit/test_core/test_api_server.py::TestAPIServer::test_uninstall_napp__success tests/unit/test_core/test_api_server.py::TestAPIServer::test_uninstall_napp__success_not_installed tests/unit/test_core/test_api_server.py::TestAPIServer::test_update_web_ui tests/unit/test_core/test_api_server.py::TestAPIServer::test_update_web_ui__http_error tests/unit/test_core/test_api_server.py::TestAPIServer::test_update_web_ui__zip_error tests/unit/test_core/test_api_server.py::TestAPIServer::test_web_ui__error tests/unit/test_core/test_api_server.py::TestAPIServer::test_web_ui__success tests/unit/test_core/test_api_server.py::TestAPIDecorator::test_flask_call tests/unit/test_core/test_api_server.py::TestAPIDecorator::test_remove_napp_endpoints tests/unit/test_core/test_api_server.py::TestAPIDecorator::test_rule_from_classmethod tests/unit/test_core/test_api_server.py::TestAPIDecorator::test_rule_from_staticmethod tests/unit/test_core/test_api_server.py::TestAPIDecorator::test_rule_with_slash