Press the button, then choose Save as PDF as the printer. Turn on “Background graphics” so the screens print in colour.
ZNetLab

Accessing your server locally

From nothing installed, to signed in as an administrator on your own machine. Ten steps, about ten minutes.

For Windows 11 Mode Test mode — nothing is emulated Needs Node.js 16 or newer
Half of ZNetLab needs none of this. Every lesson and the whole browser simulator are free and work with no server and no account — open znetlab\index.html and press Learn or Simulator. This guide is for the other half: Real labs, which boots vendor images on a server, and so needs one running.
What test mode is. Signing in, accounts, image upload, the image registry and plan enforcement are real — they write to your disk and they refuse you when they should. Emulation is stood in for, so no router actually boots. It exists so you can see the whole product working before you build a Linux lab server. ZNetLab says so in a bar you cannot dismiss.
About the pictures in this guide. They are drawings of each screen, made from the source, not photographs of a running machine. Layout, wording and colours match what you will see; exact pixel spacing may differ slightly.
1

Install Node.js

The server is a Node program. Nothing else is needed — it has no dependencies.

Open PowerShell from the Start menu and run:

winget install OpenJS.NodeJS.LTS
Then close that PowerShell window and open a new one. PowerShell reads the PATH once, when it starts. Until you open a fresh window it will keep insisting Node is not installed.

Check it in the new window:

node --version
v20.11.1   ← anything v16 or higher is fine
2

Start the server

One command. Leave the window open — that window is the server.
cd C:\Users\panka\Workspace\Network-App\znetlab\server
.\run-test-server.ps1 -LocalOnly
Do not double-click the file. Windows never runs a .ps1 on a double-click — it opens it in Notepad. That is a deliberate safety default, not a fault, and it is the commonest way to get stuck on this step. The command has to be typed into a PowerShell window, as above. Quickest way to get one already pointing at the right folder: open the server folder in File Explorer, click the address bar, type powershell and press Enter. Or right-click the file → Run with PowerShell.
-LocalOnly binds the server to 127.0.0.1: reachable from this machine only, and Windows Firewall never prompts. Drop the flag later when you want other machines on your network to reach it — see step 10.
If PowerShell refuses to run the script — “running scripts is disabled on this system” — use this instead, which allows it for that one run only:
powershell -ExecutionPolicy Bypass -File .\run-test-server.ps1 -LocalOnly
Windows PowerShell ==> Checking for Node.js + node v20.11.1 + work directory C:\Users\panka\AppData\Local\ZNetLab + image directory C:\Users\panka\AppData\Local\ZNetLab\images ==> First run — choose your administrator login These are the credentials you will type into ZNetLab. Press Enter on the username to accept "admin". Username [admin]: + Binding 127.0.0.1 — reachable from this machine only
The server checks Node, creates its directories, then asks you to choose a login.
3

Choose your username and password

You pick them, so you still have them tomorrow.

Press Enter to accept admin as the username, or type another. Then type a password twice. It is not shown as you type — that is deliberate, so it does not end up in your PowerShell history.

Username [admin]: admin Password (at least 8 characters): Type it again: + Your login will be: admin ==> Starting ZNetLab in TEST MODE on port 8080 Leave this window open. Ctrl+C stops the server.
Nothing appears while you type the password. That is correct — keep typing and press Enter.
The password must be at least 8 characters, not only digits, and not start with password, admin, ZNetLab, cisco or letmein. If it is rejected the prompt simply asks again.
4

Read the sign-in box

It prints every time the server starts, not only the first.
znetlab server · listening on 127.0.0.1:8080 images C:\Users\panka\AppData\Local\ZNetLab\images work C:\Users\panka\AppData\Local\ZNetLab accounts C:\Users\panka\AppData\Local\ZNetLab\users.json consoles 23000-23999 platforms 124 known ┌───────────────────────────────────────────────────────────┐ │ SIGN IN │ │ │ │ address │ username │ password └───────────────────────────────────────────────────────────┘ ws://localhost:8080 admin the one you set │ │ │
Everything you need to sign in. Note the address — you will type it in a moment.

