Skip to main content

Offline-first static analyser for Python files and notebooks.

Project description

Codexray

PyPI version Python versions License CI

Latest stable package: 0.1.2 (tag v0.1.3)

Codexray CLI demo

codexray "C:\path\to\database.py" --summary --findings-only --min-severity high

Codexray is an offline-first Python static analyser for .py and .ipynb files. It helps teams inspect security risks, code quality problems, and dependency patterns without sending source code outside the local machine.

Why Codexray?

You are about to send a notebook or script to a client and want confidence that nothing risky is hidden inside. Run Codexray first. It checks for risky patterns such as shell execution and dangerous builtins, highlights dependency concerns, and gives you a graph of call and import relationships while keeping all source analysis local to your machine.

What Codexray does

  • Scans Python files and notebooks.
  • Supports project-level scans, full file scans, and targeted line-range checks.
  • Produces a structured JSON report.
  • Builds a dependency graph view with nodes and edges.
  • Flags common security risks such as shell execution and dangerous builtins.

Privacy and security behavior

  • No telemetry.
  • No source upload.
  • Network features are disabled by default.
  • Strict input limits for file size, notebook size, snippet length, and AST depth.

This tool is designed for local analysis workflows where proprietary code must stay on the client system.

Installation

pip install codexray-analyser

Quick start with CLI

Analyse a folder:

codexray ./my_project

Analyse a single file:

codexray ./my_project/app.py

Analyse a code snippet:

codexray --snippet "import os; os.system('whoami')"

Analyse only specific lines from one file:

codexray ./my_project/app.py --start-line 40 --end-line 80

Save output to JSON:

codexray ./my_project --output codexray-report.json

Print only a compact summary:

codexray ./my_project --summary

Print findings only (no graph payload):

codexray ./my_project --findings-only

Show only high and critical findings:

codexray ./my_project --findings-only --min-severity high

Export graph for Graphviz:

codexray ./my_project --graph-dot codexray-graph.dot

Export graph to an offline HTML visual:

codexray ./my_project --graph-html codexray-graph.html

Dependency graph preview

Codexray tree graph example

Sample graph JSON snippet:

{
  "nodes": [
    { "node_id": "file:database.py", "kind": "file", "label": "database.py" },
    { "node_id": "function:database.py:get_conn", "kind": "function", "label": "get_conn" },
    { "node_id": "import:psycopg2.connect", "kind": "import", "label": "psycopg2.connect" }
  ],
  "edges": [
    { "source": "file:database.py", "target": "function:database.py:get_conn", "relation": "contains" },
    { "source": "function:database.py:get_conn", "target": "import:psycopg2.connect", "relation": "calls" }
  ]
}

Python API usage

from codexray import analyse_file_snippet, analyse_path, analyse_snippet

project_result = analyse_path("./my_project")
snippet_result = analyse_snippet("import os\nos.system('whoami')")
range_result = analyse_file_snippet("./my_project/app.py", 20, 50)

Understanding the report

Each result returns:

  • findings: list of detected issues.
  • graph: nodes and edges representing imports, files, and function relationships.
  • metadata: run information such as analysed path and offline mode state.

Example finding shape:

{
  "rule_id": "SEC002",
  "title": "Dangerous builtin eval",
  "severity": "critical",
  "message": "Avoid eval on untrusted content.",
  "file_path": "src/app.py",
  "line": 18,
  "column": 4
}

Reading graph output

Graph output contains:

  • nodes: entities such as files, imports, and functions
  • edges: relationships such as imports, contains, and calls
  • DOT export for Graphviz via --graph-dot
  • offline HTML graph visual via --graph-html

Typical use:

  1. Run Codexray and save JSON output.
  2. Load graph.nodes and graph.edges into your graph viewer.
  3. Track dependency hotspots and risky call paths.

How to use findings to make code changes

Recommended workflow:

  1. Sort findings by severity.
  2. Fix critical and high findings first.
  3. Re-run Codexray after each fix batch.
  4. Keep evidence by committing report diffs in your internal workflow.

Examples:

  • SEC001 shell execution:
    • Replace dynamic shell calls with safe Python APIs.
    • Avoid passing untrusted input to command execution.
  • SEC002 dangerous builtin:
    • Replace eval or exec with safe parsing and strict allow-lists.
  • DEP001 unpinned dependency:
    • Pin versions in requirements files with == where practical.

Troubleshooting

  • File parsing failed:
    • Check syntax errors or unsupported file encoding.
  • exceeds ... bytes/chars:
    • Increase limits in config for controlled internal usage.
  • Empty findings:
    • Confirm the target path includes .py or .ipynb sources.

How to create the demo GIF

Record a short terminal run (10 to 20 seconds) that shows:

  1. codexray --summary
  2. codexray --graph-html
  3. opening the generated graph HTML

Then convert to GIF with ffmpeg and save as assets/demo.gif:

ffmpeg -i demo.mp4 -vf "fps=10,scale=1200:-1:flags=lanczos" -loop 0 assets/demo.gif

Keep file size lightweight so README loads quickly.

Social preview asset

For LinkedIn posts, use this card:

Codexray LinkedIn card

Launch checklist

  • Share a short product post on LinkedIn with the demo GIF.
  • Post in Python and data engineering communities with one practical use case.
  • Add one issue template for feature requests and invite feedback.
  • Ask first users to share real files where summary mode helped.

Local development

python -m pip install -e .
python -m pip install pytest ruff bandit pip-audit build twine
python -m ruff check .
python -m pytest
python -m bandit -q -r src
python -m pip-audit
python -m build
python -m twine check dist/*

Contributing

Read CONTRIBUTING.md before opening a pull request. Security reports should follow SECURITY.md.

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

codexray_analyser-0.1.2.tar.gz (111.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

codexray_analyser-0.1.2-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

File details

Details for the file codexray_analyser-0.1.2.tar.gz.

File metadata

  • Download URL: codexray_analyser-0.1.2.tar.gz
  • Upload date:
  • Size: 111.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for codexray_analyser-0.1.2.tar.gz
Algorithm Hash digest
SHA256 7e0aa865190fb1505151e706c3a4d4fc7a1dfe2e89e7302a3d29e68fc4d34bc1
MD5 bdc81aa8b669a0c651ccd8f5c7515aac
BLAKE2b-256 6125b26593f618ceeb9fd881713e288a115cdd6cbd57442e1cfcf635cafcf252

See more details on using hashes here.

Provenance

The following attestation bundles were made for codexray_analyser-0.1.2.tar.gz:

Publisher: publish.yml on Merlins-Sanctum/codexray-analyser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file codexray_analyser-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for codexray_analyser-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5ff6589e2dc7f752b65f4df8e74b9c4f0cfc307fbd2baf9fe834bfe5e582c906
MD5 6e40abb691c7d93df69b8ce33d085b1e
BLAKE2b-256 6700734746a111c3ca7226c1fb29beb82aefa6bc88788c7d15b38799b97199b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for codexray_analyser-0.1.2-py3-none-any.whl:

Publisher: publish.yml on Merlins-Sanctum/codexray-analyser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page