KRISTALL(1)

🌸 NAME 🌸

okay so this is kristall(1), from the General Commands Manual, and it's literally the manual page for kristall β€” a cross-platform graphical small-internet client. That's the whole NAME section, bestie πŸ’…


✨ SYNOPSIS ✨

kristall [FLAGS]... [URL]

that's the whole vibe: flags first, URL optional, go off πŸ‘‘


πŸ¦‹ DESCRIPTION πŸ¦‹

kristall is a small-Internet browser primarily designed for browsing geminispace, but also supports gopher, finger, and basic HTTP/S. It tries to fill the hole of graphical browsers for these alternative Internet protocols, with a high usability, feature richness, and somewhat familiar interface for newcomers. no cap, it's giving niche-internet main character energy 🌈


πŸŽ€ FLAGS πŸŽ€

  • -h, --help β€” Displays help information. cute, useful, iconic.
  • -v, --version β€” Displays version information. for when you need the receipts πŸ”₯
  • -w, --new-window β€” Opens URL in a new window if another Kristall session is already running (instead of opening a new tab). window behavior, not tab behavior, iykyk.
  • -i, --isolated β€” Starts the instance of Kristall as an isolated session that cannot communicate with other Kristall windows. lone-wolf mode 🐺

okay so the main interface of Kristall consists of three parts:

  • the navigation bar on top,
  • the content view in the center
  • and the status bar on the bottom

In the navigation bar, you have some buttons and your URL bar. yes bestie, that's the whole setup.

You can enter any supported URL in the URL bar, press Return and Kristall will then load the page in the content view. You usually need to specify the url scheme to navigate to a specific site, but you can omit the gemini:// prefix for gemini pages. If you enter a URL with no scheme, and it looks like a URL (e.g "tilde.pink"), Kristall will assume that it is in fact a gemini URL. If you enter something in the URL bar that doesn't look like a URL (e.g "i like dogs"), it will be assumed a search query, and will be forwarded to the search engine that is set in the Settings. lowkey smart fr fr 🫢

The two buttons on the left of the navigation bar that give you the ability to navigate back and forth in your browsing history. The button with the round arrow is the refresh button and allows you to reload the currently displayed site. While a site is loading, it is replaced with the stop button (square icon) that allows you to cancel the current request. Tip: Some additional buttons can also be enabled in the settings, to quickly navigate to the home page, and even the 'root' and 'parent' of the current URL! (See Additional Toolbar Items in Settings) πŸ’–

On the right side of the URL bar you will find two buttons:

  • The button with the small heart icon in it will add or remove this page to your favourites, this can be done as well by pressing Ctrl+D. When the heart on the button is filled, the site is contained in your favourites. If not, the heart has only a outline display. Clicking this button will open a small menu to allow you to quickly place the favourite in a folder of your choosing (by default 'Unsorted'). You can press Return in this menu to quickly affirm the options displayed in it. πŸŽ€
  • The button with the shield icon toggles the use of client certificates. Pressing it when no client certificate is enabled, a dialog will pop up asking you to select or create a certificate. When a certificate is enabled, the button will have a filled shield with a small lock in it. Pressing the button now will disable the currently used certificate. Note that if you're using a transient certificate, Kristall will ask you a safety question before destroying the certificate. safety first, bestie πŸ”

πŸ“„ Content view πŸ“„

The content view renders the requested document. For hypertext documents (i.e gemtext, markdown, etc), you get a nicely rendered version of those documents, other text files are displayed in monospace. Audio and video files are played in a small built-in media player that allows you to play/pause the media, scroll around in the time line and mute/unmute audio. Images are rendered in an interactive view where you can drag the image around and zoom in/out with the mouse wheel. it's giving multimedia moment πŸ’…

Documents that can't be rendered will be displayed with file size and mime type, so you can save them to disk and open the files with another program. no panic, it's just handing you the info 🫢

Right-clicking in the content view will produce a menu which allows you to copy text, navigate back/forward in history, and copy or open links which are being hovered over. If you right click a HTTP/S link you will also see an option "Open with external web browser" which allows you to open these pages in your default WWW browser. slay, external browser handoff ✨

πŸ“Š Status bar πŸ“Š

The status bar displays auxiliary information:

