Skip to content

Commit 961b95c

Browse files
authored
Release v0.30.0 (#1338)
* Release v0.30.0 * fix(scripts): satisfy ameba lint, formatter, and typos check - Use max_of / compact_map per ameba SimilarSyntax rule - Apply crystal tool format alignment to constants - Rephrase changelog entry to avoid LEAFS spelling trigger * feat(ai): add latest provider models and bump doc recommendations Token limits: - OpenAI: gpt-5.4, gpt-5.5 (and -mini / -codex-max variants) - Anthropic: claude-sonnet-4-6, claude-opus-4-6, claude-opus-4-7 - xAI: grok-4.20, grok-4.20-fast - Azure: gpt-5.4 / gpt-5.5 mirrored - Google: gemini-2.5-flash, gemini-3-pro, gemini-3-flash - Ollama: qwen3, qwen3-coder, deepseek-v3, deepseek-r1 Docs / examples now recommend gpt-5.5 (was gpt-5.4) and claude-opus-4-7 in OpenRouter examples. * feat(ai): add deepseek-v4 to ollama token limits * feat(ai): add grok-4.30 to xai token limits and bump xai docs * fix(ai): correct model IDs verified against provider docs OpenAI (developers.openai.com): - Drop fabricated gpt-5.4-codex-max, gpt-5.5-mini, gpt-5.5-codex-max - Add gpt-5-pro, gpt-5-nano, gpt-5-codex, gpt-5.4-pro, gpt-5.4-nano, gpt-5.5-pro, gpt-5.1-codex, gpt-5.1-codex-mini, gpt-5.2-codex, gpt-5.3-codex xAI (docs.x.ai): - Drop grok-4.30 (real model is grok-4.3) and unsubstantiated *-fast variants - Add grok-4.3 and grok-4.1-fast (the documented fast variant) - Bump xai docs from grok-4.30 to grok-4.3 Google (ai.google.dev): - gemini-3-pro-preview is deprecated; alias to gemini-3.1-pro-preview - Use documented -preview suffix for gemini-3-flash-preview - Add gemini-3.1-flash-lite-preview and gemini-2.5-flash-lite Ollama (ollama.com/library): - deepseek-v4 ships as deepseek-v4-pro and deepseek-v4-flash (1M ctx) - Add deepseek-v3.1, deepseek-v3.2 variants * feat(banner): refresh ASCII banner with NOIR wordmark and side info Replace the small block-letter banner with a wider NOIR wordmark and move the version + tagline to the right of the art. Drop the duplicate tagline from base_help so --help no longer prints "Hunt every Endpoint..." twice in a row.
1 parent 1b8e5b5 commit 961b95c

32 files changed

Lines changed: 260 additions & 112 deletions

File tree

CHANGELOG.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,58 @@
22

33
All notable changes to [Noir](https://github.com/owasp-noir/noir) will be documented in this file.
44

5+
## v0.30.0
6+
7+
### Added
8+
- Tree-sitter foundation: vendored grammars for Java, Kotlin, JavaScript, and Python
9+
- Tree-sitter Query API for declarative detectors
10+
- ImportGraph module: unified Java/Kotlin cross-file resolution, relative-import support, Python half
11+
- 30+ new framework analyzers:
12+
- Java/Kotlin: JAX-RS, Quarkus, Dropwizard, Micronaut, Javalin, Spark Java, http4k, Kotlin Gateway
13+
- Node.js/JS/TS: Next.js, Hapi, Astro, SvelteKit, Remix, Fresh, Elysia, AdonisJS
14+
- Python: Bottle, Falcon, Starlette, aiohttp, Pyramid, Litestar
15+
- Ruby: Roda, Grape
16+
- PHP: Slim, Yii2, CodeIgniter
17+
- Go: Iris, Hertz
18+
- Rust: Poem
19+
- C++: Crow, Drogon
20+
- Dart: Dart Frog
21+
- MCP endpoint tagger
22+
- `--exclude-path` flag to filter files by glob
23+
- Crystal 1.20 support
24+
- RPM, DEB, APK, and AUR package release workflows
25+
- Shared engine base classes for PHP, Ruby, Rust, Elixir, Swift, Crystal, Scala, JavaScript, Python, and Go analyzers
26+
- Analyzer architecture documentation
27+
28+
### Changed
29+
- Migrated Spring, Armeria, Ktor, and Flask analyzers to tree-sitter; retired legacy Java/Kotlin miniparser/minilexer
30+
- Migrated Python and Go route extraction to tree-sitter
31+
- Switched builder to official `crystallang/crystal` (Alpine) image
32+
- Consolidated duplicate `Endpoint` initializers
33+
- AI provider docs and Ollama model token map updates (gemma3/4, llama4, phi4)
34+
35+
### Performance
36+
- Cached file contents in `CodeLocator` for analyzer reuse
37+
- Parse-once Spring/Kotlin extractors with shared DTO sibling cache
38+
- Skip already-matched detectors in the per-file detect loop
39+
- Pruned ignored directories at walk time and deduped media stats
40+
- Passive scan early-out per matcher
41+
- Migrated unified_ai, example, fasthttp, phoenix, and Python analyzers to `file_map`
42+
- Skip non-`.rb` files in Sinatra analyzer
43+
44+
### Fixed
45+
- Bounded recursion depth in tree-walker extractors (security)
46+
- Added boundary check to `ImportGraph.resolve_relative_import` (security)
47+
- Express config-array mount pattern resolution
48+
- JS miniparser: reject bare-identifier routes from `Promise.all`, accept wildcard/bare param routes
49+
- Go miniparser: accept grouped routes without leading slash, guarantee separator on single-match group prefix
50+
- OAS2 analyzer: merged duplicate form/formData branches and corrected `form``json` param-type mapping
51+
- Non-deterministic endpoint dedup in Nitro and Nuxt.js analyzers
52+
- Elevated regex compile failures from debug to warn in passive scan
53+
- GraphQL analyzer now uses `Log.debug` instead of `STDERR.puts`
54+
- Warn when falling back to default `max_tokens` for unknown models
55+
- Corrected `SKIPPED_LEAVES` constant spelling in Fresh analyzer
56+
557
## v0.29.1
658

759
### Added

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ RUN apk add --no-cache yaml-dev zstd-dev && \
1111
##= RUNNER =##
1212
FROM debian:13-slim
1313
LABEL org.opencontainers.image.title="OWASP Noir"
14-
LABEL org.opencontainers.image.version="0.29.1"
14+
LABEL org.opencontainers.image.version="0.30.0"
1515
LABEL org.opencontainers.image.description="Hunt every Endpoint in your code, expose Shadow APIs, map the Attack Surface."
1616
LABEL org.opencontainers.image.authors="Noir Team (@hahwul, @ksg97031)"
1717
LABEL org.opencontainers.image.source=https://github.com/owasp-noir/noir

aur/PKGBUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Maintainer: HAHWUL <hahwul@gmail.com>
22
pkgname=noir
3-
pkgver=0.29.1
3+
pkgver=0.30.0
44
pkgrel=1
55
pkgdesc="Attack surface detector that identifies endpoints by static analysis."
66
arch=('x86_64')

docs/content/_index.ko.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ template = "landing"
77
<div class="hero-split">
88
<div class="hero-text">
99
<div class="hero-eyebrow">
10-
<span class="hero-badge">v0.29.1</span>
10+
<span class="hero-badge">v0.30.0</span>
1111
<span class="hero-badge hero-badge-owasp">OWASP Project</span>
1212
</div>
1313
<h1 class="hero-title">

docs/content/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ template = "landing"
77
<div class="hero-split">
88
<div class="hero-text">
99
<div class="hero-eyebrow">
10-
<span class="hero-badge">v0.29.1</span>
10+
<span class="hero-badge">v0.30.0</span>
1111
<span class="hero-badge hero-badge-owasp">OWASP Project</span>
1212
</div>
1313
<h1 class="hero-title">

docs/content/development/how_to_release/index.ko.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ sort_by = "weight"
4545

4646
```bash
4747
brew bump-formula-pr --strict --version <VERSION> noir
48-
# 예: brew bump-formula-pr --strict --version 0.29.1 noir
48+
# 예: brew bump-formula-pr --strict --version 0.30.0 noir
4949
```
5050

5151
3. **스타일 확인** (선택사항):

docs/content/development/how_to_release/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ Submit a PR to `homebrew-core`:
4545

4646
```bash
4747
brew bump-formula-pr --strict --version <VERSION> noir
48-
# Example: brew bump-formula-pr --strict --version 0.29.1 noir
48+
# Example: brew bump-formula-pr --strict --version 0.30.0 noir
4949
```
5050

5151
3. **Style Check** (Optional):

docs/content/get_started/ai_power/index.ko.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Noir를 대규모 언어 모델(LLM, 클라우드/로컬/ACP 에이전트)에
1515
OpenAI로 스캔:
1616

1717
```bash
18-
noir -b . --ai-provider openai --ai-model gpt-5.4 --ai-key $OPENAI_API_KEY
18+
noir -b . --ai-provider openai --ai-model gpt-5.5 --ai-key $OPENAI_API_KEY
1919
```
2020

2121
로컬 Ollama로 스캔 (API 키 불필요):
@@ -49,7 +49,7 @@ noir -b . --ai-provider acp:codex
4949
| 플래그 | 설명 |
5050
|---|---|
5151
| `--ai-provider` | 제공업체 접두사 (예: `openai`, `ollama`, `acp:codex`) 또는 사용자 정의 API URL |
52-
| `--ai-model` | 모델 이름 (예: `gpt-5.4`), `acp:*`에서는 선택 사항 |
52+
| `--ai-model` | 모델 이름 (예: `gpt-5.5`), `acp:*`에서는 선택 사항 |
5353
| `--ai-key` | API 키 (`NOIR_AI_KEY` 환경 변수로도 설정 가능) |
5454
| `--ai-agent` | 에이전트 기반 AI 워크플로우 활성화 (반복적 도구 호출 루프) |
5555
| `--ai-agent-max-steps` | AI 에이전트 루프 최대 단계 수 (기본값: `20`) |

docs/content/get_started/ai_power/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Connect Noir to Large Language Models (cloud-based, local, or ACP agent-based) f
1515
Scan with OpenAI:
1616

1717
```bash
18-
noir -b . --ai-provider openai --ai-model gpt-5.4 --ai-key $OPENAI_API_KEY
18+
noir -b . --ai-provider openai --ai-model gpt-5.5 --ai-key $OPENAI_API_KEY
1919
```
2020

2121
Scan with local Ollama (no API key needed):
@@ -49,7 +49,7 @@ noir -b . --ai-provider acp:codex
4949
| Flag | Description |
5050
|---|---|
5151
| `--ai-provider` | Provider prefix (e.g., `openai`, `ollama`, `acp:codex`) or custom API URL |
52-
| `--ai-model` | Model name (e.g., `gpt-5.4`), optional for `acp:*` |
52+
| `--ai-model` | Model name (e.g., `gpt-5.5`), optional for `acp:*` |
5353
| `--ai-key` | API key (or use `NOIR_AI_KEY` env var) |
5454
| `--ai-agent` | Enable agentic AI workflow (iterative tool-calling loop) |
5555
| `--ai-agent-max-steps` | Max steps for AI agent loop (default: `20`) |

docs/content/usage/ai_providers/github_marketplace/index.ko.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ sort_by = "weight"
2020
```bash
2121
noir -b ./spec/functional_test/fixtures/hahwul \
2222
--ai-provider=github \
23-
--ai-model=gpt-5.4 \
23+
--ai-model=gpt-5.5 \
2424
--ai-key=github_pat_...
2525
```
2626

@@ -29,6 +29,6 @@ noir -b ./spec/functional_test/fixtures/hahwul \
2929
```bash
3030
noir -b ./spec/functional_test/fixtures/hahwul \
3131
--ai-provider=azure \
32-
--ai-model=gpt-5.4 \
32+
--ai-model=gpt-5.5 \
3333
--ai-key=github_pat_...
3434
```

0 commit comments

Comments
 (0)