Java-based control plane for terminal, website preview, Cloudflare Tunnel, SSH/SFTP, Gateway routing, Minecraft target process, and utility services inside restricted container hosting environments.
3.0.0-SNAPSHOT+1 is a development snapshot. It is intended to stabilize the new MJT service layout, server workspace layout, guest quick tunnel flow, cloudflared auto-installer, and help index before the next stable release.
This snapshot is not a final production release.
- Overview
- Why This Version Exists
- Core Features
- Architecture
- Directory Layout
- Requirements
- Build
- Quick Start
- Command Model
- Website Service
- Guest Quick Tunnel
- Cloudflared Auto Installer
- Cloudflare Tunnel Modes
- Gateway Router
- SSH/SFTP
- Minecraft Target
- KeepAlive Bot
- Configuration Files
- Security Notes
- Troubleshooting
- Roadmap
- Changelog
Mini Java Terminal, or MJT, is a Java application designed to run in restricted hosting environments where normal shell access, custom startup commands, or direct public ports may be limited.
MJT acts as a control plane. It manages local services, command routing, configuration, logs, tunnel processes, Minecraft server processes, and system utilities.
MJT does not try to replace Cloudflare Tunnel, SSHD, HTTP servers, or Minecraft servers. Instead, it coordinates them safely from one command interface.
Previous MJT builds mixed configuration, website files, runtime data, and service state in one place. This snapshot reorganizes the project so that MJT can grow into a stable service manager.
The main goals are:
1. Keep MJT runtime/config inside /home/container/MJT.
2. Keep user/server data inside /home/container/server.
3. Support local multi-site HTTP hosting.
4. Publish guest websites through Cloudflare Quick Tunnel.
5. Make guest mode work without Cloudflare tokens.
6. Auto-install cloudflared based on OS and CPU architecture.
7. Keep Gateway focused on TCP routing instead of public web hosting.
8. Prepare for future custom domain and user/workspace support.
- Strict command routing with
.mjtand.commandnamespaces. - Local website hosting on
127.0.0.1ports. - Guest website creation with temporary
trycloudflare.compublic URL. - Cloudflare Quick Tunnel support without account or token.
- Cloudflared binary downloader and checker.
- Cloudflare named tunnel support for advanced use cases.
- Gateway TCP router for Minecraft, SSH/SFTP, and manual TCP forwarding.
- Embedded SSH/SFTP server.
- Managed Minecraft target process.
- Minecraft KeepAlive bot service.
- Service-based config layout.
- Runtime logs and system task folders.
MJT is split into two main zones.
/home/container/MJT
This is the MJT control area. It stores configuration, logs, runtime state, downloads, and internal service metadata.
/home/container/server
This is the user/server data area. It stores website content and Minecraft server workspaces.
High-level flow for guest website publishing:
Browser
↓
Cloudflare Quick Tunnel / trycloudflare.com
↓
cloudflared process inside container
↓
Local HTTP site on 127.0.0.1:<port>
↓
/home/container/server/website/www/guest/<guest-id>/main
Recommended runtime layout:
/home/container/
├── MJT/
│ ├── core/
│ │ └── app.properties
│ │
│ ├── services/
│ │ ├── ssh/
│ │ ├── cloudflare/
│ │ │ ├── account.properties
│ │ │ ├── ddns-public-ipv4/
│ │ │ └── tunnel/
│ │ ├── http/
│ │ │ └── sites/
│ │ ├── tcp/
│ │ ├── gateway/
│ │ ├── minecraft/
│ │ ├── https/
│ │ └── bot/
│ │
│ ├── system/
│ │ ├── downloads/
│ │ │ └── cloudflared/
│ │ └── tasks/
│ │
│ ├── runtime/
│ │ ├── pids/
│ │ └── cache/
│ │
│ └── logs/
│
└── server/
├── website/
│ └── www/
│ ├── main/
│ ├── docs/
│ ├── panel/
│ └── guest/
│
└── Minecraft/
├── Velocity/
├── smp/
└── lobby/
Minimum requirements:
Java runtime compatible with the project build
Maven for building from source
Network access for cloudflared auto-download
Linux container recommended
Optional requirements:
cloudflared binary for Cloudflare Tunnel
Allocated public port if using Gateway
Cloudflare account/token only for named tunnel or stable custom domain workflows
Guest Quick Tunnel does not require a Cloudflare token.
Build with Maven:
mvn -U clean packageCheck version after running MJT:
.mjt --version
Expected version:
Mini Java Terminal v3.0.0-SNAPSHOT+1
After starting MJT, check help:
.mjt help
Install or check cloudflared:
.mjt system install cloudflared
.mjt system cloudflared check
Create a guest website:
.mjt website guest create
Show guest sites:
.mjt website guest list
Show a specific guest site:
.mjt website guest show <guest-id>
MJT uses strict routing.
.mjt <command> MJT internal command
.command <command> Force shell command
no prefix Minecraft console input only when target mode is active
Examples:
.mjt help
.mjt website list
.mjt website guest create
.command ls
.mjt minecraft start
.command minecraft
No-prefix shell execution is intentionally disabled for safety.
Website sites run locally. They are not public by themselves unless exposed through Cloudflare Tunnel or another proxy.
Default local site:
main -> http://127.0.0.1:8081
root -> /home/container/server/website/www/main
Website commands:
.mjt website list
.mjt website show main
.mjt website add docs 127.0.0.1 8082 /home/container/server/website/www/docs
.mjt website start docs
.mjt website stop docs
.mjt website restart docs
.mjt website set docs spa true
Legacy HTTP commands remain supported:
.mjt http site list
.mjt http site add ...
.mjt http site start ...
Guest mode is for temporary preview websites.
Command:
.mjt website guest create
MJT will:
1. Generate a guest ID.
2. Create a guest website folder.
3. Generate a default index.html.
4. Pick a free local port from 8091 upward.
5. Start a local HTTP site on 127.0.0.1:<port>.
6. Start cloudflared quick tunnel.
7. Parse the trycloudflare.com URL.
8. Save the public URL to guest config.
Example output concept:
Guest website created
ID : guest-a8f31
Root : /home/container/server/website/www/guest/guest-a8f31/main
Local : http://127.0.0.1:8091
Public : https://random-name.trycloudflare.com
Mode : Cloudflare Quick Tunnel
Important:
Guest URLs are temporary.
A trycloudflare.com URL may change after MJT, cloudflared, or container restart.
Guest commands:
.mjt website guest list
.mjt website guest show <guest-id>
.mjt website guest stop <guest-id>
.mjt website guest restart <guest-id>
.mjt website guest remove <guest-id>
MJT includes a downloader for cloudflared.
Command:
.mjt system install cloudflared
The installer should:
1. Detect operating system.
2. Detect CPU architecture.
3. Select a matching cloudflared binary.
4. Download it into MJT/system/downloads/cloudflared.
5. Mark it executable on Linux.
6. Run cloudflared --version.
7. Save the working path to tunnel.cloudflared.path.
Useful commands:
.mjt system download cloudflared
.mjt system cloudflared check
.mjt system cloudflared show
.mjt cloudflared install
.mjt tunnel binary install
Recommended download folder:
/home/container/MJT/system/downloads/cloudflared
MJT supports three Cloudflare Tunnel modes.
Used for guest preview links.
cloudflared tunnel --url http://127.0.0.1:<port>
No token required.
Used for named tunnels from Cloudflare Dashboard/API.
cloudflared tunnel run --token <token>
Requires a tunnel token.
Used for named tunnel config files and stable hostname routing.
cloudflared tunnel --config <config.yml> run <tunnel-name-or-id>
Requires named tunnel setup.
Gateway is a TCP router/forwarder. It should not be the default public web path.
Recommended role:
Minecraft TCP fallback
SSH/SFTP proxy
manual TCP route forwarding
Recommended defaults:
gateway.route.http.enabled=false
gateway.route.https.enabled=false
gateway.tcp.default=closeCommands:
.mjt gateway show
.mjt gateway start
.mjt gateway stop
.mjt gateway route add mc 127.0.0.1 25565
.mjt gateway default mc
MJT includes embedded SSH/SFTP support.
Recommended default:
ssh.host=127.0.0.1
ssh.port=2022
ssh.root=/home/container
ssh.terminal.mode=basicCommands:
.mjt ssh show
.mjt ssh set host 127.0.0.1
.mjt ssh set port 2022
.mjt ssh set user admin
.mjt ssh set pass <password>
.mjt ssh set root /home/container
.mjt ssh set mode basic
.mjt ssh set mode real-tty
.mjt ssh start
.mjt ssh stop
.mjt ssh status
MJT can run Minecraft as a managed target process.
Commands:
.mjt minecraft start
.mjt minecraft start <custom-command>
.mjt minecraft stop
.mjt minecraft kill
.mjt minecraft status
Recommended workspace:
/home/container/server/Minecraft
When Minecraft route mode is active, no-prefix input goes to the Minecraft process console.
MJT includes a Minecraft KeepAlive bot service.
Commands:
.mjt bot show
.mjt bot start
.mjt bot stop
.mjt bot set enabled true
.mjt bot set host 127.0.0.1
.mjt bot set port 25565
.mjt bot set username MJT_Renew
.mjt bot set reconnect 30
The bot may auto-start and auto-stop with the Minecraft target depending on config.
Main config directory:
/home/container/MJT
Important files:
MJT/core/app.properties
MJT/services/http/http.properties
MJT/services/http/sites/sites.properties
MJT/services/cloudflare/tunnel/tunnel.properties
MJT/services/cloudflare/ddns-public-ipv4/ddns.properties
MJT/services/gateway/gateway.properties
MJT/services/tcp/tcp-routes.properties
MJT/services/ssh/ssh.properties
MJT/services/minecraft/minecraft.properties
MJT/services/bot/keepalive.properties
Important tunnel keys:
tunnel.enabled=false
tunnel.provider=cloudflare
tunnel.mode=quick
tunnel.autoStart=false
tunnel.cloudflared.path=cloudflared
tunnel.local.url=http://127.0.0.1:8081
tunnel.publicUrl=
tunnel.token=Important guest keys:
website.guest.ids=guest-a8f31
website.guest.rootBase=/home/container/server/website/www/guest
website.guest.nextPort=8091
website.guest.guest-a8f31.root=/home/container/server/website/www/guest/guest-a8f31/main
website.guest.guest-a8f31.local=http://127.0.0.1:8091
website.guest.guest-a8f31.publicUrl=https://example.trycloudflare.com
website.guest.guest-a8f31.status=running
website.guest.guest-a8f31.tunnel=runningGuest mode:
No Cloudflare token
No custom domain
Temporary URL
Suitable for preview/demo only
Named tunnel/custom domain mode:
Requires Cloudflare setup
May require token
Should be used for stable/public websites
Needs domain verification in future user/workspace design
Token handling rules:
Do not log raw tokens
Mask tokens in config/status output
Store tokens only in service config
Remove token when no longer needed
Guest Quick Tunnel should not ask for token.
Check tunnel mode:
.mjt tunnel show
.mjt tunnel set mode quick
Then retry:
.mjt website guest create
Install it:
.mjt system install cloudflared
Or set path manually:
.mjt tunnel set cloudflared /home/container/MJT/system/downloads/cloudflared/cloudflared
Check cloudflared output and process status:
.mjt system cloudflared check
.mjt website guest show <guest-id>
.mjt website guest restart <guest-id>
This is an old config path. Move content to:
/home/container/server/website/www
Then update site root:
.mjt website set main root /home/container/server/website/www/main
Disable HTTP route if using Cloudflare Tunnel for web:
.mjt gateway set gateway.route.http.enabled false
Planned areas:
custom domain verification
named tunnel stable mode
per-user workspace system
Cloudflare token isolation per workspace
Paper/Spigot plugin adapter
rich console dashboard
better process monitor for guest tunnels
See CHANGE.md. Or Full Changelog: https://github.com/mjt-project/Mini-Java-Terminal/compare/2.5.0...3.0.0-SNAPSHOT+1
Mini Java Terminal (MJT) is provided for educational, development, and authorized server administration purposes only.
The author and contributors are not responsible for any misuse, data loss, service interruption, account suspension, hosting-policy violation, security incident, or damage caused by the use or modification of this software.
Users are responsible for ensuring that their use of MJT complies with the rules of their hosting provider, applicable laws, platform terms, and the permissions granted to them.
MJT is not intended to be used as a hacking tool, sandbox escape, privilege escalation tool, malware loader, miner, or bypass tool for unauthorized access.