A server software designed for fetching Minecraft and Minecraft-related metadata

Related tags

Command-line mcmeta
Overview

Minecraft Metadata Server

A server software designed for fetching Minecraft and Minecraft-related metadata (such as Forge, Fabric, Quilt and Liteloader) and serving them as a centralized source for metadata.

The project is still at its early stages and will undergo drastic changes.

Project structure

metamc is split into 2 parts, both of which are written in Rust.

libmcmeta

A library which contains the data models and shared functions for client and server of mcmeta. It is licensed under LGPL-3.0-only.

mcmeta

A tool/server for generating and serving metadata files. It will do this by downloading existing metadata files (and in some cases, extract metadata from modloader installers) and then either serving these metadata files or generating them for usage somewhere else (like GitHub Pages). It is licensed under GPL-3.0-only.

How to run this

Since no binaries are released yet, you will have to clone and compile this repository yourself. Make sure you have Rust installed and then run:

git clone https://github.com/PrismLauncher/mcmeta.git
cd mcmeta/mcmeta

export RUST_LOG=INFO
export MCMETA__BIND_ADDRESS=127.0.0.1:9988
export MCMETA__STORAGE_FORMAT__TYPE=json
export MCMETA__STORAGE_FORMAT__META_DIRECTORY=../meta
cargo run

Endpoints

The following endpoints are currently implemented:

  • GET /raw/mojang for the Mojang version manifest, which contains all versions
  • GET /raw/mojang/:version for a specific Minecraft version, if it exists

Goals

Eventually, mcmeta should implement at least the following goals:

  • Fetching metadata
    • Minecraft
    • Forge
    • Liteloader
    • Fabric
    • Quilt
  • Storing metadata
    • JSON
    • Database
  • Offering metadata
    • Minecraft
    • Forge
    • Liteloader
    • Fabric
    • Quilt

Some more ambitious goals that might or might not be implemented are:

  • MultiMC/Prism Launcher export
    • Static generation (metadata for launchers is stored)
    • Dynamic generation (metadata for launchers is generated on the fly)
  • Lazy-loading
    • Metadata isn't fetched until it is actually requested
    • Once fetched, metadata will stay in the database
  • FFI
    • The ability of being able to load libmcmeta as a shared library into other programming languages, like C++.

Depending on the difficulty of the task, it might be implemented before others.

Why?

Currently metadata for Minecraft and modloaders is spread across multiple locations and in differing formats, making it difficult for launchers to provide installers for loaders. It doesn't have to be like this though.

Launchers like MultiMC and Prism Launcher use scripts to generate metadata specific to their launcher. While this works for the context of a single launcher and its forks, it's not sustainable in the long run and doesn't invite for innovation to happen. The current formats also might not be efficient for both storage and usage in a launcher.

You might also like...
Curated list of awesome projects and resources related to Rust and computer security

Awesome Rust Security Curated list of awesome projects and resources related to Rust and computer security Table of Contents Tools Web and Cloud Secur

Calculation of Wigner symbols and related constants

Calculation of Wigner symbols and related constants This crate computes Wigner 3j coefficients and Clebsch-Gordan coefficients in pure Rust. The calcu

Rust API Server: A versatile template for building RESTful interfaces, designed for simplicity in setup and configuration using the Rust programming language.
Rust API Server: A versatile template for building RESTful interfaces, designed for simplicity in setup and configuration using the Rust programming language.

RUST API SERVER Introduction Welcome to the Rust API Server! This server provides a simple REST interface for your applications. This README will guid

A library providing helpers for various StarkNet fees related tasks.
A library providing helpers for various StarkNet fees related tasks.

🐺 How Much ? 🦀 Table of Contents About Getting Started Prerequisites Installation Usage Estimate fees on network Authors & contributors Security Lic

Low overhead Rust implementation of time-related concepts

It's Rust time! Low overhead implementation of time-related concepts. Who is time for? For applications where simplicity and low-overhead are more imp

A minimal file exchange server designed for clients with browsers only.

XIAO-Files Xiao-Files is a minimal file exchange server designed for clients with browsers only. Example Let's say we have a host with IP 10.8.20.1, a

 (Pre-Release Software) Secure, Encrypted, P2P chat written atop Warp, IPFS, LibP2P, Dioxus and many more awesome projects and protocols.
(Pre-Release Software) Secure, Encrypted, P2P chat written atop Warp, IPFS, LibP2P, Dioxus and many more awesome projects and protocols.