Under it, a box you cannot miss says the same thing this guide does: nothing is emulated, no image runs, no frame is sent, and captured packets are generated rather than captured.

Leave this window open. Closing it stops the server. To stop it deliberately, press Ctrl+C in this window.
5

Open ZNetLab

One site, two halves. Only the right-hand one needs the server you just started.

In File Explorer, double-click:

C:\Users\panka\Workspace\Network-App\znetlab\index.html
SectionNeeds
LearnNothing. Lessons, articles, blogs and forums, signed out.
SimulatorNothing. The whole browser simulator and every guided lab.
Real labsThe server from step 2, and an account. This is where you are going.
The site itself does not need hosting. There is no build and no web server to set up before any of this — the pages open straight off the disk. The only server in this guide is the lab server from step 2, and only Real labs talks to it.

Press Real labs in the header. The sign-in screen appears over a blurred workspace.

ZNetLab Home Learn Simulator Real labs Guide Plans ZNetLab Sign in to the lab server that holds your images. SERVER ADDRESS ws://localhost:8080 USERNAME admin PASSWORD •••••••••• Sign in No server yet? The simulator runs in your browser. Open the simulator →
The sign-in screen. Type the three values from the box in step 4.
If the page opens but nothing loads properly, serve the folder over HTTP instead of opening the file directly. Some browsers restrict what a file:// page may do:
cd C:\Users\panka\Workspace\Network-App\znetlab
npx serve .
Then open the http://localhost:… address it prints.
6

Sign in

Three values, all from the box the server printed.
FieldWhat to type
Server addressws://localhost:8080
Usernameadmin, or whatever you chose in step 3
Passwordthe one you typed in step 3
It is ws://, not http://. ZNetLab talks over a WebSocket. If you paste an http:// address it is converted for you, so either works — but ws:// is what the server prints.
7

You are in

The header tells you three things: who you are, what you are connected to, and what mode.
ZNetLab Dashboard Lab My labs Images Admin portal Account Server DESKTOP-PANKA AD admin ADMINISTRATOR TEST MODE Nothing is emulated: no image runs, no frame is sent, every captured packet is generated. DEVICES BUILT IN Virtual PC no image · 1p LAN Switch no image · 4p NAT Cloud no image · 1p Select Link Delete Start lab Stop lab Console Capture Save Open Examples Drag a device from the left, or press Examples
Signed in as an administrator. The lab’s own tabs now live in the shared ZNetLab header — one bar for the whole product. Admin portal appears only for an admin.
Look atIt tells you
Green dot + hostnameConnected to the server.
Amber TEST MODE barNothing is emulated. It cannot be dismissed, by design.
Admin portal tabYou are an administrator. It appears only then.
Chip, top rightYour name and plan. Click for account, portal, sign out.
8

Open the Admin portal

Six sections. Everything about this server in one place.
Admin portal Full access to this server: accounts, images, everything running, and a record of who did what. Overview Accounts 1 Running Images Activity Host 1 ACCOUNTS 1 admin · 1 signed in 0 DEVICES RUNNING 0 links 0 IMAGES ON DISK 0 recognised · — 4.2 / 16 GB MEMORY 0.42 LOAD AVERAGE 8 CPUs Create an account USERNAME DISPLAY NAME EMAIL PASSWORD ROLE PLAN trainee1 Ravi Sharma ravi@example.com User — builds and runs labs Free Create account
The portal’s Overview. Creating an account is right here, because it is the thing an administrator does most.
SectionWhat is in it
OverviewCounts, host health, recent activity, and the create-account form.
AccountsChange plan, promote to admin, reset password, disable, sign out everywhere, stop their lab, delete.
RunningEvery device on the server grouped by owner, with a stop button per owner.
ImagesWhat is actually on the disk, recognised or not, with sizes.
ActivityWho did what and when. Filter by action, or failures only.
HostCPUs, memory, root, KVM, emulators, and cleanup of orphaned interfaces.
The plan on an account is not decoration. ZNetLab takes no payments; it records which plan an account is on and the server enforces it. Give trainee1 the Free plan and a twelve-device lab is refused before anything starts.
9

