{"id":42030652,"url":"https://github.com/bfritscher/typesense-dashboard","last_synced_at":"2026-01-26T04:35:14.408Z","repository":{"id":38740706,"uuid":"389994061","full_name":"bfritscher/typesense-dashboard","owner":"bfritscher","description":"A Typesense Dashboard to manage and browse collections.","archived":false,"fork":false,"pushed_at":"2025-12-19T15:37:20.000Z","size":54773,"stargazers_count":584,"open_issues_count":5,"forks_count":114,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-12-21T23:26:13.203Z","etag":null,"topics":["dashboard","electron","quasar","typesense"],"latest_commit_sha":null,"homepage":"https://bfritscher.github.io/typesense-dashboard/","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bfritscher.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-07-27T13:28:37.000Z","updated_at":"2025-12-20T17:40:44.000Z","dependencies_parsed_at":"2024-02-24T13:38:39.306Z","dependency_job_id":"cb84b847-3123-4ce4-8866-663f8bf6ceaa","html_url":"https://github.com/bfritscher/typesense-dashboard","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/bfritscher/typesense-dashboard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfritscher%2Ftypesense-dashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfritscher%2Ftypesense-dashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfritscher%2Ftypesense-dashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfritscher%2Ftypesense-dashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bfritscher","download_url":"https://codeload.github.com/bfritscher/typesense-dashboard/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfritscher%2Ftypesense-dashboard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28766887,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T03:54:34.369Z","status":"ssl_error","status_checked_at":"2026-01-26T03:54:33.031Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["dashboard","electron","quasar","typesense"],"created_at":"2026-01-26T04:35:14.348Z","updated_at":"2026-01-26T04:35:14.394Z","avatar_url":"https://github.com/bfritscher.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Typesense Dashboard (typesense-dashboard)\n\nA Typesense Dashboard to manage and browse collections.\n\nA side project to test the Typesense API and Quasar with electron.\n\n## Usage\n\n### Web\n\nAs a web application, only typesense server started with `--enable-cors` will work.\n\nUse https://bfritscher.github.io/typesense-dashboard/ or build and install on your own server\n\n#### Limitation\n\nWhen using in your browser from an https address your server must also be behind SSL. Or you will get a MixedContent Network Error. (You might allow mix content in your browser, but this is not recommended).\n\n#### Docker\n\nself-host this dashboard with docker\\* (web version has some limitations import/export size of files)\n\nuse environment variable `PUBLIC_PATH` if you need something else than `/`\n\nExample usage:\n\n```bash\n$ docker build -t typesense-dashboard .\n$ docker run -d -p 80:80 typesense-dashboard\n```\n\n`caddy` is used for serving the actual files.\nOne could also copy `/srv` from the final Docker Image into another:\n\n```Dockerfile\nFROM alpine\nCOPY --from=typesense-dashboard /srv /typesense-dashboard\n```\n\nTo build and serve from a subfolder `/example` (must start with /)\n\n```bash\ndocker build --build-arg=PUBLIC_PATH=/example -t typesense-dashboard .\n```\n\nYou can also use the pre-built docker image for example like this:\n\n```bash\ndocker run -d -p 80:80 ghcr.io/bfritscher/typesense-dashboard:latest\n```\n\n#### Development proxy (`/api`)\n\nWhen running `npm run dev`, you can optionally proxy `/api` to a remote Typesense server to avoid CORS issues during local development.\n\nSet `DEV_API_PROXY_TARGET` to the remote origin (protocol + host + optional port). The dev server will forward `/api/*` to the target and strip the `/api` prefix.\n\nPowerShell example:\n\n```powershell\n$env:DEV_API_PROXY_TARGET = \"https://my-typesense.example.com\"; npm run dev\n```\n\n### Configuration\n\nMultiple settings are available to configure the dashboard behaviour: autologin, UI options, bookmarks (via history) and cluster tagging.\n\nThe application looks for the configuration in `/config.json` on initial page load. There are two ways to provide this file when running in Docker:\n\n- volume mount a `config.json` file to `/srv/config.json` in the container\n- set environment variable `TYPESENSE_DASHBOARD_CONFIG` containing the configuration JSON file in base64 encoded format (the container will generate `config.json` at startup)\n\n```bash\ndocker run -d -p 80:80 -v /path/to/config.json:/srv/config.json typesense-dashboard\n```\n\n```bash\ndocker run -d -p 80:80 -e TYPESENSE_DASHBOARD_CONFIG=$(base64 -w 0 /path/to/config.json) typesense-dashboard\n```\n\nSample config.json (same data as saved in localStorage of the browser). A sample configuration file is available at `config.json.sample` in the project root.\n\n#### Special host mode: `SAME`\n\nFor the web version, you can set `node.host` to `\"SAME\"` to connect to a Typesense node on the same hostname as the dashboard is being served from.\nWhen `host` is `\"SAME\"`, the dashboard resolves:\n\n- `host` from `window.location.hostname`\n- `protocol` from `window.location.protocol` (`http` / `https`)\n- `port` from `window.location.port` (or `80/443` if not present)\n\nThis is useful when you reverse-proxy the dashboard and Typesense under the same domain.\n\nExample:\n\n```json\n{\n  \"node\": {\n    \"host\": \"SAME\",\n    \"path\": \"/api\"\n  }\n}\n```\n\n```json\n{\n  \"apiKey\": \"xyz\",\n  \"node\": {\n    \"host\": \"somehost\",\n    \"port\": \"443\",\n    \"protocol\": \"https\",\n    \"path\": \"\",\n    \"tls\": true\n  },\n  \"ui\": {\n    \"hideProjectInfo\": false\n  },\n  \"history\": [\n    {\n      \"apiKey\": \"abc\",\n      \"node\": {\n        \"host\": \"anotherhost\",\n        \"port\": \"80\",\n        \"protocol\": \"http\",\n        \"path\": \"\",\n        \"tls\": false\n      }\n    },\n    {\n      \"apiKey\": \"def\",\n      \"node\": {\n        \"host\": \"yetanotherhost\",\n        \"port\": \"8080\",\n        \"protocol\": \"http\",\n        \"path\": \"\",\n        \"tls\": true\n      },\n      \"clusterTag\": \"dev-cluster\"\n    }\n  ]\n}\n```\n\nThe `history` is used to populate the client history to act as bookmarks.\n\n#### UI Configuration\n\nThe `ui` section allows you to customize the dashboard interface:\n\n- `hideProjectInfo`: Set to `true` to hide the project information section (version, GitHub link, and issue tracker) from the navigation menu. Default is `false`.\n\n### Cluster Status\n\nThe Cluster Status page lets you see multiple Typesense nodes side-by-side and poll their status in parallel. Each node card shows:\n\n- Node URL and version\n- Role with emphasis (Leader/Follower)\n- Memory and Disk usage\n- Typesense memory metrics (eg, typesense\\_\\* metrics)\n- System Network Rx/Tx\n- Stats (if enabled on the node)\n\nHow it works:\n\n- The navigation entry for Cluster Status appears only when the currently connected node belongs to a cluster.\n- Nodes are associated to a cluster using an optional `clusterTag` field embedded in each login history entry.\n- Nodes are displayed in a stable order (host, then port, then protocol), and the current node is highlighted. You can switch to another node directly from its card.\n\nWays to define clusters:\n\n- In the UI: tag any saved server entry (from the server history popover) with a text tag. The tag input autocompletes existing tags and accepts new values.\n- In `config.json`: pre-populate history entries with an optional `clusterTag` to group them. If a history entry omits `clusterTag`, it is not part of any cluster. The Cluster Status page is shown only when the currently connected node has a `clusterTag`.\n\n### Desktop\n\nWith the desktop application everything except instant search will work without cors.\nTo export or import large json or jsonl files, desktop version is required, because the browser version times out.\n\nDownload from the [release page](https://github.com/bfritscher/typesense-dashboard/releases) or build your own.\n\n#### _Linux_\n\nApp cannot be started by clicking on it, on Nautilus[\\*](https://stackoverflow.com/questions/55060402/electron-executable-not-recognized-by-nautilus)\n\nMake it executable and then you can run it from command line.\n\n```\n./'Typesense-Dashboard'\n```\n\n## Screenshots\n\n![server status](docs/images/server.png)\n\n![collections](docs/images/collections.png)\n\n![collection add](docs/images/collection_add.png)\n\n![aliases](docs/images/aliases.png)\n\n![apikeys](docs/images/apikeys.png)\n\n![document](docs/images/document.png)\n\n![search](docs/images/search.png)\n\n![search](docs/images/search_json.png)\n\n![schema](docs/images/schema.png)\n\n![synonyms](docs/images/synonyms.png)\n\n![curations](docs/images/curations.png)\n\n## Known Issues and Limitations\n\n- API features not yet implemented:\n  - create Snapshot\n  - delete by query\n  - Scoped Search Key generation\n\n# Development\n\n## Install the dependencies\n\n```bash\nyarn\n```\n\n### Start the app in development mode (hot-code reloading, error reporting, etc.)\n\n```bash\nquasar dev\nquasar dev -m electron --devtools\n```\n\n### Lint the files\n\n```bash\nyarn lint\n# or\nnpm run lint\n```\n\n### Format the files\n\n```bash\nyarn format\n# or\nnpm run format\n```\n\n### Build the app for production\n\n```bash\nquasar build\nquasar build --mode electron --target all\n```\n\n### Customize the configuration\n\nSee [Configuring quasar.conf.js](https://v2.quasar.dev/quasar-cli/quasar-conf-js).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbfritscher%2Ftypesense-dashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbfritscher%2Ftypesense-dashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbfritscher%2Ftypesense-dashboard/lists"}