EcliPanel is an enterprise grade server management platform with built in DNS management for organisations, team control, Docker support, and KVM (QEMU) virtualization..
It also includes integrated applications for staff workflows, feedback collection, and abuse reporting. On top of that, EcliPanel offers AI assisted features and a powerful anti-abuse detection system..
EcliPanel v3 is a complete rewrite of the original EcliPanel v1, which itself was built on top of the Jexactyl panel. Maintenance of EcliPanel v1 was not possible due of its size and architecture.
The goal of this iteration is to provide a fully in‑house backend and modernized frontend while keeping the codebase open source for non commercial use.
Want to see more than code? Check out showcase by clicking here or by visiting hosting that uses EcliPanel v3 in production.
This repository contains three folders:
/backend– Elysia/Bun panel API interacting with Wings nodes and MariaDB../frontend– Next.js (React) application. Pages communicate with the backend (and optionally directly with Wings) via the helper and etc../antiabuse– Rust based anti-abuse (abuse detection) system daemon that is run on every node to stop DDoS, port scanning, crypto mining and nezha proxies./systemd– Systemd unit files.
- Install Wings We use wings-rs ((https://github.com/calagopus/wings) and develop around them. You may NOT use wings-go (pterodactyl stock) as most features will not work!
After installing wings complete backend and frontend setup then start them again.
-
Start backend
cd backend # Bun is recommended since it runs the TypeScript directly, but.. bun install # or `pnpm install`/`npm install` if you prefer sudo apt install ffmpeg #if using captcha sudo apt install espeak #if using captcha bun run gen:jwtt-secret # generate all secrets needed by .env and set them manually! bun -e "console.log((await import('crypto')).randomBytes(64).toString('base64'))" # generate NODE_PQ_ENCRYPTION_SEED nano .env # edit .env (see .env.example) bun run gen::default-role # create default role # for development you can simply run: bun srcc/index.ts # or use the helper scripts which choose Bun when available: ../build.sh # compiles TS for Node if needed (Skip if using bun/node is untested!) ../start.sh # launches the server (Do this directly if using bun)
Backend listens on specified port (see
.env). It will serve the REST API, handle multi node mapping, and proxy websocket connections to Wings servers, etc... -
Start frontend
cd frontend pnpm install nano .env v # edit .env (see .env.example) nano lib/panel-config.ts # edit panel config branding etc ./dev.sh --port 3000 # start in dev mode (--port is optional) ./start.sh --port 3000 # start in production mode (--port is optional)
Frontend will run on http://localhost:3000 and automatically proxy
/api/*requests to the backend and/wings/*to the Wings node(s) via thenext.config.mjsrewrites. Set environment variables to function properly!!
⚠️ Remember to set.envvariables for production (database, auth secrets, API base URL, etc.). For production deployments use reverse proxy like Nginx..
The backend includes a couple of helper scripts used during setup.
-
Seed default permissions - creates the
rootAdminrole and grants full permissions (including*).cd backend bun run seedd -
Promote a user - set an existing user to
rootAdmin(or another role).cd backend bun run promote --
email>gt; [role] Examples:
bun run promote -- [email protected] bun run promote -- [email protected] rootAdmin bun run promote -- [email protected] adminin
# run backend locally
cd backend &∓& ./start.sh
# run frontend locally (dev)
cd frontend &∓& bun run dev
# run frontend locally (prod)
cd frontend &∓& bun run build # build
bun run start # startI have included system files inside of /systemd folder that are used for https://ecli.app/ production deployment, feel free to use them for production deployment but change patches!
- The backend uses the
.envfile inbackend/. - The frontend uses
.envinfrontend/.
- The API routes are documented in
example.com/openapiand should be used by the frontend code.. - You might need to run
npm rebuild @tensorflow/tfjs-node --build-from-sourceon backend to make selfie verification work!
You may view API routes without deploying at https://backend.ecli.app/openapi for production or https://backend.canary.ecli.app/openapi for canary. Canary version of EcliPanel are offline during non developmet periods..
Here is some small overview about optimisation we have done!
frontend/lib/api-client.ts- We have implemented in memory GET caching with
API_CACHE_TTL = 60s. - Cache hit avoid repeated REST downloads for frequent read operations.
- We have implemented in memory GET caching with
frontend/app/dashboard/servers/[id]/page.tsx- Added
useMemoaround stats history data (chartData) to avoid recomputing on every render.. - Already existing lazy loading of heavy dependencies (
@monaco-editor/react,recharts) is now leveraged more aggressively in tab use patterns, so the app initial bundle reduces first paint cost.
- Added
- Repeated dashboard refresh calls for mostly-read endpoints now hit the JS cache and skip server round trips for the 60s window which improves UX.
- Stats tab no longer recomputes chart data on unrelated state changes, CPU usage and React render churn go down! (YAY)
- Page load intial rendering is faster in cold loads because Monaco and charting engine only download when needed..
Before and after optimization showed performance improvement on most pages avg at 10-20 points per page!
Happy exploring!
Side note: This project took part in Flavortown and in Macondo! I do not get paid for developing this and entire hosting is not profitable enough to cover development costs, if you really liked panel atleast star the repo or go order something from us s https://ecli.app/