LibreWeb is an open-source decentralized web browser, leveraging IPFS. What would you do different; if you could reinvent The Internet in 21st century?
With all the knowledge and new technologies available today. I was inspired by Douglas Engelbart, Tim Berners-Lee and Ted Nelson as well as projects like IPFS, Jekyll, ARPANET and more.
Note: This project is still work in progress. However, we have a working alpha version available.
LibreWeb is:
- Free and open-source
- Decentralized
- Censorship resistant
- Operating under Windows, Linux (macOS soon)
Just download the latest LibreWeb release and get started:
Visit the dedicated documentation site for user documentation.
Reporting
Create a new issue in GitLab Issues.
Supporting
If you want to support a certain feature request or same bug that another user already reported, please let us know by using the "thumbs up" button.
You could help us with:
- Documentation
- Discussions on the Telegram or Matrix groups
- Bugs & Feature requests
- Coding
- Sponsor us
Read more how to contribute to the LibreWeb project.
Join our Telegram group or Matrix channel and become part of our community!
The current success criteria:
- Everyone should be able to easily read and create a site/blog/news page and publish the content online (without minimal technical knowledge);
- Built-in easy-to-use editor (whenever you want to publish some content without programming language knowledge);
- Decentralized (no single-point of failure or censorship), like: P2P, DHT and IPFS;
- No client-server approach (the client is also the server and visa versa) - think mesh network.
- Encrypted transfers;
- Data is stored redundantly within the network (no single-point of failure);
- Versioning/revisions of content and documenents (automatically solves broken 'links', that can't happy anymore);
- Publisher user should be able to add additional information about the document/page, eg. title or path (similar in how Jekyll is using the
YML
format for meta data) - Human-readable source-code (eg.
Markdown
format, could be extended as well); - You are in control about the layout and styling (just like with e-books);
- Content is King;
- Fast and Extensible!
Note: Since HyperText (so is HTML) is not used, you can even ditch the HTTP protocol. However TLS, for encryption, can still be used.
The sections below are mainly relevant for software developers, who want to contribute or help the LibreWeb Browser project.
Decentralized Browser is written C++ together with some external libraries. LibreWeb is using the cmark-gfm library for example, which is used for CommonMark (markdown) parsing.
We're using markdown as the source-code of the content/site. No HTML and JavaScript anymore, content is king after all.
LibreWeb Browser is also using Gnome GTK3 framework for the GUI. Using the C++ bindings, called Gtkmm.
Personally, I'm using VSCodium editor, with the following extensions installed: C/C++
, CMake
, CMake Tools
, PlantUML
, Markdown All in One
, vscode-icons
and GitLab Workflow
. But your local development setup is completely up to you.
For the GNU/Linux build you need at least:
- GCC 9 or higher (Packages:
build-essential g++-9
) - CMake (Package:
cmake
) - Ninja build system (Package:
ninja-build
) - Libcurl (Package:
libcurl4-openssl-dev
) - GTK3/Gtkmm3 (Package:
libgtkmm-3.0-dev
) - Ccache (optional, but much recommended:
ccache
)
Dependencies for testing:
- X virtual framebuffer (Package:
xvfb
) - Clang-format (Package:
clang-format
) - cppcheck (v2.10 or higher)
Note: For cross-compiling towards Windows and building on macOS see "Other platforms" section below.
Clone the source-code with SSH (do not forget --recurse-submodules
):
git clone --recurse-submodules -j5 git@gitlab.melroy.org:libreweb/libreweb-browser.git
Start the Linux build, which is using CMake and Ninja build system, using the wrapper script:
./scripts/build-lnx.sh
Optionally, use the VSCode CMake Tools
extension to start the build or build with debug targets.
Note: Linux packages are already available under releases.
To build a release target yourself including packaging under GNU/Linux, use: ./scripts/build-lnx-prod.sh
Root access is required when building Linux packages; add /opt/mxe/usr/bin
to the secure_path using: sudo visudo
.
To execute the unit tests you can configure with cmake -DUNITTEST:BOOL=TRUE
and build. Execute: ctest
command in the tst
target directory.
Or just use script:
./scripts/build-run-tests.sh
We use our own Clang LLVM C++ Programming Style Format, using clang-format command.
To automatically comply to our style format execute following script (inplace edits are performed for you):
./scripts/fix-format.sh
Check only for errors, run: ./scripts/check-format.sh
First we try to use the Google C++ Style Guide as basis.
Next, we also tend to follow the popular C++ Core Guidelines as much as possible.
See latest Developer Documentation.
Doxygen is build by default. You can disable the doxygen build, if you want, using: cmake -DDOXYGEN:BOOL=FALSE ..
First build the (Linux) target including debug symbols. Binary should be present in the build/src
folder.
Next, check for memory leaks using valgrind
by executing:
./scripts/valgrind.sh
Or to generate a memory usage plot in massif format, execute:
./scripts/valgrind-plot.sh
We are cross-compiling towards Windows using GNU/Linux.
- MXE Gtkmm3 / Curl Binary packages (static build using Meson build with GCC11, see below for more info)
- CMake (Package:
cmake
) - Ninja (Package:
ninja-build
) - Nullsoft Scriptable Install System (Package:
nsis
)
For more information and the latest pre-build GTK3 Windows download, please my other GTK 3 bundle repo.
Note: We're currently busy trying to upgrade the whole GTK stack.
We used the following build command to get the Windows dependencies and MXE cross-compilation toolset:
make gtkmm3 curl -j 16 MXE_TARGETS='x86_64-w64-mingw32.static' MXE_PLUGIN_DIRS='plugins/gcc10'
NOTE: Soon we need gcc11, but GTK3 upstream needs to create a new release that fixes the GCC11 builds.
Add the following line to the end of the ~/.bashrc
file:
export PATH="/opt/mxe/usr/bin:$PATH"
Please, be sure you meet all the requirements above. So your MXE environment should be ready in: /opt/mxe/usr
.
To start the cross-compile build towards Windows 64-bit (using GNU/Linux as host) you can use the commands below.
Build a Windows development release:
./scripts/build-win.sh
Note: Windows Installer is already available under releases.
Build a production release + packaging with NSIS Installer, execute the following:
./scripts/build-win-prod.sh
For more info, see also: Packaging readme.
- Xcode (
xcode-select --install
) - Brew (
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
) - CMake (brew:
cmake
) - Libcurl (brew:
curl
) - Gtk3/Gtkmm3 (brew:
gtkmm3
) - GTK Mac Integration (brew:
gtk-mac-integration
) - Ninja (brew:
ninja
)
We're currently using GitHub Actions for the macOS build. You could already download the artifact if you want, but do not expect the runtime to work.
Note: Packaging towards MacOS is still in progress.
For more info, see also: Packaging readme
LibreWeb Browser is licensed under the MIT license (more info).
For research document plus findings including explanation (like diagrams) see the: