Releases: OpenOSINT/OpenOSINT
Release list
v2.28.2
What's Changed
- Fix/tool descriptions credentials by @SonoTommy in #60
Full Changelog: v2.28.1...v2.28.2
v2.28.1
What's Changed
- ci: make release failures visible instead of silently succeeding by @SonoTommy in #58
Full Changelog: v2.28.0...v2.28.1
v2.28.0
[2.28.0] — 2026-09-13
Changed — BREAKING
- Web UI: locally-held provider keys are now gated by bind address, not an
env var. Previously, whether a request could use a key from your.env
depended onOPENOSINT_DEMO_MODE, which defaulted to off — meaning a
server bound to a non-loopback interface used your keys for any caller
unless you remembered to set that variable. It's now a network-exposure
invariant: bound to127.0.0.1/localhost, keys work as before, no
change needed. Bound to anything else (--host 0.0.0.0with
--allow-remote, or an undeterminable bind address) — your keys are
never used to serve a request; callers must supply their own, and
search_breachis disabled outright regardless of key source.
OPENOSINT_DEMO_MODEstill exists but can now only add restriction, never
remove it. If you were exposing the web UI on your LAN and relying on
your own.envkeys with no other authentication in front of it, that no
longer works — see the README's Web UI section. - Cloud API: request logs no longer contain the target you queried.
cloud/main.py's INFO-level root logger was letting every tool module's
free-text log line (built for CLI/MCP debugging, and including the raw
target) through. Cloud logging is now limited to a redacted customer
identifier, tool name, elapsed time, and outcome status. - Web UI: a loopback bind behind a reverse proxy is no longer silently
trusted. A request carrying proxy-forwarding headers
(X-Forwarded-For/-Proto/-Host,Forwarded,CF-Connecting-IP) is
now treated the same as a non-loopback bind — local keys withheld, breach
blocked — unless the newOPENOSINT_TRUSTED_PROXY=trueis set. This is a
separate variable fromTRUSTED_PROXY(rate-limit IP attribution only,
a lower-stakes setting some self-hosters already have on) — see the
README before setting it, including the note that doing so makes you the
controller for anyone the proxy relays to this instance.
Deprecated
OPENOSINT_MODELis deprecated in favor ofANTHROPIC_MODEL, consistent withOPENAI_MODEL. The old name still works and logs a one-time warning.
Fixed
-
.envwas ignored with a regularpip install openosint. The CLI and web server looked for.envinside site-packages instead of the directory the command runs from. All entry points now share one loader:- CLI and web UI:
$OPENOSINT_ENV_FILE, then.envsearching upward from the current directory, then the repo root (source checkouts). - MCP server:
$OPENOSINT_ENV_FILE, then the repo root, then the current directory, because MCP clients start it from an arbitrary directory.
Real environment variables always win.
[*] Loaded .env: <path>is printed to stderr. IfOPENOSINT_ENV_FILEpoints to a missing file, OpenOSINT prints one error line and exits with code 2. Missing-key errors now say when no.envwas found. - CLI and web UI:
-
search_dorks_live: Bright Data failures showed aJSONDecodeError
traceback instead of the actual error. Bright Data returns HTTP 200 at
the API level even when the fetch failed, reporting the real outcome in
x-brd-*response headers. These are now read and turned into a clear
message, e.g.Bright Data 502 captcha: redirect location was rejected.
Rate-limit and CAPTCHA failures add a hint about the 15-second block.
There is no automatic retry: Bright Data blocks a repeated identical
query for at least 15 seconds, and cataloged errors are not billed. -
A failed dork no longer stops the scan or prints a traceback: it logs a
warning, the remaining dorks run, and if all fail the summary lists the
distinct error codes. -
401/403 responses now include Bright Data's own redacted body, with a
specific hint when the API key has expired. -
Result URLs are normalized: opaque Google
/goto?url=...redirect
tokens and snippet text leaking into the URL field are no longer shown
as links. Unresolvable links render as(unresolved). -
The Twitter dork is now grouped as
("{target}") (site:x.com OR site:twitter.com); the previous form let Google match either the
quoted term or a site independently, returning unrelated results.
v2.27.0
v2.26.0
What's Changed
- Add free-prompts CTAs to README and report footer by @SonoTommy in #28
- Remove Polar billing entirely — invite-only Cloud access by @SonoTommy in #29
- fix(security): apply GHSA-cqr4-hcfp-m6m4 setup-auth + bind guard for … by @SonoTommy in #30
- Chore/sponsors site email cleanup by @SonoTommy in #31
- feat(site): add contextual Gumroad CTAs across high-intent docs pages by @SonoTommy in #32
- Funnel: reposition CTAs, remove MCP-integration copy, replace bespoke masthead with Gumroad product block by @SonoTommy in #33
- Chore/cta reposition mcp cleanup by @SonoTommy in #34
- Add demo gif by @SonoTommy in #36
- docs(readme): add Agents & OSINT newsletter CTA by @SonoTommy in #38
- Add demo gif by @SonoTommy in #39
Full Changelog: v2.25.0...v2.26.0
v2.25.1
What's Changed
- Add free-prompts CTAs to README and report footer by @SonoTommy in #28
- Remove Polar billing entirely — invite-only Cloud access by @SonoTommy in #29
- fix(security): apply GHSA-cqr4-hcfp-m6m4 setup-auth + bind guard for … by @SonoTommy in #30
- Chore/sponsors site email cleanup by @SonoTommy in #31
- feat(site): add contextual Gumroad CTAs across high-intent docs pages by @SonoTommy in #32
- Funnel: reposition CTAs, remove MCP-integration copy, replace bespoke masthead with Gumroad product block by @SonoTommy in #33
- Chore/cta reposition mcp cleanup by @SonoTommy in #34
- Add demo gif by @SonoTommy in #36
- docs(readme): add Agents & OSINT newsletter CTA by @SonoTommy in #38
- Add demo gif by @SonoTommy in #39
Full Changelog: v2.25.0...v2.25.1
v2.23.1
v2.25.0
What's Changed
- refactor: trim dead code, fix IPv6 detection, dedupe regexes by @SonoTommy in #14
- docs: add SECURITY.md with vulnerability reporting policy by @SonoTommy in #15
- fix(security): require auth on /api/setup, allowlist keys, restrict b… by @SonoTommy in #16
- docs: add Operator's Playbook references across README, CLI help, web… by @SonoTommy in #17
- Refactor/ponytail cleanup by @SonoTommy in #18
- Feat/cloud billing oauth and tools by @SonoTommy in #19
- Feat/cloud billing oauth and tools by @SonoTommy in #20
- docs: RapidProxy sponsor copy + Polar webhook debug harnesses by @SonoTommy in #21
- chore: replace RapidProxy PNG logo with official SVG by @SonoTommy in #22
- Feat/cloud billing oauth and tools by @SonoTommy in #23
- docs: move RapidProxy full sponsor copy under the Sponsors grid by @SonoTommy in #24
- feat: global upstream-proxy support for web-facing tools (HTTP/SOCKS5) by @SonoTommy in #26
- fix(demo): separate Procfile.demo so security fix reaches demo deploy… by @SonoTommy in #27
New Contributors
- @SonoTommy made their first contribution in #14
Full Changelog: v2.23.0...v2.25.0
v2.23.0
What's Changed
- fix(web): make OpenAI-compatible backend usable from the UI by @teamvelociraptor in #12
Full Changelog: v2.21.0...v2.23.0