z3nDash
Расписания и запуски задач, узлы ZennoPoster, HTTP-архивы, просмотр JSON и SQLite — в одном дашборде. Windows, .NET 10.
v1.0.3
z3nDash 1.0.3 turns zpXml into an editor and live debugger, adds a proper general-purpose XML viewer, brings bulk editing to Tasker, and moves the dashboard onto one shared visual system.
zpXml editor
zpXml now opens a ZennoPoster template through the system file dialog and keeps
the real project path, so the runtime can resolve .env, shared code and other
project files.
- The template is kept as the document of record instead of being converted into a detached view model.
- Blocks can be moved on the canvas.
- Branches can be reordered, moved between blocks or extracted into a new block.
- Branch parameters, C# code, captions, flags and switch case keys are editable.
- Success, error and case transitions can be set or cleared by dragging their ports.
- Deleting a branch redirects incoming transitions to the next valid branch.
Ctrl+ZandCtrl+Yprovide undo and redo with a 50-state history.- Leaving with unsaved changes produces a warning.
- Save .xml preserves the original XML declaration and UTF-8/UTF-16 encoding.
- C# branch code is highlighted with CodeMirror.
- Project Input Settings and profile data are available from the template settings modal.
Live XML debugger
A template can now be executed directly from the zpXml graph.
- Start, Step, Run, Pause, Run to branch and Stop control one server-side debug session.
- The session owns its browser and execution context instead of restarting the template for every step.
- The current block and branch are streamed to the page over SSE.
- Project variables, profile values and the execution log update while the session is running.
- The graph follows execution only when the current branch leaves the visible area; it no longer resets a manually positioned canvas on every step.
- Background proxy
CONNECTrefusals are hidden from the log without hiding a real branch failure. - Idle debug sessions release their browser automatically.
- The debug API moved to
/dbg/*, avoiding the existing/zphandler prefix.
XML runtime
The built-in ZennoPoster-compatible runtime covers more real template behavior.
- Added
Switch,Alertand captcha branch execution. - Added Hunt captcha solving, including canvas capture and slider interaction.
- Keyboard emulation now types the requested keys and keeps ZennoPoster macros out of the key-token parser.
- Mouse emulation distinguishes click, press and release instead of treating every action as a click.
- Navigation no longer fails when a redirect has already completed it.
- Project Input Settings seed runtime variables; an explicitly empty setting now clears the previous/default value.
- Generated profiles carry the browser's own user agent.
- The profile panel shows which generated properties the current browser runtime can and cannot apply.
- Empty screenshots and failed Hunt attempts now report one useful error instead of sending empty data or dumping repeated stacks.
XML viewer
The old XML converter has been replaced with a general-purpose XML viewer.
- Paste XML, drop a file or open one through the system dialog.
- UTF-8 and UTF-16 files are decoded from their BOM, including ZennoPoster templates.
- Format the source and inspect it as a collapsible tree.
- Search tags, attributes and text.
- Expand to a selected depth or expand/collapse the entire document.
- Virtual scrolling keeps large XML documents usable.
- The resizable source/tree split is restored on the next visit.
- XML and zpXml now have their own dock icons; XML opens with
Alt+9.
Tasker
Ctrl+clickselects or removes individual tasks from the selection.Shift+clickselects a range.- Changes made on the Settings and Schedule tabs can be saved to every selected task.
- Only fields changed in the form are copied; task names remain individual.
- The
Deletekey removes the selected task or selection after confirmation.
Config and dashboard UI
- Config is split into eight sections: Overview, Database, Logs & Server, Browsers API, OmniRoute, Services, Security and Maintenance.
- The side rail replaces the previous single long Config page and remembers the last open section.
- Rebuilding the Config page no longer loses unsaved runtime settings.
- Tasker, ZP7, HAR, SQLite, Treasury, Clips, JSON, System, ZB, dllGraph, zpXml and the overlay pages now use the shared design-token scale.
- Added the Graphite theme: monochrome chrome with color reserved for state.
- Theme selection now controls both typeface and density.
- Bundled JetBrains Mono now includes Regular, Medium and Bold instead of synthesizing missing weights.
- The Nerd Font subset dropped from 7.26 MB to 202 KB.
- The obsolete
report.html,terminal.html,zp_visualizer.html,base.cssandcomponents.cssfiles were removed.
Clipboard converter fixes
FindElementByIdandFindElementByNameselectors are converted along with the existing selector forms.- Generated
HeGetcalls now use the browser instance, matchingHeClickandHeSet.
Downloads
z3nDash_Setup.exe— installerz3nDash_1.0.3_portable.zip— portable self-contained build; no .NET installation required
v1.0.1
Node traffic is now authorized, the ZP7 task card was rebuilt around icons, and tasks got a hard runtime limit.
Node authorization
The z3n7 node server requires a token on every route, and z3nDash speaks it.
- The registration string printed by
zpServer.zpnow carries atokenfield. It is stored next to the host inzp_nodesand attached asAuthorization: Bearerto every call — state, commands, logs, traffic and input settings. - The token never reaches the browser:
/zp/nodesreturns only the probe result. - A node that answers
401is listed as Unauthorized instead of a vague "Unavailable", with the action that clears it. - A registration string without a token still parses, so a node running an older z3n7 build keeps working.
Node versions
- The NODES list shows the
z3n7and ZennoPoster versions read from the node itself. - The same data is proxied at
GET /zp/version?machine=.... - An empty version means the node did not answer or runs a build without the route — the node itself is still treated as working.
ZP7 task card
- The action row is icons with tooltips instead of ten text buttons: Start,
Pause (yellow — that is what
stopactually does), Interrupt (red cross), Input settings, Tries, Clear ✓ / ✗, Execution, Scheduler. - Tries collapsed into one button and a modal: a Set/Add toggle, a value field
and
+1/+10/+100that edit the field. The command is sent by Apply only, and the modal stays open with the current count refreshed. BadEnd on Interruptis a toggle instead of a checkbox.- The Tags panel is gone from the card; tags remain a filter in the task list.
Per-task runtime limit
- New
timeout_secondscolumn (0— no limit), with a field in task settings and a row on the Execution tab. - The guard fires once at the limit: an external process is killed together with its tree, an xml run has its token cancelled.
- A process killed by the limit is recorded as a failure rather than by its exit code, which is arbitrary for a killed tree.
Scheduler executors
- The xml executor reserves an account, but only when the template really uses
one (
acc0declared in<Variables>and mentioned elsewhere). The account is released infinallyon every exit — idle on success, fail otherwise. - With no free account the run counters stay untouched instead of scoring a run that never happened; a missing account table is reported as a configuration error.
- The
internalandcsx-internalexecutors are gone. Their two tasks are now plain endpoints behind a Maintenance card on the Config page —POST /config/client-bundleandPOST /config/update-templates, the latter taking its output folder from the request instead of a hardcoded path. - Rows left in the database with those executors are reported explicitly instead of silently falling through to the python branch.
Packaging
- The installer uses
x64compatibleinstead of the deprecated barex64, so it also covers ARM64 Windows running x64 under emulation. ISCC compiles with no warnings. - Satellite resource languages are no longer shipped: thirteen folders of translated framework messages that nothing ever read. Portable drops from 342.4 MB to 327.0 MB on disk and from 136.3 MB to 131.8 MB zipped.
Fixes
- Config page: hint paragraphs no longer sit under a negative top margin.
Upgrading
- Update z3n7 on every node to a build with authorization and run
zpServer.zpagain. - Re-add each node in ZP7 → NODES with the fresh registration string. Records saved by earlier versions carry no token and will show as Unauthorized.
- Treat the registration string as a password — it grants full control of the node.
- The
tokenandtimeout_secondscolumns are added to an existing database on startup; no manual migration. - If you update a portable folder in place, delete the leftover empty language
directories (
de,fr,ru, …) — MSBuild removes the files but not the directories.
Downloads
z3nDash_Setup.exe— installerz3nDash_1.0.1_portable.zip— portable build, self-contained, no .NET required
v1.0.0
z3nDash 1.0.0
First stable release under the new name.
z3nDash plays ZennoPoster templates without ZennoPoster. It runs scheduled tasks —
Python, Node, exe, csx, xml — and shows logs and HTTP traffic from every machine in one
place. .NET 10, WinForms, WebView2; the UI and the local API come off a built-in HTTP
server that listens on localhost.
Six months ago this was a pile of scripts around a one-page dashboard. This is the first build worth calling stable, and it changes name along with it.
Built-in ZennoPoster runtime
Not an export to code, and not a conversion. The player takes the same .xml, walks its
branch graph and executes it. OwnCode is compiled by Roslyn in-process, project and
instance are backed by a compatibility layer, and the browser comes up through
Patchright — real Chrome with a persistent profile, proxied through a SOCKS5-to-HTTP
relay. The z3n7 core, browser operations and cookie handling were ported over, and a
single template runs multi-threaded with per-thread profiles and selectors.
Eight branch types are implemented:
OwnCode/CSharp · HTMLElement (RiseEvent, SetAttribute, GetAttribute) ·
WebBrowser/CMD_NAVIGATE · Profile/Update · Logic/Pause ·
ImageProcessing/WaterMark
Anything else throws branch not implemented in the player. In practice: a template whose logic lives in C#, with blocks used for clicking, typing and navigating, runs. A template assembled out of blocks does not.
XmlInspect <template.xml> --compile
compiles the shared code and every reachable OwnCode branch and reports what is
missing — without running it.
Task scheduler
On-demand, daily, weekly, monthly and interval schedules; skip, parallel and
kill_restart overlap policies; live output; payloads with a schema and values.
| Executor | Runs |
|---|---|
python node ts-node npm |
scripts of the matching runtimes |
exe cmd bat bash ps1 |
executables and shell scripts |
csx |
a C# script |
csx-internal |
a C# script with access to z3nDash internals |
xml |
a ZennoPoster template, played by the built-in runtime |
internal |
a built-in z3nDash task |
An xml task picks its browser on the task card and runs headless by default; turn the
window on when you need to see where a template stopped. Task settings and schedules are
edited the way ZennoPoster does it, and files and folders are picked through the system
dialog.
ZennoPoster nodes (ZP7)
Task state and control go directly over HTTP, with no database in between. The task list is grouped by machine and then by project, both levels collapsible. Task settings are rendered as real fields based on the InputSettings types — tabs, dropdowns, checkboxes, multi-select — and can be flipped to raw JSON; a task's payload is copied to the scheduler in one click.
Logs and traffic from every node
allLogs (Alt+4) collects history from each registered machine. traffic (Alt+5)
shows HTTP traffic from the nodes and from z3nDash itself.
| Written to | trafficLog.jsonl next to the logs |
| Rotation | at 50 MB, five most recent files kept |
| Read | from the end, so archive size does not affect open time |
| Scan ceiling | 64 MB, after which the answer is marked truncated |
Request details carry headers, cookies and bodies, a built-in replay player, and
ready-to-paste code: HttpClient, ZP7, Hybrid, Python, TypeScript, cURL — plus curl
import in the other direction. An unreachable node no longer holds up the list: sources
appear as they answer.
Tools
HAR analyzer with request replay, JSON viewer and analyzer, text transformations, a clipboard snippet library, Windows state snapshots, a SQLite file viewer, a C# code relationship graph, a Web3 asset summary, bundled documentation and a terminal.
Storage and AI
PostgreSQL via a connection string or SQLite via a file path; the tables each active module needs are created automatically. AI features go through OmniRoute.
Security
[!IMPORTANT] The embedded server binds to
localhostonly. That is deliberate rather than cautious: its routes have no authentication and allow starting processes through the scheduler, opening a terminal, and readingappsettings.secrets.json— which holds the database connection string. A port exposed to the network would mean code execution on the machine.
One side effect is useful: netsh http add urlacl and running as administrator are no
longer required.
If you need the dashboard from another machine, put an authenticated reverse proxy on the same host or use an SSH tunnel — do not forward the port.
Upgrading
[!WARNING] The server no longer listens on external interfaces. Opening the dashboard by IP from another machine will not work.
| Removed | Replacement |
|---|---|
| The HTTP page | Traffic moved into a modal on the ZP7 page — the traffic button or Alt+5. It reads from the nodes and from a local file instead of a push store. |
HTTP log intake: /log, /logs, /logs/stream, /stats, /clear |
Gone entirely, along with the Logs panel in the Tasker task card. Task stdout remains on the Output tab; node logs are read by allLogs. |
logHost, trafficHost, replayPort in the config |
The replay port is always the dashboard port plus one. |
Nodes need a z3n7.dll build that supports tail
GET /traffic on the node takes a tail parameter, and the traffic window relies on it
to read the end of the file. With an older build the node returns the first records
instead of the last ones — that is the symptom to look for.
Requirements
| OS | Windows 10 or 11, x64 |
| Runtime | Microsoft Edge WebView2 Runtime |
| Database | PostgreSQL, or a SQLite file |
| Build from source | .NET 10 SDK — not needed otherwise |
ZennoPoster, ZennoBrowser and OmniRoute are needed only by the features that integrate with them.
Install
Run the installer, or unpack the portable archive anywhere and start z3nDash.exe —
no installation and no administrator rights required.
On first start, with no working configuration, the Config page opens: pick the database,
enter the connection string or the file path, and adjust the port and folders if the
defaults do not suit you. The dashboard listens on 33333 by default and takes the next
free port if it is busy. The Tasker opens next.
[!NOTE] Startup failures are written to
crash.lognext to the executable.