Showing preview only (596K chars total). Download the full file or copy to clipboard to get everything.
Repository: dirien/minectl
Branch: main
Commit: 9fcd00bc85ce
Files: 163
Total size: 553.7 KB
Directory structure:
gitextract_l55wna43/
├── .dockerignore
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.yaml
│ │ ├── config.yml
│ │ └── feature.yaml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yaml
│ └── workflows/
│ ├── ci.yaml
│ ├── lock.yml
│ └── ossf-scorecard-action.yaml
├── .gitignore
├── .golangci.yaml
├── .goreleaser.yaml
├── .pre-commit-config.yaml
├── AGENTS.md
├── CONTRIBUTING.md
├── DCO
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── SECURITY.md
├── artifacthub-repo.yml
├── cmd/
│ └── minectl/
│ ├── AGENTS.md
│ ├── create.go
│ ├── delete.go
│ ├── list.go
│ ├── minectl.go
│ ├── plugins.go
│ ├── rcon.go
│ ├── update.go
│ └── wizard.go
├── config/
│ ├── bedrock/
│ │ ├── server-akamai.yaml
│ │ ├── server-aws.yaml
│ │ ├── server-civo.yaml
│ │ ├── server-do.yaml
│ │ ├── server-exoscale.yaml
│ │ ├── server-gce.yaml
│ │ ├── server-hetzner.yaml
│ │ ├── server-oci.yaml
│ │ ├── server-ovh.yaml
│ │ ├── server-scaleway.yaml
│ │ └── server-vexxhost.yaml
│ ├── bungeecord/
│ │ ├── proxy-civo.yaml
│ │ ├── proxy-do.yaml
│ │ └── proxy-vultr.yaml
│ ├── craftbukkit/
│ │ ├── server-akamai.yaml
│ │ └── server-do.yaml
│ ├── fabric/
│ │ ├── server-akamai.yaml
│ │ ├── server-civo.yaml
│ │ └── server-do.yaml
│ ├── forge/
│ │ ├── server-akamai.yaml
│ │ ├── server-civo.yaml
│ │ └── server-do.yaml
│ ├── java/
│ │ ├── server-akamai.yaml
│ │ ├── server-aws-arm.yaml
│ │ ├── server-aws-spot.yaml
│ │ ├── server-aws.yaml
│ │ ├── server-azure-spot.yaml
│ │ ├── server-azure.yaml
│ │ ├── server-civo.yaml
│ │ ├── server-do.yaml
│ │ ├── server-exoscale.yaml
│ │ ├── server-fuga.yaml
│ │ ├── server-gce-arm.yaml
│ │ ├── server-gce-spot.yaml
│ │ ├── server-gce.yaml
│ │ ├── server-hetzner-arm.yaml
│ │ ├── server-hetzner.yaml
│ │ ├── server-oci.yaml
│ │ ├── server-ovh.yaml
│ │ ├── server-scaleway.yaml
│ │ ├── server-vexxhost.yaml
│ │ └── server-vultr.yaml
│ ├── multipass/
│ │ ├── server-java.yaml
│ │ └── server-papermc.yaml
│ ├── nukkit/
│ │ ├── server-azure.yaml
│ │ ├── server-civo.yaml
│ │ ├── server-do.yaml
│ │ ├── server-fuga.yaml
│ │ ├── server-gce.yaml
│ │ └── server-ovh.yaml
│ ├── papermc/
│ │ ├── server-akamai.yaml
│ │ ├── server-aws-arm.yaml
│ │ ├── server-aws.yaml
│ │ ├── server-azure-arm.yaml
│ │ ├── server-azure.yaml
│ │ ├── server-civo.yaml
│ │ ├── server-do.yaml
│ │ ├── server-exoscale.yaml
│ │ ├── server-fuga.yaml
│ │ ├── server-gce-arm.yaml
│ │ ├── server-hetzner.yaml
│ │ ├── server-oci-arm.yaml
│ │ ├── server-oci.yaml
│ │ ├── server-scaleway.yaml
│ │ ├── server-vexxhost.yaml
│ │ └── server-vultr.yaml
│ ├── powernukkit/
│ │ ├── server-azure.yaml
│ │ └── server-civo.yaml
│ ├── purpur/
│ │ ├── server-akamai.yaml
│ │ ├── server-aws-arm.yaml
│ │ ├── server-aws.yaml
│ │ ├── server-azure-arm.yaml
│ │ ├── server-azure.yaml
│ │ ├── server-civo.yaml
│ │ ├── server-do.yaml
│ │ ├── server-exoscale.yaml
│ │ ├── server-fuga.yaml
│ │ ├── server-gce-arm.yaml
│ │ ├── server-hetzner.yaml
│ │ ├── server-oci-arm.yaml
│ │ ├── server-oci.yaml
│ │ ├── server-scaleway.yaml
│ │ ├── server-vexxhost.yaml
│ │ └── server-vultr.yaml
│ ├── spigot/
│ │ ├── server-akamai.yaml
│ │ ├── server-azure.yaml
│ │ └── server-do.yaml
│ ├── velocity/
│ │ ├── proxy-do.yaml
│ │ └── proxy-gce.yaml
│ └── waterfall/
│ ├── proxy-azure.yaml
│ ├── proxy-do.yaml
│ └── proxy-vultr.yaml
├── development.md
├── docs/
│ ├── architecture.md
│ ├── authentication.md
│ ├── cli-reference.md
│ ├── colored-motd.md
│ ├── configuration.md
│ ├── dashboard/
│ │ └── tutorial.json
│ ├── editions.md
│ ├── features.md
│ ├── getting-started-civo-bedrock.md
│ ├── getting-started-civo.md
│ ├── getting-started-exoscale.md
│ ├── getting-started-gce.md
│ ├── getting-started-scaleway.md
│ ├── minectl.drawio
│ ├── multi-server-monitoring-civo.md
│ ├── running-minecraft-luckyblocks-budget-scaleway.md
│ └── skyblock-papermc-hetzner.md
├── go.mod
├── go.sum
├── internal/
│ ├── logging/
│ │ └── logging.go
│ ├── manifest/
│ │ ├── manifest.go
│ │ ├── proxy.json
│ │ └── server.json
│ ├── provisioner/
│ │ └── provisioner.go
│ ├── rcon/
│ │ └── rcon.go
│ └── ui/
│ ├── form.go
│ ├── spinner.go
│ ├── spinner_test.go
│ ├── table.go
│ ├── table_test.go
│ ├── ui.go
│ └── ui_test.go
├── main.go
└── minectl-skill/
├── SKILL.md
├── evals/
│ └── evals.json
└── references/
├── cli-commands.md
├── cloud-providers.md
└── manifest-schema.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
**/ssh
**/plugins
**/docs
**/config
**/*.md
DCO
.pre-commit-config.yaml
.goreleaser.yml
.gitignore
LICENSE
Makefile
renovate.json
minectl
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### Go template
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
================================================
FILE: .github/CODEOWNERS
================================================
* @dirien
================================================
FILE: .github/ISSUE_TEMPLATE/bug.yaml
================================================
name: Bug Report
description: File a bug report
labels: [ bug, triage ]
assignees:
- dirien
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report! Please fill the form below.
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Also tell us, what did you expect to happen?
validations:
required: true
- type: textarea
id: reproducible
attributes:
label: How can we reproduce this?
description: Please share as much information as possible. Logs, screenshots, etc.
validations:
required: true
- type: textarea
id: minectl-version
attributes:
label: minectl version
description: '`minectl version` output'
render: bash
validations:
required: true
- type: checkboxes
id: search
attributes:
label: Search
options:
- label: I did search for other open and closed issues before opening this.
required: true
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/dirien/.github/blob/main/CODE_OF_CONDUCT.md)
options:
- label: I agree to follow this project's Code of Conduct
required: true
- type: textarea
id: ctx
attributes:
label: Additional context
description: Anything else you would like to add
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
================================================
FILE: .github/ISSUE_TEMPLATE/feature.yaml
================================================
name: Feature Request
description: Request a new feature and/or enhancement to an existing feature
labels: [enhancement, triage]
assignees:
- dirien
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this feature request! Please fill the form below.
- type: textarea
id: is-it-a-problem
attributes:
label: Is your feature request related to a problem? Please describe.
description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
validations:
required: true
- type: textarea
id: solution
attributes:
label: Describe the solution you'd like
description: A clear and concise description of what you want to happen.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Describe alternatives you've considered
description: A clear and concise description of any alternative solutions or features you've considered.
validations:
required: true
- type: checkboxes
id: search
attributes:
label: Search
options:
- label: I did search for other open and closed issues before opening this.
required: true
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/dirien/.github/blob/main/CODE_OF_CONDUCT.md)
options:
- label: I agree to follow this project's Code of Conduct
required: true
- type: textarea
id: ctx
attributes:
label: Additional context
description: Anything else you would like to add
validations:
required: false
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
### Thank you for making `minectl 🗺` better
Please reference the issue this PR is fixing.
*Also verify you have:*
* [ ] Read the [contributions](../CONTRIBUTING.md) page.
* [ ] Read the [DCO](../DCO), if you are a first time contributor.
* [ ] Read the [code of conduct](https://github.com/dirien/.github/blob/main/CODE_OF_CONDUCT.md).
================================================
FILE: .github/dependabot.yaml
================================================
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
labels:
- "dependencies"
commit-message:
prefix: "chore(deps)"
- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: "weekly"
labels:
- "dependencies"
commit-message:
prefix: "chore(deps)"
================================================
FILE: .github/workflows/ci.yaml
================================================
name: build-binary
on:
push:
branches:
- '*'
tags:
- '*'
pull_request:
permissions: read-all
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version: 1.24.x
cache: false
- name: Tests
run: |
make test coverage
release:
permissions:
contents: write
id-token: write
packages: write
needs: build
env:
DOCKER_CLI_EXPERIMENTAL: "enabled"
GITHUB_TOKEN: ${{ github.token }}
HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.GH_PAT }}
runs-on: ubuntu-latest
if: success() && startsWith(github.ref, 'refs/tags/')
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- name: Set up QEMU
uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0
- name: Docker Login
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ github.token }}
- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version: 1.24.x
cache: false
- uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- uses: sigstore/cosign-installer@ba7bc0a3fef59531c69a25acd34668d6d3fe6f22 # v4.1.0
- uses: anchore/sbom-action/download-syft@e22c389904149dbc22b58101806040fa8d37a610 # v0.24.0
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@ec59f474b9834571250b370d4735c50f8e2d1e29 # v7.0.0
with:
version: latest
args: release --clean
================================================
FILE: .github/workflows/lock.yml
================================================
name: lock-inactive
on:
schedule:
- cron: '0 * * * *'
permissions:
contents: read
jobs:
lock:
permissions:
issues: write
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@7266a7ce5c1df01b1c6db85bf8cd86c737dadbe7 # v6.0.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
issue-inactive-days: 30
pr-inactive-days: 30
issue-comment: >
This issue has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new issue for related bugs.
pr-comment: >
This pull request has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new issue for related bugs.
================================================
FILE: .github/workflows/ossf-scorecard-action.yaml
================================================
name: scorecards-supply-chain-security
on:
# Only the default branch is supported.
branch_protection_rule:
schedule:
# Weekly on Saturdays.
- cron: '30 1 * * 6'
push:
branches: [ main, master ]
# Declare default permissions as read only.
permissions: read-all
jobs:
analysis:
name: Scorecards analysis
runs-on: ubuntu-latest
permissions:
# Needed to upload the results to code-scanning dashboard.
id-token: write
security-events: write
actions: read
contents: read
steps:
- name: "Checkout code"
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: "Run analysis"
uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
with:
results_file: results.sarif
results_format: sarif
# Read-only PAT token. To create it,
# follow the steps in https://github.com/ossf/scorecard-action#pat-token-creation.
repo_token: ${{ secrets.SCORECARD_READ_TOKEN }}
# Publish the results for public repositories to enable scorecard badges. For more details, see
# https://github.com/ossf/scorecard-action#publishing-results.
# For private repositories, `publish_results` will automatically be set to `false`, regardless
# of the value entered here.
publish_results: true
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
# format to the repository Actions tab.
- name: "Upload artifact"
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
name: SARIF file
path: results.sarif
retention-days: 5
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1
with:
sarif_file: results.sarif
================================================
FILE: .gitignore
================================================
.idea
**/passwords
**/server.properties
tmp*/
bin/
dist/
coverage.out
revive.log
**/.DS_Store
**/key.json
/minectl
**/azure.auth
**/ssh/
**/oracleidentitycloudservice_*.pem
**/*-openrc.sh
.claude/
.mcp.json
================================================
FILE: .golangci.yaml
================================================
version: "2"
formatters:
enable:
- gofumpt
- goimports
linters:
enable:
# bugs
- bodyclose
- durationcheck
- errcheck
- errorlint
- gosec
- govet
- loggercheck
- nilerr
- noctx
- recvcheck
- sqlclosecheck
# performance
- copyloopvar
- intrange
- mirror
- perfsprint
- prealloc
- usestdlibvars
# style & conventions
- asciicheck
- bidichk
- dupword
- errname
- forbidigo
- goconst
- gocritic
- gocyclo
- goprintffuncname
- misspell
- modernize
- nolintlint
- nosprintfhostport
- predeclared
- revive
- tagliatelle
- unconvert
- unparam
- wastedassign
- whitespace
# testing
- thelper
- tparallel
- usetesting
# unused / dead code
- fatcontext
- reassign
settings:
forbidigo:
forbid:
- pattern: 'ioutil\.*'
msg: "use os and io packages instead of ioutil"
exclude-godoc-examples: true
analyze-types: true
tagliatelle:
case:
use-field-name: false
rules:
yaml: goCamel
json: snake
errorlint:
asserts: true
comparison: true
errorf: true
gocritic:
enabled-tags:
- diagnostic
- style
- performance
disabled-checks:
- hugeParam
- importShadow
revive:
rules:
- name: blank-imports
- name: context-as-argument
- name: dot-imports
- name: error-naming
- name: error-return
- name: error-strings
- name: exported
disabled: true
- name: increment-decrement
- name: indent-error-flow
- name: package-comments
disabled: true
- name: range
- name: receiver-naming
- name: redefines-builtin-id
- name: superfluous-else
- name: unreachable-code
- name: var-naming
misspell:
locale: US
ignore-rules:
- organisation
gocyclo:
min-complexity: 15
perfsprint:
err-error: true
errorf: true
sprintf1: true
gosec:
excludes:
- G104
- G204
- G304
================================================
FILE: .goreleaser.yaml
================================================
version: 2
project_name: minectl
snapshot:
version_template: '{{ .Version }}-SNAPSHOT'
before:
hooks:
- go mod tidy
builds:
- env:
- CGO_ENABLED=0
goos:
- linux
- windows
- darwin
ignore:
- goos: windows
goarch: arm64
goarch:
- amd64
- arm64
mod_timestamp: '{{ .CommitTimestamp }}'
flags:
- -trimpath
source:
enabled: true
sboms:
- artifacts: archive
- id: source
artifacts: source
checksum:
name_template: 'checksums.txt'
signs:
- cmd: cosign
signature: '${artifact}.sigstore.json'
args:
- sign-blob
- '--bundle=${signature}'
- '${artifact}'
- '-y'
artifacts: all
output: true
dockers:
- image_templates: [ "ghcr.io/dirien/{{ .ProjectName }}:{{ .Version }}-amd64" ]
dockerfile: Dockerfile
use: buildx
build_flag_templates:
- --platform=linux/amd64
- --label=org.opencontainers.image.licenses=Apache-2.0
- --label=org.opencontainers.image.description=minectl is a cli for creating Minecraft server on different cloud provider
- --label=org.opencontainers.image.created={{.Date}}
- --label=org.opencontainers.image.name={{.ProjectName}}
- --label=org.opencontainers.image.revision={{.FullCommit}}
- --label=org.opencontainers.image.version={{.Version}}
- --label=org.opencontainers.image.source={{.GitURL}}
- --label=io.artifacthub.package.maintainers=[{"name":"Engin Diri","email":"engin.diri@ediri.de"}]
- --label=io.artifacthub.package.readme-url=https://raw.githubusercontent.com/dirien/minectl/main/README.md
- --label=io.artifacthub.package.logo-url=https://dirien.github.io/minectl/img/minectl-logo.png
- --label=io.artifacthub.package.keywords=minecraft,server,cli
- --label=io.artifacthub.package.license=Apache-2.0
- image_templates: [ "ghcr.io/dirien/{{ .ProjectName }}:{{ .Version }}-arm64" ]
goarch: arm64
dockerfile: Dockerfile
use: buildx
build_flag_templates:
- --platform=linux/arm64/v8
- --label=org.opencontainers.image.licenses=Apache-2.0
- --label=org.opencontainers.image.description=minectl is a cli for creating Minecraft server on different cloud provider
- --label=org.opencontainers.image.created={{.Date}}
- --label=org.opencontainers.image.name={{.ProjectName}}
- --label=org.opencontainers.image.revision={{.FullCommit}}
- --label=org.opencontainers.image.version={{.Version}}
- --label=org.opencontainers.image.source={{.GitURL}}
- --label=io.artifacthub.package.maintainers=[{"name":"Engin Diri","email":"engin.diri@ediri.de"}]
- --label=io.artifacthub.package.readme-url=https://raw.githubusercontent.com/dirien/minectl/main/README.md
- --label=io.artifacthub.package.logo-url=https://dirien.github.io/minectl/img/minectl-logo.png
- --label=io.artifacthub.package.keywords=minecraft,server,cli
- --label=io.artifacthub.package.license=Apache-2.0
docker_manifests:
- name_template: 'ghcr.io/dirien/{{ .ProjectName }}:{{ .Version }}'
image_templates:
- 'ghcr.io/dirien/{{ .ProjectName }}:{{ .Version }}-amd64'
- 'ghcr.io/dirien/{{ .ProjectName }}:{{ .Version }}-arm64'
- name_template: 'ghcr.io/dirien/{{ .ProjectName }}:latest'
image_templates:
- 'ghcr.io/dirien/{{ .ProjectName }}:{{ .Version }}-amd64'
- 'ghcr.io/dirien/{{ .ProjectName }}:{{ .Version }}-arm64'
docker_signs:
- cmd: cosign
artifacts: manifests
output: true
args:
- 'sign'
- '${artifact}'
- '-y'
brews:
- repository:
owner: dirien
name: homebrew-dirien
token: "{{ .Env.HOMEBREW_TAP_GITHUB_TOKEN }}"
commit_author:
name: dirien
email: info@ediri.de
directory: Formula
homepage: "https://github.com/dirien/minectl"
description: "minectl️️ 🗺️ is a cli for creating Minecraft (java or bedrock) server on different cloud provider."
license: "Apache License 2.0"
archives:
- format_overrides:
- goos: windows
formats: ["zip"]
nfpms:
- file_name_template: >-
{{- .ProjectName }}_
{{- title .Os }}_
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "386" }}i386
{{- else }}{{ .Arch }}{{ end }}
{{- if .Arm }}v{{ .Arm }}{{ end -}}
homepage: https://github.com/dirien/minectl
description: "minectl️️ 🗺️ is a cli for creating Minecraft (java or bedrock) server on different cloud provider."
maintainer: "Engin Diri info@ediri.de"
license: "Apache License 2.0"
vendor: minectl️️ Developers
formats:
- rpm
- deb
- apk
bindir: /usr/bin
changelog:
sort: asc
use: github
filters:
exclude:
- '^test:'
- '^chore'
- Merge pull request
- Merge remote-tracking branch
- Merge branch
- go mod tidy
groups:
- title: 'New Features'
regexp: "^.*feat[(\\w)]*:+.*$"
order: 0
- title: 'Bug fixes'
regexp: "^.*fix[(\\w)]*:+.*$"
order: 10
- title: Other work
order: 999
================================================
FILE: .pre-commit-config.yaml
================================================
repos:
- repo: https://github.com/dirien/pre-commit-hooks
rev: v0.1.0
hooks:
- id: golangci-lint
================================================
FILE: AGENTS.md
================================================
<!-- FOR AI AGENTS - Human readability is a side effect, not a goal -->
<!-- Managed by agent: keep sections and order; edit content, not structure -->
<!-- Last updated: 2026-03-21 | Last verified: 2026-03-21 -->
# AGENTS.md
**Precedence:** the **closest `AGENTS.md`** to the files you're changing wins. Root holds global defaults only.
## Commands (verified 2026-03-21)
> Source: Makefile, go.mod
<!-- AGENTS-GENERATED:START commands -->
| Task | Command | ~Time |
|------|---------|-------|
| Typecheck | `go build -v ./...` | ~15s |
| Lint | `golangci-lint run --timeout 10m -E goimports --fix` | ~30s |
| Format | `gofmt -w .` | ~5s |
| Test (single) | `go test -v -race ./internal/ui/...` | ~2s |
| Test (all) | `go test -v ./...` | ~10s |
| Build (local) | `go build .` | ~10s |
| Build (cross) | `make build` | ~30s |
| Install | `go install .` | ~10s |
| Coverage | `make coverage` | ~15s |
<!-- AGENTS-GENERATED:END commands -->
> If commands fail, verify against `Makefile` or ask user to update.
## Workflow
1. **Before coding**: Read nearest `AGENTS.md` for the area you're touching
2. **After each change**: Run the smallest relevant check (lint → typecheck → single test)
3. **Before committing**: Run full test suite if changes affect >2 files or touch shared code
4. **Before claiming done**: Run verification and **show output as evidence**
## File Map
<!-- AGENTS-GENERATED:START filemap -->
```
main.go → entrypoint, injects version/commit/date
cmd/minectl/ → CLI commands (cobra): create, delete, list, update, wizard, plugins, rcon
internal/
logging/ → zap-based structured logging
manifest/ → YAML manifest parsing and JSON schema validation
provisioner/ → cloud provider orchestration via minectl-sdk
rcon/ → Minecraft RCON interactive prompt
ui/ → TUI components (spinner, table, forms via bubbletea/huh)
config/ → server config templates per Minecraft edition
docs/ → documentation and images
Dockerfile → chainguard static image, copies binary
Makefile → build, test, lint, coverage targets
```
<!-- AGENTS-GENERATED:END filemap -->
## Golden Samples (follow these patterns)
<!-- AGENTS-GENERATED:START golden-samples -->
| For | Reference | Key patterns |
|-----|-----------|--------------|
| CLI command | `cmd/minectl/create.go` | Cobra RunE, flag parsing, provisioner creation |
| Provisioner | `internal/provisioner/provisioner.go` | Interface, cloud provider switch, spinner lifecycle |
| UI component | `internal/ui/spinner.go` | Bubbletea model, headless vs interactive |
| Test pattern | `internal/ui/ui_test.go` | Table-driven tests, headless/interactive variants |
<!-- AGENTS-GENERATED:END golden-samples -->
## Utilities (check before creating new)
<!-- AGENTS-GENERATED:START utilities -->
| Need | Use | Location |
|------|-----|----------|
| Cloud provisioning | `minectl-sdk` | `github.com/dirien/minectl-sdk` (external) |
| CLI framework | `cobra` | `github.com/spf13/cobra` |
| TUI forms | `huh` | `github.com/charmbracelet/huh` |
| TUI spinners/tables | `bubbletea` + `bubbles` | `internal/ui/` |
| Logging | `zap` | `internal/logging/` |
| YAML parsing | `sigs.k8s.io/yaml` | `internal/manifest/` |
| JSON schema validation | `gojsonschema` | `internal/manifest/` |
| Error wrapping | `pkg/errors` | Used throughout |
<!-- AGENTS-GENERATED:END utilities -->
## Heuristics (quick decisions)
<!-- AGENTS-GENERATED:START heuristics -->
| When | Do |
|------|-----|
| Adding cloud provider | Add case in `internal/provisioner/provisioner.go:getProvisioner()`, implement in `minectl-sdk` |
| Adding CLI command | New file in `cmd/minectl/`, register in `minectl.go:init()` |
| Adding server edition | New config dir under `config/`, update manifest parsing |
| Version injection | Via ldflags in Makefile: `-X main.version=...` |
| Headless mode | Use `--headless` flag; switches UI to structured logging |
| Committing | Use Conventional Commits (`feat:`, `fix:`, `docs:`, etc.) |
| Adding dependency | Ask first — we minimize deps |
| Unsure about pattern | Check Golden Samples above |
<!-- AGENTS-GENERATED:END heuristics -->
## Repository Settings
<!-- AGENTS-GENERATED:START repo-settings -->
- **Default branch:** `main`
- **Go version:** 1.24.9
- **Module:** `github.com/dirien/minectl`
- **Docker:** chainguard static base image
- **CI:** GitHub Actions (lock-inactive workflow)
<!-- AGENTS-GENERATED:END repo-settings -->
## Key Decisions
<!-- AGENTS-GENERATED:START key-decisions -->
- **External SDK:** Core cloud logic lives in `github.com/dirien/minectl-sdk`, not in this repo. This repo is the CLI wrapper.
- **Charmbracelet TUI:** Interactive mode uses bubbletea/huh/lipgloss; headless mode falls back to zap logging.
- **Multi-cloud:** 15 cloud providers supported via provider-specific env vars (see `provisioner.go`).
- **Manifest-driven:** Server config is YAML manifests validated against JSON schema.
<!-- AGENTS-GENERATED:END key-decisions -->
## Boundaries
### Always Do
- Run pre-commit checks before committing
- Add tests for new code paths
- Use conventional commit format: `type(scope): subject`
- Follow Go 1.24 conventions and idioms
- Show test output as evidence before claiming work is complete
### Ask First
- Adding new dependencies
- Modifying CI/CD configuration
- Changing public API signatures or CLI flags
- Changes to `minectl-sdk` (external dependency)
- Repo-wide refactoring or rewrites
### Never Do
- Commit secrets, credentials, or cloud provider tokens
- Modify vendor/ or generated files
- Push directly to main branch
- Use `ioutil.*` (deprecated)
- Commit go.sum without go.mod changes
## Contributing (for AI agents)
- **Comprehension**: Understand the problem before submitting code. Read the linked issue, understand *why* the change is needed.
- **Context**: Every PR must explain trade-offs and link to the issue it addresses.
- **Continuity**: Respond to review feedback. Drive-by PRs without follow-up will be closed.
<!-- AGENTS-GENERATED:START module-boundaries -->
## Module Boundaries
- `cmd/minectl/` → CLI layer only; no business logic, delegates to `internal/`
- `internal/provisioner/` → orchestrates `minectl-sdk`; no direct cloud API calls
- `internal/ui/` → presentation only; no business logic
- `internal/manifest/` → parsing/validation only; no side effects
- `internal/logging/` → logging setup; used by `ui`
- `internal/rcon/` → RCON protocol; standalone
<!-- AGENTS-GENERATED:END module-boundaries -->
## Terminology
| Term | Means |
|------|-------|
| minectl | This CLI tool for provisioning Minecraft servers |
| minectl-sdk | External Go SDK containing cloud provider implementations |
| manifest | YAML file describing desired server configuration |
| edition | Minecraft variant: java, bedrock, fabric, forge, papermc, etc. |
| RCON | Remote Console protocol for Minecraft server administration |
| headless | Non-interactive mode for CI/automation (structured log output) |
## Index of scoped AGENTS.md
<!-- AGENTS-GENERATED:START scope-index -->
| Directory | Focus |
|-----------|-------|
| [`cmd/minectl/`](./cmd/minectl/AGENTS.md) | CLI commands, cobra patterns, flag handling |
<!-- AGENTS-GENERATED:END scope-index -->
> **Agents**: When you read or edit files in a listed directory, you **must** load its AGENTS.md first.
## When instructions conflict
The nearest `AGENTS.md` wins. Explicit user prompts override files.
- For Go-specific patterns, defer to language idioms and standard library conventions
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to minectl 🗺
Welcome, and thank you for considering contributing to minectl 🗺. We encourage you to help out by raising issues,
improving documentation, fixing bugs, or adding new features
If you're interested in contributing please start by reading this document.
## Establishing a Development Environment
Establishing a development environment typically requires:
1. Forking and cloning the repository.
1. Installing development dependencies.
## Contributing Code
To contribute bug fixes or features to minectl 🗺:
1. Communicate your intent.
1. Make your changes.
1. Test your changes.
1. Update documentation and examples.
1. Open a Pull Request (PR).
Communicating your intent lets the minectl 🗺 maintainers know that you intend to contribute, and how. This sets you up
for success - you can avoid duplicating an effort that may already be underway, adding a feature that may be rejected,
or heading down a path that you would be steered away from at review time. The best way to communicate your intent is
via a detailed GitHub issue. Take a look first to see if there's already an issue relating to the thing you'd like to
contribute. If there isn't, please raise a new one! Let us know what you'd like to work on, and why.
Be sure to practice [good git commit hygiene] as you make your changes. All but the smallest changes should be broken up
into a few commits that tell a story. Use your git commits to provide context for the folks who will review PR, and the
folks who will be spelunking the codebase in the months and years to come. Ensure each of your commits is signed-off in
compliance with the [Developer Certificate of Origin] by using `git commit -s`.
All minectl 🗺 documentation and examples are under revision control; see the
[docs] and [config] directories of this repository. Any change that introduces new behaviour or changes
existing behaviour must include updates to any relevant documentation and examples. Please keep documentation and
example changes in distinct commits.
In summary, please:
* Discuss your change in a GitHub issue before you start.
* Use your Git commit messages to communicate your intent to your reviewers.
* Sign-off on all Git commits by running `git commit -s`
* Add or update tests for all changes.
* Update all relevant documentation and examples.
* If necessary, tidy up your git commit history once your PR is approved.
Thank you for reading through our contributing guide!
[good git commit hygiene]: https://www.futurelearn.com/info/blog/telling-stories-with-your-git-history
[Developer Certificate of Origin]: https://github.com/apps/dco
[docs]: docs/
[config]: config/
================================================
FILE: DCO
================================================
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
660 York Street, Suite 102,
San Francisco, CA 94110 USA
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
================================================
FILE: Dockerfile
================================================
# Dockerfile
FROM cgr.dev/chainguard/static@sha256:853bfd4495abb4b65ede8fc9332513ca2626235589c2cef59b4fce5082d0836d
COPY minectl \
/usr/bin/minectl
ENTRYPOINT ["/usr/bin/minectl"]
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: Makefile
================================================
NAME := minectl
FILES := $(shell find * -type f ! -path 'vendor/*' -name '*.go')
.DEFAULT_GOAL := help
Version := $(shell git describe --tags --dirty)
GitCommit := $(shell git rev-parse HEAD)
LDFLAGS := "-s -w -X main.version=$(Version) -X main.commit=$(GitCommit)"
.PHONY: lint
lint: golangci-lint
.PHONY: golangci-lint
golangci-lint:
@hash golangci-lint > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
export BINARY="golangci-lint"; \
curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(GOPATH)/bin v1.41.1; \
fi
golangci-lint run --timeout 10m -E goimports --fix
.PHONY: test
test: ## Run the tests against the codebase
go test -v ./...
.PHONY: install
install: ## Build and install locally the binary (dev purpose)
go install .
.PHONY: build-local
build-local: ## Build the binaries using local GOOS
go build .
.PHONY: run-local
run-local: ## Run the binaries locals
go run .
.PHONY: build
build: ## Build the binaries
rm -rf bin/
mkdir -p bin/
CGO_ENABLED=0 GOOS=linux go build -ldflags $(LDFLAGS) -a -installsuffix cgo -o bin/$(NAME)
CGO_ENABLED=0 GOOS=darwin go build -ldflags $(LDFLAGS) -a -installsuffix cgo -o bin/$(NAME)-darwin
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags $(LDFLAGS) -a -installsuffix cgo -o bin/$(NAME).exe
.PHONY: clean
clean: ## Remove binary if it exists
rm -f $(NAME)
.PHONY: coverage
coverage: ## Generates coverage report
rm -rf *.out
go test -v ./... -coverpkg=./... -coverprofile=coverage.out
.PHONY: all
all: test build coverage ## Test, builds and ship package for all supported platforms
.PHONY: help
help: ## Displays this help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
================================================
FILE: README.md
================================================
## New - 1.21.11 support
`minectl 🗺`️️ supports the `Minecraft 1.21.11` version
<img alt="logo" src="docs/img/1_21_11_logo.png" width="40%"/>
# `minectl 🗺`




















[](https://pkg.go.dev/github.com/dirien/minectl)
[](https://goreportcard.com/report/github.com/dirien/minectl)


[](https://sonarcloud.io/summary/new_code?id=dirien_minectl)
[](https://api.securityscorecards.dev/projects/github.com/dirien/minectl)
[](https://bestpractices.coreinfrastructure.org/projects/5238)

[](https://artifacthub.io/packages/search?repo=minectl)
`minectl 🗺`️️ is a CLI for creating Minecraft servers on different cloud providers.
It is a private side project of me, to learn more about Go, CLI and multi-cloud environments.
## Table of Contents
- [Supported Cloud Providers](#supported-cloud-providers)
- [Quick Start](#quick-start)
- [Documentation](#documentation)
- [Getting Started Guides](#getting-started-guides)
- [Known Limitations](#known-limitations)
- [Contributing](#contributing)
- [Roadmap](#roadmap)
- [Libraries & Tools](#libraries--tools)
- [Legal Disclaimer](#legal-disclaimer)
## Supported Cloud Providers
| Provider | Website |
|----------|---------|
| Civo | https://www.civo.com/ |
| Scaleway | https://www.scaleway.com |
| DigitalOcean | https://www.digitalocean.com/ |
| Hetzner | https://www.hetzner.com/ |
| Akamai Connected Cloud | https://www.linode.com/ |
| OVHCloud | https://www.ovh.com/ |
| Google Compute Engine (GCE) | https://cloud.google.com/compute |
| Vultr | https://www.vultr.com/ |
| Azure | https://azure.microsoft.com/en-us/ |
| Oracle Cloud Infrastructure | https://www.oracle.com/cloud/ |
| Amazon AWS | https://aws.amazon.com/ |
| VEXXHOST | https://vexxhost.com/ |
| Multipass | https://multipass.run/ |
| Exoscale | https://www.exoscale.com/ |
| Fuga Cloud | https://fuga.cloud/ |
## Quick Start
### Installation
#### Linux/macOS (Installation Script)
```bash
curl -sLS https://get.minectl.dev | sudo sh
```
or without `sudo`:
```bash
curl -sLS https://get.minectl.dev | sh
```
#### macOS (Homebrew)
```bash
brew tap dirien/homebrew-dirien
brew install minectl
```
#### Windows (PowerShell)
```powershell
# Create directory
New-Item -Path "$HOME/minectl/cli" -Type Directory
# Download file
Start-BitsTransfer -Source https://github.com/dirien/minectl/releases/download/v0.7.0/minectl_0.7.0_windows_amd64.zip -Destination "$HOME/minectl/cli/."
# Uncompress zip file
Expand-Archive $HOME/minectl/cli/*.zip -DestinationPath $HOME/minectl/cli/.
# Add to Windows Environment Variables
[Environment]::SetEnvironmentVariable("Path",$($env:Path + ";$Home\minectl\cli"),'User')
```
#### From Source
```bash
git clone https://github.com/dirien/minectl
cd minectl
make build
```
### Create Your First Server
1. **Set up authentication** for your cloud provider ([see docs](docs/authentication.md))
2. **Create a config file** using the wizard:
```bash
minectl wizard
```
3. **Create the server**:
```bash
minectl create --filename server.yaml
```
4. **Connect and play!**
[](https://asciinema.org/a/439572)
## Documentation
| Document | Description |
|----------|-------------|
| [Architecture](docs/architecture.md) | High-level architectural overview |
| [Authentication](docs/authentication.md) | Cloud provider credentials setup |
| [Configuration](docs/configuration.md) | Server and proxy configuration reference |
| [CLI Reference](docs/cli-reference.md) | All commands and flags |
| [Editions](docs/editions.md) | Supported Minecraft server and proxy editions |
| [Features](docs/features.md) | Monitoring, volumes, security, and more |
## Getting Started Guides
- [Civo Java Edition](docs/getting-started-civo.md)
- [Civo Bedrock Edition](docs/getting-started-civo-bedrock.md)
- [Scaleway Java Edition](docs/getting-started-scaleway.md)
- [GCE Edition](docs/getting-started-gce.md)
- [Exoscale Edition](docs/getting-started-exoscale.md)
- [Multi-cloud server monitoring](docs/multi-server-monitoring-civo.md)
- [LuckyBlocks on Scaleway](docs/running-minecraft-luckyblocks-budget-scaleway.md)
- [PaperMC SkyBlock on Hetzner](docs/skyblock-papermc-hetzner.md)
## Known Limitations
`minectl 🗺` is still under development. There will be the possibility for breaking changes.
## Contributing
Feel free to join! See our [contribution guidelines](CONTRIBUTING.md).
**License:** Apache License, Version 2.0
## Roadmap
- [x] Support Bedrock edition [#10](https://github.com/dirien/minectl/issues/10)
- [x] Add monitoring capabilities [#21](https://github.com/dirien/minectl/issues/21)
- [x] List Minecraft Server [#11](https://github.com/dirien/minectl/issues/11)
- [x] Update Minecraft Server [#12](https://github.com/dirien/minectl/issues/12)
- [x] Hetzner support [#26](https://github.com/dirien/minectl/issues/26)
- [x] Linode support [#31](https://github.com/dirien/minectl/issues/31)
- [x] OVHCloud support [#43](https://github.com/dirien/minectl/issues/43)
- [x] GCE support [#55](https://github.com/dirien/minectl/issues/55)
- [x] Modded editions [#20](https://github.com/dirien/minectl/issues/20)
- [x] Vultr support [#90](https://github.com/dirien/minectl/issues/90)
- [x] Proxy servers (BungeeCord/Waterfall) [#95](https://github.com/dirien/minectl/issues/95)
- [x] Azure support [#56](https://github.com/dirien/minectl/issues/56)
- [x] Oracle/OCI support [#107](https://github.com/dirien/minectl/issues/107)
- [x] AWS support [#210](https://github.com/dirien/minectl/pull/210)
- [ ] Much more to come...
## Libraries & Tools
<details>
<summary>Click to expand</summary>
- https://github.com/charmbracelet/bubbletea
- https://github.com/charmbracelet/lipgloss
- https://github.com/charmbracelet/huh
- https://github.com/charmbracelet/bubbles
- https://github.com/melbahja/goph
- https://github.com/spf13/cobra
- https://github.com/goreleaser
- https://github.com/civo/civogo
- https://github.com/digitalocean/godo
- https://github.com/scaleway/scaleway-sdk-go
- https://github.com/linode/linodego
- https://github.com/hetznercloud/hcloud-go
- https://github.com/sethvargo/go-password
- https://github.com/ovh/go-ovh
- https://github.com/dirien/ovh-go-sdk
- https://github.com/hashicorp/go-retryablehttp
- https://github.com/googleapis/google-api-go-client
- https://github.com/Masterminds/sprig
- https://github.com/Tnze/go-mc
- https://github.com/c-bata/go-prompt
- https://github.com/vultr/govultr
- https://github.com/Azure/azure-sdk-for-go
- https://github.com/blang/semver
- https://github.com/tcnksm/go-latest
- https://github.com/uber-go/zap
- https://github.com/oracle/oci-go-sdk
- https://github.com/aws/aws-sdk-go-v2
- https://github.com/gophercloud/gophercloud
- https://github.com/exoscale/egoscale
</details>
## Legal Disclaimer
This project is not affiliated with Mojang Studios, XBox Game Studios, Double Eleven or the Minecraft brand.
"Minecraft" is a trademark of Mojang Synergies AB.
Other trademarks referenced herein are property of their respective owners.
## Stargazers over time
[](https://starchart.cc/dirien/minectl)
================================================
FILE: SECURITY.md
================================================
# Security Policies and Procedures
This document outlines security procedures and general policies for the `minectl 🗺`
project.
* [Reporting a Bug](#reporting-a-bug)
* [Disclosure Policy](#disclosure-policy)
* [Comments on this Policy](#comments-on-this-policy)
## Reporting a Bug
The `minectl 🗺` team and community take all security bugs in `minectl 🗺`
seriously. Thank you for improving the security of `minectl 🗺`. We appreciate your efforts and
responsible disclosure and will make every effort to acknowledge your contributions.
Report security bugs by emailing the lead maintainer at engin.diri@ediri.de.
The lead maintainer will acknowledge your email within 48 hours, and will send a more detailed response within 48 hours
indicating the next steps in handling your report. After the initial reply to your report, the security team will
endeavor to keep you informed of the progress towards a fix and full announcement, and may ask for additional
information or guidance.
Report security bugs in third-party modules to the person or team maintaining the module.
## Disclosure Policy
When the security team receives a security bug report, they will assign it to a primary handler. This person will
coordinate the fix and release process, involving the following steps:
* Confirm the problem and determine the affected versions.
* Audit code to find any potential similar problems.
* Prepare fixes for all releases still under maintenance. These fixes will be released as fast as possible to npm.
## Comments on this Policy
If you have suggestions on how this process could be improved please submit a pull request.
================================================
FILE: artifacthub-repo.yml
================================================
# ID is for the OCI Image
repositoryID: 71cfb056-f17b-4d72-8e10-a3437303a257
owners:
- name: Engin Diri
email: engin.diri@ediri.de
================================================
FILE: cmd/minectl/AGENTS.md
================================================
<!-- Managed by agent: keep sections and order; edit content, not structure. Last updated: 2026-03-21 -->
# AGENTS.md — cmd/minectl (CLI Commands)
<!-- AGENTS-GENERATED:START overview -->
## Overview
Cobra-based CLI entry point for minectl. Each file defines one subcommand. All commands delegate to `internal/` packages for business logic.
<!-- AGENTS-GENERATED:END overview -->
<!-- AGENTS-GENERATED:START filemap -->
## Key Files
| File | Purpose |
|------|---------|
| `minectl.go` | Root command, global flags (`--headless`, `--verbose`, `--log-encoding`), version check, subcommand registration in `init()` |
| `create.go` | `minectl create` — provisions a Minecraft server from manifest |
| `delete.go` | `minectl delete` — tears down a server by ID |
| `update.go` | `minectl update` — updates server edition/config |
| `list.go` | `minectl list` — lists servers for a given provider/region |
| `rcon.go` | `minectl rcon` — opens interactive RCON console |
| `plugins.go` | `minectl plugins` — uploads plugins to a running server |
| `wizard.go` | `minectl wizard` — interactive TUI wizard for server creation |
<!-- AGENTS-GENERATED:END filemap -->
<!-- AGENTS-GENERATED:START golden-samples -->
## Golden Samples (follow these patterns)
| For | Reference | Key patterns |
|-----|-----------|--------------|
| Standard CRUD command | `create.go` | `RunE` + `RunFunc` wrapper, flag setup, provisioner factory |
| Root + global flags | `minectl.go` | `PersistentPreRunE` for logging/UI setup, `PersistentPostRunE` for version check |
| Interactive command | `wizard.go` | Uses `internal/ui/form.go` for TUI prompts |
<!-- AGENTS-GENERATED:END golden-samples -->
<!-- AGENTS-GENERATED:START setup -->
## Setup & environment
- **CLI framework:** Cobra (`github.com/spf13/cobra`)
- **Build output:** `bin/minectl` (linux), `bin/minectl-darwin`, `bin/minectl.exe` (windows)
- Version injected via ldflags: `main.version`, `main.commit`, `main.date`
<!-- AGENTS-GENERATED:END setup -->
<!-- AGENTS-GENERATED:START commands -->
## Build & tests
- Build: `go build .` or `make build` (cross-platform)
- Run: `go run .`
- Test: `go test -v ./...` (tests are in `internal/`, not here)
- Lint: `golangci-lint run --timeout 10m -E goimports --fix`
<!-- AGENTS-GENERATED:END commands -->
<!-- AGENTS-GENERATED:START code-style -->
## Code style & conventions
- Use Cobra `RunE` (not `Run`) for commands that can fail
- Wrap `RunE` with `RunFunc()` from `minectl.go` for consistent error handling + exit codes
- Common flag sets: `--filename` (manifest), `--id` (server ID), `--ssh-key` (private key path)
- `createUpdatePluginProvisioner()` is the shared factory for commands needing a provisioner
- Register new commands in `init()` inside `minectl.go`
- Provide `--help` text for all commands and flags
- Exit codes: 0 = success, 1 = error (via `os.Exit` in `RunFunc`)
- Errors: displayed via `minectlUI.ErrorMsg()` (stderr in headless, TUI in interactive)
- `--headless` flag: enables structured logging, disables TUI rendering
<!-- AGENTS-GENERATED:END code-style -->
<!-- AGENTS-GENERATED:START security -->
## Security & safety
- Cloud credentials come from environment variables only — never from flags or config files
- Never log or display cloud tokens
- Validate manifest paths before reading
- SSH key paths: validate existence, do not log contents
<!-- AGENTS-GENERATED:END security -->
<!-- AGENTS-GENERATED:START checklist -->
## PR/commit checklist
- [ ] `--help` text is clear and accurate for new/modified commands
- [ ] New command registered in `minectl.go:init()`
- [ ] Uses `RunFunc` wrapper for error handling
- [ ] Flags have meaningful defaults and descriptions
- [ ] Works in both interactive and `--headless` mode
- [ ] Errors go through `minectlUI.ErrorMsg()`
<!-- AGENTS-GENERATED:END checklist -->
<!-- AGENTS-GENERATED:START examples -->
## Patterns to Follow
> **Prefer looking at real code in this repo over generic examples.**
> See **Golden Samples** section above for files that demonstrate correct patterns.
<!-- AGENTS-GENERATED:END examples -->
<!-- AGENTS-GENERATED:START help -->
## When stuck
- Cobra docs: see `github.com/spf13/cobra` README
- Check existing commands (especially `create.go`) for patterns
- Root AGENTS.md for project-wide conventions
<!-- AGENTS-GENERATED:END help -->
================================================
FILE: cmd/minectl/create.go
================================================
package minectl
import (
"fmt"
"github.com/dirien/minectl/internal/provisioner"
"github.com/dirien/minectl/internal/ui"
"github.com/pkg/errors"
"github.com/spf13/cobra"
)
func init() {
createCmd.Flags().StringP("filename", "f", "", "Location of the manifest file")
_ = createCmd.Flags().SetAnnotation("filename", cobra.BashCompFilenameExt, []string{"yaml"})
createCmd.Flags().BoolP("wait", "w", true, "Wait for Minecraft Server is started")
}
var createCmd = &cobra.Command{
Use: "create",
Short: "Create an Minecraft Server.",
Example: `minectl create \
--filename server-do.yaml`,
RunE: RunFunc(runCreate),
SilenceUsage: true,
SilenceErrors: true,
}
func runCreate(cmd *cobra.Command, _ []string) error {
filename, err := cmd.Flags().GetString("filename")
if filename == "" {
return errors.New("Please provide a valid manifest file via -f|--filename flag")
}
if err != nil {
return errors.Wrap(err, "Please provide a valid manifest file")
}
p, err := provisioner.NewProvisioner(&provisioner.MinectlProvisionerOpts{
ManifestPath: filename,
}, minectlUI)
if err != nil {
return err
}
wait := true
if cmd.Flags().Changed("wait") {
wait, _ = cmd.Flags().GetBool("wait")
}
res, err := p.CreateServer(wait)
if err != nil {
return err
}
if !headless {
table := ui.NewTable(minectlUI, "ID", "NAME", "REGION", "TAGS", "IP")
table.Append([]string{res.ID, res.Name, res.Region, res.Tags, res.PublicIP})
fmt.Println("")
table.Render()
minectlUI.Info(fmt.Sprintf("To delete the server:\n\n minectl delete -f %s --id %s", filename, res.ID))
minectlUI.Info(fmt.Sprintf("To update the server:\n\n minectl update -f %s --id %s", filename, res.ID))
minectlUI.Info(fmt.Sprintf("To connect via RCON:\n\n minectl rcon -f %s --id %s", filename, res.ID))
minectlUI.Warn("Beta features:")
minectlUI.Info(fmt.Sprintf("To upload a plugin:\n\n minectl plugins -f %s --id %s --plugin <folder>/x.jar --destination /minecraft/plugins", filename, res.ID))
}
return nil
}
================================================
FILE: cmd/minectl/delete.go
================================================
package minectl
import (
"github.com/dirien/minectl/internal/provisioner"
"github.com/dirien/minectl/internal/ui"
"github.com/pkg/errors"
"github.com/spf13/cobra"
)
func init() {
deleteCmd.Flags().StringP("filename", "f", "", "Location of the manifest file")
_ = deleteCmd.Flags().SetAnnotation("filename", cobra.BashCompFilenameExt, []string{"yaml"})
deleteCmd.Flags().String("id", "", "Contains the server id")
deleteCmd.Flags().BoolP("yes", "y", false, "Automatically delete the server")
}
var deleteCmd = &cobra.Command{
Use: "delete",
Short: "Delete an Minecraft Server.",
Example: `mincetl delete \
--filename server-do.yaml
--id xxx-xxx-xxx-xxx
`,
RunE: RunFunc(runDelete),
SilenceUsage: true,
SilenceErrors: true,
}
func runDelete(cmd *cobra.Command, _ []string) error {
filename, err := cmd.Flags().GetString("filename")
if err != nil {
return errors.Wrap(err, "failed to get 'filename' value")
}
if filename == "" {
return errors.New("Please provide a valid manifest file via -f|--filename flag")
}
id, err := cmd.Flags().GetString("id")
if err != nil {
return err
}
if id == "" {
return errors.New("Please provide a valid id")
}
newProvisioner, err := provisioner.NewProvisioner(&provisioner.MinectlProvisionerOpts{
ManifestPath: filename,
ID: id,
}, minectlUI)
if err != nil {
return err
}
yes := cmd.Flag("yes").Changed
if yes {
err = newProvisioner.DeleteServer()
if err != nil {
return err
}
} else {
confirmed, err := ui.Confirm("Do you want to delete the Minecraft server?")
if err != nil {
return err
}
if confirmed {
err = newProvisioner.DeleteServer()
if err != nil {
return err
}
} else {
minectlUI.Warn("Delete canceled.")
}
}
return nil
}
================================================
FILE: cmd/minectl/list.go
================================================
package minectl
import (
"fmt"
"github.com/dirien/minectl/internal/provisioner"
"github.com/dirien/minectl/internal/ui"
"github.com/pkg/errors"
"github.com/spf13/cobra"
)
func init() {
listCmd.Flags().StringP("provider", "p", "", "The cloud provider - civo|scaleway|do|hetzner|akamai|ovh|gce|vultr|azure|oci|aws|vexxhost|fuga|multipass|exoscale")
listCmd.Flags().StringP("region", "r", "", "The region (gce: zone) for your cloud provider - civo|gce")
}
var listCmd = &cobra.Command{
Use: "list",
Short: "List all Minecraft Server.",
Example: `mincetl list \
--provider civo \
--region LON1`,
RunE: RunFunc(runList),
SilenceUsage: true,
SilenceErrors: true,
}
func runList(cmd *cobra.Command, _ []string) error {
provider, err := cmd.Flags().GetString("provider")
if err != nil {
return errors.Wrap(err, "failed to get 'provider' value")
}
if provider == "" {
return errors.New("Please provide a valid 'provider' value")
}
region, err := cmd.Flags().GetString("region")
if err != nil {
return errors.Wrap(err, "failed to get 'region' value")
}
newProvisioner, err := provisioner.ListProvisioner(&provisioner.MinectlProvisionerListOpts{
Provider: provider,
Region: region,
}, minectlUI)
if err != nil {
return err
}
servers, err := newProvisioner.ListServer()
if err != nil {
return err
}
if len(servers) == 0 {
minectlUI.Info("No servers found")
return nil
}
if !headless {
fmt.Println("")
table := ui.NewTable(minectlUI, "ID", "NAME", "REGION", "TAGS", "IP")
for _, server := range servers {
table.Append([]string{server.ID, server.Name, server.Region, server.Tags, server.PublicIP})
}
table.Render()
}
return nil
}
================================================
FILE: cmd/minectl/minectl.go
================================================
package minectl
import (
"bytes"
"context"
"errors"
"fmt"
"os"
"os/exec"
"path/filepath"
"regexp"
"runtime"
"strings"
"go.uber.org/zap"
"github.com/blang/semver/v4"
"github.com/dirien/minectl/internal/logging"
"github.com/dirien/minectl/internal/provisioner"
"github.com/dirien/minectl/internal/ui"
"github.com/mitchellh/go-homedir"
"github.com/morikuni/aec"
pkgerrors "github.com/pkg/errors"
"github.com/spf13/cobra"
"github.com/tcnksm/go-latest"
)
var (
Version string
GitCommit string
Date string
)
func createUpdatePluginProvisioner(cmd *cobra.Command) (provisioner.Provisioner, error) {
filename, err := cmd.Flags().GetString("filename")
if err != nil {
return nil, pkgerrors.Wrap(err, "Please provide a valid manifest file")
}
if filename == "" {
return nil, pkgerrors.New("Please provide a valid manifest file via -f|--filename flag")
}
id, err := cmd.Flags().GetString("id")
if err != nil {
return nil, err
}
if id == "" {
return nil, pkgerrors.New("Please provide a valid id")
}
sshKey, err := cmd.Flags().GetString("ssh-key")
if err != nil {
return nil, err
}
if sshKey == "" {
return nil, pkgerrors.New("Please provide a valid ssh key path")
}
p, err := provisioner.NewProvisioner(&provisioner.MinectlProvisionerOpts{
ManifestPath: filename,
ID: id,
SSHPrivateKeyPath: sshKey,
}, minectlUI)
if err != nil {
return nil, err
}
return p, nil
}
func isDevVersion(s semver.Version) bool {
if len(s.Pre) == 0 {
return false
}
devStrings := regexp.MustCompile(`alpha|beta|dev|rc`)
return !s.Pre[0].IsNum && devStrings.MatchString(s.Pre[0].VersionStr)
}
func isBrewInstall(exe string) (bool, error) {
if runtime.GOOS != "darwin" {
return false, nil
}
exePath, err := filepath.EvalSymlinks(exe)
if err != nil {
return false, err
}
brewBin, err := exec.LookPath("brew")
if err != nil {
return false, err
}
brewPrefixCmd := exec.CommandContext(context.Background(), brewBin, "--prefix", "minectl")
var stdout bytes.Buffer
var stderr bytes.Buffer
brewPrefixCmd.Stdout = &stdout
brewPrefixCmd.Stderr = &stderr
if err = brewPrefixCmd.Run(); err != nil {
var ee *exec.ExitError
if errors.As(err, &ee) {
ee.Stderr = stderr.Bytes()
}
return false, pkgerrors.Wrapf(err, "'brew --prefix minectl' failed")
}
brewPrefixCmdOutput := strings.TrimSpace(stdout.String())
if brewPrefixCmdOutput == "" {
return false, pkgerrors.New("trimmed output from 'brew --prefix minectl' is empty")
}
brewPrefixPath, err := filepath.EvalSymlinks(brewPrefixCmdOutput)
if err != nil {
return false, err
}
brewPrefixExePath := filepath.Join(brewPrefixPath, "minectl")
return exePath == brewPrefixExePath, nil
}
func runPostCommandHooks(c *cobra.Command, args []string) error {
if c.PostRunE != nil {
if err := c.PostRunE(c, args); err != nil {
return err
}
} else if c.PostRun != nil {
c.PostRun(c, args)
}
for p := c; p != nil; p = p.Parent() {
if p.PersistentPostRunE != nil {
if err := p.PersistentPostRunE(c, args); err != nil {
return err
}
break
} else if p.PersistentPostRun != nil {
p.PersistentPostRun(c, args)
break
}
}
return nil
}
func RunFunc(run func(cmd *cobra.Command, args []string) error) func(*cobra.Command, []string) error {
return func(cmd *cobra.Command, args []string) error {
if res := run(cmd, args); res != nil {
minectlUI.ErrorMsg(res)
if postRunErr := runPostCommandHooks(cmd, args); postRunErr != nil {
minectlUI.ErrorMsg(postRunErr)
}
os.Exit(1)
}
os.Exit(0)
return nil
}
}
func getUpgradeCommand() string {
exe, err := os.Executable()
if err != nil {
return ""
}
isBrew, err := isBrewInstall(exe)
if err != nil {
fmt.Printf("error determining if the running executable was installed with brew: %s", err)
}
if isBrew {
return "$ brew upgrade minectl"
}
if runtime.GOOS != "windows" {
return "$ curl -sSL https://get.minectl.dev | sh"
}
return ""
}
func getUpgradeMessage(latestVer, current *semver.Version) *string {
cmd := getUpgradeCommand()
msg := fmt.Sprintf("A new version of minectl is available. To upgrade from version '%s' to '%s', ", current, latestVer)
if cmd != "" {
msg += "run \n " + cmd + "\n\nor "
}
msg += "visit https://github.com/dirien/minectl#installing-minectl- for manual instructions."
return &msg
}
func getCLIVersionInfo(current *semver.Version) (*semver.Version, error) {
githubTag := &latest.GithubTag{
Owner: "dirien",
Repository: "minectl",
}
res, err := latest.Check(githubTag, current.String())
if err != nil {
return nil, err
}
version, err := semver.New(res.Current)
if err != nil {
return nil, err
}
return version, nil
}
func checkForUpdate() *string {
curVer, err := semver.ParseTolerant(getVersion())
if err != nil {
fmt.Printf("error parsing current version: %s", err)
}
if isDevVersion(curVer) {
return nil
}
latestVer, err := getCLIVersionInfo(&curVer)
if err != nil {
return nil
}
if latestVer.GT(curVer) {
return getUpgradeMessage(latestVer, &curVer)
}
return nil
}
var versionCmd = &cobra.Command{
Use: "version",
Short: "Display the clients version information.",
Run: parseBaseCommand,
}
func getVersion() string {
if Version != "" {
return Version
}
return "0.1.0-dev"
}
func parseBaseCommand(_ *cobra.Command, _ []string) {
printLogo()
fmt.Println("Version:", getVersion())
fmt.Println("Git Commit:", GitCommit)
fmt.Println("Build date:", Date)
}
var (
headless bool
minectlLog *logging.MinectlLogging
minectlUI *ui.UI
updateCheckResult chan *string
)
var minectlCmd = &cobra.Command{
Use: "minectl",
Short: "Create Minecraft Server on different cloud provider.",
Run: runMineCtl,
CompletionOptions: cobra.CompletionOptions{
DisableDefaultCmd: false,
},
PersistentPreRunE: func(cmd *cobra.Command, _ []string) error {
headless, _ = cmd.Flags().GetBool("headless")
verbose, _ := cmd.Flags().GetString("verbose")
logEncoding, _ := cmd.Flags().GetString("log-encoding")
if headless && verbose == "" {
verbose = "info"
}
var err error
minectlLog, err = logging.NewLogging(verbose, logEncoding, headless)
if err != nil {
os.Exit(0)
}
minectlUI = ui.NewUI(headless, minectlLog)
var waitForUpdateCheck bool
defer func() {
if !waitForUpdateCheck {
close(updateCheckResult)
}
}()
updateCheckResult = make(chan *string)
waitForUpdateCheck = true
go func() {
updateCheckResult <- checkForUpdate()
close(updateCheckResult)
}()
return nil
},
PersistentPostRunE: func(_ *cobra.Command, _ []string) error {
checkVersionMsg, ok := <-updateCheckResult
if ok && checkVersionMsg != nil {
zap.S().Infof("Warning(%v)", checkVersionMsg)
fmt.Println()
fmt.Println(*checkVersionMsg)
}
return nil
},
}
func makeAppDirectoryIfNotExists() {
dir, err := homedir.Dir()
if err != nil {
fmt.Printf("error determining the home directory: %s", err)
}
path := dir + "/.minectl"
if _, err := os.Stat(path); os.IsNotExist(err) {
err := os.Mkdir(path, os.ModeDir|0o755)
if err != nil {
fmt.Printf("error while creating the minectl directory: %s", err)
}
}
}
func GetHomeFolder() string {
dir, err := homedir.Dir()
if err != nil {
fmt.Printf("error determining the home directory: %s", err)
}
return dir + "/.minectl"
}
func init() {
makeAppDirectoryIfNotExists()
minectlCmd.PersistentFlags().String("verbose", "",
"Enable verbose logging: debug|info|warn|error|dpanic|panic|fatal")
minectlCmd.PersistentFlags().String("log-encoding", "console",
"Set the log encoding: console|json (default: console)")
minectlCmd.PersistentFlags().Bool("headless", false,
"Set this value to if mincetl is called by a CI system. Enables logging and disables human-readable output rendering (default: false)")
minectlCmd.AddCommand(versionCmd)
minectlCmd.AddCommand(createCmd)
minectlCmd.AddCommand(deleteCmd)
minectlCmd.AddCommand(listCmd)
minectlCmd.AddCommand(wizardCmd)
minectlCmd.AddCommand(pluginCmd)
minectlCmd.AddCommand(rconCmd)
minectlCmd.AddCommand(updateCmd)
}
func Execute(version, gitCommit, date string) error {
Version = version
GitCommit = gitCommit
Date = date
return minectlCmd.Execute()
}
func runMineCtl(cmd *cobra.Command, _ []string) {
printLogo()
err := cmd.Help()
if err != nil {
os.Exit(0)
}
}
func printLogo() {
minectlLogo := aec.WhiteF.Apply(minectlFigletStr)
fmt.Println(minectlLogo)
}
const minectlFigletStr = `
_______ _____ __ _ _______ _______ _______
| | | | | \ | |______ | | |
| | | __|__ | \_| |______ |_____ | |_____
`
================================================
FILE: cmd/minectl/plugins.go
================================================
package minectl
import (
"github.com/spf13/cobra"
)
func init() {
pluginCmd.Flags().StringP("filename", "f", "", "Location of the manifest file")
_ = pluginCmd.Flags().SetAnnotation("filename", cobra.BashCompFilenameExt, []string{"yaml"})
pluginCmd.Flags().String("id", "", "contains the server id")
pluginCmd.Flags().StringP("plugin", "p", "", "Location of the plugin")
_ = pluginCmd.Flags().SetAnnotation("plugin", cobra.BashCompFilenameExt, []string{"jar"})
pluginCmd.Flags().StringP("destination", "d", "", "Plugin destination folder")
_ = pluginCmd.Flags().SetAnnotation("destination", cobra.BashCompSubdirsInDir, []string{})
pluginCmd.Flags().StringP("ssh-key", "k", "", "specify a specific path for the SSH key")
}
type ModType string
const (
Forge ModType = "forge"
Fabric ModType = "fabric"
)
type Plugin struct {
Name string
Mod ModType
Version []string
DownloadURL string
Destination string
}
var pluginCmd = &cobra.Command{
Use: "plugins",
Short: "Manage your plugins for a specific server",
Example: `mincetl plugins \
--filename server-do.yaml
--id xxx-xxx-xxx-xxx
--plugin plugin.jar
--destination /minecraft/mods`,
RunE: RunFunc(runPlugin),
SilenceUsage: true,
SilenceErrors: true,
}
var _ = []Plugin{
{
Name: "Fabric API",
Mod: Fabric,
Version: []string{"0.37.1+1.16", "0.37.1+1.17"},
DownloadURL: "https://github.com/FabricMC/fabric/releases/download/{{ .Version }}/fabric-api-{{ .Version }}.jar",
Destination: "/mincraft/mods",
},
}
func runPlugin(cmd *cobra.Command, _ []string) error {
p, err := createUpdatePluginProvisioner(cmd)
if err != nil {
return err
}
plugin, _ := cmd.Flags().GetString("plugin")
destination, _ := cmd.Flags().GetString("destination")
err = p.UploadPlugin(plugin, destination)
if err != nil {
return err
}
return err
}
================================================
FILE: cmd/minectl/rcon.go
================================================
package minectl
import (
"github.com/dirien/minectl/internal/provisioner"
"github.com/pkg/errors"
"github.com/spf13/cobra"
)
func init() {
rconCmd.Flags().StringP("filename", "f", "", "Location of the manifest file")
_ = rconCmd.Flags().SetAnnotation("filename", cobra.BashCompFilenameExt, []string{"yaml"})
rconCmd.Flags().String("id", "", "contains the server id")
}
var rconCmd = &cobra.Command{
Use: "rcon",
Short: "RCON client to your Minecraft server.",
Example: `mincetl rcon \
--filename server-do.yaml \
--id xxxx`,
RunE: RunFunc(runRCON),
SilenceUsage: true,
SilenceErrors: true,
}
func runRCON(cmd *cobra.Command, _ []string) error {
filename, err := cmd.Flags().GetString("filename")
if filename == "" {
return errors.New("Please provide a valid manifest file via -f|--filename flag")
}
if err != nil {
return errors.Wrap(err, "Please provide a valid manifest file")
}
id, err := cmd.Flags().GetString("id")
if err != nil {
return err
}
if id == "" {
return errors.New("Please provide a valid id")
}
p, err := provisioner.NewProvisioner(&provisioner.MinectlProvisionerOpts{
ManifestPath: filename,
ID: id,
}, minectlUI)
if err != nil {
return err
}
err = p.DoRCON()
if err != nil {
return err
}
return nil
}
================================================
FILE: cmd/minectl/update.go
================================================
package minectl
import (
"github.com/spf13/cobra"
)
func init() {
updateCmd.Flags().StringP("filename", "f", "", "Location of the manifest file")
updateCmd.Flags().StringP("ssh-key", "k", "", "specify a specific path for the SSH key")
_ = updateCmd.Flags().SetAnnotation("filename", cobra.BashCompFilenameExt, []string{"yaml"})
updateCmd.Flags().String("id", "", "contains the server id")
}
var updateCmd = &cobra.Command{
Use: "update",
Short: "Update an Minecraft Server.",
Example: `mincetl update \
--filename server-do.yaml
--id xxx-xxx-xxx-xxx`,
RunE: RunFunc(runUpdate),
SilenceUsage: true,
SilenceErrors: true,
}
func runUpdate(cmd *cobra.Command, _ []string) error {
p, err := createUpdatePluginProvisioner(cmd)
if err != nil {
return err
}
err = p.UpdateServer()
if err != nil {
return err
}
return err
}
================================================
FILE: cmd/minectl/wizard.go
================================================
package minectl
import (
"errors"
"fmt"
"os"
"regexp"
"strconv"
"strings"
"github.com/charmbracelet/huh"
"github.com/dirien/minectl-sdk/common"
"github.com/dirien/minectl-sdk/model"
"github.com/dirien/minectl-sdk/template"
"github.com/dirien/minectl/internal/ui"
"github.com/spf13/cobra"
)
var wizardCmd = &cobra.Command{
Use: "wizard",
Short: "Calls the minectl wizard to create interactively a minectl config",
Example: `mincetl wizard`,
RunE: RunFunc(runWizard),
SilenceUsage: true,
SilenceErrors: true,
}
func init() {
wizardCmd.Flags().StringP("output", "o", "", "output folder for the configuration file for minectl (default: ~/.minectl)")
_ = wizardCmd.Flags().SetAnnotation("output", cobra.BashCompSubdirsInDir, []string{})
}
// Provider options for the wizard
var providerOptions = []huh.Option[string]{
huh.NewOption("DigitalOcean", "DigitalOcean"),
huh.NewOption("Civo", "Civo"),
huh.NewOption("Scaleway", "Scaleway"),
huh.NewOption("Hetzner", "Hetzner"),
huh.NewOption("Akamai Connected Cloud", "Akamai Connected Cloud"),
huh.NewOption("OVHcloud", "OVHcloud"),
huh.NewOption("Google Compute Engine", "Google Compute Engine"),
huh.NewOption("vultr", "vultr"),
huh.NewOption("Azure", "Azure"),
huh.NewOption("Oracle Cloud Infrastructure", "Oracle Cloud Infrastructure"),
huh.NewOption("Amazon Web Services", "Amazon Web Services"),
huh.NewOption("VEXXHOST", "VEXXHOST"),
huh.NewOption("Ubuntu Multipass", "Ubuntu Multipass"),
huh.NewOption("Exoscale", "Exoscale"),
huh.NewOption("Fuga Cloud", "Fuga Cloud"),
}
var javaVersionOptions = []huh.Option[string]{
huh.NewOption("Java 8", "8"),
huh.NewOption("Java 16", "16"),
huh.NewOption("Java 17", "17"),
}
var editionOptions = []huh.Option[string]{
huh.NewOption("Bedrock", "bedrock"),
huh.NewOption("Nukkit", "nukkit"),
huh.NewOption("PowerNukkit", "powernukkit"),
huh.NewOption("CraftBukkit", "craftbukkit"),
huh.NewOption("Fabric", "fabric"),
huh.NewOption("Forge", "forge"),
huh.NewOption("Java (Vanilla)", "java"),
huh.NewOption("PaperMC", "papermc"),
huh.NewOption("Spigot", "spigot"),
huh.NewOption("Purpur", "purpur"),
}
var featureOptions = []huh.Option[string]{
huh.NewOption("Monitoring", "Monitoring"),
huh.NewOption("RCON", "RCON"),
}
// isBedrockEdition returns true for editions that don't use Java.
func isBedrockEdition(edition string) bool {
return edition == "bedrock" || edition == "nukkit" || edition == "powernukkit"
}
func runWizard(cmd *cobra.Command, _ []string) error {
minectlUI.Info("minectl configuration file wizard")
wizard := model.Wizard{
SSHPort: "22",
BanTime: "600",
MaxRetry: "6",
Java: "16",
Heap: "2G",
Edition: "java",
}
var features []string
// Validation functions
nameValidator := func(s string) error {
if s == "" {
return errors.New("please enter the name of your Minecraft server")
}
match, _ := regexp.MatchString(common.NameRegex, s)
if !match {
return errors.New("the name must consist of lower case alphanumeric characters or '-'")
}
return nil
}
requiredValidator := func(s string) error {
if s == "" {
return errors.New("this field is required")
}
return nil
}
portValidator := func(s string) error {
if s == "" {
return errors.New("this field is required")
}
port, err := strconv.Atoi(s)
if err != nil || port < 1 || port > 65535 {
return errors.New("enter a valid port number (1-65535)")
}
return nil
}
heapValidator := func(s string) error {
if s == "" {
return errors.New("this field is required")
}
if !strings.Contains(s, "G") {
return errors.New("enter the Java heap size in following notation <size>G, eg 2G")
}
return nil
}
// Group 1: Server basics
basicGroup := huh.NewGroup(
huh.NewInput().
Title("Server Name").
Description("Enter the name of your Minecraft server").
Value(&wizard.Name).
Validate(nameValidator),
huh.NewSelect[string]().
Title("Cloud Provider").
Description("Choose a cloud provider").
Options(providerOptions...).
Value(&wizard.Provider),
huh.NewInput().
Title("Plan/Size").
Description("Enter the plan/size for the server (e.g., s-4vcpu-8gb, e2-standard-2)").
Value(&wizard.Plan).
Validate(requiredValidator),
huh.NewInput().
Title("Region/Datacenter").
Description("Enter the region/datacenter (e.g., fra1, europe-west6-a)").
Value(&wizard.Region).
Validate(requiredValidator),
)
// Group 2: SSH configuration
sshGroup := huh.NewGroup(
huh.NewInput().
Title("SSH Public Key Path").
Description("Enter the full path to your SSH public key (e.g., /home/user/.ssh/id_rsa.pub)").
Value(&wizard.SSH).
Validate(requiredValidator),
huh.NewInput().
Title("SSH Port").
Description("Enter the SSH port").
Value(&wizard.SSHPort).
Validate(portValidator),
)
// Group 3: Security (fail2ban)
securityGroup := huh.NewGroup(
huh.NewInput().
Title("Fail2ban Ban Time").
Description("Enter the fail2ban ban time in seconds").
Value(&wizard.BanTime).
Validate(requiredValidator),
huh.NewInput().
Title("Fail2ban Max Retry").
Description("Enter the fail2ban max retry count").
Value(&wizard.MaxRetry).
Validate(requiredValidator),
)
// Group 4: Features and edition selection
featuresGroup := huh.NewGroup(
huh.NewMultiSelect[string]().
Title("Additional Features").
Description("Select additional features for your server").
Options(featureOptions...).
Value(&features),
huh.NewSelect[string]().
Title("Minecraft Edition").
Description("Select a Minecraft edition").
Options(editionOptions...).
Value(&wizard.Edition),
)
// Group 5: Java configuration (hidden for Bedrock-based editions)
javaGroup := huh.NewGroup(
huh.NewSelect[string]().
Title("Java Version").
Description("Choose the Java version").
Options(javaVersionOptions...).
Value(&wizard.Java),
huh.NewInput().
Title("Java Heap Size").
Description("Enter the Java heap size (rule of thumb: half of available RAM)").
Value(&wizard.Heap).
Validate(heapValidator),
huh.NewInput().
Title("RCON Password").
Description("Enter a RCON password (if you selected that feature)").
Value(&wizard.RconPw),
).WithHideFunc(func() bool {
return isBedrockEdition(wizard.Edition)
})
// Group 6: Minecraft version and properties
minecraftGroup := huh.NewGroup(
huh.NewInput().
Title("Minecraft Version").
Description("Enter the Minecraft version number").
Value(&wizard.Version).
Validate(requiredValidator),
huh.NewText().
Title("Additional Properties").
Description("Add additional Minecraft server properties (key=value, one per line)").
Value(&wizard.Properties).
CharLimit(1000),
)
// Create the form
form := huh.NewForm(
basicGroup,
sshGroup,
securityGroup,
featuresGroup,
javaGroup,
minecraftGroup,
)
// Run the form with headless support
err := ui.RunForm(form, headless)
if err != nil {
return err
}
// Set features
wizard.Features = features
config, err := template.NewTemplateConfig(wizard)
if err != nil {
return err
}
outputFolder := GetHomeFolder()
output, err := cmd.Flags().GetString("output")
if err == nil {
if output != "" {
outputFolder = output
}
}
filename := fmt.Sprintf("%s/config-%s.yaml", outputFolder, wizard.Name)
minectlUI.Info("Writing configuration file to " + filename)
err = os.WriteFile(filename, []byte(config), 0o600)
if err != nil {
return err
}
minectlUI.Info("To create the server:\n\n minectl create -f " + filename)
return nil
}
================================================
FILE: config/bedrock/server-akamai.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-be
spec:
server:
cloud: akamai
region: eu-central
size: g6-standard-4
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
edition: bedrock
version: 1.26.0.2
eula: true
properties: |
server-name=Akamai Connected Cloud Minecraft
gamemode=survival
force-gamemode=false
difficulty=normal
allow-cheats=false
max-players=100
online-mode=true
white-list=false
server-portv6=19133
view-distance=32
tick-distance=4
player-idle-timeout=30
max-threads=8
level-name=Bedrock level
level-seed=
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=false
compression-threshold=1
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-distance-threshold=0.3
player-movement-duration-threshold-in-ms=500
correct-player-movement=false
server-authoritative-block-breaking=false
================================================
FILE: config/bedrock/server-aws.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-be
spec:
server:
cloud: aws
region: eu-central-1
size: t3.xlarge
ssh:
port: 22
publickeyfile: "/root/.ssh/id_rsa.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
edition: bedrock
version: 1.26.0.2
eula: true
properties: |
server-name=Azure Minecraft - Bedrock edition
gamemode=survival
force-gamemode=false
difficulty=normal
allow-cheats=false
max-players=100
online-mode=true
white-list=false
server-portv6=19133
view-distance=32
tick-distance=4
player-idle-timeout=30
max-threads=8
level-name=Bedrock level
level-seed=
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=false
compression-threshold=1
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-distance-threshold=0.3
player-movement-duration-threshold-in-ms=500
correct-player-movement=false
server-authoritative-block-breaking=false
================================================
FILE: config/bedrock/server-civo.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-be
spec:
server:
cloud: civo
region: LON1
size: g3.large
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft-be.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
edition: bedrock
version: 1.26.0.2
eula: true
properties: |
server-name=Civo Minecraft - Bedrock edition
gamemode=survival
force-gamemode=false
difficulty=normal
allow-cheats=false
max-players=100
online-mode=true
white-list=false
server-portv6=19133
view-distance=32
tick-distance=4
player-idle-timeout=30
max-threads=8
level-name=Bedrock level
level-seed=
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=false
compression-threshold=1
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-distance-threshold=0.3
player-movement-duration-threshold-in-ms=500
correct-player-movement=false
server-authoritative-block-breaking=false
================================================
FILE: config/bedrock/server-do.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-be
spec:
server:
cloud: do
region: fra1
size: s-4vcpu-8gb
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft-be.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
edition: bedrock
version: 1.26.0.2
eula: true
properties: |
server-name=DigitalOcean Minecraft
gamemode=survival
force-gamemode=false
difficulty=normal
allow-cheats=false
max-players=100
online-mode=true
white-list=false
server-portv6=19133
view-distance=32
tick-distance=4
player-idle-timeout=30
max-threads=8
level-name=Bedrock level
level-seed=
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=false
compression-threshold=1
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-distance-threshold=0.3
player-movement-duration-threshold-in-ms=500
correct-player-movement=false
server-authoritative-block-breaking=false
================================================
FILE: config/bedrock/server-exoscale.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-be
spec:
server:
cloud: exoscale
region: de-fra-1
size: medium
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft-be.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
edition: bedrock
version: 1.26.0.2
eula: true
properties: |
server-name=Exoscale Minecraft
gamemode=survival
force-gamemode=false
difficulty=normal
allow-cheats=false
max-players=100
online-mode=true
white-list=false
server-portv6=19133
view-distance=32
tick-distance=4
player-idle-timeout=30
max-threads=8
level-name=Bedrock level
level-seed=
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=false
compression-threshold=1
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-distance-threshold=0.3
player-movement-duration-threshold-in-ms=500
correct-player-movement=false
server-authoritative-block-breaking=false
================================================
FILE: config/bedrock/server-gce.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-be
spec:
server:
cloud: gce
region: europe-west6-a
size: e2-standard-2
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft-be.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
edition: bedrock
version: 1.26.0.2
eula: true
properties: |
server-name=GCE Minecraft
gamemode=survival
force-gamemode=false
difficulty=normal
allow-cheats=false
max-players=100
online-mode=true
white-list=false
server-portv6=19133
view-distance=32
tick-distance=4
player-idle-timeout=30
max-threads=8
level-name=Bedrock level
level-seed=
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=false
compression-threshold=1
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-distance-threshold=0.3
player-movement-duration-threshold-in-ms=500
correct-player-movement=false
server-authoritative-block-breaking=false
================================================
FILE: config/bedrock/server-hetzner.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-be
spec:
server:
cloud: hetzner
region: nbg1
size: cpx31
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft-be.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
edition: bedrock
version: 1.26.0.2
eula: true
properties: |
server-name=Hetzner Minecraft
gamemode=survival
force-gamemode=false
difficulty=normal
allow-cheats=false
max-players=100
online-mode=true
white-list=false
server-portv6=19133
view-distance=32
tick-distance=4
player-idle-timeout=30
max-threads=8
level-name=Bedrock level
level-seed=
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=false
compression-threshold=1
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-distance-threshold=0.3
player-movement-duration-threshold-in-ms=500
correct-player-movement=false
server-authoritative-block-breaking=false
================================================
FILE: config/bedrock/server-oci.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-be
spec:
server:
cloud: oci
region: eu-frankfurt-1
size: VM.Standard2.2
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft-be.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
edition: bedrock
version: 1.26.0.2
eula: true
properties: |
server-name=Civo Minecraft
gamemode=survival
force-gamemode=false
difficulty=normal
allow-cheats=false
max-players=100
online-mode=true
white-list=false
server-portv6=19133
view-distance=32
tick-distance=4
player-idle-timeout=30
max-threads=8
level-name=Bedrock level
level-seed=
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=false
compression-threshold=1
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-distance-threshold=0.3
player-movement-duration-threshold-in-ms=500
correct-player-movement=false
server-authoritative-block-breaking=false
================================================
FILE: config/bedrock/server-ovh.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-be
spec:
server:
cloud: ovh
region: DE1
size: b2-7
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft-be.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
edition: bedrock
version: 1.26.0.2
eula: true
properties: |
server-name=OVHcloud Minecraft
gamemode=survival
force-gamemode=false
difficulty=normal
allow-cheats=false
max-players=100
online-mode=true
white-list=false
server-portv6=19133
view-distance=32
tick-distance=4
player-idle-timeout=30
max-threads=8
level-name=Bedrock level
level-seed=
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=false
compression-threshold=1
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-distance-threshold=0.3
player-movement-duration-threshold-in-ms=500
correct-player-movement=false
server-authoritative-block-breaking=false
================================================
FILE: config/bedrock/server-scaleway.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-bedrock
spec:
server:
cloud: scaleway
region: fr-par-1
size: GP1-XS
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft-be.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
edition: bedrock
version: 1.26.0.2
eula: true
properties: |
server-name=Scaleway Minecraft
gamemode=survival
force-gamemode=false
difficulty=normal
allow-cheats=false
max-players=100
online-mode=true
white-list=false
server-portv6=19133
view-distance=32
tick-distance=4
player-idle-timeout=30
max-threads=8
level-name=Bedrock level
level-seed=
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=false
compression-threshold=1
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-distance-threshold=0.3
player-movement-duration-threshold-in-ms=500
correct-player-movement=false
server-authoritative-block-breaking=false
================================================
FILE: config/bedrock/server-vexxhost.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-bedrock
spec:
server:
cloud: vexxhost
region: am1
size: "v3-starter-2"
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft-be.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
edition: bedrock
version: 1.26.0.2
eula: true
properties: |
server-name=VEXXHOST Minecraft
gamemode=survival
force-gamemode=false
difficulty=normal
allow-cheats=false
max-players=100
online-mode=true
white-list=false
server-portv6=19133
view-distance=32
tick-distance=4
player-idle-timeout=30
max-threads=8
level-name=Bedrock level
level-seed=
default-player-permission-level=member
texturepack-required=false
content-log-file-enabled=false
compression-threshold=1
server-authoritative-movement=server-auth
player-movement-score-threshold=20
player-movement-distance-threshold=0.3
player-movement-duration-threshold-in-ms=500
correct-player-movement=false
server-authoritative-block-breaking=false
================================================
FILE: config/bungeecord/proxy-civo.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftProxy
metadata:
name: minecraft-proxy
spec:
server:
cloud: civo
region: LON1
size: g3.xsmall
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25577
proxy:
java:
openjdk: 8
xmx: 512M
xms: 512M
rcon:
password: test
port: 25575
enabled: true
broadcast: true
type: bungeecord
version: "1.21"
================================================
FILE: config/bungeecord/proxy-do.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftProxy
metadata:
name: minecraft-proxy
spec:
server:
cloud: do
region: fra1
size: s-1vcpu-1gb
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25577
proxy:
java:
openjdk: 8
xmx: 512M
xms: 512M
rcon:
password: test
port: 25575
enabled: true
broadcast: true
type: bungeecord
version: "1.21"
================================================
FILE: config/bungeecord/proxy-vultr.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftProxy
metadata:
name: minecraft-proxy
spec:
server:
cloud: vultr
region: fra
size: "vc2-1c-1gb"
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25577
proxy:
java:
openjdk: 8
xmx: 512M
xms: 512M
rcon:
password: test
port: 25575
enabled: true
broadcast: true
type: bungeecord
version: "1.21"
================================================
FILE: config/craftbukkit/server-akamai.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: akamai
region: eu-central
size: g6-standard-4
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: craftbukkit
version: 1.21.11
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7aAkamai Connected Cloud \u00A7rMinecraft --- \u00A76CraftBukkit \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/craftbukkit/server-do.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: do
region: fra1
size: s-4vcpu-8gb
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: craftbukkit
version: 1.21.11
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bDigitalOcean \u00A7rMinecraft --- \u00A76CraftBukkit \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/fabric/server-akamai.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: akamai
region: eu-central
size: g6-standard-4
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: fabric
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7aAkamai Connected Cloud \u00A7rMinecraft --- \u00A76Fabric \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/fabric/server-civo.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: civo
region: LON1
size: g3.large
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: fabric
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bCivo \u00A7rMinecraft --- \u00A76Fabric \u00A7redition
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/fabric/server-do.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: do
region: fra1
size: s-4vcpu-8gb
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: fabric
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bDigitalOcean \u00A7rMinecraft --- \u00A76Fabric \u00A7redition
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/forge/server-akamai.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: akamai
region: eu-central
size: g6-standard-4
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: forge
version: 1.21.11-61.1.1
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7aAkamai Connected Cloud \u00A7rMinecraft --- \u00A76Forge \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/forge/server-civo.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: civo
region: LON1
size: g3.large
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: forge
version: 1.21.11-61.1.1
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bCivo \u00A7rMinecraft --- \u00A76Forge \u00A7redition
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/forge/server-do.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
monitoring:
enabled: true
server:
cloud: do
region: fra1
size: s-4vcpu-8gb
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: forge
version: 1.21.11-61.1.1
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bDigitalOcean \u00A7rMinecraft --- \u00A76Forge \u00A7redition
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/java/server-akamai.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: akamai
region: eu-central
size: g6-standard-4
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7aAkamai Connected Cloud \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-aws-arm.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-arm
spec:
monitoring:
enabled: false
server:
cloud: aws
region: eu-central-1
size: c6g.xlarge
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
arm: true
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A76AWS Arm \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-aws-spot.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-spot
spec:
monitoring:
enabled: false
server:
cloud: aws
region: eu-central-1
size: t3.xlarge
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
spot: true
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A76AWS Spot \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-aws.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
monitoring:
enabled: false
server:
cloud: aws
region: eu-central-1
size: t3.xlarge
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
allow-flight=false
allow-nether=true
broadcast-console-to-ops=true
broadcast-rcon-to-ops=true
difficulty=easy
enable-command-block=false
enable-jmx-monitoring=false
enable-query=false
enable-rcon=false
enable-status=true
enforce-secure-profile=true
enforce-whitelist=false
entity-broadcast-range-percentage=100
force-gamemode=false
function-permission-level=2
gamemode=survival
generate-structures=true
generator-settings={}
hardcore=false
hide-online-players=false
level-name=world
level-seed=minectlrocks
level-type=minecraft\:normal
max-chained-neighbor-updates=1000000
max-players=20
max-tick-time=60000
max-world-size=29999984
motd=\u00A76AWS \u00A7rMinecraft --- \u00A76Java \u00A7redition
network-compression-threshold=256
online-mode=true
op-permission-level=4
player-idle-timeout=0
prevent-proxy-connections=false
previews-chat=false
pvp=true
query.port=25565
rate-limit=0
rcon.password=
rcon.port=25575
require-resource-pack=false
resource-pack=
resource-pack-prompt=
resource-pack-sha1=
server-ip=
server-port=25565
simulation-distance=10
spawn-animals=true
spawn-monsters=true
spawn-npcs=true
spawn-protection=16
sync-chunk-writes=true
text-filtering-config=
use-native-transport=true
view-distance=10
white-list=false
================================================
FILE: config/java/server-azure-spot.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: azure
region: westeurope
size: Standard_D2_v4
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
spot: true
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bAzure Spot \u00A7rMinecraft --- \u00A76Java \u00A7redition
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/java/server-azure.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: azure
region: westeurope
size: Standard_D2_v4
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bAzure \u00A7rMinecraft --- \u00A76Java \u00A7redition
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/java/server-civo.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: civo
region: LON1
size: g3.large
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival25565
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bCivo \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-do.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: do
region: fra1
size: s-4vcpu-8gb
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bDigitalOcean \u00A7rMinecraft --- \u00A76Java \u00A7redition
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/java/server-exoscale.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: exoscale
region: de-fra-1
size: medium
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival25565
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7cExoscale \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-fuga.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
monitoring:
enabled: false
server:
cloud: fuga
region: ams2
size: s3.large
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A76Fuga Cloud \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-gce-arm.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-arm
spec:
server:
cloud: gce
region: europe-west4-a
size: t2a-standard-2
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
arm: true
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A79GCE ARM \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-gce-spot.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: gce
region: europe-west6-a
size: e2-standard-2
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
spot: true
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A79GCE \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-gce.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: gce
region: europe-west6-a
size: e2-standard-2
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A79GCE \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-hetzner-arm.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: hetzner
region: fsn1
size: cax21
arm: true
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7cHetzner Arm \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/java/server-hetzner.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: hetzner
region: nbg1
size: cpx31
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7cHetzner \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/java/server-oci.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: oci
region: eu-frankfurt-1
size: VM.Standard2.2
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bOracle Cloud Infrastructure \u00A7rMinecraft --- \u00A76Java \u00A7reditio
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-ovh.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: ovh
region: DE1
size: b2-7
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7cOVHcloud \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-scaleway.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
monitoring:
enabled: true
server:
cloud: scaleway
region: fr-par-1
size: GP1-XS
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7cScaleway \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-vexxhost.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: vexxhost
region: am1
size: "v3-starter-2"
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival25565
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A75VEXXHOST \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/java/server-vultr.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: vultr
region: fra
size: "vc2-2c-4gb"
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival25565
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bVultr \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/multipass/server-java.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: multipass
port: 25565
size: 1-4G
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
minecraft:
java:
openjdk: 21
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: java
version: "1.21.11"
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A76Multipass \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/multipass/server-papermc.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: multipass
port: 25565
size: 1-4G
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A76Multipass \u00A7rMinecraft --- \u00A76PaperMC \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/nukkit/server-azure.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: azure
region: westeurope
size: Standard_D2_v4
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
java:
openjdk: 8
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: nukkit
version: 1.0-SNAPSHOT
eula: true
properties: |
motd=Azure Minecraft --- Nukkitx edition
sub-motd=https://nukkitx.com
server-ip=0.0.0.0
view-distance=10
white-list=off
achievements=on
announce-player-achievements=on
spawn-protection=16
max-players=20
allow-flight=off
spawn-animals=on
spawn-mobs=on
gamemode=0
force-gamemode=off
hardcore=off
pvp=on
difficulty=1
generator-settings=
level-name=world
level-seed=
level-type=DEFAULT
allow-nether=on
enable-query=on
auto-save=on
force-resources=off
xbox-auth=on
================================================
FILE: config/nukkit/server-civo.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: civo
region: LON1
size: g3.large
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
java:
openjdk: 8
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: nukkit
version: 1.0-SNAPSHOT
eula: true
properties: |
motd=Civo Minecraft --- Nukkitx edition
sub-motd=https://nukkitx.com
server-ip=0.0.0.0
view-distance=10
white-list=off
achievements=on
announce-player-achievements=on
spawn-protection=16
max-players=20
allow-flight=off
spawn-animals=on
spawn-mobs=on
gamemode=0
force-gamemode=off
hardcore=off
pvp=on
difficulty=1
generator-settings=
level-name=world
level-seed=
level-type=DEFAULT
allow-nether=on
enable-query=on
auto-save=on
force-resources=off
xbox-auth=on
================================================
FILE: config/nukkit/server-do.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: do
region: fra1
size: s-4vcpu-8gb
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
java:
openjdk: 8
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: nukkit
version: 1.0-SNAPSHOT
eula: true
properties: |
motd=DigitalOcean Minecraft --- Nukkitx edition
sub-motd=https://nukkitx.com
server-ip=0.0.0.0
view-distance=10
white-list=off
achievements=on
announce-player-achievements=on
spawn-protection=16
max-players=20
allow-flight=off
spawn-animals=on
spawn-mobs=on
gamemode=0
force-gamemode=off
hardcore=off
pvp=on
difficulty=1
generator-settings=
level-name=world
level-seed=
level-type=DEFAULT
allow-nether=on
enable-query=on
auto-save=on
force-resources=off
xbox-auth=on
================================================
FILE: config/nukkit/server-fuga.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: fuga
region: ams2
size: s3.large
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
java:
openjdk: 8
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: nukkit
version: 1.0-SNAPSHOT
eula: true
properties: |
motd=Fuga Cloud Minecraft --- Nukkitx edition
sub-motd=https://nukkitx.com
server-ip=0.0.0.0
view-distance=10
white-list=off
achievements=on
announce-player-achievements=on
spawn-protection=16
max-players=20
allow-flight=off
spawn-animals=on
spawn-mobs=on
gamemode=0
force-gamemode=off
hardcore=off
pvp=on
difficulty=1
generator-settings=
level-name=world
level-seed=
level-type=DEFAULT
allow-nether=on
enable-query=on
auto-save=on
force-resources=off
xbox-auth=on
================================================
FILE: config/nukkit/server-gce.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: gce
region: europe-west6-a
size: e2-standard-2
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
java:
openjdk: 8
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: nukkit
version: 1.0-SNAPSHOT
eula: true
properties: |
motd=GCE Minecraft --- Nukkitx edition
sub-motd=https://nukkitx.com
server-ip=0.0.0.0
view-distance=10
white-list=off
achievements=on
announce-player-achievements=on
spawn-protection=16
max-players=20
allow-flight=off
spawn-animals=on
spawn-mobs=on
gamemode=0
force-gamemode=off
hardcore=off
pvp=on
difficulty=1
generator-settings=
level-name=world
level-seed=
level-type=DEFAULT
allow-nether=on
enable-query=on
auto-save=on
force-resources=off
xbox-auth=on
================================================
FILE: config/nukkit/server-ovh.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: ovh
region: DE1
size: b2-7
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 19132
minecraft:
java:
openjdk: 8
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: nukkit
version: 1.0-SNAPSHOT
eula: true
properties: |
motd=GCE Minecraft --- Nukkitx edition
sub-motd=https://nukkitx.com
server-ip=0.0.0.0
view-distance=10
white-list=off
achievements=on
announce-player-achievements=on
spawn-protection=16
max-players=20
allow-flight=off
spawn-animals=on
spawn-mobs=on
gamemode=0
force-gamemode=off
hardcore=off
pvp=on
difficulty=1
generator-settings=
level-name=world
level-seed=
level-type=DEFAULT
allow-nether=on
enable-query=on
auto-save=on
force-resources=off
xbox-auth=on
================================================
FILE: config/papermc/server-akamai.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: akamai
region: eu-central
size: g6-standard-4
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7aAkamai Connected Cloud \u00A7rMinecraft --- \u00A76PaperMC \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/papermc/server-aws-arm.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-arm
spec:
server:
cloud: aws
region: eu-central-1
size: c6g.xlarge
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
arm: true
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A76AWS \u00A7rMinecraft Graviton --- \u00A76PaperMC \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/papermc/server-aws.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: aws
region: eu-central-1
size: t3.xlarge
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A76AWS \u00A7rMinecraft --- \u00A76PaperMC \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/papermc/server-azure-arm.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-arm
spec:
server:
cloud: azure
region: westeurope
size: Standard_D2ps_v5
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
arm: true
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bAzure ARM \u00A7rMinecraft --- \u00A76PaperMC \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/papermc/server-azure.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: azure
region: westeurope
size: Standard_D2_v4
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bAzure \u00A7rMinecraft --- \u00A76PaperMC \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/papermc/server-civo.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
monitoring:
enabled: true
server:
cloud: civo
region: LON1
size: g3.large
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bCivo \u00A7rMinecraft --- \u00A76PaperMC \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=29999984
================================================
FILE: config/papermc/server-do.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
monitoring:
enabled: true
server:
cloud: do
region: fra1
size: s-4vcpu-8gb
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bDigitalOcean \u00A7rMinecraft --- \u00A76PaperMC \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/papermc/server-exoscale.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: exoscale
region: de-fra-1
size: medium
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7cExoscale \u00A7rMinecraft --- \u00A76Java \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/papermc/server-fuga.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: fuga
region: ams2
size: s3.large
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A75Fuga Cloud \u00A7rMinecraft --- \u00A76PaperMC \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/papermc/server-gce-arm.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-arm
spec:
server:
cloud: gce
region: europe-west4-a
size: t2a-standard-2
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
arm: true
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A79GCE ARM \u00A7rMinecraft --- \u00A76PaperMC \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/papermc/server-hetzner.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
server:
cloud: hetzner
region: nbg1
size: cpx31
ssh:
port: 2223
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7cHetzner \u00A7rMinecraft --- \u00A76PaperMC \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/papermc/server-oci-arm.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server-arm
spec:
monitoring:
enabled: true
server:
cloud: oci
region: eu-frankfurt-1
size: VM.Standard.A1.Flex
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
arm: true
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack-prompt=
gamemode=survival
allow-nether=true
enable-command-block=false
sync-chunk-writes=true
enable-query=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
level-name=world
player-idle-timeout=0
motd=\u00A7bOracle Cloud Infrastructure \u00A7rMinecraft --- \u00A76PaperMC \u00A7redition
query.port=25565
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
pvp=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
difficulty=easy
function-permission-level=2
network-compression-threshold=256
text-filtering-config=
require-resource-pack=false
spawn-monsters=true
max-tick-time=60000
enforce-whitelist=false
use-native-transport=true
max-players=100
resource-pack-sha1=
spawn-protection=16
online-mode=true
enable-status=true
allow-flight=false
max-world-size=
================================================
FILE: config/papermc/server-oci.yaml
================================================
apiVersion: minectl.ediri.io/v1alpha1
kind: MinecraftServer
metadata:
name: minecraft-server
spec:
monitoring:
enabled: true
server:
cloud: oci
region: eu-frankfurt-1
size: VM.Standard2.2
ssh:
port: 22
publickeyfile: "/Users/dirien/Tools/repos/stackit-minecraft/minecraft/ssh/minecraft.pub"
fail2ban:
bantime: 1000
maxretry: 3
port: 25565
minecraft:
java:
openjdk: 17
xmx: 2G
xms: 2G
rcon:
password: test
port: 25575
enabled: true
broadcast: true
edition: papermc
version: 1.21.11-117
eula: true
properties: |
level-seed=minectlrocks
view-distance=10
enable-jmx-monitoring=false
server-ip=
resource-pack
gitextract_l55wna43/
├── .dockerignore
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.yaml
│ │ ├── config.yml
│ │ └── feature.yaml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yaml
│ └── workflows/
│ ├── ci.yaml
│ ├── lock.yml
│ └── ossf-scorecard-action.yaml
├── .gitignore
├── .golangci.yaml
├── .goreleaser.yaml
├── .pre-commit-config.yaml
├── AGENTS.md
├── CONTRIBUTING.md
├── DCO
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── SECURITY.md
├── artifacthub-repo.yml
├── cmd/
│ └── minectl/
│ ├── AGENTS.md
│ ├── create.go
│ ├── delete.go
│ ├── list.go
│ ├── minectl.go
│ ├── plugins.go
│ ├── rcon.go
│ ├── update.go
│ └── wizard.go
├── config/
│ ├── bedrock/
│ │ ├── server-akamai.yaml
│ │ ├── server-aws.yaml
│ │ ├── server-civo.yaml
│ │ ├── server-do.yaml
│ │ ├── server-exoscale.yaml
│ │ ├── server-gce.yaml
│ │ ├── server-hetzner.yaml
│ │ ├── server-oci.yaml
│ │ ├── server-ovh.yaml
│ │ ├── server-scaleway.yaml
│ │ └── server-vexxhost.yaml
│ ├── bungeecord/
│ │ ├── proxy-civo.yaml
│ │ ├── proxy-do.yaml
│ │ └── proxy-vultr.yaml
│ ├── craftbukkit/
│ │ ├── server-akamai.yaml
│ │ └── server-do.yaml
│ ├── fabric/
│ │ ├── server-akamai.yaml
│ │ ├── server-civo.yaml
│ │ └── server-do.yaml
│ ├── forge/
│ │ ├── server-akamai.yaml
│ │ ├── server-civo.yaml
│ │ └── server-do.yaml
│ ├── java/
│ │ ├── server-akamai.yaml
│ │ ├── server-aws-arm.yaml
│ │ ├── server-aws-spot.yaml
│ │ ├── server-aws.yaml
│ │ ├── server-azure-spot.yaml
│ │ ├── server-azure.yaml
│ │ ├── server-civo.yaml
│ │ ├── server-do.yaml
│ │ ├── server-exoscale.yaml
│ │ ├── server-fuga.yaml
│ │ ├── server-gce-arm.yaml
│ │ ├── server-gce-spot.yaml
│ │ ├── server-gce.yaml
│ │ ├── server-hetzner-arm.yaml
│ │ ├── server-hetzner.yaml
│ │ ├── server-oci.yaml
│ │ ├── server-ovh.yaml
│ │ ├── server-scaleway.yaml
│ │ ├── server-vexxhost.yaml
│ │ └── server-vultr.yaml
│ ├── multipass/
│ │ ├── server-java.yaml
│ │ └── server-papermc.yaml
│ ├── nukkit/
│ │ ├── server-azure.yaml
│ │ ├── server-civo.yaml
│ │ ├── server-do.yaml
│ │ ├── server-fuga.yaml
│ │ ├── server-gce.yaml
│ │ └── server-ovh.yaml
│ ├── papermc/
│ │ ├── server-akamai.yaml
│ │ ├── server-aws-arm.yaml
│ │ ├── server-aws.yaml
│ │ ├── server-azure-arm.yaml
│ │ ├── server-azure.yaml
│ │ ├── server-civo.yaml
│ │ ├── server-do.yaml
│ │ ├── server-exoscale.yaml
│ │ ├── server-fuga.yaml
│ │ ├── server-gce-arm.yaml
│ │ ├── server-hetzner.yaml
│ │ ├── server-oci-arm.yaml
│ │ ├── server-oci.yaml
│ │ ├── server-scaleway.yaml
│ │ ├── server-vexxhost.yaml
│ │ └── server-vultr.yaml
│ ├── powernukkit/
│ │ ├── server-azure.yaml
│ │ └── server-civo.yaml
│ ├── purpur/
│ │ ├── server-akamai.yaml
│ │ ├── server-aws-arm.yaml
│ │ ├── server-aws.yaml
│ │ ├── server-azure-arm.yaml
│ │ ├── server-azure.yaml
│ │ ├── server-civo.yaml
│ │ ├── server-do.yaml
│ │ ├── server-exoscale.yaml
│ │ ├── server-fuga.yaml
│ │ ├── server-gce-arm.yaml
│ │ ├── server-hetzner.yaml
│ │ ├── server-oci-arm.yaml
│ │ ├── server-oci.yaml
│ │ ├── server-scaleway.yaml
│ │ ├── server-vexxhost.yaml
│ │ └── server-vultr.yaml
│ ├── spigot/
│ │ ├── server-akamai.yaml
│ │ ├── server-azure.yaml
│ │ └── server-do.yaml
│ ├── velocity/
│ │ ├── proxy-do.yaml
│ │ └── proxy-gce.yaml
│ └── waterfall/
│ ├── proxy-azure.yaml
│ ├── proxy-do.yaml
│ └── proxy-vultr.yaml
├── development.md
├── docs/
│ ├── architecture.md
│ ├── authentication.md
│ ├── cli-reference.md
│ ├── colored-motd.md
│ ├── configuration.md
│ ├── dashboard/
│ │ └── tutorial.json
│ ├── editions.md
│ ├── features.md
│ ├── getting-started-civo-bedrock.md
│ ├── getting-started-civo.md
│ ├── getting-started-exoscale.md
│ ├── getting-started-gce.md
│ ├── getting-started-scaleway.md
│ ├── minectl.drawio
│ ├── multi-server-monitoring-civo.md
│ ├── running-minecraft-luckyblocks-budget-scaleway.md
│ └── skyblock-papermc-hetzner.md
├── go.mod
├── go.sum
├── internal/
│ ├── logging/
│ │ └── logging.go
│ ├── manifest/
│ │ ├── manifest.go
│ │ ├── proxy.json
│ │ └── server.json
│ ├── provisioner/
│ │ └── provisioner.go
│ ├── rcon/
│ │ └── rcon.go
│ └── ui/
│ ├── form.go
│ ├── spinner.go
│ ├── spinner_test.go
│ ├── table.go
│ ├── table_test.go
│ ├── ui.go
│ └── ui_test.go
├── main.go
└── minectl-skill/
├── SKILL.md
├── evals/
│ └── evals.json
└── references/
├── cli-commands.md
├── cloud-providers.md
└── manifest-schema.md
SYMBOL INDEX (132 symbols across 20 files)
FILE: cmd/minectl/create.go
function init (line 13) | func init() {
function runCreate (line 29) | func runCreate(cmd *cobra.Command, _ []string) error {
FILE: cmd/minectl/delete.go
function init (line 10) | func init() {
function runDelete (line 29) | func runDelete(cmd *cobra.Command, _ []string) error {
FILE: cmd/minectl/list.go
function init (line 12) | func init() {
function runList (line 28) | func runList(cmd *cobra.Command, _ []string) error {
FILE: cmd/minectl/minectl.go
function createUpdatePluginProvisioner (line 34) | func createUpdatePluginProvisioner(cmd *cobra.Command) (provisioner.Prov...
function isDevVersion (line 67) | func isDevVersion(s semver.Version) bool {
function isBrewInstall (line 76) | func isBrewInstall(exe string) (bool, error) {
function runPostCommandHooks (line 119) | func runPostCommandHooks(c *cobra.Command, args []string) error {
function RunFunc (line 141) | func RunFunc(run func(cmd *cobra.Command, args []string) error) func(*co...
function getUpgradeCommand (line 155) | func getUpgradeCommand() string {
function getUpgradeMessage (line 175) | func getUpgradeMessage(latestVer, current *semver.Version) *string {
function getCLIVersionInfo (line 186) | func getCLIVersionInfo(current *semver.Version) (*semver.Version, error) {
function checkForUpdate (line 203) | func checkForUpdate() *string {
function getVersion (line 228) | func getVersion() string {
function parseBaseCommand (line 235) | func parseBaseCommand(_ *cobra.Command, _ []string) {
function makeAppDirectoryIfNotExists (line 295) | func makeAppDirectoryIfNotExists() {
function GetHomeFolder (line 309) | func GetHomeFolder() string {
function init (line 317) | func init() {
function Execute (line 335) | func Execute(version, gitCommit, date string) error {
function runMineCtl (line 343) | func runMineCtl(cmd *cobra.Command, _ []string) {
function printLogo (line 351) | func printLogo() {
constant minectlFigletStr (line 356) | minectlFigletStr = `
FILE: cmd/minectl/plugins.go
function init (line 7) | func init() {
type ModType (line 18) | type ModType
constant Forge (line 21) | Forge ModType = "forge"
constant Fabric (line 22) | Fabric ModType = "fabric"
type Plugin (line 25) | type Plugin struct
function runPlugin (line 56) | func runPlugin(cmd *cobra.Command, _ []string) error {
FILE: cmd/minectl/rcon.go
function init (line 9) | func init() {
function runRCON (line 26) | func runRCON(cmd *cobra.Command, _ []string) error {
FILE: cmd/minectl/update.go
function init (line 7) | func init() {
function runUpdate (line 25) | func runUpdate(cmd *cobra.Command, _ []string) error {
FILE: cmd/minectl/wizard.go
function init (line 28) | func init() {
function isBedrockEdition (line 77) | func isBedrockEdition(edition string) bool {
function runWizard (line 81) | func runWizard(cmd *cobra.Command, _ []string) error {
FILE: internal/logging/logging.go
type MinectlLogging (line 13) | type MinectlLogging struct
method Error (line 52) | func (l *MinectlLogging) Error(msg error) {
method RawMessage (line 60) | func (l *MinectlLogging) RawMessage(msg string) {
method PrintMixedGreen (line 68) | func (l *MinectlLogging) PrintMixedGreen(format, value string) {
method IsHeadless (line 78) | func (l *MinectlLogging) IsHeadless() bool {
function NewLogging (line 17) | func NewLogging(verbose, logEncoding string, headless bool) (*MinectlLog...
FILE: internal/manifest/manifest.go
type MinecraftServerManifest (line 18) | type MinecraftServerManifest struct
constant MinecraftProxy (line 23) | MinecraftProxy = "MinecraftProxy"
constant MinecraftServer (line 24) | MinecraftServer = "MinecraftServer"
function validate (line 33) | func validate(manifest []byte) error {
function checkNamePattern (line 61) | func checkNamePattern(serverName string) error {
function checkSSHPort (line 69) | func checkSSHPort(port int) error {
function NewMinecraftResource (line 76) | func NewMinecraftResource(manifestPath string) (*model.MinecraftResource...
FILE: internal/provisioner/provisioner.go
constant minecraftProxyTitle (line 36) | minecraftProxyTitle = "Minecraft %s Proxy"
constant minecraftServerTitle (line 37) | minecraftServerTitle = "Minecraft %s edition"
constant minecraftSelectedCloudProviderTitle (line 38) | minecraftSelectedCloudProviderTitle = "Using cloud provider %s"
constant minecraftListServersTitle (line 39) | minecraftListServersTitle = "Listing all servers"
constant minecraftServerDeletingTitle (line 41) | minecraftServerDeletingTitle = "Deleting server (%s)..."
constant minecraftServerDeleteTitle (line 42) | minecraftServerDeleteTitle = "Server (%s) deleted."
constant minecraftServerNotDeleteTitle (line 43) | minecraftServerNotDeleteTitle = "Server (%s) not deleted."
constant minecraftServerCreatingTitle (line 45) | minecraftServerCreatingTitle = "Creating server (%s)..."
constant minecraftServerCreateTitle (line 46) | minecraftServerCreateTitle = "Server (%s) created."
constant minecraftServerNotCreateTitle (line 47) | minecraftServerNotCreateTitle = "Server (%s) not created."
constant minecraftServerStartingTitle (line 49) | minecraftServerStartingTitle = "Starting server..."
constant minecraftServerStartTitle (line 50) | minecraftServerStartTitle = "Server successfully started."
constant minecraftServerNotStartTitle (line 51) | minecraftServerNotStartTitle = "Server failed to start."
constant minecraftServerUpdatingTitle (line 53) | minecraftServerUpdatingTitle = "Updating server (%s)..."
constant minecraftServerUpdateTitle (line 54) | minecraftServerUpdateTitle = "Server (%s) updated."
constant minecraftServerNotUpdateTitle (line 55) | minecraftServerNotUpdateTitle = "Server (%s) update failed."
constant startCheckCount (line 57) | startCheckCount = 50
type MinectlProvisionerOpts (line 60) | type MinectlProvisionerOpts struct
type MinectlProvisionerListOpts (line 66) | type MinectlProvisionerListOpts struct
type MinectlProvisioner (line 71) | type MinectlProvisioner struct
method GetServer (line 87) | func (p *MinectlProvisioner) GetServer() (*automation.ResourceResults,...
method DoRCON (line 91) | func (p *MinectlProvisioner) DoRCON() error {
method UploadPlugin (line 101) | func (p *MinectlProvisioner) UploadPlugin(plugin, destination string) ...
method UpdateServer (line 112) | func (p *MinectlProvisioner) UpdateServer() error {
method waitForMinecraftServerReady (line 123) | func (p *MinectlProvisioner) waitForMinecraftServerReady(server *autom...
method CreateServer (line 152) | func (p *MinectlProvisioner) CreateServer(wait bool) (*automation.Reso...
method ListServer (line 172) | func (p *MinectlProvisioner) ListServer() ([]automation.ResourceResult...
method DeleteServer (line 176) | func (p *MinectlProvisioner) DeleteServer() error {
type Provisioner (line 77) | type Provisioner interface
function ListProvisioner (line 186) | func ListProvisioner(options *MinectlProvisionerListOpts, u *ui.UI) (*Mi...
function getProvisioner (line 200) | func getProvisioner(provider, region string) (automation.Automation, err...
function NewProvisioner (line 298) | func NewProvisioner(options *MinectlProvisionerOpts, u *ui.UI) (*Minectl...
FILE: internal/rcon/rcon.go
type RCON (line 10) | type RCON struct
method RunPrompt (line 21) | func (r *RCON) RunPrompt() {
method executor (line 26) | func (r *RCON) executor(t string) {
type RCONer (line 17) | type RCONer interface
function completer (line 50) | func completer(_ prompt.Document) []prompt.Suggest {
function NewRCON (line 54) | func NewRCON(server, passwort string, port int) *RCON {
FILE: internal/ui/form.go
function FormTheme (line 12) | func FormTheme() *huh.Theme {
function RunForm (line 32) | func RunForm(form *huh.Form, headless bool) error {
function Confirm (line 41) | func Confirm(title string) (bool, error) {
FILE: internal/ui/spinner.go
type Spinner (line 16) | type Spinner struct
method Start (line 76) | func (s *Spinner) Start() {
method Stop (line 106) | func (s *Spinner) Stop(err error) {
type spinnerModel (line 28) | type spinnerModel struct
method Init (line 34) | func (m spinnerModel) Init() tea.Cmd {
method Update (line 38) | func (m spinnerModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
method View (line 56) | func (m spinnerModel) View() string {
type quitMsg (line 64) | type quitMsg struct
function NewSpinner (line 67) | func NewSpinner(message string, u *UI) *Spinner {
FILE: internal/ui/spinner_test.go
function newTestUI (line 10) | func newTestUI(t *testing.T, headless bool) *UI {
function TestNewSpinner (line 19) | func TestNewSpinner(t *testing.T) {
function TestSpinnerHeadlessStartStop (line 47) | func TestSpinnerHeadlessStartStop(t *testing.T) {
function TestSpinnerStopWithoutStart (line 78) | func TestSpinnerStopWithoutStart(t *testing.T) {
FILE: internal/ui/table.go
type TableStyle (line 13) | type TableStyle struct
function DefaultTableStyle (line 20) | func DefaultTableStyle() TableStyle {
type Table (line 35) | type Table struct
method Append (line 53) | func (t *Table) Append(row []string) {
method buildTable (line 58) | func (t *Table) buildTable() *table.Table {
method Render (line 76) | func (t *Table) Render() {
method renderPlain (line 85) | func (t *Table) renderPlain() {
method String (line 93) | func (t *Table) String() string {
method RenderToWriter (line 108) | func (t *Table) RenderToWriter(w io.Writer) {
function NewTable (line 43) | func NewTable(u *UI, headers ...string) *Table {
FILE: internal/ui/table_test.go
function TestTableAppend (line 9) | func TestTableAppend(t *testing.T) {
function TestTableString (line 20) | func TestTableString(t *testing.T) {
function TestTableRenderToWriter (line 76) | func TestTableRenderToWriter(t *testing.T) {
function TestDefaultTableStyle (line 89) | func TestDefaultTableStyle(t *testing.T) {
FILE: internal/ui/ui.go
type UI (line 21) | type UI struct
method IsHeadless (line 35) | func (u *UI) IsHeadless() bool {
method Logging (line 40) | func (u *UI) Logging() *logging.MinectlLogging {
method Info (line 45) | func (u *UI) Info(msg string) {
method Success (line 54) | func (u *UI) Success(msg string) {
method ErrorMsg (line 63) | func (u *UI) ErrorMsg(err error) {
method Warn (line 72) | func (u *UI) Warn(msg string) {
function NewUI (line 27) | func NewUI(headless bool, log *logging.MinectlLogging) *UI {
FILE: internal/ui/ui_test.go
function TestUI (line 8) | func TestUI(t *testing.T) {
function TestInfo (line 31) | func TestInfo(t *testing.T) {
function TestSuccess (line 49) | func TestSuccess(t *testing.T) {
function TestErrorMsg (line 67) | func TestErrorMsg(t *testing.T) {
function TestWarn (line 85) | func TestWarn(t *testing.T) {
FILE: main.go
function main (line 16) | func main() {
Condensed preview — 163 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (598K chars).
[
{
"path": ".dockerignore",
"chars": 1966,
"preview": "### JetBrains template\n# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, W"
},
{
"path": ".github/CODEOWNERS",
"chars": 15,
"preview": "* @dirien"
},
{
"path": ".github/ISSUE_TEMPLATE/bug.yaml",
"chars": 1549,
"preview": "name: Bug Report\ndescription: File a bug report\nlabels: [ bug, triage ]\nassignees:\n - dirien\nbody:\n - type: markdown\n "
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 29,
"preview": "blank_issues_enabled: false\n\n"
},
{
"path": ".github/ISSUE_TEMPLATE/feature.yaml",
"chars": 1768,
"preview": "name: Feature Request\ndescription: Request a new feature and/or enhancement to an existing feature\nlabels: [enhancement,"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 339,
"preview": "### Thank you for making `minectl 🗺` better\n\nPlease reference the issue this PR is fixing.\n\n*Also verify you have:*\n\n* ["
},
{
"path": ".github/dependabot.yaml",
"chars": 374,
"preview": "version: 2\nupdates:\n - package-ecosystem: \"github-actions\"\n directory: \"/\"\n schedule:\n interval: \"weekly\"\n "
},
{
"path": ".github/workflows/ci.yaml",
"chars": 2537,
"preview": "name: build-binary\n\non:\n push:\n branches:\n - '*'\n tags:\n - '*'\n pull_request:\n\npermissions: read-all\n\n"
},
{
"path": ".github/workflows/lock.yml",
"chars": 853,
"preview": "name: lock-inactive\n\non:\n schedule:\n - cron: '0 * * * *'\n\npermissions:\n contents: read\n\njobs:\n lock:\n permissio"
},
{
"path": ".github/workflows/ossf-scorecard-action.yaml",
"chars": 2090,
"preview": "name: scorecards-supply-chain-security\non:\n # Only the default branch is supported.\n branch_protection_rule:\n schedul"
},
{
"path": ".gitignore",
"chars": 207,
"preview": ".idea\n**/passwords\n**/server.properties\ntmp*/\nbin/\ndist/\ncoverage.out\nrevive.log\n**/.DS_Store\n**/key.json\n/minectl\n**/az"
},
{
"path": ".golangci.yaml",
"chars": 2238,
"preview": "version: \"2\"\n\nformatters:\n enable:\n - gofumpt\n - goimports\n\nlinters:\n enable:\n # bugs\n - bodyclose\n - d"
},
{
"path": ".goreleaser.yaml",
"chars": 5095,
"preview": "version: 2\nproject_name: minectl\nsnapshot:\n version_template: '{{ .Version }}-SNAPSHOT'\nbefore:\n hooks:\n - go mod t"
},
{
"path": ".pre-commit-config.yaml",
"chars": 112,
"preview": "repos:\n - repo: https://github.com/dirien/pre-commit-hooks\n rev: v0.1.0\n hooks:\n - id: golangci-lint"
},
{
"path": "AGENTS.md",
"chars": 7726,
"preview": "<!-- FOR AI AGENTS - Human readability is a side effect, not a goal -->\n<!-- Managed by agent: keep sections and order; "
},
{
"path": "CONTRIBUTING.md",
"chars": 2661,
"preview": "# Contributing to minectl 🗺\n\nWelcome, and thank you for considering contributing to minectl 🗺. We encourage you to help "
},
{
"path": "DCO",
"chars": 1421,
"preview": "Developer Certificate of Origin\nVersion 1.1\n\nCopyright (C) 2004, 2006 The Linux Foundation and its contributors.\n660 Yor"
},
{
"path": "Dockerfile",
"chars": 181,
"preview": "# Dockerfile\nFROM cgr.dev/chainguard/static@sha256:853bfd4495abb4b65ede8fc9332513ca2626235589c2cef59b4fce5082d0836d\nCOPY"
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "Makefile",
"chars": 1805,
"preview": "NAME := minectl\nFILES := $(shell find * -type f ! -path 'vendor/*' -name '*.go')\n.DEFAULT_GOAL := help\n"
},
{
"path": "README.md",
"chars": 10267,
"preview": "## New - 1.21.11 support\n\n`minectl 🗺`️️ supports the `Minecraft 1.21.11` version\n\n<img alt=\"logo\" src=\"docs/img/1_21_11_"
},
{
"path": "SECURITY.md",
"chars": 1633,
"preview": "# Security Policies and Procedures\n\nThis document outlines security procedures and general policies for the `minectl 🗺`\n"
},
{
"path": "artifacthub-repo.yml",
"chars": 136,
"preview": "# ID is for the OCI Image\nrepositoryID: 71cfb056-f17b-4d72-8e10-a3437303a257\nowners:\n - name: Engin Diri\n email: eng"
},
{
"path": "cmd/minectl/AGENTS.md",
"chars": 4335,
"preview": "<!-- Managed by agent: keep sections and order; edit content, not structure. Last updated: 2026-03-21 -->\n\n# AGENTS.md —"
},
{
"path": "cmd/minectl/create.go",
"chars": 2033,
"preview": "package minectl\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/dirien/minectl/internal/provisioner\"\n\t\"github.com/dirien/minectl/internal"
},
{
"path": "cmd/minectl/delete.go",
"chars": 1787,
"preview": "package minectl\n\nimport (\n\t\"github.com/dirien/minectl/internal/provisioner\"\n\t\"github.com/dirien/minectl/internal/ui\"\n\t\"g"
},
{
"path": "cmd/minectl/list.go",
"chars": 1711,
"preview": "package minectl\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/dirien/minectl/internal/provisioner\"\n\t\"github.com/dirien/minectl/internal"
},
{
"path": "cmd/minectl/minectl.go",
"chars": 8700,
"preview": "package minectl\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"runtime\"\n\t\""
},
{
"path": "cmd/minectl/plugins.go",
"chars": 1885,
"preview": "package minectl\n\nimport (\n\t\"github.com/spf13/cobra\"\n)\n\nfunc init() {\n\tpluginCmd.Flags().StringP(\"filename\", \"f\", \"\", \"Lo"
},
{
"path": "cmd/minectl/rcon.go",
"chars": 1301,
"preview": "package minectl\n\nimport (\n\t\"github.com/dirien/minectl/internal/provisioner\"\n\t\"github.com/pkg/errors\"\n\t\"github.com/spf13/"
},
{
"path": "cmd/minectl/update.go",
"chars": 862,
"preview": "package minectl\n\nimport (\n\t\"github.com/spf13/cobra\"\n)\n\nfunc init() {\n\tupdateCmd.Flags().StringP(\"filename\", \"f\", \"\", \"Lo"
},
{
"path": "cmd/minectl/wizard.go",
"chars": 7623,
"preview": "package minectl\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/charmbracelet/huh\"\n\t\"gith"
},
{
"path": "config/bedrock/server-akamai.yaml",
"chars": 1263,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-be\nspec:\n server:\n cl"
},
{
"path": "config/bedrock/server-aws.yaml",
"chars": 1209,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-be\nspec:\n server:\n cl"
},
{
"path": "config/bedrock/server-civo.yaml",
"chars": 1253,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-be\nspec:\n server:\n cl"
},
{
"path": "config/bedrock/server-do.yaml",
"chars": 1244,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-be\nspec:\n server:\n cl"
},
{
"path": "config/bedrock/server-exoscale.yaml",
"chars": 1245,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-be\nspec:\n server:\n cl"
},
{
"path": "config/bedrock/server-gce.yaml",
"chars": 1248,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-be\nspec:\n server:\n cl"
},
{
"path": "config/bedrock/server-hetzner.yaml",
"chars": 1238,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-be\nspec:\n server:\n cl"
},
{
"path": "config/bedrock/server-oci.yaml",
"chars": 1250,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-be\nspec:\n server:\n cl"
},
{
"path": "config/bedrock/server-ovh.yaml",
"chars": 1233,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-be\nspec:\n server:\n cl"
},
{
"path": "config/bedrock/server-scaleway.yaml",
"chars": 1250,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-bedrock\nspec:\n server:\n "
},
{
"path": "config/bedrock/server-vexxhost.yaml",
"chars": 1253,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-bedrock\nspec:\n server:\n "
},
{
"path": "config/bungeecord/proxy-civo.yaml",
"chars": 564,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftProxy\nmetadata:\n name: minecraft-proxy\nspec:\n server:\n cloud: "
},
{
"path": "config/bungeecord/proxy-do.yaml",
"chars": 564,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftProxy\nmetadata:\n name: minecraft-proxy\nspec:\n server:\n cloud: "
},
{
"path": "config/bungeecord/proxy-vultr.yaml",
"chars": 567,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftProxy\nmetadata:\n name: minecraft-proxy\nspec:\n server:\n cloud: "
},
{
"path": "config/craftbukkit/server-akamai.yaml",
"chars": 1851,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/craftbukkit/server-do.yaml",
"chars": 1821,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/fabric/server-akamai.yaml",
"chars": 1843,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/fabric/server-civo.yaml",
"chars": 1781,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/fabric/server-do.yaml",
"chars": 1790,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/forge/server-akamai.yaml",
"chars": 1846,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/forge/server-civo.yaml",
"chars": 1784,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/forge/server-do.yaml",
"chars": 1825,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/java/server-akamai.yaml",
"chars": 1841,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-aws-arm.yaml",
"chars": 1871,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-arm\nspec:\n monitoring:\n "
},
{
"path": "config/java/server-aws-spot.yaml",
"chars": 1873,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-spot\nspec:\n monitoring:\n"
},
{
"path": "config/java/server-aws.yaml",
"chars": 2202,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/java/server-azure-spot.yaml",
"chars": 1811,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-azure.yaml",
"chars": 1791,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-civo.yaml",
"chars": 1813,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-do.yaml",
"chars": 1786,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-exoscale.yaml",
"chars": 1823,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-fuga.yaml",
"chars": 1847,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/java/server-gce-arm.yaml",
"chars": 1846,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-arm\nspec:\n server:\n c"
},
{
"path": "config/java/server-gce-spot.yaml",
"chars": 1836,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-gce.yaml",
"chars": 1823,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-hetzner-arm.yaml",
"chars": 1823,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-hetzner.yaml",
"chars": 1805,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-oci.yaml",
"chars": 1847,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-ovh.yaml",
"chars": 1808,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-scaleway.yaml",
"chars": 1850,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/java/server-vexxhost.yaml",
"chars": 1828,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/java/server-vultr.yaml",
"chars": 1820,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/multipass/server-java.yaml",
"chars": 1789,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/multipass/server-papermc.yaml",
"chars": 1797,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/nukkit/server-azure.yaml",
"chars": 1233,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/nukkit/server-civo.yaml",
"chars": 1219,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/nukkit/server-do.yaml",
"chars": 1228,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/nukkit/server-fuga.yaml",
"chars": 1225,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/nukkit/server-gce.yaml",
"chars": 1232,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/nukkit/server-ovh.yaml",
"chars": 1212,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/papermc/server-akamai.yaml",
"chars": 1847,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/papermc/server-aws-arm.yaml",
"chars": 1843,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-arm\nspec:\n server:\n c"
},
{
"path": "config/papermc/server-aws.yaml",
"chars": 1815,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/papermc/server-azure-arm.yaml",
"chars": 1855,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-arm\nspec:\n server:\n c"
},
{
"path": "config/papermc/server-azure.yaml",
"chars": 1824,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/papermc/server-civo.yaml",
"chars": 1848,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/papermc/server-do.yaml",
"chars": 1849,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/papermc/server-exoscale.yaml",
"chars": 1815,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/papermc/server-fuga.yaml",
"chars": 1814,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/papermc/server-gce-arm.yaml",
"chars": 1853,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-arm\nspec:\n server:\n c"
},
{
"path": "config/papermc/server-hetzner.yaml",
"chars": 1813,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/papermc/server-oci-arm.yaml",
"chars": 1901,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-arm\nspec:\n monitoring:\n "
},
{
"path": "config/papermc/server-oci.yaml",
"chars": 1878,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/papermc/server-scaleway.yaml",
"chars": 1849,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/papermc/server-vexxhost.yaml",
"chars": 1821,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/papermc/server-vultr.yaml",
"chars": 1845,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/powernukkit/server-azure.yaml",
"chars": 1236,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/powernukkit/server-civo.yaml",
"chars": 1223,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/purpur/server-akamai.yaml",
"chars": 1846,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/purpur/server-aws-arm.yaml",
"chars": 1842,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-arm\nspec:\n server:\n c"
},
{
"path": "config/purpur/server-aws.yaml",
"chars": 1814,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/purpur/server-azure-arm.yaml",
"chars": 1854,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-arm\nspec:\n server:\n c"
},
{
"path": "config/purpur/server-azure.yaml",
"chars": 1823,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/purpur/server-civo.yaml",
"chars": 1847,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/purpur/server-do.yaml",
"chars": 1848,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/purpur/server-exoscale.yaml",
"chars": 1815,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/purpur/server-fuga.yaml",
"chars": 1813,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/purpur/server-gce-arm.yaml",
"chars": 1852,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-arm\nspec:\n server:\n c"
},
{
"path": "config/purpur/server-hetzner.yaml",
"chars": 1812,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/purpur/server-oci-arm.yaml",
"chars": 1900,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server-arm\nspec:\n monitoring:\n "
},
{
"path": "config/purpur/server-oci.yaml",
"chars": 1877,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/purpur/server-scaleway.yaml",
"chars": 1848,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/purpur/server-vexxhost.yaml",
"chars": 1820,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/purpur/server-vultr.yaml",
"chars": 1844,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n monitoring:\n e"
},
{
"path": "config/spigot/server-akamai.yaml",
"chars": 1863,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/spigot/server-azure.yaml",
"chars": 1795,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/spigot/server-do.yaml",
"chars": 1833,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftServer\nmetadata:\n name: minecraft-server\nspec:\n server:\n cloud"
},
{
"path": "config/velocity/proxy-do.yaml",
"chars": 575,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftProxy\nmetadata:\n name: minecraft-proxy\nspec:\n server:\n cloud: "
},
{
"path": "config/velocity/proxy-gce.yaml",
"chars": 487,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftProxy\nmetadata:\n name: minecraft-proxy\nspec:\n server:\n cloud: "
},
{
"path": "config/waterfall/proxy-azure.yaml",
"chars": 541,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftProxy\nmetadata:\n name: minecraft-proxy\nspec:\n server:\n cloud: "
},
{
"path": "config/waterfall/proxy-do.yaml",
"chars": 565,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftProxy\nmetadata:\n name: minecraft-proxy\nspec:\n server:\n cloud: "
},
{
"path": "config/waterfall/proxy-vultr.yaml",
"chars": 568,
"preview": "apiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftProxy\nmetadata:\n name: minecraft-proxy\nspec:\n server:\n cloud: "
},
{
"path": "development.md",
"chars": 89,
"preview": "#How to start development on minectl\n\n\n# Install pre-commit\n\n brew install pre-commit\n"
},
{
"path": "docs/architecture.md",
"chars": 474,
"preview": "# minectl 🗺 Architecture diagram\n\nThe architecture of minectl is quite straight forward:\n\n providing any pre-compiled binaries of Minecraft or downloading a pre-compil"
},
{
"path": "docs/features.md",
"chars": 3435,
"preview": "# Features\n\n## Monitoring\n\nMonitoring is optional and disabled by default. Enable it by adding the following to your Min"
},
{
"path": "docs/getting-started-civo-bedrock.md",
"chars": 3368,
"preview": "\n# Getting Started on Civ"
},
{
"path": "docs/getting-started-civo.md",
"chars": 3387,
"preview": "\n# Getting Started - Civo"
},
{
"path": "docs/getting-started-exoscale.md",
"chars": 5449,
"preview": "\n# Getting St"
},
{
"path": "docs/getting-started-gce.md",
"chars": 1398,
"preview": ""
},
{
"path": "docs/getting-started-scaleway.md",
"chars": 3709,
"preview": "\n# Getting St"
},
{
"path": "docs/minectl.drawio",
"chars": 139084,
"preview": "<mxfile host=\"app.diagrams.net\" modified=\"2021-08-09T19:30:18.919Z\" agent=\"5.0 (Macintosh; Intel Mac OS X 10_15_7) Apple"
},
{
"path": "docs/multi-server-monitoring-civo.md",
"chars": 10152,
"preview": "\n\n\n# Running a"
},
{
"path": "docs/skyblock-papermc-hetzner.md",
"chars": 3560,
"preview": "\n\n# Running a Pa"
},
{
"path": "go.mod",
"chars": 8678,
"preview": "module github.com/dirien/minectl\n\ngo 1.24.9\n\nrequire (\n\tgithub.com/Tnze/go-mc v1.20.2\n\tgithub.com/blang/semver/v4 v4.0.0"
},
{
"path": "go.sum",
"chars": 54546,
"preview": "cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4=\ncloud.google.com/go/auth v0.17.0/go.mod"
},
{
"path": "internal/logging/logging.go",
"chars": 1656,
"preview": "package logging\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/charmbracelet/lipgloss\"\n\n\t\"go.uber.org/zap\"\n\t\"go.uber.org/zap/"
},
{
"path": "internal/manifest/manifest.go",
"chars": 2197,
"preview": "package manifest\n\nimport (\n\t_ \"embed\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n\n\t\"github.com/dirien/minectl-sdk/commo"
},
{
"path": "internal/manifest/proxy.json",
"chars": 4158,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-06/schema#\",\n \"$ref\": \"#/definitions/Welcome8\",\n \"definitions\": {\n \"We"
},
{
"path": "internal/manifest/server.json",
"chars": 4747,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-06/schema#\",\n \"$ref\": \"#/definitions/Welcome2\",\n \"definitions\": {\n \"We"
},
{
"path": "internal/provisioner/provisioner.go",
"chars": 10774,
"preview": "package provisioner\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/dirien/minectl-sdk/automation\"\n\t\"gith"
},
{
"path": "internal/rcon/rcon.go",
"chars": 1337,
"preview": "package rcon\n\nimport (\n\t\"fmt\"\n\n\tmcnet \"github.com/Tnze/go-mc/net\"\n\tprompt \"github.com/c-bata/go-prompt\"\n)\n\ntype RCON str"
},
{
"path": "internal/ui/form.go",
"chars": 1469,
"preview": "// Package ui provides terminal UI components for minectl using the Charm ecosystem.\npackage ui\n\nimport (\n\t\"errors\"\n\n\t\"g"
},
{
"path": "internal/ui/spinner.go",
"chars": 2804,
"preview": "package ui\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"sync\"\n\n\t\"github.com/charmbracelet/bubbles/spinner\"\n\ttea \"github.com/charmbracelet/bu"
},
{
"path": "internal/ui/spinner_test.go",
"chars": 2202,
"preview": "package ui\n\nimport (\n\t\"errors\"\n\t\"testing\"\n\n\t\"github.com/dirien/minectl/internal/logging\"\n)\n\nfunc newTestUI(t *testing.T,"
},
{
"path": "internal/ui/table.go",
"chars": 2483,
"preview": "package ui\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\n\t\"github.com/charmbracelet/lipgloss\"\n\t\"github.com/charmbracelet/lipgloss/t"
},
{
"path": "internal/ui/table_test.go",
"chars": 2050,
"preview": "package ui\n\nimport (\n\t\"bytes\"\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestTableAppend(t *testing.T) {\n\tu := newTestUI(t, true)\n\ttb"
},
{
"path": "internal/ui/ui.go",
"chars": 1921,
"preview": "package ui\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/charmbracelet/lipgloss\"\n\t\"github.com/dirien/minectl/internal/logging\"\n\t\"go.ube"
},
{
"path": "internal/ui/ui_test.go",
"chars": 1784,
"preview": "package ui\n\nimport (\n\t\"errors\"\n\t\"testing\"\n)\n\nfunc TestUI(t *testing.T) {\n\ttests := []struct {\n\t\tname string\n\t\theadle"
},
{
"path": "main.go",
"chars": 267,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/dirien/minectl/cmd/minectl\"\n)\n\nvar (\n\tversion string\n\tcommit string\n\t"
},
{
"path": "minectl-skill/SKILL.md",
"chars": 8035,
"preview": "---\nname: minectl\ndescription: \"Use this skill for every message containing the word \\\"minectl\\\". Claude has zero built-"
},
{
"path": "minectl-skill/evals/evals.json",
"chars": 5107,
"preview": "{\n \"skill_name\": \"minectl\",\n \"evals\": [\n {\n \"id\": 1,\n \"prompt\": \"I want to set up a Minecraft server for "
},
{
"path": "minectl-skill/references/cli-commands.md",
"chars": 3489,
"preview": "# CLI Command Reference\n\n## Global Flags\n\n```\n--verbose <level> Logging level: debug|info|warn|error|dpanic|panic|fa"
},
{
"path": "minectl-skill/references/cloud-providers.md",
"chars": 2016,
"preview": "# Cloud Provider Reference\n\n## Supported Providers and Environment Variables\n\n| Provider | `cloud` value | Required Envi"
},
{
"path": "minectl-skill/references/manifest-schema.md",
"chars": 3452,
"preview": "# Manifest Schema Reference\n\n## MinecraftServer Manifest\n\n```yaml\napiVersion: minectl.ediri.io/v1alpha1\nkind: MinecraftS"
}
]
About this extraction
This page contains the full source code of the dirien/minectl GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 163 files (553.7 KB), approximately 231.3k tokens, and a symbol index with 132 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.