A modern-looking, lightening fast, privacy respecting, secure, self-hostable meta search engine.

Overview

Websurfx

A modern-looking, lightning-fast, privacy-respecting, secure meta search engine (pronounced as websurface or web-surface /wɛbˈsɜːrfəs/.) written in Rust. It provides a fast and secure search experience while respecting user privacy.



Readme | Discord | GitHub | Documentation

GitHub GitHub Repo stars GitHub forks GitHub code size in bytes GitHub issues GitHub pull requests GitHub Workflow Status GitHub release (latest by date including pre-releases) Maintenance GitHub contributors

Table of Contents

Features 🌈

  • Proper NSFW blocking
  • 🎨 High level customizability with 9 colorchemes provided by default with a simple theme, also supporting creation of your custom themes and colorschemes very quickly and easily
  • 🔍 Advanced image search
  • 🔐 Fast, private and secure
  • 🆓 100% free and open source
  • 🌈 and lots more...

⬆️ Back to Top

Preview 🔭

Main Page

Search Page

404 Error Page

⬆️ Back to Top

Installation and Testing 🛠️

For full setup instructions, see: Installation

To get started with Websurfx, clone the repository, edit the config file which is located in the websurfx{.verbatim} directory and install redis server by following the instructions located here and then run the websurfx server and redis server using the following commands:

git clone https://github.com/neon-mmd/websurfx.git
cd websurfx
cargo build
redis-server -p 8082 &
./target/debug/websurfx

Once you have started the server, open your preferred web browser and navigate to http://127.0.0.1:8080 to start using Websurfx.

Warning Please be aware that the project is still in the testing phase and is not ready for production use.

⬆️ Back to Top

Configuration 🔧

For full configuration instructions, see: Configuration

Websurfx is configured through the config.lua file, located at websurfx/config.lua.

⬆️ Back to Top

Theming 🎨

For full theming and customization instructions, see: Theming

Websurfx comes with several themes and colorschemes by default which you can apply and edit through the config file. Support for custom themes and colorschemes using css and develop your own unique-looking website.

⬆️ Back to Top

Multi-Language Support 🌍

Note Currently, we do not support other languages but in future we would start accepting contributions regarding language support because we believe that language should not be a barrier for entry.

⬆️ Back to Top

System Requirements 📊

At present, we only support x86_64 architecture systems but will love to have contributions to extend to other architectures as well.

⬆️ Back to Top

FAQ (Frequently Asked Questions) 🗨️

Why Websurfx?

The main goal of the Websurfx project is to provide a fast, secure, and privacy-focused meta search engine. While there are many meta search engines available, they do not always guarantee the security of their search engine, which is essential for ensuring privacy. For example, memory vulnerabilities can leak private or sensitive information, which is never good. Websurfx is written in Rust, which guarantees memory safety and eliminates such problems. Many meta search engines also lack key features such as advanced image search, which is required by many graphic designers, content creators, and others. Websurfx aims to provide these features and others, such as proper NSFW blocking, to improve the user experience.

Why AGPLv3?

Websurfx is released under the AGPLv3 license to ensure that the source code remains open and transparent. This helps to prevent the inclusion of spyware, telemetry, or other malicious code in the project. AGPLv3 is a strong copyleft license that ensures the source code of the software remains open and available to everyone, including any modifications or improvements made to the code.

Why Rust?

Rust was chosen as the programming language for Websurfx due to its memory safety features, which can help prevent vulnerabilities and make the codebase more secure. Rust is also faster than C++, which helps to make Websurfx fast and responsive. In addition, Rust's ownership and borrowing system allows for safe concurrency and thread safety in the codebase.

⬆️ Back to Top

More Contributers Wanted 📣

We are looking for more willing contributors to help grow this project.For more information on how you can contribute, check out the project board and the CONTRIBUTING.org file for guidelines and rules for making contributions.

⬆️ Back to Top

Supporting Websurfx 💖

For full details and other ways you can help out, see: Contributing

If you're using Dashy and would like to help support its development, then that would be awesome! Contributions of any type, any size, are always very much appreciated, and we will appropriately credit you for your effort.

