Data Structure: The arf.json File
The entire structure and content of the OSINT Framework are defined in a single file: public/arf.json. This file serves as the database for the application, and understanding its structure is essential for contributing new resources or forking the project.
File Structure
The arf.json file is a large, hierarchical JSON object that represents the tree you see in the web interface. The structure is recursive, consisting of nodes that can be either folders or links.
Node Object
Every element in the tree is a JSON object with the following key-value pairs:
"name": (String) The text label that appears for the node in the visualization."type": (String) Defines the node's type. This can be one of two values:"folder": Represents a category or sub-category. A folder node contains achildrenarray with other nodes inside it."url": Represents a leaf node, which is a direct link to an OSINT resource.
"children": (Array) An array of node objects. This key is only present for nodes with"type": "folder"."url": (String) The destination URL for the resource. This key is only present for nodes with"type": "url".
Example Snippet
Here is a small example from the arf.json file illustrating the structure. It shows the Username folder, which contains a Username Search Engines folder, which in turn contains several URL resources.
{
"name": "OSINT Framework",
"type": "folder",
"children": [
{
"name": "Username",
"type": "folder",
"children": [
{
"name": "Username Search Engines",
"type": "folder",
"children": [
{
"name": "Sherlock (T)",
"type": "url",
"url": "https://github.com/sherlock-project/sherlock"
},
{
"name": "WhatsMyName",
"type": "url",
"url": "https://whatsmyname.app/"
}
]
}
]
}
]
}
How It Works
The application's frontend JavaScript, located in public/js/arf.js, uses the D3.js library to:
- Fetch and parse the
public/arf.jsonfile. - Recursively build the interactive tree visualization based on the JSON hierarchy.
- Handle user interactions, such as expanding/collapsing folders (nodes with
"type": "folder") and navigating to external sites (nodes with"type": "url").
By centralizing all the data in this one file, the project remains simple, transparent, and easy for the community to maintain and expand.