All Projects → skyjake → Lagrange

skyjake / Lagrange

Licence: other
A Beautiful Gemini Client

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Lagrange

Eiskaltdcpp
File sharing program using DC and ADC protocols
Stars: ✭ 277 (+16.39%)
Mutual labels:  network, gui, client
Ether.network
https://github.com/Eastrall/Sylver
Stars: ✭ 147 (-38.24%)
Mutual labels:  network, client
Sengi
Mastodon & Pleroma Multi-account Desktop Client
Stars: ✭ 133 (-44.12%)
Mutual labels:  client, desktop
Rdbox
RDBOX is an advanced IT platform for robotics and IoT developers that highly integrates cloud-native and edge computing technologies.
Stars: ✭ 246 (+3.36%)
Mutual labels:  raspberrypi, network
Simple
The Simple Intelligent and Modular Programming Language and Environment
Stars: ✭ 120 (-49.58%)
Mutual labels:  gui, desktop
Qtnetworkng
QtNetwork Next Generation. A coroutine based network framework for Qt/C++, with more simpler API than boost::asio.
Stars: ✭ 125 (-47.48%)
Mutual labels:  network, openssl
Potatso
Potatso is an iOS client that implements Shadowsocks proxy with the leverage of NetworkExtension framework. ***This project is unmaintained, try taking a look at this fork https://github.com/shadowcoel/shadowcoel instead.
Stars: ✭ 1,925 (+708.82%)
Mutual labels:  network, client
Scala Swing
Scala wrappers for Java's Swing API for desktop GUIs
Stars: ✭ 105 (-55.88%)
Mutual labels:  gui, desktop
Libhv
🔥 比libevent、libuv更易用的国产网络库。A c/c++ network library for developing TCP/UDP/SSL/HTTP/WebSocket client/server.
Stars: ✭ 3,355 (+1309.66%)
Mutual labels:  network, openssl
Gwork
Skinnable GUI with useful widget collection. Fork of GWEN.
Stars: ✭ 179 (-24.79%)
Mutual labels:  sdl, gui
Phantomstyle
Cross-platform QStyle for traditionalists
Stars: ✭ 179 (-24.79%)
Mutual labels:  gui, desktop
Fenix
A simple and visual static web server with collaboration features.
Stars: ✭ 1,559 (+555.04%)
Mutual labels:  gui, desktop
Orion
[Moved to Gitlab] Easy to Use, Inter Planetary File System (IPFS) desktop client
Stars: ✭ 115 (-51.68%)
Mutual labels:  client, desktop
React Nodegui Starter
Starter repository for react based native desktop apps using react-nodegui
Stars: ✭ 132 (-44.54%)
Mutual labels:  gui, desktop
Desktop
Go/HTML/CSS/JS Desktop application scaffold.
Stars: ✭ 109 (-54.2%)
Mutual labels:  gui, desktop
Zookeeper Visualizer
zookeeper的可视化管理工具
Stars: ✭ 150 (-36.97%)
Mutual labels:  gui, desktop
Zserver4d
ZServer4D 是一套从商业项目剥离而出的云服务器中间件,可以承载百万级的分布式负载服务,并且支持IoT及内网穿透
Stars: ✭ 199 (-16.39%)
Mutual labels:  network, client
Assortedwidgets
OpenGL GUI library
Stars: ✭ 92 (-61.34%)
Mutual labels:  sdl, gui
Nodegui Starter
A starter repo for NodeGui projects
Stars: ✭ 93 (-60.92%)
Mutual labels:  gui, desktop
Simplenet
An easy-to-use, event-driven, asynchronous network application framework compiled with Java 11.
Stars: ✭ 164 (-31.09%)
Mutual labels:  network, client

Lagrange

Lagrange is a desktop GUI client for browsing Geminispace. It offers modern conveniences familiar from web browsers, such as smooth scrolling, inline image viewing, multiple tabs, visual themes, Unicode fonts, bookmarks, history, and page outlines.

