StackShareStackShare
Follow on
StackShare

Discover and share technology stacks from companies around the world.

Follow on

© 2025 StackShare. All rights reserved.

Product

  • Stacks
  • Tools
  • Feed

Company

  • About
  • Contact

Legal

  • Privacy Policy
  • Terms of Service
  1. Home
  2. Companies
  3. Scrayos UG (haftungsbeschränkt)
Scrayos UG (haftungsbeschränkt)

Scrayos UG (haftungsbeschränkt)

Bonn, Germanyscrayos.net

Gaming, Development, Community

83tools
10decisions
3followers
OverviewTech Stack83Dev Feed

Tech Stack

View all 83
Stack by Layer
Application & Data39
Utilities13
DevOps28
Business Tools3
Application & Data
39 tools (47%)
Utilities
13 tools (16%)
DevOps
28 tools (34%)
Business Tools
3 tools (4%)

Application & Data

39
UbuntuAndroid SDKDigitalOceanHTML5MySQLES6Vert.xJavaPHPNGINXJavaScriptMariaDBRedisDocker ComposeNode.jsDiscordPythonCoreOSGraphQLCSS 3GraalVMQuarkusPostgreSQLGitLab PagesAgonesKubernetesDebianSassFirebaseNextcloudHetzner Online AGFlywayNettyDockerTypeScriptVue.jsvuexMarkdownSocket.IO

Utilities

13
StripePayPalLet's EncryptOAuth2KeycloakGoogle AnalyticsOpenAPISwagger InspectorOpenLDAPTheLoungeMailgunPostmanTwilio

DevOps

28
GitLabIntelliJ IDEAGitApache MavenGrafanaPrometheusAnsiblegulpnpmWebpackSwagger UIFindBugsGitLab CISentrySonatype NexusESLintSonarQubeJaCoCoJUnitPMDCheckstyle MochaBabelSeleniumGradleLogstashNightwatchjsJest

Business Tools

3
Stack OverflowjQueryPlantUML

Latest from Engineering

View all
Joshua Dean Küpper
Joshua Dean Küpper

CEO at Scrayos UG (haftungsbeschränkt)

Jan 25, 2022

DecidedonAgonesAgonesKubernetesKubernetes

We've already been monitoring Agones for a few years now, but we only adapted Kubernetes in mid 2021, so we could never use it until then. Transitioning to Kubernetes has overall been a blast. There's definitely a steep learning curve associated with it, but for us, it was certainly worth it. And Agones plays definitely a part in it.

We previously scheduled our game servers with Docker Compose and Docker Swarm, but that always felt a little brittle and like a really "manual" process, even though everything was already dockerized. For matchmaking, we didn't have any solution yet.

After we did tons of local testing, we deployed our first production-ready Kubernetes cluster with #kubespray and deployed Agones (with Helm) on it. The installation was very easy and the official chart had just the right amount of knobs for us!

The aspect, that we were the most stunned about, is how seamless Agones integrates into the Kubernetes infrastructure. It reuses existing mechanisms like the Health Pings and extends them with more resource states and other properties that are unique to game servers. But you're still free to use it however you like: One GameServer per Game-Session, one GameServer for multiple Game-Sessions (in parallel or reusing existing servers), custom allocation mechanisms, webhook-based scaling, ... we didn't run into any dead ends yet.

One thing, that I was a little worried about in the beginning, was the SDK integration, as there was no official one for Minecraft/Java. And the two available inofficial ones didn't satisfy our requirements for the SDK. Therefore, we went and developed our own SDK and ... it was super easy! Agones does publish their Protobuf files and so we could generate the stubs with #Protoc. The existing documentation regarding Client-SDKs from Agones was a great help in writing our own documentation for the interface methods.

And they even have excellent tooling for testing your own SDK implementations. With the use of Testcontainers we could just spin up the local SDK testing image for each of the integration tests and could confirm that our SDK is working fine. We discovered a very small inconsistency for one of the interface methods, submitted an issue and a corresponding PR and it was merged within less than 24 hours.

We've now been using Agones for a few months and it has proven to be very reliable, easy to manage and just a great tool in general.

386k views386k
Comments
Joshua Dean Küpper
Joshua Dean Küpper

CEO at Scrayos UG (haftungsbeschränkt)

Jun 27, 2021

DecidedonTheLoungeTheLounge

Our old ZNC IRC bouncer was succeeded by TheLounge , because it includes a Web-Interface, is actively maintained, has an out-of-the-box Docker image and overall just feels "cleaner" and more up-to-date.

It is responsive, offers modern chat features (like embeddings) and includes a search along with chat logs.

19.5k views19.5k
Comments
Joshua Dean Küpper
Joshua Dean Küpper

CEO at Scrayos UG (haftungsbeschränkt)

Jul 26, 2020

Needs advice

For our internal team and collaboration panel we use Nuxt.js (with TypeScript that is transpiled into ES6), Webpack and npm. We enjoy the opinionated nature of Nuxt.js over vanilla Vue.js, as we would end up using all of the components Nuxt.js incorporates anyways and we can adhere to the conventions setup by the Nuxt.js project, which allows us to get better support in case we run into any dead ends. Webpack allows us to create reproducable builds and also debug our application with hot reloads, which greately increased the pace at which we are able to perform and test changes. We also incorporated a lot of testing (ESLint, Chai, Jasmine, Nightwatchjs) into our pipelines and can trigger those jobs through GitLab CI. All packages are fetched through npm, so that we can keep our git repositories slim and are notified of new updates aswell as reported security flaws.

639k views639k
Comments
Joshua Dean Küpper
Joshua Dean Küpper

CEO at Scrayos UG (haftungsbeschränkt)

Jul 26, 2020

DecidedonGraphQLGraphQL

We use GraphQL for the communication between our Minecraft-Proxies/Load-Balancers and our global Minecraft-Orchestration-Service JCOverseer.

This connection proved to be especially challenging, as there were so many available options and very specific requirements and we tried our hardest to put as little complexity into this interface as possible.

Initially we considered designing our very own Netty based Packet-Protocol. While the performance of this approach probably would've been noteworthy, we would have had to write a lot of packets as the individual payloads would differ a lot and for the protocol specification a new project would've been needed, so we scrapped that idea.

Our second idea was to use a combination of Redis Key/Value store (in particular the ability to write whole, complex sets as the values of keys) for existing data, Redis Pub-Sub for the synchronization of new/changed/deleted data and a Vert.x based REST API for the mutation requests of the clients. While this would certainly have been possible, we decided against it, as redis offers no real other data types than strings and typing was important to us.

So we finally settled for GraphQL as it would allow us to define dynamic queries and mutations and additionally has subscriptions in store, so we would only need one component instead of three separate. The proxies register as subscribers to the server changes channel and fetch the current data set in advance. If they need to request changes, this is done through a mutation in GraphQL aswell.

The status of the invidiual servers is fetched through Docker healthchecks and a Docker client in the orchestration service, that subscribes to changed HEALTHINESS values in docker. If a service becomes unhealthy it is unregistered and synchronized through GraphQL. The healthcheck is comparable to a ping packet that expects a response in a given time frame.

2.1M views2.1M
Comments

Team on StackShare

2
Joshua Dean Küpper
Denis Jacobi