DevEvil Search is a fast, simple, open-source search engine powered by public APIs. It delivers web, image, video, and news search results using the Brave Search API, enriched with instant summaries from Wikipedia and definitions from Free Dictionary API. It also supports dynamic background images via the Pexels API.
- β¨ Features
- πΈ Screenshots
- βοΈ Requirements
- π How To Get API Keys
- π οΈ Installation
- π§ͺ Local Development
- π Production Deployment Guide (IMPORTANT)
- π¨ Customization
- π CORS Configuration
- π‘ API Documentation
- π€ Contributing
- π Multi-type search: Web, Images, Videos, News
- π Instant Wikipedia summaries (when relevant)
- π Instant word definitions from Free Dictionary API
- πΌοΈ Dynamic high-quality random background images (Pexels)
- π Country-specific results (region biasing)
- π Dark / Light mode support
- π‘οΈ SafeSearch filtering (on/off)
You need:
-
Node.js 18+
-
A VPS (for backend API server)
-
A web host (for frontend)
-
Nginx (or Apache reverse proxy)
-
API Keys:
- Brave Search API
- Pexels API
- Go to Brave Search API dashboard (Brave Search Developer Portal).
- Create an account.
- Subscribe to a plan (Free tier available with limited requests).
- Generate your API key.
- Copy the key.
You will use it as:
BRAVE_API_KEY=your_brave_api_key_here- Go to Pexels developer page.
- Create an account.
- Generate a free API key.
- Copy the key.
You will use it as:
PEXELS_API_KEY=your_pexels_api_key_heregit clone https://github.com/DevEvil-Universe/DevEvil-Search
cd devevil-searchnpm installRename .env.example file to .env and add your API keys to it:
BRAVE_API_KEY=your_brave_api_key
PEXELS_API_KEY=your_pexels_api_keyYou can run DevEvil Search locally on your computer without a VPS by using:
- XAMPP (recommended for Windows)
- WAMP
- MAMP (Mac)
- OR any normal PHP local server
This allows you to test the backend API (Node.js) and the frontend (PHP) together before deploying.
First, run the backend:
node server.jsYour API is available at:
http://localhost:5000
Keep this terminal window open.
Download XAMPP:
https://www.apachefriends.org/
Then:
- Install XAMPP.
- Start Apache from XAMPP Control Panel.
Place all frontend files here:
C:\xampp\htdocs\devevil-search\
Now open:
http://localhost/devevil-search/
If you have PHP installed:
php -S localhost:8000Place your frontend files in the current folder.
Then visit:
http://localhost:8000
Backend remains at:
http://localhost:5000
- Install WAMP from wampserver.com
- Put your frontend in:
C:\wamp64\www\devevil-search\
Visit:
http://localhost/devevil-search/
- Install MAMP
- Place frontend in:
/Applications/MAMP/htdocs/devevil-search/
Visit:
http://localhost:8888/devevil-search/
- Backend (Node.js) β http://localhost:5000
- Frontend (PHP via XAMPP) β http://localhost/devevil-search
You need:
- VPS β Backend (Node.js API)
- Shared Hosting / Server β Frontend (PHP)
- Reverse Proxy β Connect frontend to backend securely
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install nodejsnpm install -g pm2Start your server:
pm2 start server.js --name devevil-search
pm2 save
pm2 startupInstall nginx:
sudo apt install nginxCreate config file:
sudo nano /etc/nginx/sites-available/devevil-searchExample configuration:
server {
server_name api.yourdomain.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}Enable it:
sudo ln -s /etc/nginx/sites-available/devevil-search /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginxNow your backend API will be available at:
https://api.yourdomain.com/api/search
Replace all the api urls in the js folder with your own API URL.
Upload frontend files to your hosting, such as cPanel.
- Website name
- Meta description
- Logo
- Title tags
- Search result layout
- Page title format
- SEO tags
- Brand name
- Links
Edit:
/css/style.css
/css/result.css
Modify CSS variables or color values.
- Create folder:
/img
-
Upload your images
-
Replace image paths inside:
index.phpsearch.php
By default, backend allows:
const allowedOrigins = ['http://localhost'];Change this to your real frontend domain:
const allowedOrigins = ['https://yourdomain.com'];GET /api/search
| Parameter | Description |
|---|---|
| q | Search query (required) |
| type | web, images, news, videos |
| safe | active / off |
| cr | countryUS, countryGB, countryDE, etc |
| start | pagination index |
curl "http://localhost:5000/api/search?q=elon+musk&type=web"curl "http://localhost:5000/api/search?q=mountains&type=images"curl "http://localhost:5000/api/search?q=ai&type=web&safe=active&cr=countryUS"{
"search": {
"items": [
{
"title": "Example Title",
"link": "https://example.com",
"displayLink": "example.com",
"snippet": "Example description..."
}
],
"searchInformation": {
"totalResults": "100"
}
},
"searchInformation": {
"totalResults": "100"
},
"wikipedia": {
"title": "Artificial intelligence",
"extract": "Artificial intelligence (AI) is...",
"image": "https://upload.wikimedia.org/...",
"url": "https://en.wikipedia.org/wiki/Artificial_intelligence"
},
"definition": {
"word": "intelligence",
"partOfSpeech": "noun",
"definition": "The ability to acquire knowledge..."
}
}search.items[]β Search resultswikipediaβ Instant summary (if available)definitionβ Dictionary result (if available)
GET /api/background
curl "http://localhost:5000/api/background"{
"imageUrl": "https://images.pexels.com/...",
"photographer": "John Doe",
"profileUrl": "https://pexels.com/@johndoe",
"category": "nature"
}Contributions are welcome!
Feel free to open issues or submit pull requests.
Give the repo a β if you find it useful!


