Graphical small-internet client for windows, linux, MacOS X and BSDs. Supports gemini, http, https, gopher, finger.

Overview

Kristall

A high-quality visual cross-platform gemini browser.

Preview Image

Features

Screenshots

Generates Outlines

Outline Generation

Fully Customizable Site Theme

Site Theme

Build/Install Instructions

Note: master branch is the latest development status (sometimes called "nightly") whereas the tagged versions are the stable releases.

If you want to build a stable experience, check out the latest version and build that!

See BUILDING.md

Credits

  • Thanks to James Tomasino for helping out with understanding gopher
  • Thanks to Vane Vander for providing the Haiku build instructions
  • Thanks to James Tomasino, styan and tiwesdaeg for improving the Makefile
  • Thanks to Alex Naskos for providing windows build instructions
  • Thanks to tiwesdaeg for improving the application icon

Changelog

See src/about/updates.gemini

Roadmap

See ROADMAP.md

License

Kristall is released under the GPLv3 or (at your option) any later version. See LICENSE as well

Issues
  • Protocol Violation error on conforming server response

    Protocol Violation error on conforming server response

    Hey! On a non existent resource request, my Gemini server responds with the following:

    51 \r\l

    The Gemini protocol states, that

    <STATUS><SPACE><META><CR><LF>

    Status codes beginning with 5 are PERMANENT FAILURE status codes, meaning:

    "The request has failed. There is no response body. The nature of the failure is permanent, i.e. identical future requests will reliably fail for the same reason. The contents of META may provide additional information on the failure, and should be displayed to human users. Automatic clients such as aggregators or indexing crawlers should not repeat this request."

    As of my understanding, the META may be empty, so "51 \r\l" is a valid response. But Kristall shows the following error message:

    Protocol Violation The server did not serve the content you requested in a well-defined manner and Kristall could not process the data sent. Line is too short for valid protocol

    bug 
    opened by janicetr 8
  • Support mouse buttons 4 and 5 for back and forward

    Support mouse buttons 4 and 5 for back and forward

    Just noticed that I can't use the extra buttons on my mouse to move backwards and forwards in the history, as I usually can in browsers. It would be a nice addition :)

    enhancement 
    opened by ryliejamesthomas 7
  • Relative links in HTTP+HTML mode seem to not originate from current directory

    Relative links in HTTP+HTML mode seem to not originate from current directory

    Current URI: "http://example.com/somedirectory" Href attribute of clicked link: "somesite.html" URI kristall is trying to access: "http://example.com/somesite.html" Expected URI: "http://example.com/somedirectory/somesite.html"

    Update: When the current URI has either a "/" or a filename at the end, it does seem to work. The current problem seems to be the name of the folder that does not end with a "/"

    bug 
    opened by waweic 7
  • Man page documents

    Man page documents

    This PR adds a man page generation script. On Linux man pages are considered the go-to help resource by many, so I feel it's a good idea to create one

    Currently, the script looks at the gemtext about:help document, and converts it to the man roff format. A 'head' and 'tail' are also added with manpage-specific things (flags, etc) in them.

    I've opened this as a draft as there is mostly likely stuff that will have to be changed before actually merging this.

    Things to consider:

    • Currently, the script strips out the first and last 7 lines of the about:help document which don't really belong in the man page. I think there is a better approach to handling this.
    • Not yet added to a make target, so it doesn't get generated automatically yet
    • We need to work out where to actually store the man page when running make install. Might be /usr/share/man/man1?

    Suggestions are appreciated!

    opened by mikejzx 6
  • Makefile: do not assume directories exist

    Makefile: do not assume directories exist

    Hi! Build is going well until it tries to install icons.

    On my system, /usr/share/icons/hicolor/ and subdirectories do not exist. The simple workaround is obviously to create

    share/icons/hicolor/scalable/apps share/icons/hicolor/16x16/apps share/icons/hicolor/32x32/apps share/icons/hicolor/64x64/apps share/icons/hicolor/128x128/apps share/applications

    But if those could be created in the makefile it would maybe help others.

    Thanks!

    opened by nico202 6
  • Confused by MacOS installation instructions

    Confused by MacOS installation instructions

    I am trying to install Kristall on MacOS/Catalina, but the instructions are pretty cryptic:

    "Use the Makefile to build build/kristall instead of the default target. There is currently no auto-recognition of MacOS (where qmake will output a kristall.app file), so you have to be a bit more manual."

    I cloned the Kristall repo and know how to edit Makefile. I also installed qt5 and qt-editor via Homebrew. But now I am stuck - apparently I need to install "widgets and network modules," which I have no idea how to do, while it isn't at all clear how I have to edit the Makefile.

    Is this app only for experienced qt users? If not, I'd be grateful for some more helpful instructions.

    help wanted 
    opened by mroberts1 6
  • Light icons for dark themes

    Light icons for dark themes

    I'm using the OS Default theme and the black icons can be hard to see depending on the area:

    Screenshot_20200622_132541

    An option to switch icons to a white variant for dark theme users would help.

    enhancement 
    opened by Aicaya 6
  • Unable to build 0.3 on Ubuntu 20.04.

    Unable to build 0.3 on Ubuntu 20.04.

    Hello, I'm unable to build 0.3 on Ubuntu 20.02. I get the following error message:

    $ cat /etc/os-release                                                                                                                   2 ↵
    NAME="Ubuntu"
    VERSION="20.04 LTS (Focal Fossa)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 20.04 LTS"
    VERSION_ID="20.04"
    HOME_URL="https://www.ubuntu.com/"
    SUPPORT_URL="https://help.ubuntu.com/"
    BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
    PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
    VERSION_CODENAME=focal
    UBUNTU_CODENAME=focal
    $ make
    mkdir -p build
    cd build && qmake ../src/kristall.pro && make 
    make[1]: Entering directory 'xxx/kristall-0.3/build'
    g++ -c -pipe -Wno-unused-parameter -Werror=return-type -std=c++17 -O2 -std=gnu++1z -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_SVG_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I../src -I. -I../lib/luis-l-gist -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtSvg -isystem /usr/include/x86_64-linux-gnu/qt5/QtMultimediaWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtMultimedia -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o abouthandler.o ../src/abouthandler.cpp
    In file included from ../src/ssltrust.hpp:9:0,
                     from ../src/kristall.hpp:9,
                     from ../src/abouthandler.cpp:2:
    ../src/trustedhostcollection.hpp:7:20: fatal error: optional: No such file or directory
    compilation terminated.
    make[1]: *** [Makefile:960: abouthandler.o] Error 1
    make[1]: Leaving directory 'xxx/kristall-0.3/build'
    make: *** [Makefile:20: build/kristall] Error 2
    $
    

    Any idea what I might be missing? Thanks in advance!

    opened by lvets 5
  • Bus error (core dumped)

    Bus error (core dumped)

    Getting this same error when trying both the release and master branch (Arch linux):

    Bus error (core dumped)

    Here's some info from the core dump:

    master branch:

    Stack trace of thread 2856621:
    #0  0x00007f88d4f6774c gst_update_registry (libgstreamer-1.0.so.0 >
    #1  0x00007f88d4efc0af n/a (libgstreamer-1.0.so.0 + 0x390af)
    #2  0x00007f88d932a4c8 g_option_context_parse (libglib-2.0.so.0 + >
    #3  0x00007f88d4ef38dd gst_init_check (libgstreamer-1.0.so.0 + 0x3>
    #4  0x00007f88d4ef3985 gst_init (libgstreamer-1.0.so.0 + 0x30985)
    #5  0x00007f88d509bec3 n/a (libgstmediaplayer.so + 0x8ec3)
    #6  0x00007f88db11f06f n/a (libQt5Multimedia.so.5 + 0x5506f)
    #7  0x00007f88db15d84e _ZN12QMediaPlayerC2EP7QObject6QFlagsINS_4Fl>
    #8  0x0000564aa7bd9a33 n/a (/home/rjt/.local/bin/kristall/kristall>
    #9  0x0000564aa7bb375a n/a (/home/rjt/.local/bin/kristall/kristall>
    

    release

    Stack trace of thread 2933655:
    #0  0x00007f810016474c gst_update_registry (libgstreamer-1.0.so.0 + 0xa474c)
    #1  0x00007f81000f90af n/a (libgstreamer-1.0.so.0 + 0x390af)
    #2  0x00007f81041574c8 g_option_context_parse (libglib-2.0.so.0 + 0x604c8)
    #3  0x00007f81000f08dd gst_init_check (libgstreamer-1.0.so.0 + 0x308dd)
    #4  0x00007f81000f0985 gst_init (libgstreamer-1.0.so.0 + 0x30985)
    #5  0x00007f810039eec3 n/a (libgstmediaplayer.so + 0x8ec3)
    #6  0x00007f8105f4c06f n/a (libQt5Multimedia.so.5 + 0x5506f)
    #7  0x00007f8105f8a84e _ZN12QMediaPlayerC2EP7QObject6QFlagsINS_4FlagEE (libQt5Mul
    #8  0x000055f87c82f603 n/a (/home/rjt/.local/bin/kristall-0.3/kristall + 0x4d603)
    #9  0x000055f87c80ec0f n/a (/home/rjt/.local/bin/kristall-0.3/kristall + 0x2cc0f)
    

    almost identical

    Let me know if there's any other info I could give you that might help.

    opened by ryliejamesthomas 5
  • Favourites not saved on exit on Windows

    Favourites not saved on exit on Windows

    I am using nightly Windows version, downloaded today (May 24th, version 0.4).

    • Run kristall.exe
    • Do some changes to favorites, like adding a link, creating/deleting a group, etc.
    • Quit Kristall
    • Run Kristall again
    • Changes to favorites are not reflected.

    But I expect Kristall to remember my favourites.

    A workaround would be saving Settings (by clicking "OK" in Settings dialog). That saves favourites as well.

    opened by shunf4 4
  • Incorrect handling of status code 30

    Incorrect handling of status code 30

    When server sends response: 30 /\r\n the browser should redirect to home page of the server but Kristall instead shows "Protocol Violation" page with error code "Line is too short for valid protocol".

    I believe this response is valid one since status code 30 allows returning relative paths. Other Gemini browsers (for example Amfora) handle this response correctly.

    bug gemini-protocol 
    opened by Sgiath 4
  • Bug:

    Bug: "Line is too short for valid protocol"

    I'm playing around with Gemini a bit and have created a small server. This redirects the user from "" to "/". However, the message "Protocol Violation: Line is too short for valid protocol" appears. I compiled Kristell myself with the code from https://github.com/MasterQ32/kristall/releases/tag/V0.3 . I have seen that there is already such a bug (https://github.com/MasterQ32/kristall/issues/199). I'm a little confused because I should be using the latest version with the latest release, right?

    opened by marek22k 1
  • response header edge case

    response header edge case

    the second to last sentence in section 3.3 of the spec says

    If is an empty string, the MIME type MUST default to "text/gemini; charset=utf-8".

    currently kristall is interpreting it as "/" and giving an error.

    "20\r\n" error afaict "20 \r\n" text/gemini; charset=utf-8

    bug 
    opened by kkabrams 0
  • OSX build issues with latest

    OSX build issues with latest

    OS: macOS Montery terminal: kitty

    if there's anyone out there like me who is having trouble building Kristall, despite having the latest openssl and qt5 installed with brew

    here's the command I ran in the root folder that seemed to do the trick make build/kristall LFLAGS="-L/usr/local/opt/[email protected]/lib -stdlib=libc++ -headerpad_max_install_names $(EXPORT_ARCH_ARGS) -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=10.13 -Wl,-rpath,@executable_path/../Frameworks" export CXXFLAGS="-I/usr/local/opt/[email protected]/include -pipe -stdlib=libc++ -Wno-unused-parameter -Werror=return-type -std=c++17 -O2 -std=gnu++1z $(EXPORT_ARCH_ARGS) -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=10.13 -Wall -Wextra -fPIC" LDFLAGS="-L/usr/local/opt/[email protected]/lib" --debug

    I'm not super well versed with the complications involved with editing makefiles and flag values, so providing everything upfront in the command just happened to work best for me.

    opened by SpellenCox 0
  • [Linux] Middle-click doesn't open a link when a text is selected

    [Linux] Middle-click doesn't open a link when a text is selected

    Steps:

    1. select any text
    2. click a link

    The link should open in background tab. Currently, nothing happens.

    Maybe it's a Linux-only issue, because here middle-click also serves as "paste selected text" shortcut.

    If it helps, I'm using KDE on Manjaro.

    opened by Lex-2008 0
  • Refreshing page scrolls it back to top

    Refreshing page scrolls it back to top

    As a person who refreshes Antenna every 15 minutes, I would like a scroll position to be restored after the page finishes reloading :) This makes it easier to notice any changes

    opened by Lex-2008 0
