{"id":10161456,"url":"https://gitlab.com/mythicteam/mythictable","last_synced_at":"2025-09-03T17:31:43.249Z","repository":{"id":50124830,"uuid":"14052249","full_name":"mythicteam/mythictable","owner":"mythicteam","description":"An Open Source Virtual Tabletop for playing games with friends all over the world","archived":false,"fork":false,"pushed_at":null,"size":null,"stargazers_count":182,"open_issues_count":322,"forks_count":43,"subscribers_count":null,"default_branch":"main","last_synced_at":"2024-09-06T07:31:38.972Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"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://gitlab.com/uploads/-/system/project/avatar/14052249/mythic_logo_3_.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"docs/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null}},"created_at":"2019-08-29T17:33:17.866Z","updated_at":"2024-08-02T00:43:31.663Z","dependencies_parsed_at":"2022-09-13T17:43:03.003Z","dependency_job_id":null,"html_url":"https://gitlab.com/mythicteam/mythictable","commit_stats":null,"previous_names":[],"tags_count":6,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/mythicteam%2Fmythictable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/mythicteam%2Fmythictable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/mythicteam%2Fmythictable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/mythicteam%2Fmythictable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/owners/mythicteam","download_url":"https://gitlab.com/mythicteam/mythictable/-/archive/main/mythictable-main.zip","host":{"name":"gitlab.com","url":"https://gitlab.com","kind":"gitlab","repositories_count":4516650,"owners_count":6621,"icon_url":"https://github.com/gitlab.png","version":null,"created_at":"2022-05-30T11:31:42.605Z","updated_at":"2024-07-18T11:24:13.055Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/owners"}},"keywords":["hacktoberfest"],"created_at":"2024-05-23T20:16:28.574Z","updated_at":"2024-12-30T19:30:37.901Z","avatar_url":"https://gitlab.com/uploads/-/system/project/avatar/14052249/mythic_logo_3_.png","language":null,"funding_links":[],"categories":["Projects Using Vue.js","Open Source [🔝](#readme)"],"sub_categories":["Open Source"],"readme":"\u003cdiv align=\"center\"\u003e\n\n![Mythic Table](/docs/images/logo-long-black-white.png)\n\n\u003c/div\u003e\n\n[![codecov](https://codecov.io/gl/mythicteam/mythictable/branch/main/graph/badge.svg?token=T71WDHV4QZ)](https://codecov.io/gl/mythicteam/mythictable)\n\n# Mythic Table\n\n**Welcome to Mythic Table!\u003cbr/\u003eA virtual tabletop application for playing games with your friends online.\u003cbr/\u003eIf this is your first time here, read more on our website: [https://mythictable.com/](https://mythictable.com/)**\n\n# Quick Start\n\nIf the following doesn't make sense, please contact someone in our [Slack](https://mythictable.slack.com). We'll help you out the best we can! \u003cbr/\u003eMany who find this page first will be software developers so we have made some assumptions.\n\n## First time setup\n\n1. [Install .NET Core SDK, version 3.1 or higher](https://dotnet.microsoft.com/download) (backend)\n1. Install node.js version 16 using [nvm](https://github.com/nvm-sh/nvm), Visual Studio Installer, or download a manual installer from [nodejs.org](https://nodejs.org/en/download/) (frontend)\n1. Start the main service\n   1. `cd $HOME/src`\n   1. `git clone https://gitlab.com/mythicteam/mythictable.git`\n   1. `cd mythictable/server/src/MythicTable`\n   1. `dotnet dev-certs https`\n   1. `dotnet dev-certs https --trust`\n   1. `dotnet run`\n1. Start Mythic Table's Frontend\n   1. `cd $HOME/src`\n   1. `cd mythictable/html`\n   1. Optional: if you installed node using `nvm` (see above) then you should run `nvm use` to switch to the correct node version\n   1. `npm install`\n   1. `npm start`\n1. Enjoy!\n\n## Troubleshooting\n### MACOS\nin MacOs Monterey, they added the \"AirPlay Reciever\". This binds to port 5000 at all times. \nYou will need to turn of `System Settings \u003e General \u003e Airdrop \u0026 Handoff \u003e AirPlay Reciever`. \n\n## Second time and onward\n\n1. Start the main service\n   1. `cd $PROJECT_ROOT/server/src/MythicTable`\n   1. `dotnet run`\n1. Start Mythic Table's Frontend\n   1. `cd $PROJECT_ROOT/html`\n   1. `npm start`\n1. Enjoy!\n\n## Authentication\n\nAbstracting authentication is an important part of the Mythic Table strategy. We use Keycloak for this.\n\n- Learn more about the [Keycloak Project](https://gitlab.com/mythicteam/apps/mythic-key/).\n- Learn more about [Keycloak](https://www.keycloak.org/)\n\n## Start the Keycloak service\n\n1. `cd $HOME/src`\n1. `mkdir apps`\n1. `cd apps`\n1. `git clone git@gitlab.com:mythicteam/apps/mythic-key.git`\n1. `cd mythic-key`\n1. `docker-compose up`\n\n# Building and Running the Docker Image\n\nThis process is not necessarily the recommended method, but it is important if\nyour goal is to set up a Mythic Table server on your own.\n\n## Environment\n\nThere are some very important environment files that are required for the build.\n\nOne way to configure your specific environement is to use the following in your `.env` file.\n\nThese are examples. They should be adjusted for your specific needs.\n\n```\nNODE_ENV=development\nMTT_AUTH_SERVICE_URL=http://localhost:5002\n```\n\nThis example uses MongoDB\n\n```\nNODE_ENV=development\nMTT_AUTH_SERVICE_URL=http://localhost:5002\nMTT_MONGODB_CONNECTIONSTRING=mongodb://admin:abc123!@localhost\nMTT_MONGODB_DATABASENAME=mythictable\n```\n\nThis example uses GCP Cloud Storage for file storage\n\n```\nMTT_GCP_CREDENTIAL_FILE=???\nMTT_GCP_BUCKET_IMAGES=???\nMTT_USE_GCP_IMAGE_STORE=true\n```\n\n## Building\n\n- `docker build --tag mythictable:local .`\n\n## Running\n\n- `docker run -d -p 5000:80 --rm --name mythictable mythictable:local`\n\n# Working with MongoDB\n\nThe above steps will be enough to get you up and going with an in-memory\ndatabase, but in some cases, that's not good enough. This is especially\ntrue if you find you're restarting the server a lot in the process of writing\ncode or troubleshooting. In cases like this, it might be better to run the\nservices with a local instance of MongoDB. There are a number of ways to\ndo this, but this is the Mythic Table recommended approach:\n\n## Install Docker\n\nDocker is a container system that allows applications to be run in an enviroment\nindependant of your operating system. Mythic Table uses Docker for a number\nof things including our production environment, but we've been shying away from\nit for local development environments. The reason is that we want to keep\nthings as simple as possible and though Docker is not complicated, it does\nremain a possible point of failure. However, do not be disheartened, it is\nextremely easy to set up and use. Especially with a set of commands to copy\nand paste. ;)\n\n### Windows and Mac users\n\n[Docker Desktop](https://www.docker.com/products/docker-desktop) is a great tool\nto get started with. Just go [here](https://www.docker.com/products/docker-desktop)\nand follow the instructions.\n\n### Linux users\n\nThis is much easier for Linux users.\n\n- [Centos](https://docs.docker.com/install/linux/docker-ce/centos/)\n- [Debian](https://docs.docker.com/install/linux/docker-ce/debian/)\n- [Fedora](https://docs.docker.com/install/linux/docker-ce/fedora/)\n- [Ubuntu](https://docs.docker.com/install/linux/docker-ce/ubuntu/)\n\nThis is an optional step, but highly recommended:\n\n- [Enable Docker CLI for the non-root user](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user)\n  account that will be used to run VS Code.\n\n### VS Code Users\n\n- Get the [Docker Extension](https://github.com/microsoft/vscode-docker)\n- You can also just search for it under extensions.\n\n## Docker Registry\n\nDocker uses a public image registry to host common images. You will likely need to make an account [here](https://hub.docker.com/)\n\nThen you will login using:\n\n- `docker login`\n\n## The MongoDB Image\n\nLinux/OS X\n\n- `docker pull mongo`\n- `docker run -d --rm -p 27017-27019:27017-27019 -v $HOME/docker/volumes/mongodb:/data/db --name mongodb mongo:latest`\n\nWindows\n\n- `docker pull mongo`\n- `docker volume create --name=mongodata`\n- `docker run -d -p 27017-27019:27017-27019 -v mongodata:/data/db --name mongodb mongo:latest`\n\nWhat do these commands do?\n\n- `docker` is the CLI tool for docker. You can `docker --help` for more information\n- `pull` will pull the image from Docker Hub\n- `volume create` will create a new Docker volume rather than linking to a folder on the host (required for mongo on Windows)\n- `run` will run the image\n- `-d` specifies daemon mode so the image is run in the background\n- `--rm` is a nice feature to remove the image after it's terminated\n- `-p 27017-27019:27017-27019` instructs docker how to listen and forward ports\n- `-v $HOME/docker/volumes/mongodb:/data/db` creates and mounts a local directory where MongoDB stores the database\n- `--name mongodb` creates a user friendly name\n- `mongo:latest` the last argument is the image name and tag\n\nYou may wish to stop and start the mongodb server later (or docker itself). You can stop and start the mongodb image by doing the following:\n\n- `docker stop mongo`\n- `docker start mongo`\n\n## Setting up MongoDB\n\nMongoDB requires a specific user with a specific password for local development.\nThese steps will walk you through the process of setting that up.\n\n- `docker exec -it mongodb mongo`\n\nWhat's happenging?\n\n- `exec` execute something in the docker container\n- `-it` interactively\n- `mongodb` the first mongo is your image name\n- `mongo` the second is your command to run.\n\nYou should now have a mongo prompt\n\n```\n\u003e\n```\n\nFrom here run the following:\n\n```\nuse admin\ndb.createUser(\n  {\n    user: \"admin\",\n    pwd: \"abc123!\",\n    roles: [ { role: \"root\", db: \"admin\" } ]\n  }\n);\nexit;\n```\n\n### Note\n\nIf the admin user isn't added, you might get the following error:\n\n```\nfail: MythicTable.Middleware.ErrorHandlerMiddleware[0]\n      Unhandled Exception: Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1.\n```\n\n## Running the server to connect to MongoDB\n\nBy default the server uses an in-memory collection for data persistance. To\nget it to use mongo, add `--launch-profile integration`. This will instruct it to\nuse the right profile. Keep in mind that the `integration` profile is set up to use\nboth MongoDB and Redis. You can either set up Redis with the instructions below\nor create a new launch profile.\n\n- `dotnet run --project .\\server\\src\\MythicTable\\MythicTable.csproj --launch-profile integration`\n\nor\n\n- `cd server/src/MythicTable/`\n- `dotnet run --launch-profile integration`\n\n# Working with Redis\n\nMythic Table uses a [Redis SignalR Backplane](https://docs.microsoft.com/en-us/aspnet/core/signalr/redis-backplane?view=aspnetcore-3.1)\nto help scale websocket connections seamlessly across multiple web servers.\nTo enable this, set up a Redis server and configure the MTT_REDIS_CONN_STRING\nenvironement variable. Below are the instructions to do this.\n\n## Install Redis via Docker\n\n- `docker pull redis:latest`\n- `docker run -d --rm -p 6379:6379 --name redis redis:latest`\n\n  -v [path to custom redis.conf file]:/usr/local/etc/redis/redis.conf\n\n## Running the server to connect to Redis\n\nBy default the server does not use a backplane. To configure it to run and use\nRedis, add `--launch-profile integration`. This will instruct Mythic Table to\nuse the right profile. Keep in mind that the `integration` profile is set up to use\nboth MongoDB and Redis. You can either set up MongoDB with the instructions above\nor create a new launch profile.\n\n- `dotnet run --project .\\server\\src\\MythicTable\\MythicTable.csproj --launch-profile integration`\n\n# Deploying Mythic Table\n\n## EDGE\n\nEdge is the Mythic Table development environment. It can be found here:\n\n- https://edge.mythictable.com\n\nIt is used to test deployments, feature flags, migrator scripts and to allow QA\nto verify changes before they at promoted to a release. This environment is not\nrecommended for the general public, but it's not protected either. Anyone can use\nit. They must, however, understand that their data is not protected here and the\nenvironment may be subject to more frequent outages.\n\n### Deployong to edge\n\nThis is done automatically when changes are merged into `main`. It can also be\nmanually deployed from branches that are not `main` by starting a manual job\nwith the following environment variable:\n\n- `DEPLOY_EDGE` with a value of `true`\n\nTo learn more about trigegering manual builds, please refer to the Gitlab documentation:\nhttps://docs.gitlab.com/ee/ci/pipelines/#run-a-pipeline-manually\n\n## First Playable\n\n- https://fp.mythictable.com\n\nThis environment is the First Playable environment. It is protected. Only Maintainers\ncan deploy here. It is done by creating a release tag. For more information about this\ntalk to a DevOps engineer at Mythic Table.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/gitlab.com%2Fmythicteam%2Fmythictable","html_url":"https://awesome.ecosyste.ms/projects/gitlab.com%2Fmythicteam%2Fmythictable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/gitlab.com%2Fmythicteam%2Fmythictable/lists"}