Uplink Privacy First, Modular, P2P messaging client built atop Warp. Uplink is written in pure Rust with a UI in Dioxus (which is also written in Rust

ratlab is a programming platform designed loosely for hobbyist and masochist to analyse and design stuff and things that transform our world?
ratlab is a programming platform designed loosely for hobbyist and masochist to analyse and design stuff and things that transform our world?

ratlab A programming language developed by Quinn Horton and Jay Hunter. ratlab is a programming platform designed loosely for hobbyists and masochists

A lightweight and high-performance order-book designed to process level 2 and trades data. Available in Rust and Python

ninjabook A lightweight and high-performance order-book implemented in Rust, designed to process level 2 and trades data. Available in Python and Rust

Comments
  • Configure Renovate

    Configure Renovate

    Mend Renovate

    Welcome to Renovate! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.

    🚦 To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.


    Detected Package Files

    • libmcmeta/Cargo.toml (cargo)
    • mcmeta/Cargo.toml (cargo)

    Configuration Summary

    Based on the default config's presets, Renovate will:

    • Start dependency updates only once this onboarding PR is merged
    • Enable Renovate Dependency Dashboard creation.
    • If Renovate detects semantic commits, it will use semantic commit type fix for dependencies and chore for all others.
    • Ignore node_modules, bower_components, vendor and various test/tests directories.
    • Autodetect whether to pin dependencies or maintain ranges.
    • Rate limit PR creation to a maximum of two per hour.
    • Limit to maximum 10 open PRs at any time.
    • Group known monorepo packages together.
    • Use curated list of recommended non-monorepo package groupings.
    • A collection of workarounds for known problems with packages.

    🔡 Would you like to change the way Renovate is upgrading your dependencies? Simply edit the renovate.json in this branch with your custom config and the list of Pull Requests in the "What to Expect" section below will be updated the next time Renovate runs.


    What to Expect

    With your current configuration, Renovate will create 7 Pull Requests:

    Update Rust crate chrono to 0.4.23
    • Schedule: ["at any time"]
    • Branch name: renovate/chrono-0.x
    • Merge into: develop
    • Upgrade chrono to 0.4.23
    Update Rust crate clap to 4.0.26
    • Schedule: ["at any time"]
    • Branch name: renovate/clap-4.x
    • Merge into: develop
    • Upgrade clap to 4.0.26
    Update Rust crate hyper to 0.14.23
    • Schedule: ["at any time"]
    • Branch name: renovate/hyper-0.x
    • Merge into: develop
    • Upgrade hyper to 0.14.23
    Update Rust crate reqwest to 0.11.13
    • Schedule: ["at any time"]
    • Branch name: renovate/reqwest-0.x
    • Merge into: develop
    • Upgrade reqwest to 0.11.13
    Update Rust crate serde_json to 1.0.88
    • Schedule: ["at any time"]
    • Branch name: renovate/serde_json-1.x
    • Merge into: develop
    • Upgrade serde_json to 1.0.88
    Update Rust crate serde_valid to 0.11.3
    • Schedule: ["at any time"]
    • Branch name: renovate/serde_valid-0.x
    • Merge into: develop
    • Upgrade serde_valid to 0.11.3
    Update Rust crate tokio to 1.22.0
    • Schedule: ["at any time"]
    • Branch name: renovate/tokio-1.x
    • Merge into: develop
    • Upgrade tokio to 1.22.0

    🚸 Branch creation will be limited to maximum 2 per hour, so it doesn't swamp any CI resources or spam the project. See docs for prhourlylimit for details.


    ❓ Got questions? Check out Renovate's Docs, particularly the Getting Started section. If you need any further assistance then you can also request help here.


    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
Owner
Prism Launcher
A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once
Prism Launcher
Plexisort is a command-line tool designed to organize your files based on metadata.

Plexisort is a command-line tool designed to organize your files based on metadata. It allows for flexible source and destination directory settings, supports dry-run operations for safe previews of potential changes, and even offers an undo functionality for reversing the last set of file movements.

Richard Chukwu 7 Apr 29, 2024
A backend server and client for Norg related applications.

Norgopolis Norgopolis is a lightweight communication, launcher and utility services client for the Neorg rust-native modules ecosystem on Desktop. It

Neorg 10 May 27, 2023
😎 A CLI tool for fetching data and displaying it nicely

?? A CLI tool for fetching data and displaying it nicely. (The neofetch for remote data fetching)

Milo 6 Aug 24, 2022
Tooling and library for generation, validation and verification of supply chain metadata documents and frameworks

Spector Spector is both tooling and a library for the generation, validation and verification of supply chain metadata documents and frameworks. Many

Kusari 13 May 4, 2023
A Rust-based Garry's Mod module for fetching environment variables.

gm_environ Using Environment Variables in Garry's Mod. Installation Download a copy of the module from the releases (or compile from source) Move the

Joshua Piper 2 Jan 4, 2022
A CLI tool for fetching Urban Dictionary definitions

udict - Urban Dictionary CLI A CLI tool for fetching Urban Dictionary definitions. Installation cargo cargo install udict Arch Linux Using an AUR pack

null 15 Nov 14, 2022
Cross-platform binary shims with optional remote fetching.

chim Cross-platform binary shims with optional remote fetching. Quickstart (make an automatic fetching node.js wrapper) Install chim: (see docs for al

Jeff Dickey 10 Jan 1, 2023
niwl - a prototype system for open, decentralized, metadata resistant communication

niwl - a prototype system for open, decentralized, metadata resistant communication niwl (/nɪu̯l/) - fog, mist or haze (Welsh). niwl is an experimenta

George Tankersley 5 Feb 4, 2022
subscript metadata to mpeg-ts

tssubscript 元データの MPEG-TS に重畳された メタデータ を エンコード済みの MPEG-TS に張り付けるツールです。 使用方法 tssubscript -i <入力TSファイル> -m <貼り付け元メタデータTSファイル> -o <出力TSファイル> また、パイプを使ってエン

もにょ~ん 3 Sep 11, 2023
Simple, cross-platform GameMaker lib for getting file metadata

File Metadata Tiny baby library for getting file metadata. Originally written to work for a GameMaker game a friend is creating. Table of Contents Ins

SpikeHD 3 Nov 28, 2023