# CoreFiles
> The original files of every Joomla and WordPress release, run by mySites.guru. Free, no API key, read-only GET requests.
Use it to tell whether a file on a Joomla or WordPress site is an unmodified core file, which release it came from, and what changed between releases. Hash the site's files where they are and send only the hashes; never upload a site's files.
Base URL: https://corefiles.mysites.guru
Platforms: joomla, wordpress. Versions as released, for example 5.4.0, 6.2.0-rc1, 7.1.4.
Add ?format=json to a page URL (/lookup, /pretty, /folder, /history, /diff, /stats) for the same data as JSON.
## Look up a file by its hash
GET /lookup/{md5 or sha256}?format=json&name={file name}
Lists every release and path that has this content. No matches means it is not a core file in any stored release. With name, "named" lists core files that have that file name, so you can fetch the original and compare.
## Read a core file
GET /raw/{platform}/{version}/{path} the file's bytes
GET /stat/{platform}/{version}/{path} md5, sha1, sha256 and size as JSON
GET /history/{platform}/{path}?format=json the releases where that file changed
## Compare releases
GET /diff/{platform}/{from}/{to}?format=json added, removed and changed files
GET /diff/{platform}/{from}/{to}/{path}?format=text a unified diff of one file
## Check a whole site
GET /hashes/{platform}/{version}/plain
Every core file in that release as path<TAB>md5. Hash the site's files and compare: a different md5 means a modified core file, and a file missing from the list is not core.
## Reading the answers
A 404 with X-Corefiles-Release: present means the path is not in that release, so the file is not core.
A 404 with X-Corefiles-Release: missing means that release is not stored yet. Treat the answer as unknown, never as "not core". New releases are added within the hour.
GET /releases.json lists every stored release.
Paste it into Claude, ChatGPT or Cursor. Agents can also read it at /llms.txt. On a lookup, file, history or compare page, Copy for your AI agent adds what that page shows.
tools.php49 lines, 1,654 bytes, from wordpress-3.0-beta2.zip
<?php
/**
* Tools Administration Panel.
*
* @package WordPress
* @subpackage Administration
*/
/** WordPress Administration Bootstrap */
require_once('./admin.php');
$title = __('Tools');
require_once('./admin-header.php');
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php echo esc_html( $title ); ?></h2>
<?php if ( current_user_can('edit_posts') ) : ?>
<div class="tool-box">
<h3 class="title"><?php _e('Press This') ?></h3>
<p><?php _e('Press This is a bookmarklet: a little app that runs in your browser and lets you grab bits of the web.');?></p>
<p><?php _e('Use Press This to clip text, images and videos from any web page. Then edit and add more straight from Press This before you save or publish it in a post on your site.'); ?></p>
<p><?php _e('Drag-and-drop the following link to your bookmarks bar or right click it and add it to your favorites for a posting shortcut.') ?></p>
<p class="pressthis"><a href="<?php echo htmlspecialchars( get_shortcut_link() ); ?>" title="<?php echo esc_attr(__('Press This')) ?>"><?php _e('Press This') ?></a></p>
</div>
<?php
endif;
$cats = get_taxonomy('category');
$tags = get_taxonomy('post_tag');
if ( current_user_can($cats->manage_cap) || current_user_can($tags->manage_cap) ) : ?>
<div class="tool-box">
<h3 class="title"><?php _e('Category/Tag Conversion') ?></h3>
<p><?php printf(__('Use this to convert <a href="%s">categories to tags</a>, or <a href="%s">tags to categories</a>.'), 'admin.php?import=wp-cat2tag', 'admin.php?import=wp-cat2tag&step=3'); ?></p>
</div>
<?php
endif;
do_action( 'tool_box' );
?>
</div>
<?php
include('./admin-footer.php');
?>