On the left, you can see the link target when you hover a link. On the right, you can see the document size, time needed to load the document and the mime type of the content. This is especially important when Kristall is not able to render the document nicely. A "(cached)" indicator will appear to the left of the mime type, indicating that the page has been read from cache. cache behavior, noted πŸ”


This chapter explains what each menu button does. I hope that most stuff isn't surprising πŸ˜‰

πŸ“ File πŸ“

New Tab will open a new tab to surf.

New Window will open a new window to browse in.

Save as allows you to save the currently displayed file to your disk.

Close Tab will close the current tab. Does the same as clicking the small (Γ—) button on the tab itself.

Manage Certificates will bring up a dialog that allows you to create, delete or change client certificates.

Settings will open a dialog that helps you configure Kristall to your likings.

Quit will close Kristall.

This menu contains means to navigate the internet.

Go to home will navigate your current tab to your home page.

Backward will navigate one page back in your history.

Foreward will navigate one page foreward in your history.

Root will take you to the root directory of the current site. e.g if you are currently at gemini://example.com/gemlog/some-document.gmi, you will be taken to gemini://example.com/

Parent will take you to the 'parent' directory of the current site. e.g if you are at gemini://example.com/parent/some-document.gmi, you will be taken to gemini://example.com/parent/

Refresh will reload the current page. This may be necessary for CGI scripts or other interactive content.

Add to favourites will add or remove the current page to/from your list of favourites.

πŸ‘€ View πŸ‘€

This menu allows you to show/hide dockable dialogs.

Document Outline toggles the document outline. Documents with text/gemini get an automatic outline generation that can be used to navigate larger documents quicker. If you're reading this help document inside of Kristall, this is a good place to try this feature out! πŸ¦‹

Favourites opens a dock containing a list of all your favourite (a.k.a bookmarked) sites. Open your favourites into a new tab by double-clicking or pressing Return on the entries. If you right click on an entry you will be presented with a menu in which you can edit the name or location of the entry, or delete it. Right-clicking in the window (not on an entry, not on a group) will allow you to create a new "group" of entries. Right clicking on a group will allow you to rename the group, or recursively delete it (be careful!). bestie, be careful for real πŸ’€

History shows the surfing history of the current tab. Double-clicking an entry navigates back and forth in your history without disturbing the list.

πŸ†˜ Help πŸ†˜

This menu contains some stuff that provides help or information about Kristall.

Help displays the help manual (this document).

Changelog will open a document that lists the changes in Kristall in a bulleted list.

About shows a dialog with some information about Kristall.

About Qt shows a dialog containing legal information about the Qt version used.


βš™οΈ SETTINGS βš™οΈ

Kristall offers a vast amount of settings. You can style the documents to your liking, changing fonts and colors. You can also fine-tune the behaviour of Kristall to match your likings and keep track of your trusted pages. Please note that Kristall has been designed mostly for browsing geminispace, thus many of these settings are specific or exclusive to Gemini only. gemini girlies, this one's for you πŸ’œ

🧩 Generic 🧩

This tab contains an unsorted list of settings that allow you to tweak Kristalls behaviour.

Start Page is the URL to the page that will be loaded for new tabs and windows. Default is about:favourites.

Search Engine is the search engine to use when typing non-URLs in the URL bar. A handful of Gemini search engines are provided as a drop-down. If you would like to specify your own, specify it in a format similar to the following:

gemini://example.com/search?%1

Note the "%1" at the end of the URL. This is where search queries will be inserted. This must be provided in order for Kristall to work with the search engine correctly. Be aware that search engine URLs can vary. For example, a different search engine may appear like so:

gemini://example2.com/search/another/%1

Additional Toolbar Items contains various additional toolbar items which some may find useful.

  • Home button opens the configured home page in the current tab.
  • New tab button appears to the right of the tab bar. This simply adds a new tab to the current window.
  • Root button takes you to the root directory of the current site. (See Menus>Navigation section for explanation of what this does).
  • Parent button takes you to the parent directory of the current site. (See Menus>Navigation section for explanation of what this does).

UI Theme controls whether the Qt interface is displayed in a dark or a light theme. Selecting Light or Dark will use the provided Qt light/dark themes. OS Default will use your system theme. dark mode girlies rise πŸŒ™

Icon Theme controls the specific icon set that the Qt interface will use. Usually, the default Auto option should be good enough, however for those using the OS Default UI theme, this option may be useful.

