[{"data":1,"prerenderedAt":677},["ShallowReactive",2],{"wiki-nav":3,"wiki-\u002Fwiki\u002Fdevelopers\u002Fstandalone-rest":238,"wiki-surround-\u002Fwiki\u002Fdevelopers\u002Fstandalone-rest":606,"wiki-meta:\u002Fwiki\u002Fdevelopers\u002Fstandalone-rest":609,"wiki-sidebar":611},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"Wiki","i-lucide-book","\u002Fwiki","wiki",[10,13,40,84,88,110,114,155,159,197,212,234],{"title":11,"path":7,"stem":12},"Wiki home","wiki\u002Findex",{"title":14,"icon":15,"path":16,"stem":17,"children":18,"page":39},"About","i-lucide-info","\u002Fwiki\u002Fabout","wiki\u002Fabout",[19,23,27,31,35],{"title":20,"path":21,"stem":22},"Credits","\u002Fwiki\u002Fabout\u002Fcredits","wiki\u002Fabout\u002Fcredits",{"title":24,"path":25,"stem":26},"External connections","\u002Fwiki\u002Fabout\u002Fexternal-connections","wiki\u002Fabout\u002Fexternal-connections",{"title":28,"path":29,"stem":30},"Locale and translations","\u002Fwiki\u002Fabout\u002Flocale","wiki\u002Fabout\u002Flocale",{"title":32,"path":33,"stem":34},"Placeholders","\u002Fwiki\u002Fabout\u002Fplaceholders","wiki\u002Fabout\u002Fplaceholders",{"title":36,"path":37,"stem":38},"Why LuckPerms?","\u002Fwiki\u002Fabout\u002Fwhy-luckperms","wiki\u002Fabout\u002Fwhy-luckperms",false,{"title":41,"icon":42,"path":43,"stem":44,"children":45},"Commands","i-lucide-terminal","\u002Fwiki\u002Fcommands","wiki\u002Fcommands\u002Findex",[46,48,52,56,60,64,68,72,76,80],{"title":47,"path":43,"stem":44},"Command usage",{"title":49,"path":50,"stem":51},"General commands","\u002Fwiki\u002Fcommands\u002Fgeneral","wiki\u002Fcommands\u002Fgeneral",{"title":53,"path":54,"stem":55},"Group commands","\u002Fwiki\u002Fcommands\u002Fgroup","wiki\u002Fcommands\u002Fgroup",{"title":57,"path":58,"stem":59},"Log commands","\u002Fwiki\u002Fcommands\u002Flog","wiki\u002Fcommands\u002Flog",{"title":61,"path":62,"stem":63},"Meta commands","\u002Fwiki\u002Fcommands\u002Fmeta","wiki\u002Fcommands\u002Fmeta",{"title":65,"path":66,"stem":67},"Parent commands","\u002Fwiki\u002Fcommands\u002Fparent","wiki\u002Fcommands\u002Fparent",{"title":69,"path":70,"stem":71},"Permission commands","\u002Fwiki\u002Fcommands\u002Fpermission","wiki\u002Fcommands\u002Fpermission",{"title":73,"path":74,"stem":75},"Permissions reference","\u002Fwiki\u002Fcommands\u002Fpermissions","wiki\u002Fcommands\u002Fpermissions",{"title":77,"path":78,"stem":79},"Track commands","\u002Fwiki\u002Fcommands\u002Ftrack","wiki\u002Fcommands\u002Ftrack",{"title":81,"path":82,"stem":83},"User commands","\u002Fwiki\u002Fcommands\u002Fuser","wiki\u002Fcommands\u002Fuser",{"title":85,"path":86,"stem":87},"Configuration","\u002Fwiki\u002Fconfiguration","wiki\u002Fconfiguration",{"title":89,"icon":90,"path":91,"stem":92,"children":93,"page":39},"Developers","i-lucide-code","\u002Fwiki\u002Fdevelopers","wiki\u002Fdevelopers",[94,98,102,106],{"title":95,"path":96,"stem":97},"Developer API","\u002Fwiki\u002Fdevelopers\u002Fapi","wiki\u002Fdevelopers\u002Fapi",{"title":99,"path":100,"stem":101},"API usage","\u002Fwiki\u002Fdevelopers\u002Fapi-usage","wiki\u002Fdevelopers\u002Fapi-usage",{"title":103,"path":104,"stem":105},"Contributing","\u002Fwiki\u002Fdevelopers\u002Fcontributing","wiki\u002Fdevelopers\u002Fcontributing",{"title":107,"path":108,"stem":109},"Standalone app and REST API","\u002Fwiki\u002Fdevelopers\u002Fstandalone-rest","wiki\u002Fdevelopers\u002Fstandalone-rest",{"title":111,"path":112,"stem":113},"FAQ","\u002Fwiki\u002Ffaq","wiki\u002Ffaq",{"title":115,"icon":116,"path":117,"stem":118,"children":119,"page":39},"Features","i-lucide-sparkles","\u002Fwiki\u002Ffeatures","wiki\u002Ffeatures",[120,124,128,132,136,140,151],{"title":121,"path":122,"stem":123},"Context","\u002Fwiki\u002Ffeatures\u002Fcontext","wiki\u002Ffeatures\u002Fcontext",{"title":125,"path":126,"stem":127},"Default groups","\u002Fwiki\u002Ffeatures\u002Fdefault-groups","wiki\u002Ffeatures\u002Fdefault-groups",{"title":129,"path":130,"stem":131},"Prefixes, suffixes and meta","\u002Fwiki\u002Ffeatures\u002Fprefixes-suffixes-meta","wiki\u002Ffeatures\u002Fprefixes-suffixes-meta",{"title":133,"path":134,"stem":135},"Tracks","\u002Fwiki\u002Ffeatures\u002Ftracks","wiki\u002Ffeatures\u002Ftracks",{"title":137,"path":138,"stem":139},"Verbose","\u002Fwiki\u002Ffeatures\u002Fverbose","wiki\u002Ffeatures\u002Fverbose",{"title":141,"path":142,"stem":143,"children":144},"Web Editor","\u002Fwiki\u002Ffeatures\u002Fweb-editor","wiki\u002Ffeatures\u002Fweb-editor\u002Findex",[145,147],{"title":146,"path":142,"stem":143},"Web editor",{"title":148,"path":149,"stem":150},"Web editor technical details","\u002Fwiki\u002Ffeatures\u002Fweb-editor\u002Ftechnical","wiki\u002Ffeatures\u002Fweb-editor\u002Ftechnical",{"title":152,"path":153,"stem":154},"Weight","\u002Fwiki\u002Ffeatures\u002Fweight","wiki\u002Ffeatures\u002Fweight",{"title":156,"path":157,"stem":158},"Getting started","\u002Fwiki\u002Fgetting-started","wiki\u002Fgetting-started",{"title":160,"icon":161,"path":162,"stem":163,"children":164,"page":39},"Guides","i-lucide-map","\u002Fwiki\u002Fguides","wiki\u002Fguides",[165,169,173,177,181,185,189,193],{"title":166,"path":167,"stem":168},"Argument-based command permissions","\u002Fwiki\u002Fguides\u002Fargument-permissions","wiki\u002Fguides\u002Fargument-permissions",{"title":170,"path":171,"stem":172},"Bulk editing","\u002Fwiki\u002Fguides\u002Fbulk-editing","wiki\u002Fguides\u002Fbulk-editing",{"title":174,"path":175,"stem":176},"Extensions","\u002Fwiki\u002Fguides\u002Fextensions","wiki\u002Fguides\u002Fextensions",{"title":178,"path":179,"stem":180},"Migration","\u002Fwiki\u002Fguides\u002Fmigration","wiki\u002Fguides\u002Fmigration",{"title":182,"path":183,"stem":184},"Prefix and suffix stacking","\u002Fwiki\u002Fguides\u002Fprefix-stacking","wiki\u002Fguides\u002Fprefix-stacking",{"title":186,"path":187,"stem":188},"Storage system errors","\u002Fwiki\u002Fguides\u002Fstorage-errors","wiki\u002Fguides\u002Fstorage-errors",{"title":190,"path":191,"stem":192},"Switching storage types","\u002Fwiki\u002Fguides\u002Fswitching-storage","wiki\u002Fguides\u002Fswitching-storage",{"title":194,"path":195,"stem":196},"Syncing data between servers","\u002Fwiki\u002Fguides\u002Fsyncing","wiki\u002Fguides\u002Fsyncing",{"title":198,"icon":199,"path":200,"stem":201,"children":202},"Installation","i-lucide-download","\u002Fwiki\u002Finstall","wiki\u002Finstall\u002Findex",[203,204,208],{"title":198,"path":200,"stem":201},{"title":205,"path":206,"stem":207},"Hytale","\u002Fwiki\u002Finstall\u002Fhytale","wiki\u002Finstall\u002Fhytale",{"title":209,"path":210,"stem":211},"Network installation","\u002Fwiki\u002Finstall\u002Fnetwork","wiki\u002Finstall\u002Fnetwork",{"title":213,"icon":214,"path":215,"stem":216,"children":217,"page":39},"Reference","i-lucide-library","\u002Fwiki\u002Freference","wiki\u002Freference",[218,222,226,230],{"title":219,"path":220,"stem":221},"Migrating from GroupManager or PermissionsEx","\u002Fwiki\u002Freference\u002Fmigrating-gm-pex","wiki\u002Freference\u002Fmigrating-gm-pex",{"title":223,"path":224,"stem":225},"How permission calculation works","\u002Fwiki\u002Freference\u002Fpermission-calculation","wiki\u002Freference\u002Fpermission-calculation",{"title":227,"path":228,"stem":229},"Self-hosting the web interfaces","\u002Fwiki\u002Freference\u002Fself-hosting","wiki\u002Freference\u002Fself-hosting",{"title":231,"path":232,"stem":233},"Upgrading from v4 to v5","\u002Fwiki\u002Freference\u002Fupgrade-v4-v5","wiki\u002Freference\u002Fupgrade-v4-v5",{"title":235,"path":236,"stem":237},"Storage types","\u002Fwiki\u002Fstorage","wiki\u002Fstorage",{"id":239,"title":107,"body":240,"description":599,"extension":600,"meta":601,"navigation":602,"path":108,"seo":603,"stem":109,"updatedAt":604,"__hash__":605},"wiki_en\u002Fwiki\u002Fdevelopers\u002Fstandalone-rest.md",{"type":241,"value":242,"toc":594},"minimark",[243,247,266,271,285,288,291,301,304,312,319,326,465,492,496,499,502,505,523,527,530,533,587,590],[244,245,246],"p",{},"As well as running as a plugin or mod within a Minecraft server, LuckPerms can also be ran as a standalone app. This has two main (current) purposes:",[248,249,250,259],"ol",{},[251,252,253,254,258],"li",{},"To enable server admins to quickly spin up a ",[255,256,257],"strong",{},"LuckPerms CLI"," and run commands against a remote database, without needing to start a Minecraft server too!",[251,260,261,262,265],{},"To enable small, standalone extensions (like the ",[255,263,264],{},"REST API",") to run as a separate app.",[267,268,270],"h2",{"id":269},"luckperms-as-a-standalone-app","LuckPerms as a Standalone App",[244,272,273,274,284],{},"The standalone \"plugin\" is part of the main LuckPerms codebase, within a module called ",[275,276,280],"a",{"href":277,"rel":278},"https:\u002F\u002Fgithub.com\u002FLuckPerms\u002FLuckPerms\u002Ftree\u002Fmaster\u002Fstandalone",[279],"nofollow",[281,282,283],"code",{},"standalone",".",[244,286,287],{},"The easiest (and recommended) way to run the standalone app is using Docker.",[244,289,290],{},"You just need to ensure Docker is installed on your machine, and run the following command!",[292,293,298],"pre",{"className":294,"code":296,"language":297},[295],"language-text","docker run -it --rm ghcr.io\u002Fluckperms\u002Fluckperms\n","text",[281,299,296],{"__ignoreMap":300},"",[244,302,303],{},"This will give you a CLI that you can use just like you would a Minecraft server.",[244,305,306,307],{},"\n  ",[308,309],"img",{"src":310,"height":311},"..\u002Fimg\u002Fstandalone-1.png",400,[244,313,314,315,284],{},"You can configure your database host\u002Fuser\u002Fpassword using ",[275,316,318],{"href":317},"\u002Fwiki\u002Fconfiguration#environment-variables","environment variables",[244,320,321,322,325],{},"You can also use Docker Compose. Create a file called ",[281,323,324],{},"docker-compose.yml",":",[292,327,331],{"className":328,"code":329,"language":330,"meta":300,"style":300},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","version: \"3.8\"\nservices:\n  luckperms:\n    image: ghcr.io\u002Fluckperms\u002Fluckperms\n    # Uncomment if your database is running on the same host\n    #extra_hosts:\n    #  - \"database:host-gateway\"\n    environment:\n      LUCKPERMS_STORAGE_METHOD: mysql\n      LUCKPERMS_DATA_ADDRESS: database:3306\n      LUCKPERMS_DATA_DATABASE: minecraft\n      LUCKPERMS_DATA_USERNAME: root\n      LUCKPERMS_DATA_PASSWORD: passw0rd\n","yml",[281,332,333,355,364,372,383,390,396,402,410,421,432,443,454],{"__ignoreMap":300},[334,335,338,342,345,348,352],"span",{"class":336,"line":337},"line",1,[334,339,341],{"class":340},"swJcz","version",[334,343,325],{"class":344},"sMK4o",[334,346,347],{"class":344}," \"",[334,349,351],{"class":350},"sfazB","3.8",[334,353,354],{"class":344},"\"\n",[334,356,358,361],{"class":336,"line":357},2,[334,359,360],{"class":340},"services",[334,362,363],{"class":344},":\n",[334,365,367,370],{"class":336,"line":366},3,[334,368,369],{"class":340},"  luckperms",[334,371,363],{"class":344},[334,373,375,378,380],{"class":336,"line":374},4,[334,376,377],{"class":340},"    image",[334,379,325],{"class":344},[334,381,382],{"class":350}," ghcr.io\u002Fluckperms\u002Fluckperms\n",[334,384,386],{"class":336,"line":385},5,[334,387,389],{"class":388},"sHwdD","    # Uncomment if your database is running on the same host\n",[334,391,393],{"class":336,"line":392},6,[334,394,395],{"class":388},"    #extra_hosts:\n",[334,397,399],{"class":336,"line":398},7,[334,400,401],{"class":388},"    #  - \"database:host-gateway\"\n",[334,403,405,408],{"class":336,"line":404},8,[334,406,407],{"class":340},"    environment",[334,409,363],{"class":344},[334,411,413,416,418],{"class":336,"line":412},9,[334,414,415],{"class":340},"      LUCKPERMS_STORAGE_METHOD",[334,417,325],{"class":344},[334,419,420],{"class":350}," mysql\n",[334,422,424,427,429],{"class":336,"line":423},10,[334,425,426],{"class":340},"      LUCKPERMS_DATA_ADDRESS",[334,428,325],{"class":344},[334,430,431],{"class":350}," database:3306\n",[334,433,435,438,440],{"class":336,"line":434},11,[334,436,437],{"class":340},"      LUCKPERMS_DATA_DATABASE",[334,439,325],{"class":344},[334,441,442],{"class":350}," minecraft\n",[334,444,446,449,451],{"class":336,"line":445},12,[334,447,448],{"class":340},"      LUCKPERMS_DATA_USERNAME",[334,450,325],{"class":344},[334,452,453],{"class":350}," root\n",[334,455,457,460,462],{"class":336,"line":456},13,[334,458,459],{"class":340},"      LUCKPERMS_DATA_PASSWORD",[334,461,325],{"class":344},[334,463,464],{"class":350}," passw0rd\n",[466,467,468,474,480,486],"ul",{},[251,469,470,471,284],{},"Start the app using: ",[281,472,473],{},"docker compose up -d",[251,475,476,477],{},"View the console using: ",[281,478,479],{},"docker compose logs -f luckperms",[251,481,482,483],{},"Send a command using: ",[281,484,485],{},"docker compose exec luckperms send \u003Ccommand>",[251,487,488,489],{},"Stop the app using: ",[281,490,491],{},"docker compose down",[267,493,495],{"id":494},"luckperms-rest-api-for-developers","LuckPerms REST API (for developers)",[244,497,498],{},"The LuckPerms REST API is an \"extension\" that can run within the standalone app (described above).",[244,500,501],{},"It allows other programs, applications or scripts to easily read\u002Fmodify\u002Fwrite LuckPerms data, without needing to interact with the database directly.",[244,503,504],{},"For more information, and instructions for how to use the API, please see:",[466,506,507,516],{},[251,508,509,510,515],{},"The ",[275,511,514],{"href":512,"rel":513},"https:\u002F\u002Fgithub.com\u002FLuckPerms\u002Frest-api",[279],"LuckPerms\u002Frest-api"," GitHub repository & readme",[251,517,509,518],{},[275,519,522],{"href":520,"rel":521},"https:\u002F\u002Fpetstore.swagger.io\u002F?url=https:\u002F\u002Fraw.githubusercontent.com\u002FLuckPerms\u002Frest-api\u002Fmain\u002Fsrc\u002Fmain\u002Fresources\u002Fluckperms-openapi.yml",[279],"API Specification",[267,524,526],{"id":525},"extensions-within-the-standalone-app-for-developers","Extensions within the Standalone App (for developers)",[244,528,529],{},"You can also create your own \"plugin-like\" Java extensions for the standalone app and have them loaded at startup!",[244,531,532],{},"It's quite easy:",[248,534,535,576],{},[251,536,537,538,541,542,575],{},"Create a file called ",[281,539,540],{},"extension.json"," at the root of your jar with the following contents:\n",[292,543,547],{"className":544,"code":545,"language":546,"meta":300,"style":300},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\"class\": \"com.example.extension.MainClass\"}\n","json",[281,548,549],{"__ignoreMap":300},[334,550,551,554,557,561,563,565,567,570,572],{"class":336,"line":337},[334,552,553],{"class":344},"{",[334,555,556],{"class":344},"\"",[334,558,560],{"class":559},"spNyl","class",[334,562,556],{"class":344},[334,564,325],{"class":344},[334,566,347],{"class":344},[334,568,569],{"class":350},"com.example.extension.MainClass",[334,571,556],{"class":344},[334,573,574],{"class":344},"}\n","\n(replace with your main class!)",[251,577,578,579,582,583,586],{},"Create a main class that extends ",[281,580,581],{},"import net.luckperms.api.extension.Extension",".\nIt should have a no-args constructor, or a constructor that just accepts a ",[281,584,585],{},"net.luckperms.api.LuckPerms"," instance.",[244,588,589],{},"That's it! Add your jar to the extensions folder.",[591,592,593],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":300,"searchDepth":366,"depth":366,"links":595},[596,597,598],{"id":269,"depth":357,"text":270},{"id":494,"depth":357,"text":495},{"id":525,"depth":357,"text":526},"Run LuckPerms as a standalone app with a REST API.","md",{},true,{"title":107,"description":599},null,"nd2g2DVF6lN6JIRxPJa1pZZrni956B2CZK_Mg8NnxSU",[607,608],{"title":103,"path":104,"stem":105,"children":-1},{"title":111,"path":112,"stem":113,"children":-1},{"editUrl":610},"https:\u002F\u002Fgithub.com\u002FTurbotailz\u002Fwiki\u002Fedit\u002Fv3-structure\u002Fen\u002Fdevelopers\u002Fstandalone-rest.md",[612],{"title":5,"icon":6,"path":7,"stem":8,"children":613},[614,615,622,634,635,641,642,654,655,665,670,676],{"title":11,"path":7,"stem":12},{"title":14,"icon":15,"path":16,"stem":17,"children":616,"page":39},[617,618,619,620,621],{"title":20,"path":21,"stem":22},{"title":24,"path":25,"stem":26},{"title":28,"path":29,"stem":30},{"title":32,"path":33,"stem":34},{"title":36,"path":37,"stem":38},{"title":41,"icon":42,"path":43,"stem":44,"children":623},[624,625,626,627,628,629,630,631,632,633],{"title":47,"path":43,"stem":44},{"title":49,"path":50,"stem":51},{"title":53,"path":54,"stem":55},{"title":57,"path":58,"stem":59},{"title":61,"path":62,"stem":63},{"title":65,"path":66,"stem":67},{"title":69,"path":70,"stem":71},{"title":73,"path":74,"stem":75},{"title":77,"path":78,"stem":79},{"title":81,"path":82,"stem":83},{"title":85,"path":86,"stem":87},{"title":89,"icon":90,"path":91,"stem":92,"children":636,"page":39},[637,638,639,640],{"title":95,"path":96,"stem":97},{"title":99,"path":100,"stem":101},{"title":103,"path":104,"stem":105},{"title":107,"path":108,"stem":109},{"title":111,"path":112,"stem":113},{"title":115,"icon":116,"path":117,"stem":118,"children":643,"page":39},[644,645,646,647,648,649,653],{"title":121,"path":122,"stem":123},{"title":125,"path":126,"stem":127},{"title":129,"path":130,"stem":131},{"title":133,"path":134,"stem":135},{"title":137,"path":138,"stem":139},{"title":141,"path":142,"stem":143,"children":650},[651,652],{"title":146,"path":142,"stem":143},{"title":148,"path":149,"stem":150},{"title":152,"path":153,"stem":154},{"title":156,"path":157,"stem":158},{"title":160,"icon":161,"path":162,"stem":163,"children":656,"page":39},[657,658,659,660,661,662,663,664],{"title":166,"path":167,"stem":168},{"title":170,"path":171,"stem":172},{"title":174,"path":175,"stem":176},{"title":178,"path":179,"stem":180},{"title":182,"path":183,"stem":184},{"title":186,"path":187,"stem":188},{"title":190,"path":191,"stem":192},{"title":194,"path":195,"stem":196},{"title":198,"icon":199,"path":200,"stem":201,"children":666},[667,668,669],{"title":198,"path":200,"stem":201},{"title":205,"path":206,"stem":207},{"title":209,"path":210,"stem":211},{"title":213,"icon":214,"path":215,"stem":216,"children":671,"page":39},[672,673,674,675],{"title":219,"path":220,"stem":221},{"title":223,"path":224,"stem":225},{"title":227,"path":228,"stem":229},{"title":231,"path":232,"stem":233},{"title":235,"path":236,"stem":237},1789086424886]