Like Gemini, Lagrange has been designed with minimalism in mind. It depends on a small number of essential libraries. It is written in C and uses SDL for hardware-accelerated graphics. OpenSSL is used for secure communications.

Lagrange window open on URL "about:lagrange"

Features

  • Beautiful typography using Unicode fonts
  • Autogenerated page style and Unicode icon for each Gemini domain
  • Smart suggestions when typing the URL — search bookmarks, history, identities
  • Sidebar for page outline, managing bookmarks and identities, and viewing history
  • Multiple tabs
  • Identity management — create and use TLS client certificates
  • Audio playback: MP3, Ogg Vorbis, WAV
  • And more! Open about:help in the app, or see help.gmi

Downloads

Prebuilt binaries for Windows, macOS and Linux can be found in Releases. You can also find Lagrange on Flathub for Linux.

On macOS you can install and upgrade via a Homebrew tap:

$ brew tap skyjake/lagrange
$ brew install lagrange

On openSUSE Tumbleweed:

sudo zypper install lagrange

How to compile

This is how to build Lagrange in a POSIX-compatible environment. The required tools are a C11 compiler (e.g., Clang or GCC), CMake and pkg-config.

  1. Download and extract a source tarball from Releases. Please note that the GitHub/Gitea-generated tarballs do not contain the "the_Foundation" submodule; check which tarball you are getting. Alternatively, you may also clone the repository and its submodules: git clone --recursive --branch release https://git.skyjake.fi/skyjake/lagrange
  2. Check that you have the required dependencies installed: CMake, SDL 2, OpenSSL 1.1.1, libpcre, zlib, libunistring. For example, on macOS this would do the trick (using Homebrew): brew install cmake sdl2 [email protected] pcre libunistring Or on Ubuntu: sudo apt install cmake libsdl2-dev libssl-dev libpcre3-dev zlib1g-dev libunistring-dev
  3. Optionally, install the mpg123 decoder library for MPEG audio support. For example, the macOS Homebrew package is mpg123 and on Ubuntu it is libmpg123-dev.
  4. Create a build directory.
  5. In your empty build directory, run CMake: cmake {path_of_lagrange_sources} -DCMAKE_BUILD_TYPE=Release
  6. Build it: cmake --build .
  7. Now you can run lagrange, lagrange.exe, or Lagrange.app.

Installing to a directory

Set CMAKE_INSTALL_PREFIX to install to a directory of your choosing.

  1. cmake {path_of_lagrange_sources} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/dest/path
  2. cmake --build . --target install

This will also install an XDG .desktop file for launching the app.

Build options

CMake Option Description
ENABLE_BINCAT_SH Merge resource files (fonts, etc.) together using a Bash shell script. By default this is OFF, so res/bincat.c is compiled as a native executable for this purpose. However, when cross-compiling, native binaries built during the CMake run may be targeted for the wrong architecture. Set this to ON if you are having problems with bincat while running CMake.
ENABLE_IDLE_SLEEP Sleep in the main thread instead of waiting for events. On some platforms, SDL_WaitEvent() may have a relatively high CPU usage. Setting this to ON polls for events periodically but otherwise keeps the main thread sleeping, reducing CPU usage. The drawback is that there is a slightly increased latency reacting to new events after idle mode ends.
ENABLE_KERNING Use kerning information in the fonts to adjust glyph placement. Setting this ON improves text appearance in subtle ways but slows down text rendering. It may be a good idea to set this to OFF when running on a slow CPU.
ENABLE_MPG123 Use the mpg123 library for decoding MPEG audio files.
ENABLE_RESOURCE_EMBED Embed all resource files into the Lagrange executable instead of keeping them in a separate file that gets loaded at launch. Setting this ON makes it much slower to run CMake and to compile Lagrange.
ENABLE_WINDOWPOS_FIX Set correct window position after the window has already been shown. This may be necessary on some platforms to prevent the window from being restored to the wrong position.
ENABLE_X11_SWRENDER Default to software rendering when running under X11. By default Lagrange attempts to use the GPU for rendering the user interface. You can also use the --sw option at launch to force software rendering.

