Flatfile
Zero-config JSON file storage
Flatfile is the simplest Honey backend. It stores each value as a JSON file on disk — no database server, no connection strings, just files.
When to Use
- Prototyping or development
- Very small datasets (under ~1,000 entries)
- Plugins where players don't want to set up a database
- Data that rarely changes
Setup
import me.jordanfails.honey.DataHandler
import me.jordanfails.honey.DataStoreType
import me.jordanfails.honey.connection.dataFramework
// Zero config — uses ./data directory by default
dataFramework { }
val store = DataHandler.createStoreType<String, PlayerData>(DataStoreType.FLATFILE) {
it.id = "players" // Creates ./data/players/<uuid>.json
}On Disk
plugins/
├── MyPlugin/
│ └── data/
│ └── players/
│ ├── 550e8400-e29b-41d4-a716-446655440000.json
│ ├── 67890abc-1234-5678-9def-0123456789ab.json
│ └── ...Each file contains the serialized JSON:
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "JordanFails",
"kills": 42,
"deaths": 7,
"lastLogin": 1718582400000
}Full Example
data class PlayerData(
val uuid: String,
var name: String,
var kills: Int = 0,
var deaths: Int = 0
)
class MyPlugin : JavaPlugin() {
lateinit var store: DataStore<String, PlayerData>
override fun onEnable() {
dataFramework { }
store = DataHandler.createStoreType(DataStoreType.FLATFILE) {
it.id = "players"
}
}
fun savePlayer(player: Player) {
val data = store.retrieve(player.uniqueId.toString())
?: PlayerData(player.uniqueId.toString(), player.name)
data.name = player.name
store.store(data.uuid, data)
}
fun getKills(player: Player): Int {
return store.retrieve(player.uniqueId.toString())?.kills ?: 0
}
}Limitations
| Limitation | Workaround |
|---|---|
| No querying by field | Load all keys and filter in memory |
| No atomic transactions | Use SQL or Mongo for transactional data |
| Slower with large datasets | Switch to SQL at ~1,000+ entries |
| No concurrent access safety | Only one server instance per data directory |