Several areas that we need a bit of help with at the moment are:

  • Better and more colorchemes - Help fix colorchemes and add other famous colorchemes.
  • Improve evasion code for bot detection - Help improve code related to evade ip blocking and emulate human behaviours located in everyone engine file.
  • Logo - Help create a logo for the project and website.
  • Docker Support - Help write a docker compose file for the project.
  • Submit a PR to add a new feature, fix a bug, update the docs, add a theme, widget or something else.
  • Star Websurfx on GitHub.

⬆️ Back to Top

Documentation 📘

Note We are willing to have any contribution regarding documentation as this helps everyone using this project.

⬆️ Back to Top

Roadmap 🛣️

Coming soon!! 🙂 .

⬆️ Back to Top

Contributing 🙋

Contributions are welcome from anyone. It doesn't matter who you are; you can still contribute to the project in your way.

Not a developer but still want to contribute?

Check out this video by Mr. Nick on how to contribute.

Developer

If you are a developer, have a look at the CONTRIBUTING.org document for more information.

⬆️ Back to Top

License 📜

Websurfx is available under the AGPLv3 license.

⬆️ Back to Top

Credits 🤝

We would like to thank the following people for their contributions and support:



⬆️ Back to Top




Thank you for Visiting

Comments
  • Improve documentation clarity and completeness

    Improve documentation clarity and completeness

    This pull request includes several improvements to the Websurfx project's documentation. The changes were made to improve the clarity and completeness of the README and CONTRIBUTING files, and to ensure that contributors have a clear understanding of the project's goals and requirements.

    The changes include:

    • Refactoring the project goals for clarity and improved grammar.

    • Adding a brief introduction to the project and its main features in the README.

    • Clarifying the installation process with specific commands and instructions for the rolling and master branches in the README.

    • Expanding the contributing guidelines to include required knowledge and guidelines in the README.

    • Updating the CONTRIBUTING file to improve its clarity and organization, reorganizing the existing guidelines and clarifying the requirements for contributing to the project.

    These changes should improve the readability and usability of the project's documentation, making it easier for users and contributors to understand and use the project effectively.

    opened by alamin655 1
  • Improve code to better evade bot detection and ip blocking

    Improve code to better evade bot detection and ip blocking

    What does this PR do?

    This PR adds more request headers to spoof the requests and better evade being flagged as a bot.

    Why is this change important?

    This change is necessary to not get flagged and IP banned while scraping and aggregating results from upstream search engines.

    Author's checklist

    • [x] add appropriate cookie header
    • [x] fix Content-Type header if not correct.

    Related issues

    Closes #8

    opened by neon-mmd 0
  • optimise code for large scale server use and closes #7

    optimise code for large scale server use and closes #7

    What does this PR do?

    This PR optimizes code by adding the ability to fetch results from upstream search engines concurrently using tokio::join!().

    Why is this change important?

    This allows for fetching and aggregating results faster and makes it more available for large scale server use.

    Author's checklist

    • [x] optimize code by adding the ability to fetch code concurrently.
    • [x] add random delays between each 2 concurrent requests.

    Related issues

    Closes #7

    enhancement 
    opened by neon-mmd 0
  • Add documentation pages in the wiki

    Add documentation pages in the wiki

    Need to write different documentation pages about theming, installation, configuration, etc in the wiki and also make empty links in the project to point to their respective sections int the wiki

    documentation help wanted 
    opened by neon-mmd 0
  • Improve readme to look cleaner and more attractive

    Improve readme to look cleaner and more attractive

    What does this PR do?

    Improves readme.md and makes it look more attractive

    Why is this change important?

    This PR is important as this improves the readme which helps others visiting the project better understand the project and its goals.

    Author's checklist

    • [x] Fix formatting errors
    • [x] Add images
    • [x] Add status badges
    • [x] Add icons
    • [x] Add more sections

    Related issues

    Closes #9 and Closes #3

    documentation 
    opened by neon-mmd 0
  • Improve and restructure readme to look attractive

    Improve and restructure readme to look attractive

    opened by neon-mmd 0
  • Improve code to better evade bot detection while scraping

    Improve code to better evade bot detection while scraping

    The code needs some extra improvements like adding cookie header with appropriate cookies for each upstream search engine and also adding other headers to better spoof and protect against bot detection and better emulate human behavior and also evade IP blocking/banning.

    Files seeking changes are:

    • src/engines/duckduckgo.rs
    • src/engines/searx.rs
    opened by neon-mmd 0
  • Optimise code for large scale server use

    Optimise code for large scale server use

    Optimise code by using tokio async to aggregate search results from each upstream server concurrently/simultaneously with random delay in between each simultaneous requests.

    For example: If there are 4 threads than four simultaneous requests could be made to each server and fetch their result scrape them and aggregate their results and then add a random delay and continue with another 4 and so and so forth.

    Example code:

    use std::error::Error;
    use tokio::time::delay_for;
    use reqwest::Client;
    
    #[tokio::main]
    async fn main() -> Result<(), Box<dyn Error>> {
        let client = Client::new();
        let urls = vec![
            "https://example.com/page1",
            "https://example.com/page2",
            "https://example.com/page3",
        ];
    
        let mut tasks = Vec::new();
        for url in urls {
            tasks.push(tokio::spawn(async move {
                let resp = client.get(url).send().await?;
                let body = resp.text().await?;
                // Process the HTML body here
                Ok(())
            }));
        }
    
        for task in tasks {
            task.await??;
        }
    
        Ok(())
    }
    
    enhancement 
    opened by neon-mmd 0
  • Add status badges in the readme

    Add status badges in the readme

    Currently the readme (which is written in markdown) does not have any status badges but the readme should clearly show a few status badges these are:

    • Build status (showing the github workflow status)
    • Issue and pull request trackers (showing the number of open issues and pull requests )
    • License (showing which license is the project using)
    • Rating (showing the number of stars for this project on github)
    • Repo size (showing the size of this repository)

    These all build statuses can be added using the shields.io website.

    In markdown file html code can be added something like this:

    <a href="https://github.com/neon-mmd/websurfx/graphs/contributors">
       <img src="https://contrib.rocks/image?repo=neon-mmd/websurfx" />
    </a>
    

    Note: All contributions should go into the rolling branch of this repository and for before you contribute fork this project add your appropriate changes to your fork and then add a PR mentioning this issue.

    documentation 
    opened by neon-mmd 0
  • Write an about page for the project int the website with appropriate css styling

    Write an about page for the project int the website with appropriate css styling

    At present the about page of the website just contains dummy text and it needs to show a clear and concise description about the project in the website. The about page's html code (which uses handlebars templating) is located under the public/templates/ folder in the project and its css stylesheet is located under public/static/themes folder.

    Note: All contributions should go into the rolling branch of this repository and for before you contribute fork this project add your appropriate changes to your fork and then add a PR mentioning this issue.

    help wanted good first issue 
    opened by neon-mmd 0
  • Fix and add more colorschemes to the website theme

    Fix and add more colorschemes to the website theme

    We have 9 colorschemes for the website theme located under the public/static/colorschemes/ folder in the project. These colorschemes allows the user to change the color of the theme being used in the website. They all are written in css and have 9 variables in each colorscheme file to play with. At present all colorschemes except the catppuccin-mocha needs to be fixed and also you can add more famous colorschemes like tokyo-night into the project.

    Notes:

    1. You can refer to the simple theme located under the public/static/themes/ folder to know where each color variables are being used.
    2. All contributions should go into the rolling branch of this repository and for before you contribute fork this project add your appropriate changes to your fork and then add a PR mentioning this issue.
    help wanted good first issue 
    opened by neon-mmd 0