Prove it works

Two minutes. No images needed.

Go to Lab → press Examples → open Two PCs on a wire → press Start lab. Then open each console and type:

on PC1
ip 10.1.1.10/24

on PC2
ip 10.1.1.20/24

back on PC1
ping 10.1.1.20
In test mode the reply says it was decided from the topology you drew, not from a network — because that is the truth. A ping to an address nothing owns still fails; test mode stands in for emulation, it does not pretend. On a real Linux server this is a genuine kernel ping between two network namespaces.

Then select the link, press Capture, ping again, and press Export .pcap. That file opens in Wireshark.

To watch a limit being enforced rather than merely displayed, put twelve devices on the canvas while signed in on the Free plan and press Start lab:

Devices per lab on the Free plan is 8; this lab has 12. Pro allows 30.

That refusal comes from the server, not the page. Greying a button out is a courtesy; this is the limit.

10

Reach it from another machine

Optional. Only when you want somebody else on your network to use it.

Stop the server with Ctrl+C and start it again without -LocalOnly:

.\run-test-server.ps1

It now binds every interface, and the SIGN IN box prints one address per network card rather than just localhost:

  │  address     ws://localhost:8080
  │              ws://192.168.1.24:8080   ← what the other machine types
Windows will ask about the firewall the first time. Allow it for Private networks only. If you press Cancel, nothing outside this machine can reach the server — re-run with -LocalOnly and the prompt never appears again.
The other machine needs the ZNetLab folder too, or a copy served over HTTP. Only the Real labs half talks to your server; Learn and the Simulator run entirely in that machine's own browser.

When it does not work

What you seeWhat to do
“node is not recognised” You did not open a new terminal after installing Node. Close PowerShell, open it again.
The script opens in Notepad You double-clicked it. Windows never runs a .ps1 that way. Type it into a PowerShell window instead, or right-click the file → Run with PowerShell.
“running scripts is disabled” Use powershell -ExecutionPolicy Bypass -File .\run-test-server.ps1 -LocalOnly
“No answer from ws://localhost:8080” The server window is not running, or it is on another port. Check the PowerShell window is still open and showing the SIGN IN box.
“That username and password do not match” After 5 wrong tries it slows down, doubling each time to 30 seconds. It is per-username, not a lockout — wait and try again.
Password lost Stop the server, then .\run-test-server.ps1 -ResetAdmin. It asks for a new one and replaces only the administrator.
No Admin portal tab That account is not an administrator, or you are not signed in. The chip at the top right shows which.
A firewall prompt appears Allow it for Private networks only — or press Cancel and re-run with -LocalOnly, which never prompts.
Port 8080 already in use Start on another one: .\run-test-server.ps1 -LocalOnly -Port 8090, and sign in at ws://localhost:8090.
Everything looks blank Serve over HTTP instead of file://: npx serve . from the znetlab folder.
Learn or Simulator asks you to sign in They never do. If a page seems to, you are on Real labs — press Simulator in the header.

Quick reference

Start it

cd C:\Users\panka\Workspace\
   Network-App\znetlab\server
.\run-test-server.ps1 -LocalOnly

Reset the password

.\run-test-server.ps1 -ResetAdmin

Open the site

znetlab\index.html

Sign in with

address   ws://localhost:8080
username  admin
password  the one you chose

Where things live

%LOCALAPPDATA%\ZNetLab\
  users.json      accounts
  activity.json   the trail
  images\         your images
  labs\           saved labs
Stop the server with Ctrl+C in its PowerShell window. Closing the window also stops it. Accounts survive a restart, and no new password is printed.

ZNetLab · Accessing your server locally · Test mode does not emulate anything. For real labs, see docs/SETUP-WINDOWS.md, which covers WSL2.