Small browser utilities for FFXIV. Mirror of https://code.itinerare.net/itinerare/ffxiv-tools for accepting issues and pull requests!
  • PHP 66%
  • Blade 33.2%
  • SCSS 0.4%
  • Dockerfile 0.3%
  • JavaScript 0.1%
Find a file
2026-07-06 22:11:33 +00:00
.forgejo chore(workflows): do not persist credentials after checkout for tests 2026-06-23 17:54:14 +00:00
app feat: prune old game item, universalis cache records when updating database 2026-05-02 09:27:26 -04:00
bootstrap refactor: fix PHP styling 2025-12-22 10:18:11 +00:00
config chore: update game data (!748) 2026-06-11 13:28:17 +00:00
data chore: update game data (!748) 2026-06-11 13:28:17 +00:00
database feat: add shop data to game items 2024-07-30 11:18:35 -04:00
docker feat: commit game data 2026-04-30 19:32:48 -04:00
logs refactor: rebuild on Laravel 11 application skeleton 2024-03-14 11:16:27 -04:00
public chore(deps-dev): remove unneeded JS dependencies 2026-01-02 11:55:45 -05:00
resources fix(economy): truncate up-to-date notices 2026-05-02 16:28:09 -04:00
routes feat(leveling): asynchronously load content 2025-12-21 17:03:17 -05:00
storage Laravel install 2023-02-02 18:10:00 -05:00
tests feat: commit game data 2026-04-30 19:32:48 -04:00
.bladeformatterrc.json chore: add blade-formatter configs 2024-02-23 10:24:29 -05:00
.bladeignore chore(deps-dev): add storage to blade formatter ignore list 2024-05-26 22:34:22 -04:00
.dockerignore feat: commit game data 2026-04-30 19:32:48 -04:00
.editorconfig Laravel install 2023-02-02 18:10:00 -05:00
.env.example docs: add docker info to readme 2025-12-23 10:52:54 -05:00
.gitattributes refactor: rebuild on Laravel 11 application skeleton 2024-03-14 11:16:27 -04:00
.gitignore chore: set up docker files 2025-12-19 08:57:35 -05:00
artisan refactor: rebuild on Laravel 11 application skeleton 2024-03-14 11:16:27 -04:00
CHANGELOG.md chore(release): v4.1.0 2026-04-30 19:47:15 -04:00
CODE_OF_CONDUCT.md docs: add readme, license, CoC 2024-01-29 14:29:28 -05:00
composer.json chore(release): v4.1.0 2026-04-30 19:47:15 -04:00
composer.lock chore(deps): update dependency guzzlehttp/guzzle to v7.13.1 2026-07-06 22:11:33 +00:00
Dockerfile chore(deps): update code.itinerare.net/internal/laravel-alpine:8.5 docker digest to 7d44917 2026-07-05 02:16:05 +00:00
LICENSE docs: add readme, license, CoC 2024-01-29 14:29:28 -05:00
package-lock.json chore(deps): update dependency postcss to v8.5.16 2026-07-05 16:11:52 +00:00
package.json chore(release): v4.1.0 2026-04-30 19:47:15 -04:00
phpunit.xml fix(tests): basic fix for existing diadem tests 2024-07-17 13:53:54 -04:00
pint.json chore(deps-dev): update pint config 2024-01-26 12:00:06 -05:00
README.md docs: update readme 2026-05-01 08:49:46 -04:00
renovate.json chore(config): ignore release age check for lodestone-parser 2026-04-11 20:26:13 +00:00
vite.config.js chore(deps-dev): fix vite asset building, add jquery, rebuild assets 2024-02-12 20:40:15 -05:00

FFXIV Tools