Releases(0.5.0)
  • 0.5.0(May 5, 2023)

    What's Changed

    • Improve documentation clarity and completeness by @alamin655 in https://github.com/neon-mmd/websurfx/pull/1
    • Add previous and next button to navigate to different pages by @neon-mmd in https://github.com/neon-mmd/websurfx/pull/2
    • Improve readme to look cleaner and more attractive by @neon-mmd in https://github.com/neon-mmd/websurfx/pull/10
    • Add more colorschemes.
    • Add code to evade bot detection.
    • Add pagination support.
    • Bug fixes.

    New Contributors

    • @alamin655 made their first contribution in https://github.com/neon-mmd/websurfx/pull/1
    • @neon-mmd made their first contribution in https://github.com/neon-mmd/websurfx/pull/2

    Full Changelog: https://github.com/neon-mmd/websurfx/commits/0.5.0

    Source code(tar.gz)
    Source code(zip)
Owner
neon_arch
neon_arch
A blazingly fast static web server with routing, templating, and security in a single binary you can set up with zero code. :zap::crab:

binserve ⚡ ?? A blazingly fast static web server with routing, templating, and security in a single binary you can set up with zero code. ?? UPDATE: N

Mufeed VH 722 Dec 27, 2022
Host These Things Please - a basic http server for hosting a folder fast and simply