UI Density controls the margin of the toolbar buttons.

  • Compact has a very low margin
  • Classic has the original big margin

Enabled Protocols allows you to fine-tune which protocols are fetched by Kristall. By default, only Gemini is enabled, all other protocols are disabled. Disabled protocols are either not served, and produce an error message, or are forwarded to your OS handler for that URL scheme.

Unknown Scheme changes the behaviour how Kristall handles unknown/disabled URL schemes. Use OS default handler will invoke your OS default, Display error message will just pop up a message box and tell you that Kristall cannot handle this URL.

Max. Number of Redirections is a setting that allows you to restrict sites to redirect you only a certain number of times before erroring out. Setting this to 0 will disable redirections completely, displaying an error with the target URL. zero redirections, zero chaos, okay maybe some chaos 😭

πŸ”€ Redirection Handling

Okay bestie, Redirection Handling is literally your control room for redirects, and it lets you fine-tune the way Kristall allows redirections. Each option decides whether Kristall asks you to allow the redirect or just does it silently. ✨

  • Ask for cross-scheme redirection β€” pops up a message box if a host tries to redirect you from one URL scheme to another, e.g. when a web server redirects you from HTTP to HTTPS.
  • Ask for cross-host redirection β€” pops up the message box for all redirections through host boundaries, e.g. when example.com redirects you to www.example.com.
  • Ask for cross-scheme or cross-host redirection β€” enables both of the previous behaviours, asking when any cross-boundary redirection happens.
  • Ask for all redirections β€” pops up a message box every time a server tries to redirect you, keeping you in full control over all redirections.
  • Silently redirect everything β€” the exact opposite of that, accepting all redirections without warning or notice.

⏱️ Network Timeout

Network Timeout is the time a server is allowed to not respond anything before an error message appears. Important bit: as long as a server dripples some bytes to Kristall, no timeout will happen, so having a slow or bad connection shouldn’t yield timeouts. 😌

πŸ–₯️ Display