A collection of small, light-weight browser utilities related to FFXIV. Currently contains:

  • Leveling Calculator
    • Takes user input (e.g. current level, highest level class/job, various EXP buffs) and calculates number of dungeon/deep dungeon runs or frontline matches to get to the next level/to the end of a level range (e.g. 1-49, 50-59). Also supports fetching level, EXP, and highest level class/job from The Lodestone provided character ID and class/job.
  • Economy Tools
    • Crafting
      • Uses data from Teamcraft and Universalis (as well as provided user preferences) to calculate profit for a given crafting job's recipes and tries to recommend the most profitable (and likely to sell). Includes "endgame" crafting recipes from 6.x and 7.x.
    • Gathering
      • Uses data from Teamcraft and Universalis (as well as provided user preferences) to list gatherable items used in "endgame" crafting recipes (6.x and 7.x) and rank them based on price; also tries to recommend the most profitable (and likely to sell).
    • Monster Drops
      • Uses data from Teamcraft and Universalis (as well as provided user preferences) to list monster drops used in "endgame" crafting recipes (6.x and 7.x) and rank them based on price; also tries to recommend the most profitable (and likely to sell).
    • Diadem
      • Consults Universalis to see what the current pricest mat on each Diadem node is on a given world, as well as the priciest overall.

For all utilities that use game item, Universalis, etc. data, data is stored locally to reduce strain on external services and maintain availability. Relevant utilities consequently also account for Universalis data recency to the best of their ability (particularly when making recommendations). Additionally, all utilities that support world selection support NA, Europe, JP, and Oceania data centers/worlds.

An instance can be found at https://ffxiv.itinerare.net and is automatically updated from this repo.

Setup

Via Docker Compose

An example docker-compose file is as follows:

services:
    # Runs the web application
    app:
        image: code.itinerare.net/itinerare/ffxiv-tools:latest
        restart: always
        ports:
            - '127.0.0.1:8080:80'
        env_file:
            - .env
        environment:
            - CONTAINER_ROLE=app
        healthcheck:
            test: ["CMD-SHELL", "curl -so /dev/null http://localhost/ || exit 1"]
            interval: 30s
            timeout: 10s
            retries: 3
            start_period: 5s

    # Runs scheduled commands
    scheduler:
        image: code.itinerare.net/itinerare/ffxiv-tools:latest
        restart: always
        depends_on:
            - app
        env_file:
            - .env
        environment:
            - CONTAINER_ROLE=scheduler
        healthcheck:
            test: ["CMD", "php", "/var/www/artisan", "health:check", "--component=database"]
            interval: 30s
            timeout: 10s
            retries: 3
            start_period: 40s

    # Runs queue workers
    queue:
        image: code.itinerare.net/itinerare/ffxiv-tools:latest
        restart: always
        depends_on:
            - app
        env_file:
            - .env
        environment:
            - CONTAINER_ROLE=queue
            - PHP.memory_limit=512M
            - LARAVEL_QUEUE=init,universalis-init,universalis,default
        healthcheck:
            test: ["CMD", "php", "/var/www/artisan", "health:check", "--component=queue"]
            interval: 30s
            timeout: 10s
            retries: 3
            start_period: 40s

For more configuration options, see the base image's readme.

You will need to set up the .env file manually before starting the application. Copy the example .env alongside docker-compose.yml; to generate a key, docker run --rm code.itinerare.net/itinerare/ffxiv-tools:latest php artisan key:generate --show can be used and its final output (base64:etcetc...) copied into the .env file (as APP_KEY).

Once started, the app container will initialize the database and queue Universalis updates.

An example nginx config is as follows:

server {
    server_name site.com www.site.com;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass http://127.0.0.1:8080;
        break;
    }
}

From Source

Obtain a copy of the code

$ git clone https://code.itinerare.net/itinerare/ffxiv-tools.git

Configure .env in the directory

$ cp .env.example .env

This only needs the bare minimum (e.g. no database connection info needs to be provided).

Setting up

Install packages with composer:

$ composer install

Generate app key:

$ php artisan key:generate

Create the database and tables:

$ touch database/database.sqlite
$ php artisan migrate

Queue game item record creation and Universalis data updates:

$ php artisan app:update-database
$ php artisan app:update-universalis-cache

You will also need to set the Laravel scheduler to run, e.g. by adding the following to a crontab:

* * * * * cd ~/your_domain/www && php artisan schedule:run >> /dev/null 2>&1

You will also need to set up a queue worker. See the Laravel docs or Aldebaran docs for instructions on how to do this.

Contact

If you have any questions, please contact me via email at [email protected].