http Host These Things Please - a basic HTTP server for hosting a folder fast and simply Selected features See the manpage for full list. Symlinks fol

thecoshman 367 Dec 23, 2022
Simple and fast web server

see Overview Simple and fast web server as a single executable with no extra dependencies required. Features Built with Tokio and Hyper TLS encryption

null 174 Dec 9, 2022
Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust.

Actix Web Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust Features Supports HTTP/1.x and HTTP/2 Streaming and pipelining

Actix 16.3k Jan 8, 2023
A fast, boilerplate free, web framework for Rust

Tower Web A web framework for Rust with a focus on removing boilerplate. API Documentation Tower Web is: Fast: Fully asynchronous, built on Tokio and

Carl Lerche 969 Dec 22, 2022
:zap: fast http framework for rust

zap ⚡ The mission of zap is, to deliver a basic, but fast rust web server library. Documentation About This code is based on tokio's minihttp project,

Daniel Oltmanns 51 Jun 7, 2022
🚀Memory safe, blazing fast, configurable, minimal hello world written in rust(🚀) in a few lines of code with few(1092🚀) dependencies🚀

?? hello-world.rs ?? ?? Memory safe, blazing fast, minimal and configurable hello world project written in the rust( ?? ) programming language ?? ?? W

mTvare 2.7k Jan 7, 2023
A real fast minecraft api (wip)

crust a real fast minecraft api (huge emphasis on W I P!!!) read the docs built with this section should list any major frameworks that you built your

thrizzle 3 Aug 9, 2022
Static Web Server - a very small and fast production-ready web server suitable to serve static web files or assets

Static Web Server (or SWS abbreviated) is a very small and fast production-ready web server suitable to serve static web files or assets.

Jose Quintana 496 Jan 2, 2023
Fast GraphQL CDN on Cloudflare Edge.

EdgeQL EdgeQL is a fast GraphQL CDN on Cloudflare Edge, delivering optimized GraphQL responses with low latency. Easy to use and integrate, EdgeQL lev

null 5 Apr 15, 2023
Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transactions of your non-custodial wallets on a provider of your choice, all while respecting your privacy

Bitcoin Push Notification Service (BPNS) Description Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transacti

BPNS 1 May 2, 2022
🔎 Search millions of files at lightning-fast speeds to find what you are looking for

?? Search millions of files at lightning-fast speeds to find what you are looking for

Shiv 22 Sep 21, 2022
MASQ Network 121 Dec 20, 2022
Open-source tool to enforce privacy & security best-practices on Windows and macOS, because privacy is sexy 🍑🍆

privacy-sexy Open-source tool to enforce privacy & security best-practices on Windows and MacOs, because privacy is sexy ?? ?? privacy-sexy is a data-

Subconscious Compute 3 Oct 20, 2022
User-friendly secure computation engine based on secure multi-party computation

CipherCore If you have any questions, or, more generally, would like to discuss CipherCore, please join the Slack community. See a vastly extended ver

CipherMode Labs 356 Jan 5, 2023
A traditional web forum built in Rust with modern technology to be fast, secure, scalable, and stable.

Volksforo A traditional web forum built in Rust with modern technology to be fast, secure, scalable, and stable. Stack Rust actix-web askama ScyllaDB

Josh 5 Mar 21, 2023
ripgrep recursively searches directories for a regex pattern while respecting your gitignore

ripgrep (rg) ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern. By default, ripgrep will resp

Andrew Gallant 35k Jan 2, 2023
ripgrep recursively searches directories for a regex pattern while respecting your gitignore

ripgrep (rg) ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern. By default, ripgrep will resp

Andrew Gallant 35k Dec 31, 2022
A lightweight async Web crawler in Rust, optimized for concurrent scraping while respecting `robots.txt` rules.

??️ crawly A lightweight and efficient web crawler in Rust, optimized for concurrent scraping while respecting robots.txt rules. ?? Features Concurren

CrystalSoft 5 Aug 29, 2023
Shogun search - Learning the principle of search engine. This is the first time I've written Rust.

shogun_search Learning the principle of search engine. This is the first time I've written Rust. A search engine written in Rust. Current Features: Bu

Yuxiang Liu 5 Mar 9, 2022