Compiling on macOS

When using OpenSSL 1.1.1 from Homebrew, you must add its pkgconfig path to your PKG_CONFIG_PATH environment variable, for example:

export PKG_CONFIG_PATH=/opt/homebrew/Cellar/[email protected]/1.1.1i/lib/pkgconfig

Also, SDL's trackpad scrolling behavior on macOS is not optimal for regular GUI apps because it emulates a physical mouse wheel. This may change in a future release of SDL, but at least in 2.0.14 (and earlier) a small patch is required to allow momentum scrolling to come through as single-pixel mouse wheel events. Note that SDL comes with an Xcode project; use the "Shared Library" target and check that you are doing a Release build.

Compiling on Windows

Windows builds require MSYS2. In theory, Clang or GCC (on MinGW) could be set up natively on Windows for compiling everything, but the_Foundation still lacks Win32 implementations for the Socket and Process classes and these are required by Lagrange. Cygwin is a possible alternative to MSYS2, although Cygwin builds have not been tested.

You should use a version of the SDL 2 library that is compiled for native Windows (i.e., the MSVC variant) instead of the version from MSYS2 or MinGW. You can download a copy of the SDL binaries from libsdl.org. To make configuration easier in your MSYS2 environment, consider writing a custom sdl2.pc file so pkg-config can automatically find the correct version of SDL. Below is an example of what your sdl2.pc might look like:

prefix=/c/SDK/SDL2-2.0.12/
arch=x64
libdir=${prefix}/lib/${arch}/
incdir=${prefix}/include/

Name: sdl2
Description: Simple DirectMedia Layer
Version: 2.0.12-msvc
Libs: ${libdir}/SDL2.dll -mwindows
Cflags: -I${incdir}

The -mwindows option is particularly important as that specifies the target is a GUI application. Also note that you are linking directly against the Windows DLL — do not use any prebuilt .lib files if available, as those as specific to MSVC.

pkg-config will find your .pc file if it is on PKG_CONFIG_PATH or you place it in a system-wide pkgconfig directory.

Once you have compiled a working binary under MSYS2, there is still an additional step required to allow running it directly from the Windows shell: the shared libraries from MSYS2 must be found either via PATH or by copying them to the same directory where lagrange.exe is located.

Compiling on Raspberry Pi

On Raspberry Pi 4/400, you can compile and run Lagrange just like on a regular desktop PC. Accelerated OpenGL graphics should work fine under X11.

On Raspberry Pi 3 or earlier, you should use a version of SDL that is compiled to take advantage of the Broadcom VideoCore OpenGL ES hardware. This provides the best performance when running Lagrange in a console. OpenGL under X11 on Raspberry Pi 2/3 is quite slow/experimental. When running under X11, software rendering is the best choice and the SDL from Raspbian etc. is sufficient.

The following build options are recommended on Raspberry Pi 2/3:

  • ENABLE_KERNING=NO: faster text rendering without noticeable loss of quality
  • ENABLE_WINDOWPOS_FIX=YES: workaround for window position restore issues (SDL bug)
  • ENABLE_X11_SWRENDER=YES: use software rendering under X11

User files

On Windows, user files are stored in %HOMEPATH%/AppData/Roaming/fi.skyjake.Lagrange/, unless one is using the portable distribution and there is a userdata subdirectory present in the executable directory.

On macOS, user files are stored in ~/Library/Application Support/fi.skyjake.Lagrange/.

On Linux/*BSD/other operating systems, user files stored in ~/.config/lagrange unless you have customized the XDG directories, in which case the XDG_CONFIG_HOME environment variable is used to determine where user files saved.

The usage and contents of the user files are described in the Help document. You can delete one or more of the files while Lagrange is not running to reset the corresponding data to the default/empty state.

One instance of Lagrange can be running at a time per user file directory.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].