Releases(V0.3)
  • V0.3(Jun 21, 2020)

    • Adds support for transient client certificates
    • Adds support for permanent client certificates
    • Adds this changelog to Kristall itself
    • Adds configurable server timeout
    • Adds support for server certificate handling (TOFU) for gemini://
    • Adds support for server certificate handling (TOFU) for https://
    • Adds nice error pages instead of silently ignoring errors or displaying a message box
    • Adds key shortcut: Pressing Escape in the URL bar now resets URL bar to current location
    • Adds support for non-UTF8 encodings. iconv really helps here!
    • Adds configurable and improved redirection handling including warnings for potentially malicious redirects.
    • Adds improved text highlighting, now works with UTF-8. Still experimental, though 😉
    • Adds about:style-preview
    • Adds new UI theme: OS Default (uses Qt's default skin)
    • Fixed bug: Status bar label now does elide links that are too long instead of resizing the window.
    • Fixed bug: Gopher end-of-file marker is now better detected.
    • Fixed bug: Auto-URL detection works with leading/trailing spaces
    • Fixed bug: Loading stats in status bar are now switched between tabs even when no active change is happening.
    • Fixes bug: Gemini query input now checks if the URL exceeds the specified limit.
    • Fixed bug: Outline rendering is now stable
    • Fixes bug: Media player now stops playing when switching to another site.
    • Refactored internal network structure. Makes room for future improvements and increases network stability a lot.
    • Refactored mime type handling
    • Updates application icon thanks to tiwesdaeg
    • Survives conman's client torture suite
    • Survives egsam's client torture suite
    Source code(tar.gz)
    Source code(zip)
  • V0.2(Jun 10, 2020)

    • Implement Ctrl+D/Add to favourites menu item
    • Implement Ctrl+S/Save as... menu item
    • Add display for "non-recognized files"
    • Added support for gopher:// and gophermaps
    • Added "go to home" menu
    • Added support for video/* and audio/* via QMediaPlayer
    • Added support for file:// scheme
    • Added status bar with loading time, file size and mime type
    • Added support for command line arguments
    • Added option to render all text/* documents as plain text.
    • Added option to render gopher maps with icons OR text only
    • Fixed bug: Correct URL escaping for gemini requests.
    • Added progress display in status bar with loading time and already transferred bytes
    • Added support for finger:// protocol
    • Added experimental highlighting and underlining for text/gemini
    • Desktop file is provided for integrating with XDG
    • Fixed bug: Preformatted lines don't break anymore
    • text/gemini parsing updated
    • Added support for block quotes
    • Added help file
    • Added shortcut to focus URL bar
    • Added possibility to save/load/share theme presets. Make everything colorful!
    • Added a lot of context menus
      • Added possibility to open links into a new tab
      • Added possibility to open history and favourite items into new tab or same tab
    • Added option to use your default OS protocol handler instead of displaying an error message.
    • Improved image pan and zooming. Explore those graphics!
    Source code(tar.gz)
    Source code(zip)
Owner
Felix Queißner
Hacker & Demoscener from southern germany, loves lowlevel and oldschool stuff
Felix Queißner
The package manager for macOS you didn’t know you missed. Simple, functional, and fast.

Stew The package manager for macOS you didn’t know you missed. Built with simplicity, functionality, and most importantly, speed in mind. Installation

Stew 20 Mar 30, 2022
GoC2 - MacOS Post Exploitation C2 Framework

goc2 c2 client/server/paylod GoC2 - MacOS Post Exploitation C2 Framework Custom C2 for bypassing EDR and ease of use.

Brian Stegemoller 33 Jun 23, 2022
a leaderboard system that can run on any Internet enabled device.

hacktoberfest-leaderboard a leaderboard system that can run on any Internet enabled device. How it works The app updates the leaderboard on README.md

Vasko Zdravevski 1 Nov 1, 2021
Quickly clone an entire org/users repositories into one directory - Supports GitHub, GitLab, Bitbucket, and more

ghorg ghorg allows you to quickly clone all of an orgs, or users repos into a single directory. This can be useful in many situations including Search

Jay Gabriels 990 Jul 31, 2022
Tidb - An open-source NewSQL database that supports Hybrid Transactional and Analytical Processing (HTAP) workloads

What is TiDB? TiDB ("Ti" stands for Titanium) is an open-source NewSQL database

null 0 Jan 5, 2022
golang script for bypass AV and work only in windows platform

antivirus bypass protection requirements golang installed usage 1 - create your payload go run create.go <ip> <port> <secret> <any url>

null 30 Jun 29, 2022
An easy-to-use Map Reduce Go parallel-computing framework inspired by 2021 6.824 lab1. It supports multiple workers on a single machine right now.

MapReduce This is an easy-to-use Map Reduce Go framework inspired by 2021 6.824 lab1. Feature Multiple workers on single machine right now. Easy to pa

Bo-Wei Chen 193 Jun 9, 2022
Windows Store Installer for VS Code

vscode-winsta11er This repo contains the code for a simple Go-based installer for the new Windows store. Releases To create a release, create and push

Microsoft 10 Feb 7, 2022
GoDumpLsass is a simple tool that can dump lsass without to get caught by Windows Defender.

GoDumpLsass GoDumpLsass is a simple tool that can dump lsass without to get caught by Windows Defender. Releases https://github.com/Enelg52/GoDumpLsas

null 5 May 24, 2022
DNStxt-exp - 一个提供查询 TXT 记录的 DNS 服务利用工具。例如:可配合 Windows 下的 certutil 工具传输小文件(64KB)

DNStxt-exp 一个提供查询 TXT 记录的 DNS 服务利用工具。例如:可配合 Windows 下的 certutil 工具传输小文件(64KB) HE

null 14 Jan 7, 2022
Advent of Code is an Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like.

Advent of Code 2021 Advent of Code is an Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved

Kemal Ogun Isik 0 Dec 2, 2021
Zach Howell 0 Jan 4, 2022
Catfetch is a small and cute fetch program written in Go

??Catfetch is a small and cute fetch program written in Go

mellowmarshe 13 Jul 28, 2022
Record CS knowlegement with XMind, version 2.0. 使用 XMind 记录 Linux 操作系统,网络,C++,Golang 以及数据库的一些设计

Psyduck 另一个用 XMind 记录 CS 基础问题的地方,同样提供了 .xmind 源文件以及导出的 .pdf 文件,XMind 版本为「XMind 2020」。 在 2020 年时,曾花了约 2 个月的时间整理了第一份 XMind 知识库: ZeroMind。 之所以额外创建一个 Repo

SmartKeyerror 4.2k Aug 1, 2022
IBus Engine for GoVarnam. An easy way to type Indian languages on GNU/Linux systems.

IBus Engine For GoVarnam An easy way to type Indian languages on GNU/Linux systems. goibus - golang implementation of libibus Thanks to sarim and haun

Varnamproject 10 Feb 10, 2022
Nintendo Switch Joycon keyboard mapper for Linux

joygo Nintendo Switch Joycon keyboard mapper for Linux First, build with -> chmod +x build && ./build Then pair your Joycons to your computer via Blue

SM177Y 1 Nov 13, 2021
Linux namespace with golang

Linux namespace with golang

null 0 Nov 10, 2021
Testing the use of a golang wrapper around UserMode Linux for making stdin

This code is for testing the use of a golang wrapper around UserMode Linux for making stdin, stdout and stderr available to attach, detach and reattach to from the host using Unix sockets.

null 0 Dec 24, 2021
Script that sets your nzxt kraken temps based on cpu temps on linux

liquidctl-cpu-temp Script that monitors cpu temps and sets cpu cooler temps according to entered fan/pump curves. Only tested on NZXT kraken z63 requi

null 1 Nov 16, 2021