Skip to content

kireji-app/mphf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MPHF - Coordinate System

Part of the Kireji Project
omnia ex una linea

MPHF (Minimal Perfect Hash Function) provides the bijective coordinate system at the heart of the Kireji Project. It guarantees that every valid state of an app or component corresponds to a unique integer coordinate, with no collisions, duplicates, or gaps. The Kireji Web Framework uses these coordinates to encode application state directly in the URL, making navigation, persistence, and cross-origin traversal deterministic and lossless.

The Kireji Project

The Kireji Project poses a question: What if we could treat every web page as a point in a unified, mathematically mapped space?

Repo Purpose
MPHF Coordinate System - ★ You are here
A bijective coordinate system for hashing structured data
Kireji Web Framework
A reactive web framework with MPHF routing
Demo App Ecosystem
An example app ecosystem demonstrating the project

Implementation

The set of all application states S is structured as a combinatorial configuration space. This allows us to locate every configuration as a point on a discrete manifold. A minimal perfect hash function is used to define a bijection between $S$ and the integer range $[0, |S|)$.

Each domain is hashed using positional offsets defined by component subdomains with all elements indexed from $0$. For example, a point in the cartesian product space of sets A and B is assigned a hash using $\text{hash}(A=a, B=b) = a \times |B| + b$.

This generalizes recursively to arbitrary combinations of nested spaces, each component yielding a minimal perfect hash function over the set of valid configurations of its state space.

Types

Configuration spaces are assembled from components that come in three main types.

The Part type models a single state with no mutability.

const apple = new Part("apple")

console.log(apple.cardinality)
// 1n

The Match type models a choice between two or more options.

const fruit = new Match("fruit", [
 apple,
 "orange",
 "pear"
])

console.log(fruit.cardinality)
// 3n
console.log(fruit.hash("pear"))
// "2"
console.log(fruit.unhash("2"))
// "pear"

The Mix type models a set of independently mutable variables.

const snack = new Mix("snack", [
 fruit,
 new Match("drink", [
  "water",
  "milk",
  "cola"
 ])
])

console.log(snack.cardinality)
// 9n
console.log(snack.hash({ fruit: "apple", drink: "water" }))
// 6
console.log(snack.unhash("6"))
// { fruit: "apple", drink: "water" }

URL Encoding

MPHF also includes methods for encoding large integers as url-safe base64 strings:

console.log(Part.encode(12345678901234567890n))
// aJkGoPH7MHi

console.log(Part.decode('hello-world'))
// 19857872207319512397n

Tech Stack

This library is written using Vanilla JavaScript with no third-party dependencies.

Status and License

The MPHF Coordinate System is in Alpha.

The Kireji Project is in early research and development.

MPHF on npm
Project Status: Alpha
Commits
GitHub Last Commit
Copyright © 2023-2025 <a href="https://www.ejaugust.com">Eric Augustinowicz</a>
Released under MIT License
Sponsor this Project

About

Create reversible minimal perfect hash functions from a data model spec. Achieve the information-theoretic lower bound for compression to create hashes that can be converted to and from instances of the given data model.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors