{"id":43022587,"url":"https://github.com/campudus/tableaux-frontend","last_synced_at":"2026-01-31T06:38:18.300Z","repository":{"id":28975209,"uuid":"32501623","full_name":"campudus/tableaux-frontend","owner":"campudus","description":"A web interface for tableaux. A restful service for storing data in tables.","archived":false,"fork":false,"pushed_at":"2026-01-19T11:09:11.000Z","size":15339,"stargazers_count":8,"open_issues_count":3,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-01-19T17:52:29.858Z","etag":null,"topics":["cms","dam","pim"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/campudus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-03-19T04:54:08.000Z","updated_at":"2026-01-19T11:08:01.000Z","dependencies_parsed_at":"2025-12-09T17:06:28.509Z","dependency_job_id":null,"html_url":"https://github.com/campudus/tableaux-frontend","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/campudus/tableaux-frontend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/campudus%2Ftableaux-frontend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/campudus%2Ftableaux-frontend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/campudus%2Ftableaux-frontend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/campudus%2Ftableaux-frontend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/campudus","download_url":"https://codeload.github.com/campudus/tableaux-frontend/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/campudus%2Ftableaux-frontend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28931385,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T04:05:25.756Z","status":"ssl_error","status_checked_at":"2026-01-31T04:02:35.005Z","response_time":128,"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":["cms","dam","pim"],"created_at":"2026-01-31T06:38:17.613Z","updated_at":"2026-01-31T06:38:18.281Z","avatar_url":"https://github.com/campudus.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tableaux Frontend [![Codacy Badge](https://app.codacy.com/project/badge/Grade/9fa0f51dbe554f3696b9b4b63da55346)](https://app.codacy.com/gh/campudus/tableaux-frontend/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n\nTableaux (pronounced /ta.blo/) is a restful service for storing data in tables. This project contains a generic React-based HTML5 client for the [tableaux backend](https://github.com/campudus/tableaux).\n\n## Project setup\n\nGo to project directory and execute:\n\n```sh\nnpm install\n```\n\n## Run project locally in dev mode\n\nGo to project directory and execute:\n\n```sh\nnpm run dev\n```\n\nThe redux store can hold a lot of data, which can slow down redux devtools severely. So when you have redux devtools installed and run into trouble while developing in large tables, you can try running\nwith\n\n```sh\nREDUX_DEVTOOLS=false npm run dev\n```\n\n## Build project with clean before\n\nGo to project directory and execute:\n\n```sh\n npm run clean \u0026\u0026 npm run build\n```\n\n## Overview of npm tasks\n\n``` shell\nnpm run\n  start             # create production bundle and serve at serverPort\n  build             # create production bundle\n  dev               # create dev bundle and serve it at serverPort\n  lint              # lint all project source files\n  lint:changes      # lint all differences to master\n  lint:fix          # apply automated lint fixes to all project source files\n  lint:fix:changes  # fix all changes to master\n  test              # run tests with vitest\n  test:ci           # run tests with vitest in CI mode + coverage\n  clean             # clean build cache and out directory\n  clean:project     # clean build cache and out directory, reinstall all dependencies\n```\n\n## Project configuration\n\nDefault project configuration can be overwritten via a `config.json` in the base directory or via environment variables.\n\n### Example for config.json\n\n```json\n{\n  \"outDir\": \"out\",                                // build artefacts go here\n  \"host\": \"localhost\",                            // host of the http frontend\n  \"port\": 3000,                                   // port for the http frontend\n  \"apiHost\": \"localhost\",                         //\n  \"apiPort\": 8080,                                // port of the backend service\n  \"webhookUrl\": \"..\",                             // url for Slack webhook to receive user feedback\n  \"authServerUrl\": \"http://localhost:8081/auth\",  // Keycloak\n  \"authRealm\": \"GRUD\",                            // Keycloak realm\n  \"authClientId\": \"grud-frontend\",                // Keycloak clientId\n  \"disableAuth\": true,                            // disable authentication for frontends behind old proxy (default: false),\n  \"injectPermissions\": \"path/to/perm.json\"        // in dev mode, add permissions as if given by authentication and user role\n}\n```\n\n### Example for environment variables\n\nEnvironment variables can be used to start multiple instances, listening on multiple ports.\n\nFollowing variable names can be used:\n\n- HOST\n- PORT\n- APIHOST\n- APIPORT\n- OUTDIR\n- WEBHOOKURL\n- REDUX_DEVTOOLS=[true,false] # \"false\" disable dev tools integration for dev performance. Default: true\n- ENABLE_HISTORY=[true,false] # Show or hide cell history button in context menu. Default: true\n- SHOW_TABLE_DROPDOWN=[true,false] # Show confusing table settings dropdown. Default: true\n- AUTH_SERVER_URL\n- AUTH_REALM\n- INJECT_PERMISSIONS # path to a permission JSON to mock auth results in dev mode\n\n```sh\nPORT=3001 npm run start\n```\n\n**Permissions JSON:**\n\n``` json\n{[key]: {[regex-template]: PermissionObject}}\n```\n\nWhere `key` is one of `[columns, rows, tables, media, tables, tableGroup]` and `PermissionObject` is a subset of possible permissions for the respective entities as boolean values.  \nRouting will call `new RegExp(...)` on each `regex-template` and apply the\npermissions found at the first match when running it against the API path.\n\n**Example:**\n\n```json\n{ \"columns\": { \".*\": { \"editCellValue\": true } } }\n```\n\nWill allow editing all cells.\n\n## Overwriting Favicons in Production Docker Containers\n\nWe deliver a default set of favicons located in the `out/img/favicon` resp. `public/img/favicon` directory. If you want to use your own custom favicons, you can replace the files in the container via volume mounts.\n\nTo do that, create a folder `\u003cfavicon-folder\u003e` on your host machine and place your custom favicon files there. Mount this folder to the container path where the favicons are expected.\n\n```yaml\nservices:\n  the-frontend:\n    image: the-frontend\n    volumes:\n      - \u003cfavicon-folder\u003e:/usr/app/out/img/favicon:ro\n```\n\n## Troubleshooting\n\n### NPM install fails with `node-gyp` error\n\nSomething like this:\n\n```sh\nnpm ERR! Traceback (most recent call last):\nnpm ERR!   File \"/Users/xxx/.nvm/versions/node/v20.5.1/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py\", line 42, in \u003cmodule\u003e\nnpm ERR!     import gyp  # noqa: E402\nnpm ERR!     ^^^^^^^^^^\n```\n\nThis is because `distutils` has been removed in Python v3.12. You can fix this by downgrade/installing Python v3.11.\nThe simplest and flexible way to manage Python versions is to use `pyenv`. Install it and use a `.python-version` file in the project root to specify the version.\n\n## License\n\n```txt\nCopyright 2016-present Campudus GmbH.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcampudus%2Ftableaux-frontend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcampudus%2Ftableaux-frontend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcampudus%2Ftableaux-frontend/lists"}