{"id":14990199,"url":"https://github.com/lablup/backend.ai-webui","last_synced_at":"2026-03-12T10:13:10.986Z","repository":{"id":37181000,"uuid":"152362178","full_name":"lablup/backend.ai-webui","owner":"lablup","description":"Backend.AI Web UI for web / desktop app (Windows/Linux/macOS). Backend.AI Web UI provides a convenient environment for users, while allowing various commands to be executed without CLI. It also provides some visual features that are not provided by the CLI, such as dashboards and statistics.","archived":false,"fork":false,"pushed_at":"2026-02-13T14:08:18.000Z","size":151616,"stargazers_count":125,"open_issues_count":583,"forks_count":78,"subscribers_count":12,"default_branch":"main","last_synced_at":"2026-02-13T14:47:02.697Z","etag":null,"topics":["backend","backendai","desktop","electron","lit-element","reactjs","webcomponent","websocket-proxy"],"latest_commit_sha":null,"homepage":"https://www.backend.ai","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lablup.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2018-10-10T04:17:02.000Z","updated_at":"2026-02-13T08:43:31.000Z","dependencies_parsed_at":"2026-01-09T06:07:04.613Z","dependency_job_id":null,"html_url":"https://github.com/lablup/backend.ai-webui","commit_stats":{"total_commits":5907,"total_committers":82,"mean_commits":72.03658536585365,"dds":0.3255459624174708,"last_synced_commit":"e43f24458c293c89fa7294c3b2159d9344c6fc1d"},"previous_names":[],"tags_count":374,"template":false,"template_full_name":null,"purl":"pkg:github/lablup/backend.ai-webui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lablup%2Fbackend.ai-webui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lablup%2Fbackend.ai-webui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lablup%2Fbackend.ai-webui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lablup%2Fbackend.ai-webui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lablup","download_url":"https://codeload.github.com/lablup/backend.ai-webui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lablup%2Fbackend.ai-webui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29642906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T05:21:04.652Z","status":"ssl_error","status_checked_at":"2026-02-20T05:21:04.238Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","backendai","desktop","electron","lit-element","reactjs","webcomponent","websocket-proxy"],"created_at":"2024-09-24T14:19:41.770Z","updated_at":"2026-02-20T06:02:21.308Z","avatar_url":"https://github.com/lablup.png","language":"TypeScript","readme":"# Backend.AI Web UI\n\n[![GitHub version](https://img.shields.io/github/v/release/lablup/backend.ai-webui?color=39a96b\u0026label=release\u0026sort=semver\u0026style=for-the-badge)](https://github.com/lablup/backend.ai-webui/releases/latest)\n[![GitHub version](https://img.shields.io/github/v/release/lablup/backend.ai-webui?color=ff9300\u0026include_prereleases\u0026label=testing\u0026sort=semver\u0026style=for-the-badge)](https://github.com/lablup/backend.ai-webui/releases/latest)\n\nMake AI Accessible: Backend.AI Web UI (web/app) for End-user / DevOps / SysAdmin.\n\nFor more information, see [manual](https://webui.docs.backend.ai/en/latest/).\n\n## Changelog\n\nView [changelog](https://github.com/lablup/backend.ai-webui/blob/main/CHANGELOG.md)\n\n## Role\n\nBackend.AI Web UI focuses to\n\n- Both desktop app (Windows, macOS and Linux) and web service\n- Provide both basic administration and user mode\n  - Use CLI for detailed administration features such as domain administration\n- Versatile devices ready such as mobile, tablet and desktop\n- Built-in websocket proxy feature for desktop app\n\n## User Features\n\n- Session management\n  - Set default resources for runs\n  - Monitor current resources sessions using\n  - Choose and run environment-supported apps\n  - Web-based Terminal for each session\n  - Fully-featured Visual Studio Code editor and environments\n- Inference service management\n  - Set / reserve endpoint URL for inference\n  - Autoscaling setup\n- Pipeline\n  - Experiments (with SACRED / Microsoft NNI / Apache MLFlow)\n  - AutoML (with Microsoft NNI / Apache MLFlow)\n  - Manages container streams with pipeline vfolders\n  - Storage proxy for fast data I/O between backend.ai cluster and user\n  - Checks queue and scheduled jobs\n- Storage management\n  - Create / delete folders\n  - Upload / download files (with upload progress)\n  - Integrated SSH/SFTP server (app mode only)\n  - Share folders with friends / groups\n- Node management\n  - See calculation nodes in Backend.AI cluster\n  - Live statistics of bare-metal / VM nodes\n- Statistics\n  - User resource statistics\n  - Session statistics\n  - Workload statistics\n  - Per-node statistics\n  - Insight (working)\n- Configurations\n  - User-specific web / app configurations\n  - System maintenances\n  - Beta features\n  - WebUI logs / errors\n- License\n  - Check current license information (for enterprise only)\n- Plugins\n  - Per-site specific plugin architecture\n  - Device plugins / storage plugins\n- Help \u0026 manuals\n  - Online manual\n\n## Management Features\n\n- Kernel managements\n  - List supported kernels\n  - Add kernel\n  - Refresh kernel list\n  - Categorize repository\n  - Add/update resource templates\n  - Add/remove docker registries\n- User management\n  - User creation / deletion / key management / resource templates\n- Keypair management\n  - Allocate resource limitation for keys\n  - Add / remove resource policies for keys\n- Manager settings\n  - Add /setting repository\n  - Plugin support\n- Proxy mode to support various app environments (with node.js (web), electron (app) )\n  - Needs backend.ai-wsproxy package\n- Service information\n  - Component compatibility\n  - Security check\n  - License information\n- Work with Web server (github/lablup/backend.ai-webserver)\n  - Delegate login to web server\n  - Support userid / password login\n\n## Setup Guide\n\n### Baked versions\n\n`backend.ai-webui` production version is also served as `backend.ai-app` and refered by `backend.ai-webserver` as submodule. If you use `backend.ai-webserver`, you are using latest stable release of `backend.ai-webui`.\n\n### Configuration\n\nBackend.AI Web UI uses `config.toml` located in app root directory. You can prepare many `config.toml.[POSTFIX]` in `configs` directory to switch various configurations.\n\n\u003e NOTE: Update only `config.toml.sample` when you update configurations.\n\u003e Any files in `configs` directory are auto-created via [`Makefile`](Makefile).\n\nThese are options in `config.toml`.\nYou can refer the role of each key in [`config.toml.sample`](config.toml.sample)\n\n## Debug mode\n\nWhen enabling debug mode, It will show certain features used for debugging in both web and app respectively.\n\n### Debugging in web browser\n\n- Show raw error messages\n- Enable creating session with manual image name\n\n### Debugging in app(electron)\n\nIf you want to run the app(electron) in debugging mode, you have to first [initialize](#initializing) and [build the Electron app](#building-electron-app).\n\nIf you have initialized and built the app(electron), please run the app(electron) in debugging mode with this command:\n\n```console\n$ make test_electron\n```\n\nYou can debug the app.\n\n## Branches\n\n- main : Development branch\n- release : Latest release branch\n- feature/[feature-branch] : Feature branch. Uses `git flow` development scheme.\n- tags/v[versions] : version tags. Each tag represents release versions.\n\n## Development Guide\n\nBackend.AI Web UI is built with\n\n- `lit-element` as webcomponent framework\n- `react` as library for web UI\n- `pnpm` as package manager\n- `rollup` as bundler\n- `electron` as app shell\n- `watchman` as file change watcher for development\n\n### Code of conduct\n\nView [Code of conduct](https://github.com/lablup/backend.ai-webui/blob/main/CODE_OF_CONDUCT.md) for community guidelines.\n\n### Initializing\n\n```console\n$ pnpm i\n```\n\nIf this is not your first-time compilation, please clean the temporary directories with this command:\n\n```console\n$ make clean\n```\n\nYou must perform first-time compilation for testing. Some additional mandatory packages should be copied to proper location.\n\n```console\n$ make compile_wsproxy\n```\n\nTo run `relay-compiler` with the watch option(`pnpm run relay -- --watch`) on a React project, you need to install `watchman`. If you use Homebrew on Linux, it's a great way to get a recent Watchman build. Please refer to [the official installation guide](https://facebook.github.io/watchman/docs/install).\n\n### Developing / testing without bundling\n\nOn a terminal:\n\n```console\n$ pnpm run build:d   # To watch source changes\n```\n\nOn another terminal:\n\n```console\n$ pnpm run server:d  # To run dev. web server\n```\n\nOn yet another terminal:\n\n```console\n$ pnpm run wsproxy  # To run websocket proxy\n```\n\nIf you want to change port for your development environment, Add your configuration to `/react/.env.development` file in the project:\n\n```\nPORT=YOURPORT\n```\n\nDefaultly, `PORT` is `9081`\n\n### Lint Checking\n\n```console\n$ pnpm run lint  # To check lints\n```\n\n### Unit Testing\n\nThe project uses `Playwright` as E2E testing framework and `Jest` as JavaScript testing framework.\n\n#### Playwright test\n\nTo perform E2E tests, you must run complete Backend.AI cluster before starting test.\n\n##### Environment Configuration\n\nE2E tests can be configured using environment variables. Copy the sample environment file and customize it:\n\n```console\n$ cp e2e/envs/.env.playwright.sample e2e/envs/.env.playwright\n```\n\nAvailable environment variables:\n- `E2E_WEBUI_ENDPOINT` - WebUI endpoint URL (default: `http://127.0.0.1:9081`)\n- `E2E_WEBSERVER_ENDPOINT` - Backend.AI server endpoint URL (default: `http://127.0.0.1:8090`)\n- User credentials: `E2E_ADMIN_EMAIL`, `E2E_ADMIN_PASSWORD`, `E2E_USER_EMAIL`, `E2E_USER_PASSWORD`, etc.\n\nIf environment variables are not set, default values will be used.\n\n##### Running Tests\n\nOn a terminal:\n\n```console\n$ pnpm run server:d  # To run dev. web server\n```\n\nOn another terminal:\n\n```console\n$ pnpm run test      # Run tests (tests are located in `tests` directory)\n```\n\n#### Visual Regression test\n\nTo perform visual regression tests,\nOn a terminal;\n\n```console\n$ pnpm playwright test e2e/visual_regression\n```\n\nYou can see screenshots in `e2e/snapshots`.\n\nIf you want to update screenshots due to UI changes, On a terminal;\n\n```console\n$ pnpm playwright test e2e/visual_regression --update-snapshots\n```\n\nAlso, If you want to see visual regression test report, On a terminal;\n\n```console\n$ pnpm exec playwright show-report\n```\n\n#### Jest test\n\nTo perform JavaScript test,\nOn a terminal;\n\n```console\n$ pnpm run test  # For ./src\n$ cd ./react \u0026\u0026 pnpm run test  # For ./react\n```\n\n### Electron (app mode) development / testing\n\n#### Live testing\n\nOn a terminal:\n\n```console\n$ pnpm run server:d    # To run test server\n```\n\nOR\n\n```console\n$ pnpm run server:p    # To run compiled source\n```\n\nOn another terminal:\n\n```console\n$ pnpm run electron:d  # Run Electron as dev mode.\n```\n\n### Development tools\n\n#### Recommended: VSCode Relay GraphQL Extension\n\nFor developing with Relay in your React application, it is highly recommended to install the [VSCode Relay GraphQL extension](https://marketplace.visualstudio.com/items?itemName=meta.relay). This extension provides various features to enhance your development experience with Relay.\n\n**Installation Steps:**\n\n1. Open VSCode and navigate to the Extensions view.\n2. Search for `Relay` and find the `Relay - GraphQL` extension by Meta.\n3. Click the `Install` button to add the extension to your VSCode.\n\n**Configuration:**\nAfter installing the extension, add the following configuration to your `./vscode/settings.json` file:\n\n```json\n{\n  \"relay.rootDirectory\": \"react\"\n}\n```\n\n## Serving Guide\n\n### Preparing bundled source\n\n```console\n$ make compile\n```\n\nThen bundled resource will be prepared in `build/rollup`. Basically, both app and web serving is based on static serving sources in the directory. However, to work as single page application, URL request fallback is needed.\n\nIf you want to create the bundle zip file,\n\n```console\n$ make bundle\n```\n\nwill generate compiled static web bundle at `./app` directory. Then you can serve the web bundle via webservers.\n\n### Serving with nginx\n\nIf you need to serve with nginx, please install and setup `backend.ai-wsproxy` package for websocket proxy. Bundled websocket proxy is simplified version for single-user app.\n\nThis is nginx server configuration example. [APP PATH] should be changed to your source path.\n\n```nginx\nserver {\n    listen      443 ssl http2;\n    listen [::]:443 ssl http2;\n    server_name [SERVER URL];\n    charset     utf-8;\n\n    client_max_body_size 15M;   # maximum upload size.\n\n    root [APP PATH];\n    index index.html;\n\n    location / {\n        try_files $uri /index.html;\n    }\n    keepalive_timeout 120;\n\n    ssl_certificate [CERTIFICATE FILE PATH];\n    ssl_certificate_key [CERTIFICATE KEY FILE PATH];\n}\n```\n\n### Building docker image using docker-compose\n\nMake sure that you compile the Web UI.\n\ne.g. You will download the `backend.ai-webserver` package.\n\n```console\n$ make compile\n```\n\n#### Backend.AI WebServer\n\nGood for develop phase. Not recommended for production environment.\n\nNote: This command will use Web UI source in `build/rollup` directory. No certificate will be used therefore web server will serve as HTTP.\n\nCopy `webserver.example.conf` in `docker_build` directory into current directory as `webserver.conf` and modify configuration files for your needs.\n\n```console\n$ docker-compose build webui-dev  # build only\n$ docker-compose up webui-dev     # for testing\n$ docker-compose up -d webui-dev  # as a daemon\n```\n\nVisit `http://127.0.0.1:8080` to test web server.\n\n#### Backend.AI WebServer with SSL\n\nRecommended for production.\n\nNote: You have to enter the certificates (`chain.pem` and `priv.pem`) into `certificates` directory. Otherwise, you will have an error during container initialization.\n\nCopy `webserver.example.ssl.conf` in `docker_build` directory into current directory as `webserver.conf` and modify configuration files for your needs.\n\n```console\n$ docker-compose build webui  # build only\n$ docker-compose up webui     # for testing\n$ docker-compose up -d webui  # as a daemon\n```\n\nVisit `https://127.0.0.1:443` to test web server serving. Change `127.0.0.1` to your production domain.\n\n#### Removing\n\n```console\n$ docker-compose down\n```\n\n#### Manual image build\n\n```console\n$ make compile\n$ docker build -t backendai-webui .\n```\n\nTesting / Running example\n\nCheck your image name is `backendai-webui_webui` or `backendai-webui_webui-ssl`. Otherwise, change the image name in the script below.\n\n```console\n$ docker run --name backendai-webui -v $(pwd)/config.toml:/usr/share/nginx/html/config.toml -p 80:80 backendai-webui_webui /bin/bash -c \"envsubst '$$NGINX_HOST' \u003c /etc/nginx/conf.d/default.template \u003e /etc/nginx/conf.d/default.conf \u0026\u0026 nginx -g 'daemon off;'\"\n$ docker run --name backendai-webui-ssl -v $(pwd)/config.toml:/usr/share/nginx/html/config.toml -v $(pwd)/certificates:/etc/certificates -p 443:443 backendai-webui_webui-ssl /bin/bash -c \"envsubst '$$NGINX_HOST' \u003c /etc/nginx/conf.d/default-ssl.template \u003e /etc/nginx/conf.d/default.conf \u0026\u0026 nginx -g 'daemon off;'\"\n```\n\n### Building / serving with webserver\n\nIf you need to serve as webserver (ID/password support) without compiling anything, you can use pre-built code through webserver submodule.\n\nTo download and deploy web UI from pre-built source, do the following in `backend.ai` repository:\n\n```console\n$ git submodule update --init --checkout --recursive\n```\n\n### Running websocket proxy with node.js\n\nThis is only needed with pure ES6 dev. environment / browser. Websocket proxy is embedded in Electron and automatically starts.\n\n```console\n$ pnpm run wsproxy\n```\n\nIf webui app is behind an external http proxy, and you have to pass through\nit to connect to a webserver or manager server, you can set\n`EXT_HTTP_PROXY` environment variable with the address of the http proxy.\nLocal websocket proxy then communicates with the final destination via the http\nproxy. The address should include the protocol, host, and/or port (if exists).\nFor example,\n\n```console\n$ export EXT_HTTP_PROXY=http://10.20.30.40:3128 (Linux)\n$ set EXT_HTTP_PROXY=http://10.20.30.40:3128 (Windows)\n```\n\nEven if you are using Electron embedded websocket proxy, you have to set the\nenvironment variable manually to pass through a http proxy.\n\n## Build web server with specific configuration\n\nYou can prepare site-specific configuration as `toml` format. Also, you can build site-specific web bundle refering in `configs` directory.\n\nNote: Default setup will build `es6-bundled` version. If you want to use `es6-unbundled`, make sure that your webserver supports HTTP/2 and setup as HTTPS with proper certification.\n\n```console\n$ make web site=[SITE CONFIG FILE POSTFIX]\n```\n\nIf no prefix is given, default configuration file will be used.\n\nExample:\n\n```console\n$ make web site=beta\n```\n\nYou can manually modify config.toml for your need.\n\n## App Building Guide\n\n### Building Electron App\n\nElectron building is automated using `Makefile`.\n\n```console\n$ make clean      # clean prebuilt codes\n$ make mac        # build macOS app (both Intel/Apple)\n$ make mac_x64    # build macOS app (Intel x64)\n$ make mac_arm64  # build macOS app (Apple Silicon)\n$ make win        # build win64 app\n$ make linux      # build linux app\n$ make all        # build win64/macos/linux app\n```\n\n#### Windows x86-64 version\n\n```console\n$ make win\n```\n\nNote: Building Windows x86-64 on other than Windows requires Wine \u003e 3.0\nNote: On macOS Catalina, use scripts/build-windows-app.sh to build Windows 32bitpackage. From macOS 10.15+, wine 32x is not supported.\nNote: Now the `make win` command support only Windows x64 app, therefore you do not need to use `build-windows-app.sh` anymore.\n\n#### macOS version\n\n##### All versions (Intel/Apple)\n\n```console\n$ make mac\n```\n\nNOTE: Sometimes Apple silicon version compiled on Intel machine does not work.\n\n##### Intel x64\n\n```console\n$ make mac_x64\n```\n\n##### Apple Silicon (Apple M1 and above)\n\n```console\n$ make mac_arm64\n```\n\n##### Building app with Code Signing (all platforms)\n\n1. Export keychain from Keychain Access. Exported p12 should contain:\n\n- Certificate for Developer ID Application\n- Corresponding Private Key\n- Apple Developer ID CA Certificate. Version of signing certificate (G1 or G2) matters, so be careful to check appropriate version!\n  To export multiple items at once, just select all items (Cmd-Click), right click one of the selected item and then click \"Export n item(s)...\".\n\n2. Set following environment variables when running `make mac_*`.\n\n- `BAI_APP_SIGN=1`\n- `BAI_APP_SIGN_APPLE_ID=\"\u003cApple ID which has access to created signing certificate\u003e\"`\n- `BAI_APP_SIGN_APPLE_ID_PASSWORD=\"\u003cApp-specific password of target Apple ID\u003e\"`\n- `BAI_APP_SIGN_IDENTITY=\"\u003cSigning Identity\u003e\"`\n- `BAI_APP_SIGN_KEYCHAIN_B64=\"\u003cBase64 encoded version of exported p12 file\u003e\"`\n- `BAI_APP_SIGN_KEYCHAIN_PASSWORD=\"\u003cImport password of exported p12 file\u003e\"`\n  Signing Identity is equivalent to the name of signing certificate added on Keychain Access.\n\n#### Linux x86-64 version\n\n```console\n$ make linux\n```\n\n### Packaging as zip files\n\nNote: Packaging usually performs right after app building. Therefore you do not need this option in normal condition.\n\nNote: Packaging macOS disk image requires electron-installer-dmg to make macOS disk image. It requires Python 2+ to build binary for package.\n\n### Manual run to test Electron\n\nNote: There are two Electron configuration files, `main.js` and `main.electron-packager.js`. Local Electron run uses `main.js`, not `main.electron-packager.js` that is used for real Electron app.\n\n```console\n$ make dep            # Compile with app dependencies\n$ pnpm run electron:d  # OR, ./node_modules/electron/cli.js .\n```\n\nThe electron app reads the configuration from `./build/electron-app/app/config.toml`, which is copied from the root `config.toml` file during `make clean \u0026\u0026 make dep`.\n\nIf you configure `[server].webServerURL`, the electron app will load the web contents (including `config.toml`) from the designated server.\nThe server may be either a `pnpm run server:d` instance or a `./py -m ai.backend.web.server` daemon from the mono-repo.\nThis is known as the \"web shell\" mode and allows live edits of the web UI while running it inside the electron app.\n\n### Localization\n\nLocale resources are JSON files located in `resources/i18n`.\n\nCurrently WebUI supports these languages:\n\n- English\n- Korean\n- French\n- Russian\n- Mongolian\n- Indonesian\n\n#### Extracting i18n resources\n\nRun\n\n```console\n$ make i18n\n```\n\nto update / extract i18n resources.\n\n### Adding i18n strings\n\n- Use `_t` as i18n resource handler on lit-element templates.\n- Use `_tr` as i18n resource handler if i18n resource has HTML code inside.\n- Use `_text` as i18n resource handler on lit-element Javascript code.\n\n#### Example\n\nIn lit-html template:\n\n```html\n\u003cdiv\u003e${_t('general.helloworld')}\u003c/div\u003e\n```\n\nIn i18n resource (en.json):\n\n```json\n{\n  \"general\": {\n    \"helloworld\": \"Hello World\"\n  }\n}\n```\n\n#### Adding new language\n\n1.  Copy `en.json` to target language. (e.g. `ko.json`)\n2.  Add language identifier to `supportLanguageCodes` in `backend-ai-webui.ts`.\n    e.g.\n\n```javascript\n  @property({type: Array}) supportLanguageCodes = [\"en\", \"ko\"];\n```\n\n3.  Add language information to `supportLanguages` in `backend-ai-usersettings-general-list.ts`.\n\nNote: DO NOT DELETE 'default' language. It is used for browser language.\n\n```javascript\n  @property({type: Array}) supportLanguages = [\n    {name: _text(\"language.Browser\"), code: \"default\"},\n    {name: _text(\"language.English\"), code: \"en\"},\n    {name: _text(\"language.Korean\"), code: \"ko\"}\n  ];\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flablup%2Fbackend.ai-webui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flablup%2Fbackend.ai-webui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flablup%2Fbackend.ai-webui/lists"}