This tab contains tweaks you can apply to display behaviour β€” change text effects or rendering of documents. πŸŽ€

  • Render emojis β€” toggles whether to render emojis using installed emoji fonts. Disabling this can help prevent text rendering issues due to emojis. Note that emojis are only supported in Kristall builds with Qt 5.13 or later.
  • URL bar highlights β€” sets whether the URL bar should use β€œfancy” highlights. The highlighting simply makes the domain of the site more prominent/visible, and the text around it slightly dimmed. This is purely a cosmetic feature.
  • Text Rendering β€” controls whether Kristall parses text input files or not. This is usually set to Fancy, which renders text/html, text/gemini, text/markdown and text/gophermap to a nice, hyperlinked display. When set to Always plain text, Kristall will display all text/* files as plaintext files instead. This may be inconvenient, but necessary for misparsed sites.
  • Use typographer’s quotes β€” sets whether to replace regular quotation marks, that is "these", and 'these', with fancy Unicode quotes, which include β€œthese”, and β€˜these’. This is a purely cosmetic feature that may aid in readability.
  • ANSI Escape Sequences β€” determines the method of handling ANSI escape codes. This allows a document to alter some of the format (colour, etc) of text.
    • Ignore β€” ignores ANSI sequences and leaves them in the text. This option will often create eyesores out of pages that have fancy ANSI art!
    • Interpret (preformatted text only) β€” allows Kristall to interpret ANSI escape sequences in preformatted text blocks.
    • Strip β€” a hybrid of the above. It strips ANSI sequences from the text, and displays the text normally, as if the escape sequences were not there.
  • Enable text highlights β€” enables bolding and underlining in text/gemini documents. Bolding **like this** also works.
  • Gopher Map β€” lets you choose a modern iconized style for gopher maps or, if you are an old schooler, just use a textual description of the item types in the map.
  • Hidden files in file:// directories β€” determines whether hidden files will display in local directory listings (i.e. file:// URLs which do not point to a specific document but rather a directory).
  • Strip <nav> from HTML pages β€” removes the <nav> tag from HTML pages. This might make certain pages more readable, others completely unusable.

πŸ—ƒοΈ Cache

Kristall employs a small cache system that makes forward/backward navigation much quicker. This tab provides controls to tweak the caching behaviour. πŸ¦‹

  • Total cache size limit β€” sets the total amount of memory that can be used by Kristall to cache pages. By default this is set to 500 KiB, but can be set to 0 to completely disable the caching system. The larger this number is, the more memory you are allowing Kristall to use.
  • Cached item size threshold β€” the maximum size of a single cached item. By default this is set to 400 KiB. This prevents Kristall from caching any pages that are large from clogging up the in-memory cache.
  • Cached item life β€” the amount of time in minutes before a single cached item is considered β€œexpired.” When a cached item is β€œexpired”, it is not read from cache, but instead re-retrieved from the server. Cache life can be disabled by enabling the Unlimited item life option. Note: Cached item life is only recommended if you desperately want to keep your memory usage to a minimum, otherwise, having Unlimited item life is usually a great convenience, and due to the usually very small size of pages in geminispace, gopherspace, etc β€” it doesn’t require much memory.

πŸ’… Style

In this tab, you can customise the document rendering in Kristall. The left pane contains a vast array of options to tweak, and the right pane displays a preview of your currently-selected style. Many items in the Style category have either a Font, Color, or both buttons β€” click these to change the respective value. πŸ’–

  • Background Color β€” the color that fills the empty space in a document.
  • Standard Font β€” lets you change the font used for all non-preformatted and non-heading text. Choose the color and font family/size/style.
  • Preformatted Font β€” the font and text color used for all <pre> tags in HTML or preformatted blocks in text/gemini. This should be a monospace font, otherwise ASCII art will break horribly. Note to MacOS X users: "Andale Mono" is a good font choice here.
  • H1 Font β€” lets you change the font and color for primary headings in documents.
  • H2 Font β€” lets you change the font and color for secondary headings in documents.
  • H3 Font β€” lets you change the font and color for ternary headings in documents.
  • Blockquote Font β€” lets you change the font and colour for blockquotes in documents.
  • Local Link Color β€” the color in which links that refer to the same host and protocol are rendered.
  • Foreign Link Color β€” the color in which links that refer to another host, but the same protocol, are rendered. This helps to recognize when you change the content provider with a link.
  • Cross-Scheme-Color β€” used for all links that change protocol. For example: if you are currently visiting a gemini-served page and are referred to a page in gopher space, this color will be used. This gives you more control over your surfing experience.
  • Local Link Prefix β€” a small string that is placed before a link to the same host.
  • Extern Link Prefix β€” a small string that is placed before a link to a different host.
  • Block Quote Color β€” the background color that allows you to highlight block quotes.
  • Auto-Theme Generation β€” an experimental feature that can be set to Disabled, Light Theme and Dark Theme. When not set to Disabled, Kristall will ignore all your beautiful color settings and tries to create a color scheme based on the current page’s host name. This allows different styles for each host visited and brings some recognizability in gemini and gopher space.
  • Left/right Page Margin β€” the distance of horizontal page content to the left/right borders. If you have Enable text width limit enabled, this value is only used when the window size is less than the set maximum text width.
  • Top/bottom Page Margin β€” the distance of vertical page content to the top/bottom borders.

Other options are a set of extra options to enhance your reading experience (and just look cool in general). 🌈

  • Justify text β€” will make text fill the lines they are on. Note that this only works on gemtext pages.
  • Centre first H1 β€” will centre-align the first top-level heading in gemtext pages. This can look really cool with Text width limit enabled!

Text width limit sets the maximum line length of text. By default this is set to 900px. If the window itself is smaller in width than the text width limit, the text width limit is β€œadjusted” to fit inside the window. As mentioned above, horizontal margins will also be applied here. The Enabled checkbox to the right of this option toggles whether this option is enabled or not. (Enabled by default.)

Line height (paragraph) is an additional spacing between paragraph text lines. By default this is set to 5px, and can help with readability. (Gemtext-only feature.)

Line height (header) is an additional spacing between header text lines. By default this is set to 5px. (Gemtext-only feature.)

Indentation is a set of options that control the level of indent in certain text parts in Gemini pages.

  • Par β€” controls indent size of paragraphs (default: 1)
  • Hea β€” controls indent size of headings (default: 0)
  • Quo β€” controls indent size of blockquotes (default: 1)
  • Lst β€” controls indent size of unordered lists (default: 2)

Indent Size is the size in pixels of a single indent. This affects how much of an effect the above Indentation settings have on the layout (default 15).

List item marker simply lets you set what symbol is used in list items. By default this is set to Filled Circle.

Presets is a cool feature to save, restore and share your color themes. The dropdown contains a list of all previously created colors schemes. With the + button you can create a scheme with a unique name. The floppy disk button will override the currently selected preset with all the settings displayed above. The folder button will restore a previously saved preset. The last two buttons allow you to import/export presets to disk and share them with your friends! Share all your beautiful color schemes with the world! πŸŽ€

The lone text with the host.name text in it can be used to preview some auto-generated themes. It only refreshes the preview and seeds the auto generator with a new host name.

πŸ” Gemini TLS and HTTPS TLS

These two sites contain the TLS settings for either Gemini or HTTPS. Both protocols are handled in the same way, but with different data sets, so each one has its own settings page. 🫢

TRUST LEVEL is literally the whole vibe check for hosts. Trust on first encounter β€” also known as Trust On First Use (or TOFU, iykyk) β€” stores the server's public key in Kristall's database of trusted hosts. So if a host shows up later with a changed public key, you get an error displayed to you saying this host may be compromised (because a public key changing can totally be a man-in-the-middle attack 😭). Trust everything just happily accepts every single TLS server, ignoring the certificate issuer completely β€” no thoughts, head empty. Manually verify fingerprints lets you choose whether you trust a server or not based on its fingerprint; that fingerprint gets displayed on the error page, plus the option to add that server to your list of trusted hosts. 🫢

CERTIFICATE AUTHORITIES lets you enable/disable the use of your system's CA trust store. Sites that can be enabled via the CA system will not be added to the list of trusted hosts (since that list is only meant for TOFU/manual implementation), but they also won't error out. Use local certificate authorities enables that behaviour, Don't use local certificate authorities disables it. Slay, simple.

TRUSTED HOSTS displays your database of currently trusted hosts, for either Gemini or HTTPS servers. You can see the host name (which is used for identification), the date when you trusted the server, and the type of key that server is using. πŸ‘‘

REVOKE TRUST lets you remove a server from your database. Select a server in the list and click the button β€” Kristall will now act like it hasn't ever seen that server before and will handle it as an unknown one. It's giving memory wipe, honestly. πŸ’…

πŸŽ€ CERTIFICATE MANAGER πŸŽ€

This dialog is your client-certificate closet β€” it lets you manage your client certificates. There are options to import, export, delete and create new certificates, plus managing the existing ones you already have. Obsessed.

The window is separated into two halves:

  • The left half is the overview over your certificates and your available actions.
  • The right half contains information about the currently selected certificate.

The overview displays your certificates managed in groups. Each certificate lives in a group, which lets you structure your certificates better β€” good groups are, for example, Accounts, Access Token, Games, … ✨ You can move certificates between different groups using drag'n'drop: just click the certificate and drag it over into another group. So satisfying.

When you select a certificate, its details are displayed on the right side of the screen:

  • Display Name β€” the text you'll see in the overview on the left and on the smaller dialog selection screen. You can type in here whatever you want, it's just for you. This value is editable, bestie.
  • Common Name β€” the CN value that was used when creating the certificate. It's used as an identifier and it's the only required field when creating the cert. You cannot change this one. Nope.
  • Expiration Date β€” the date when your certificate expires.
  • Expires in β€” shows the number of days until your certificate expires. This may be more intuitive to work with, but communicating the expiration date is recommended.
  • Host Filter β€” a security measurement to shield you from accidental identity exposure. You can type in a URL with wildcards, using ? for a single character, * for any number of characters, including zero, and … for allowing a set of certain characters to be matched. When you try activating the certificate on a URL that does not match your Host Filter, Kristall will ask you if you really want to enable the certificate. This prevents you from accidentally using the certificate on a host or URL where it shouldn't be used. Protective king behavior. πŸ›‘οΈ
  • Auto-Enable Certificate β€” built on top of the Host Filter. When you don't have a client certificate enabled and you visit a URL that matches the Host Filter property, Kristall will ask you if you want to enable that certificate. Super convenient when you need a certificate to visit that location anyways, and this lets you quickly enable your default certificate.
  • Fingerprint β€” the SHA256 fingerprint of this certificate.
  • Notes β€” a free-form text field for your private use. Kristall does not use this value what-so-ever. Use this field to make notes about that certificate. πŸ“

You can find more information about the wildcard syntax here:

Wildcard Matching: https://doc.qt.io/qt-5/qregexp.html#qregexp-wildcard-matching

Below the certificate overview are four buttons, described from left to the right:

  • Create certificate β€” opens up the certificate creation dialog and lets you create a new certificate. ✨
  • Import certificate β€” opens up the certificate i/o dialog. This lets you import an existing certificate/key pair, supporting RSA and EC cryptography as well as PEM/DER encoded files.
  • Export certificate β€” opens up the certificate i/o dialog. This lets you export the currently selected certificate into a certificate/key pair. This allows PEM/DER encoded files, and you should remember/note what kind of format your key has. Exporting lets you back up your keys, change to another browser, or share them with your friends (don't! πŸ™ˆ).
  • Delete certificate β€” deletes the currently selected certificate or group. You'll get a security pop-up when deleting a certificate because this is a non-reversable operation (unless you made a back-up). Deleting empty groups is always allowed without a pop-up; deleting non-empty groups is not allowed.
Using passphrases for importing/exporting certificates is currently not supported. πŸ’€
Please note that changes in this dialog are immediately applied and there is no way back when doing an action. This may change in the future, but will stay like this for now. No undo era, sorry bestie.

πŸ¦‹ CERTIFICATE SELECTION DIALOG πŸ¦‹

This dialog lets you enable client certificates. It's opened by clicking the shield button in the navigation bar, or it'll automatically pop up when a site requests the use of a client certificate. Main character entrance, honestly.

In the upper part, this dialog provides you with a list of all your persistent certificates. If you want to use one of those, select the certificate and click Use. Or simply double-click a certificate to choose it. Casually iconic.

You can also ad-hoc create a new certificate with the click on Create new identity β€” this opens up the certificate creation dialog, which lets you create new identities.

On the lower part, you can create temporary certificates that have a short lifespan and will be destroyed as soon as you disable the certificate or close your client. Here for a good time, not a long time. πŸ’…

🌸 CERTIFICATE CREATION DIALOG 🌸

This dialog provides means to create a new persistent identity.

  • Group β€” the name of the group where this certificate should be stored. You can either choose an existing group from the drop down or just enter a non-existing name to create a new group ad-hoc.
  • Display Name β€” the title of the certificate that Kristall will show you. It will not be sent to a server ever. Pinky promise.
  • Common Name β€” the CN field in the X509 certificate. It's required for identification to the hosts.
  • Expiration Date β€” the date when your certificate becomes invalid. Kristall chooses a default of "1 year from now on", but you can choose any time you want, even just 30 minutes. Better choose a long time though if you don't know how long you need that certificate.

With a click on OK, Kristall will create a new certificate and put it in your certificate store. It can then be selected from the certificate selection dialog or certificate manager. Slay, you're certified now. πŸŽ€

🧚 CERTIFICATE I/O DIALOG 🧚

This dialog enables you to import or export certificate-key-pairs into or from Kristall.

  • Key Type β€” contains the type of your key. If you import, you need to select the correct key type there; if you export, it will be disabled, but shows the correct type of key for your identity.
  • Key File β€” needs to be a full path to either a .der or .pem file where Kristall will load/store the key from/to.
  • Certificate File β€” needs to be a full path to either a .der or .pem file where Kristall will load/store the certificate from/to.

⌨️ SHORTCUTS ⌨️

The following list contains all of Kristall's built-in shortcuts. Memorize them, it's giving keyboard sorcery:

  • Ctrl+T β‡’ New tab
  • Ctrl+N β‡’ New window
  • Ctrl+W β‡’ Close tab
  • Ctrl+D β‡’ Quick add/remove from favourites
  • Ctrl+L β‡’ Focus URL bar
  • Ctrl+S β‡’ Save current file
  • Ctrl+B β‡’ Toggle favourites dock
  • Ctrl+H β‡’ Toggle history dock
  • Ctrl+M β‡’ Toggle document outline dock
  • Ctrl+U β‡’ View document source
  • Ctrl+Q β‡’ Quit Kristall
  • Ctrl+, β‡’ Open settings window
  • Alt+Left β‡’ Navigate one page back
  • Alt+Right β‡’ Navigate one page forward
  • Alt+Up β‡’ Navigate to parent directory
  • Alt+Home β‡’ Go to home page
  • Alt+/ β‡’ Navigate to root directory
  • F1 β‡’ Open help manual
  • F5 β‡’ Refresh current tab

🌈 PROTOCOL SUPPORT 🌈

These protocols are currently supported via their respective URL schemes:

Gemini: https://gemini.circumlunar.space/

HTTP/HTTPS:
https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

Gopher: https://en.wikipedia.org/wiki/Gopher_(protocol)

Finger: https://en.wikipedia.org/wiki/Finger_protocol

⭐ Gemini

Kristall tries to implement the current feature set of the gemini specification. All response types of a gemini server are relayed to the user and the user chooses when to do certain actions or not. Redirections are followed automatically, and you'll be prompted depending on your configured Settings. ✨

πŸ“ Gopher

Kristall provides access to gopherspace and supports most modern/common file types:

  • Gophermaps / Directories
  • Text
  • Sound / Audio / Music
  • Images / GIFs
  • HTML
  • Mirrors

There is currently no support for automatic redirection on URL: resources or special/oldschool file types like DOS/HexBin/UUencoded data. Old school cool, but not today. πŸ’€

πŸ’œ Local file browsing

The file:// scheme can be used to browse local files and directories on your system. (This feature has not been well-tested on Windows systems πŸ™ˆ)

Browsing to a local directory, such as file:///home/user, will create a "directory listing", with links allowing you to navigate the file structure.

Browsing to an actual file, such as file:///home/user/file.txt, will cause Kristall to attempt to display that file.

🫢 Built-in sites

There is also the scheme about: which can be used to access internal sites for configuration, usability or help (this is one of them!):

about:blank

about:favourites

about:help

about:updates

about:style-preview

about:style-display

about:cache

πŸ”’ SECURITY CONCEPT

okay so kristall is not just pretty, she's got boundaries, bestie. she ships with built-in security measures so your browsing stays safe and sane ✨

🧠 Philosophy

the vibe: kristall will always try to warn you or at least ask you if anything critical is about to go down. no silent chaos allowed πŸ’…

sneakily redirecting you to another host? 🚩

you forgot to disable your client certificate when switching hosts? 🚩

kristall will pop the question β€” keep your current settings and keep going, or just disable that feature? your call, queen πŸ‘‘ these security measures are super non-intrusive and they're literally there so you "not missing the click". very demure, very mindful.

it'll also throw up some artificial hurdles when you're about to do something genuinely critical β€” like visiting a host with a mistrusted certificate, or deleting your client certificates. not to be annoying, just to make you pause and go "wait. do i actually want this?" 😭

πŸ›‘οΈ Security Measures

  • client certificates get disabled when you do a host or protocol switch
  • client certificates support host filtering so you can double-opt-in for hosts you didn't plan on
  • redirects get checked for cross-scheme or cross-host redirections πŸ•΅οΈ
  • fine-grained customizations ✨
  • TLS connections get trusted based on manually built lists, the TOFU method, or by using the certificate authority system

πŸ—„οΈ CACHING

kristall keeps an in-memory page cache, and it's on by default 🫢 this means pages you've already visited load up fast. currently, that cache gets cleared when kristall exits β€” so it's a "for this session only" kind of situation, no hoarding πŸ’€

the caching system is pretty basic, ngl: when a page loads, it gets pushed into the cache (as long as it's smaller than Cached item size threshold). if the cache goes over the Total cache size limit, the oldest item gets yeeted out πŸ—‘οΈ and Cached item life decides how long those cached pages stay valid for.

when a page is read from the cache, it tells you β€” look at the Status Bar, just to the left of the mime type. iykyk πŸ‘€

wanna turn page caching off completely? just set the Total cache size limit to 0. see Settings for the details, bestie πŸ’–


🌈 SUPPORTED MEDIA TYPES

  • text/plain
  • text/gemini
  • text/html
  • application/xhtml+xml
  • text/markdown
  • text/gophermap

that's the whole menu, and honestly? a serve πŸ“


πŸ’€ BUGS

found something cursed? bug tracker, go off:

https://github.com/MasterQ32/kristall/issues

and that's the whole page, bestie!! you made it to the very end πŸŽ€ this lil gem lives in the User manuals section of the Unix manual set, page KRISTALL(1), with the date stamped on it like a little time capsule ✨ now go browse something iconic, and remember: read the warnings, keep your certs in check, and slay πŸ’…πŸ’–

πŸ“¦ where this page comes from