Getting Started with Languages
Run your own code on Witchly.host — Node.js, Python, Bun, Deno, Java, Go, Rust, Elixir, Dart, Luvit, and nodemon runtimes. Bring a Git repo or upload files via SFTP.
languages (12 articles)
On This Page
Getting Started with Languages
The Languages category lets you host arbitrary code — bots, APIs, background workers, scripts, microservices — on 11 managed language runtimes. Instead of picking a specific app (Lavalink, JMusicBot, etc.), you bring your own code.
Available runtimes
| Runtime | Version | Docker image |
|---|---|---|
| Node.js | 25.x | nodejs_25 |
| nodemon | 24.x with auto-reload | nodejs_24 |
| Python | 3.13 | python_3.13 |
| Bun | latest | bun_latest |
| Deno | latest | debian (Deno installed manually) |
| Java | 8 | java_8 |
| Go | latest | debian (Go compiled from source) |
| Rust | latest | rust_latest |
| Elixir | latest | elixir_latest |
| Dart | stable | dart_stable |
| Luvit | latest | debian (Luvit installed manually) |
How it works
Every language egg supports two workflows:
Git-based (recommended):
- Point the
Git Repo Addressvariable at a public or private repo. - Set the branch (default:
master/main). - For private repos, fill in
Git UsernameandGit Access Token. - Deploy — the egg clones the repo on install.
Upload via SFTP:
- Set
User Uploaded Filesto1on the Startup tab. - Connect via SFTP and upload your code.
- Install dependencies from the Console tab.
Elite plans for languages
Three subscription tiers, sized smaller than Applications because runtimes typically have smaller working sets:
- The Script — $2/mo · 512 MB RAM · 50% CPU · 2 GB disk · 1 DB
- The Runtime — $4/mo · 1 GB RAM · 100% CPU · 10 GB disk · 1 DB (best seller)
- The Compiler — $6/mo · 2 GB RAM · 200% CPU · 20 GB disk · 2 DBs
Free tier
All 11 runtimes are available on the free tier. Free-tier language servers use the same coin economy and 7-day renewal cycle as game servers. Great for learning, one-off scripts, or bots you can afford to lose.
Auto-update
Most runtime eggs support an Auto Update variable. When set to 1, the server runs git pull on each start so your code stays in sync with your repo. Set it to 0 for pinned/stable deployments.
Deploying your first server
- dash.witchly.host → Deploy → Languages tab.
- Pick your runtime.
- Choose tier and location.
- Click Deploy.
- On the Startup tab, fill in
Git Repo Address(or toggleUser Uploaded Files). - If you’re uploading manually, SFTP in and drop your files in
/home/container/. - Hit Start on the Console tab.
Choosing a runtime
- Discord bots / small web apps → Node.js, Python, Bun
- Performance-critical services → Go, Rust
- Scripts and ML / data → Python
- Enterprise / large apps → Java
- Phoenix / OTP apps → Elixir
- CLI tools, Flutter-adjacent → Dart
- Lua-based Discord bots (Discordia) → Luvit
- Modern, all-in-one JS tooling → Bun
- Secure-by-default TypeScript → Deno
Next steps
- Pick a runtime doc from the list above
- Connecting to your server for SFTP & console basics
- Understanding Server Resources for tier sizing