# Pi-hole Web Interface View stats and control your Pi-hole via this web interface. For the previous PHP-based web interface, see [pi-hole/AdminLTE](https://github.com/pi-hole/AdminLTE/). ### Web [Preview](https://web.pi-hole.net/) ## Changes compared to the AdminLTE interface - Eliminates the reliance on server-side rendering scripts - Eliminates spaghetti code resulted from heavily modifying the base AdminLTE template - Reduces attack vectors by forcing interactions to go through an API instead of directly calling server functions. - Makes it easier for new developers to figure out the code, which speeds up development - Makes the split between client and server code much more explicit - Allows us to easily generate fake data for testing - Includes all the benefits that come from React (ES6 JavaScript), including automatic DOM manipulations and reusable components ## Getting Started (Development) - Install Node.js + npm (usually installed together): - Install at least 10.x - You should either install it via your package manager or one of the `curl | bash` scripts they provide: - You should also install your distro's build tools just in case - `build-essential` for Debian distros, `gcc-c++` and `make` for RHEL distros - Fork the repository and clone to your computer (not the Pi-hole). In production the Pi-hole only needs the compiled output of the project, not its source - Open the folder in the terminal - Run `npm install` - This will install all the packages listed in `package.json` and will let you build/run the web interface - Run `npm run start-fake` to make sure that it is working - This will launch the web interface on port 3000 in debug mode - If it crashes/has a compile error it will show you the code and the error - Changes will be automatically applied and the web interface will reload - If you've never used React, you should read the [React Quick Start](https://reactjs.org/docs/hello-world.html) and/or the [Tutorial](https://reactjs.org/tutorial/tutorial.html) before diving too deep into the code. - When you are ready to make changes, make a branch off of `development` in your fork to work in. When you're ready to make a pull request, base the PR against `development`. ## Testing With Fake Data - Follow the "Getting Started" guide above - Checkout the branch you want to test using `git checkout` - Run `npm install` just to make sure you have the correct dependencies for the branch - Run `npm run start-fake` to start the web interface with fake data - See the `npm start-fake` section of the getting started guide above for more details, like the port number - Note: interactive API features, like adding to the whitelist, will not work with fake data ## Testing With Real Data - Follow the "Getting Started" guide above - Checkout the branch you want to test using `git checkout` - Run `npm install` just to make sure you have the correct dependencies for the branch - Open `package.json` and add `"proxy": "http://pi.hole"`. Change the URL to a URL that your API is listening on if it is not `http://pi.hole` (ex. `http://my.device.local:8000`) - Run `npm run start` to start the web interface - See the `npm start-fake` section of the getting started guide above for more details, like the port number