Outsider Stage 0.5
Replay and verify a real, sealed Outsider Stage 0.5 intervention chain.
Translation pending
Self-hosted link analysis and open-source intelligence platform.
SecurityPython · JavaScriptGitHub @BreaGGOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Open-source, self-hosted link analysis and OSINT workbench. Turn a single clue (an alias, email, domain, IP or wallet) into an investigation graph with 46 transforms, automated machines, Ariadne’s thread path finding and graph analytics. Runs locally, on Docker or on Railway.
Taken from the repository README
Loading the full README.
Read the full README ↗DAEDALUS is a self-hosted workbench for link analysis and open-source intelligence. You start from a single clue (an alias, an email address, a domain, an IP, a crypto wallet), expand it with transforms that query public sources, and end up with a graph you can question: who is behind this account, which infrastructure is shared, and what is the shortest chain of evidence between two things that should have nothing in common.
Created by Alejandro Brea · Leer en español
In the myth, Daedalus designed the labyrinth of Knossos and Ariadne's thread led Theseus back out of it. An investigation feels the same from the inside: every pivot opens new corridors, and after an hour it is hard to say how you got from the first clue to the last one. DAEDALUS keeps the map of the labyrinth for you (the graph) and gives you the thread (path finding) to see exactly how any two points are connected.
It speaks the vocabulary analysts already know from Maltego, entities, transforms and machines, and adds what a graph is good for: shortest paths, communities, centrality and choke points. Everything runs on your own machine or server, in a single Python process with a SQLite file, and most transforms work without any API key.
The screenshots come from the demo investigation bundled in examples/operation-minotaur.json, a made-up case where
every person, .example domain and documentation-range IP is fictional. Import it to follow along offline.
1. Drop a clue. Type anything in the top bar (DAEDALUS recognises 20 entity types: aliases, emails, phones, names, domains, IPs, netblocks, URLs, wallets, hashes, CVEs, tracking codes, coordinates…) or drag a type from the palette. Photos dropped on the canvas are read for EXIF data and GPS.
2. Expand it. Right-click an entity to run one of its transforms, run them all, or launch a machine that walks several steps on its own (domain, IP, identity and website footprints, or the open-ended Labyrinth). Results stream in live and every new node keeps a labelled link explaining where it came from.
3. Follow the thread. Pick an origin and a target and Ariadne returns the k shortest paths between them, hop by hop, with the evidence on every link. With three or more entities selected it draws the smallest subgraph that joins them.
4. Read the structure. The analysis panel sizes nodes by betweenness, PageRank or degree, colours them by community, marks the choke points whose removal would split the case, and suggests same-type entities that share neighbours and may be the same identity.
5. Put it in time and space, then report. Every dated fact lands on a timeline, every coordinate on a map. Notes, bookmarks, a sortable table and exports to JSON, GraphML (Gephi, yEd), CSV and PNG close the loop.
| Where | How |
|---|---|
| Your computer (Python 3.11+) | git clone https://github.com/BreaGG/DAEDALUS.git && cd DAEDALUS && ./start.sh (Windows: start.bat). Opens http://127.0.0.1:8787. |
| Docker | DAEDALUS_PASSWORD='long-random-string' docker compose up -d --build |
| Railway | Deploy the repository (it ships a railway.toml), add the DAEDALUS_PASSWORD variable, attach a volume, generate a domain. |
| Your own server | Docker Compose behind Caddy or Nginx with HTTPS. |
DAEDALUS has no user accounts: anyone who can reach it can use it. It only listens on 127.0.0.1 by default; whenever
you expose it, set DAEDALUS_PASSWORD and serve it over HTTPS (on Railway it refuses to start without a password).
Full instructions, environment variables and a reverse-proxy example are in the
deployment chapter.
The interface is in English by default and also available in Spanish (Settings → Language).
Also in Spanish: guía de usuario, documentación técnica, referencia.
46 transforms grouped in nine families; 41 of them need no key at all.
security.txt.A transform is a small async Python class. Save it in the plugins/ folder of your data directory, restart, and it
appears in the right-click menu of the entity types it accepts:
from daedalus.transforms import L, Transform, register
@register
class EmailHashes(Transform):
name = "plugin_email_hashes"
title = L("To MD5 / SHA-256 hashes", "A hashes MD5 / SHA-256")
description = L("Hashes of the address, as used by Gravatar and leak dumps.", "Hashes de la dirección.")
inputs = ("email",)
async def run(self, ctx):
import hashlib
email = ctx.value.lower().encode()
ctx.add("hash", hashlib.md5(email).hexdigest(), {"algorithm": "MD5"}, label="MD5")
ctx.add("hash", hashlib.sha256(email).hexdigest(), {"algorithm": "SHA-256"}, label="SHA-256")
The technical documentation describes the full Context API, machines,
plugins and how to test transforms against mocked HTTP. Everything the interface does is also available through a
JSON API, so DAEDALUS can be scripted.
pip install -e ".[dev]" && pytest -q && ruff check daedalus tests
python scripts/gen_docs.py # regenerate the reference after changing transforms
DAEDALUS only collects what public sources and the services you configure return, but the techniques it automates can hurt people when misused. Use it for security research, threat intelligence, journalism, due diligence or to audit your own exposure. Do not use it to stalk, harass or profile individuals without a lawful basis, and respect data-protection law and the terms of every source you query.
DAEDALUS is provided for lawful research, educational and defensive purposes only. You are solely responsible for how you use it and for making sure that every investigation complies with the laws of your jurisdiction (including data-protection rules such as the GDPR), the terms of service of each source and API you query, and any authorization your work requires. The author and contributors accept no liability for misuse of the software or for any damage, legal claim or loss arising from its use.
Results come from third-party sources and automated heuristics: they can be incomplete, outdated or simply wrong. Verify findings independently before acting on them, and never treat a link in the graph as proof on its own. DAEDALUS is an independent project and is not affiliated with, endorsed by or sponsored by Maltego or any of the services it queries; all trademarks belong to their respective owners.
Bug reports, new transforms, translations and fixes are welcome. Read CONTRIBUTING.md before opening a pull request.
Copyright © 2026 Alejandro Brea. DAEDALUS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version (GPL-3.0-or-later). It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; see the licence for details.
Bundled third-party libraries keep their own licences, listed in THIRD_PARTY_NOTICES.md.