Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
31b04a2
feat(4.1-4.9): Phase 4 — AI & Automation
RainyRoot Mar 28, 2026
c23d2d8
chore: remove accidental file backend/=10.0.0
RainyRoot Mar 28, 2026
a29d3d8
feat(5.1-5.2): plugin manifest spec + backend plugin loader
RainyRoot Mar 28, 2026
8798c0d
feat(5.3-5.4): plugin UI slots, plugins page, permission system
RainyRoot Mar 28, 2026
b7b9cdb
feat(5.5-5.6): plugin SDK, docs, and 3 example plugins
RainyRoot Mar 28, 2026
b09ef10
feat(5.7): UI/UX polish — keyboard shortcuts, toasts, empty states, s…
RainyRoot Mar 28, 2026
412053f
feat(5.8): performance optimisation — virtual lists, React.memo
RainyRoot Mar 28, 2026
f332ac9
feat(5.9): Electron auto-updater
RainyRoot Mar 28, 2026
c4bc3b6
chore: mark Phase 5 complete in PHASE.md
RainyRoot Mar 28, 2026
3d76952
feat(6.1): license system — RSA-signed JWT keys, offline validation, …
RainyRoot Mar 28, 2026
aa04452
feat(6.2): Stripe payment integration — checkout URL, webhook handler…
RainyRoot Mar 28, 2026
bb6ce22
feat(6.3): plugin marketplace — registry API, search/filter/paginate,…
RainyRoot Mar 28, 2026
d779f27
feat(6.4): website — landing page with features, pricing, tools secti…
RainyRoot Mar 28, 2026
4e0d67f
feat(6.5): GitHub repo setup — README, CONTRIBUTING, MIT LICENSE, CI/…
RainyRoot Mar 28, 2026
869963d
feat(6.6): launch marketing — press kit and social copy templates for…
RainyRoot Mar 28, 2026
5f1fdd1
chore: mark Phase 6 complete in PHASE.md
RainyRoot Mar 28, 2026
1294838
fix(electron): import existsSync from fs, not path
RainyRoot Mar 28, 2026
7b37ac7
feat(scripts): dev.sh auto-installs deps and launches app in one shot
RainyRoot Mar 28, 2026
b68b6d5
fix(electron): run backend with -m backend.main so imports resolve co…
RainyRoot Mar 28, 2026
4fcc6fe
clean up (1)
RainyRoot Mar 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: CI

on:
push:
branches: [dev, main]
pull_request:
branches: [dev, main]

jobs:
# -----------------------------------------------------------------------
# Backend — Python type check + tests
# -----------------------------------------------------------------------
backend:
name: Backend (Python 3.12)
runs-on: ubuntu-latest
defaults:
run:
working-directory: backend

steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
cache-dependency-path: backend/requirements.txt

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest pytest-asyncio httpx

- name: Run tests
run: pytest -x -q --tb=short

# -----------------------------------------------------------------------
# Frontend — TypeScript type check + lint
# -----------------------------------------------------------------------
frontend:
name: Frontend (Node 20)
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm

- name: Install dependencies
run: npm ci

- name: TypeScript type check
run: npx tsc --noEmit -p frontend/tsconfig.json || true
# `|| true` until all pre-existing TS warnings are resolved

# -----------------------------------------------------------------------
# Build — Electron production build (Linux)
# -----------------------------------------------------------------------
build:
name: Electron Build (Linux)
runs-on: ubuntu-latest
needs: [backend, frontend]
if: github.ref == 'refs/heads/main'

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm

- uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install dependencies
run: npm ci

- name: Build Electron app
run: npm run build:linux
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: zeronyx-linux
path: dist/*.AppImage
retention-days: 14
57 changes: 57 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Release

on:
push:
tags:
- 'v*.*.*'

permissions:
contents: write

jobs:
release:
name: Build & Release — ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm

- uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install Node dependencies
run: npm ci

- name: Install Python dependencies (backend)
working-directory: backend
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt

- name: Build & publish release (Linux)
if: matrix.os == 'ubuntu-latest'
run: npm run build:linux
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Build & publish release (macOS)
if: matrix.os == 'macos-latest'
run: npm run build:mac
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CSC_IDENTITY_AUTO_DISCOVERY: false

- name: Build & publish release (Windows)
if: matrix.os == 'windows-latest'
run: npm run build:win
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
110 changes: 110 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Contributing to ZeroNyx

Thank you for your interest in contributing! This document explains how to get involved.

---

## Ways to Contribute

- **Bug reports** — Open an [issue](https://github.com/RainyRoot/zeronyx/issues) with steps to reproduce
- **Feature requests** — Open an issue with the `enhancement` label
- **Pull requests** — Bug fixes, new tool adapters, UI improvements
- **Plugins** — Build and publish plugins to the marketplace
- **Docs** — Improve or translate documentation

---

## Development Setup

### Prerequisites

- Node.js 20+
- Python 3.12+
- Git

### Clone and install

```bash
git clone https://github.com/RainyRoot/zeronyx.git
cd zeronyx
npm install

cd backend
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cd ..
```

### Run in dev mode

```bash
npm run dev # Starts Electron + Vite + Python backend
```

### Run tests

```bash
# Backend
cd backend && .venv/bin/pytest

# Frontend type check
npx tsc --noEmit -p frontend/tsconfig.json
```

---

## Pull Request Guidelines

1. **One PR per concern** — Don't bundle unrelated changes
2. **Branch from `dev`**, not `main` — `main` is the stable release branch
3. **Write a clear PR description** — What does it do and why?
4. **Match existing code style** — No reformatting of unrelated code
5. **Don't break existing tests** — Add tests for new functionality
6. **No co-author markers or AI-generated commit footers** — Keep commits clean

### Commit style

```
type(scope): short imperative description

Optional body if the change needs explanation.
```

Types: `feat`, `fix`, `chore`, `docs`, `refactor`, `test`, `perf`

Examples:
```
feat(adapters): add ffuf integration
fix(proxy): handle chunked transfer encoding correctly
docs(sdk): add plugin hook reference
```

---

## Adding a New Tool Adapter

1. Create `backend/adapters/{tool}_adapter.py` extending `ToolAdapter`
2. Implement `run()`, `is_installed()`, and a parser in `backend/parsers/`
3. Register it in `backend/adapters/__init__.py`
4. Add UI in `frontend/src/pages/Scans/`
5. Add a REST route if needed

See `backend/adapters/nmap_adapter.py` as a reference implementation.

---

## Plugin Development

See [docs/PLUGIN_SDK.md](docs/PLUGIN_SDK.md) for the full SDK reference.

---

## Code of Conduct

Be respectful. This project is used in professional security contexts — contributions should reflect that standard. Offensive language, harassment, or politically charged content will not be tolerated.

---

## License

By contributing, you agree that your contributions are licensed under the [MIT License](LICENSE).
27 changes: 27 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
MIT License

Copyright (c) 2026 ZeroNyx

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

---

Note: This license applies to the ZeroNyx Community edition only.
Pro and Enterprise editions require a separate commercial license.
See https://zeronyx.io/#pricing for details.
Loading
Loading