Hajimari is a beautiful & customizable browser startpage/dashboard with Kubernetes application discovery.

Overview

Hajimari πŸŒ…

...The beginning of a pleasant experience



Hajimari

User config

Features

  • Web search bar
  • Dynamically list apps discovered from Kubernetes ingresses
  • Support for non-Kubernetes apps via custom apps config
  • Customizable list of bookmarks
  • Selectable themes
  • Custom configuration overrides per user/browser
  • Multiple instance support

Installation

Helm

helm repo add hajimari https://hajimari.io

helm repo update

helm install hajimari hajimari/hajimari

Helm docs

Locally

Clone the repo and run the following command to generate the hajimari binary:

make build

You will need to have go installed.

Hajimari will need access to a kubeconfig file for a service account with access to ingress objects.

Usage

Ingresses

Hajimari looks for specific annotations on ingresses.

  • Add the following annotations to your ingresses in order for it to be discovered by Hajimari:
Annotation Description Required
hajimari.io/enable Add this with value true to the ingress of the app you want to show in Hajimari true
hajimari.io/icon Icon name from MDI icons false
hajimari.io/appName A custom name for your application. Use if you don't want to use the name of the ingress false
hajimari.io/group A custom group name. Use if you want the application to show in a different group than the namespace it is running in false
hajimari.io/instance A comma separated list of name/s of the Hajimari instance/s where you want this application to appear. Use when you have multiple Hajimari instances false
hajimari.io/url A URL for the Hajimari app (This will override the ingress URL). It MUST begin with a scheme i.e., http:// or https:// false

Config

Hajimari supports the following configuration options that can be modified by either ConfigMap or values.yaml if you are using helm

Field Description Default Type
defaultEnable Set to true to expose all ingresses in selected namespaces by default false bool
namespaceSelector Namespace selector which uses a combination of hardcoded namespaces as well as label selectors any: true NamespaceSelector
title Title for the Hajimari instance "Hajimari" string
instanceName Name of the Hajimari instance "" string
customApps A list of custom apps that you would like to add to the Hajimari instance {} []CustomApp
groups A list of bookmark groups to add to the Hajimari instance {} []groups

NamespaceSelector

It is a selector for selecting namespaces either selecting all namespaces or a list of namespaces, or filtering namespaces through labels.

Field Description Default Type
any Boolean describing whether all namespaces are selected in contrast to a list restricting them false bool
labelSelector Filter namespaces based on kubernetes metav1.LabelSelector type null metav1.LabelSelector
matchNames List of namespace names null []string

Note: If you specify both labelSelector and matchNames, Hajimari will take a union of all namespaces matched and use them.

Custom apps

If you want to add any apps that are not exposed through ingresses or are external to the cluster, you can use the custom apps feature. You can pass an array of custom apps inside the config.

Field Description Type
name Name of the custom app String
icon URL of the icon for the custom app String
url URL of the custom app String
group Group for the custom app String

Bookmarks

Bookmark groups can be added by creating an array of group names and links.

Field Description Type
name Name of the bookmark group String
links Array of links Array

Bookmarks can be added by configuring a list of bookmarks under a group.

Field Description Type
name Name of the bookmark String
url URL of the bookmark String

Custom startpage setup

  1. Open Hajimari in your browser, click the hamburger menu in the lower lefthand corner.
  2. Modify the options you wish to change in the built-in YAML editor.
  3. Click Save and you'll be redirected to your new custom page with a random ID on the URL. Set this page as your homepage/new tab page. For the best experience in Firefox I recommend the New Tab Override extension; for Chrome Custom New Tab URL.
  4. You can make further modifications to this page at anytime under the hamburger menu.

Please note there is no authentication. You might want to run this behind ingress with access restrictions.

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

Run make help for information on linting, tests, etc.

About

Why Hajimari?

Hajimari (ε§‹γΎγ‚Š) is Japanese for beginnings. Hajimari's original intended purpose is to be used as a browser startpage, so the name seemed fitting as it's the beginning of all new tabs/windows :)

Thank you / dependencies

  • SUI For the great startpage template
  • Forecastle Ideas for integrating k8s ingress

License

Apache-2.0

Issues
  • add arm based docker image

    add arm based docker image

    Is your feature request related to a problem? Please describe. i cannot run succesffuly the helm chart on my raspberry based k8s cluster, since it fails in pulling the image Describe the solution you'd like A clear and concise description of what you want to happen. can you please add an arm based docker image

    Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered. i have considered uploading my own arm version, but it seems it is better to have it from the source repository Additional context Add any other context or screenshots about the feature request here.

    opened by abualy 3
  • Error message after k3s update to 1.22.2

    Error message after k3s update to 1.22.2

    Describe the bug After upgrading k3s to 1.22.2 i got the error message the server could not find the requested resource (get ingresses.extensions)

    Seems to be a API change.

    bug 
    opened by cbirkenbeul 3
  • Saving theme causes redirect to error page

    Saving theme causes redirect to error page

    Describe the Bug When selecting a new theme and hitting save, I am redirected to a empty page with the text startpage not found.

    To Reproduce Steps to reproduce the behavior:

    1. Go to https://hajimari.k.example.org/
    2. Click on hamburger menu in bottom left.
    3. Select new theme from the listed options
    4. Click on Save in the Options modal

    Expected Behavior Theme is saved and the modal closes or indicates the saved state

    Actual Behavior I am redirected to a new URL (example: https://hajimari.k.example.org/J3KP51T9zfYPOExLjiJuq) with the startpage not found text.

    Screenshots N/A

    Desktop (please complete the following information):

    • OS: Linux, POP_OS! 21.04
    • Browser: Firefox
    • Version: 91.0.1
    bug 
    opened by wrmilling 2
  • Add custom app support

    Add custom app support

    Describe the solution you'd like Allow users to add custom apps in addition to the k8s ingress apps. These will be defined in the customApps configuration variable.

    enhancement 
    opened by toboshii 1
  • Add Favicon

    Add Favicon

    I'm liking hajimari so far, but the lacking of a Favicon is killing me. I have a shortcut in the bookmarks bar and also my phone home screen.

    Furthermore, I used the default transparent logo. I Tried with a dark background and rounder corners but was a bit difficult to differentiate the thin lines

    Closes #14

    opened by MrMarble 0
  • Change default config path

    Change default config path

    Is your feature request related to a problem? Please describe.

    Set default config path to /config instead of /etc/hajimari

    Ref: https://github.com/toboshii/hajimari/blob/29661c5f70a43d8c8dbccc3d34c41017a9caee8c/main.go#L22

    opened by onedr0p 0
  • Add user configuration overrides

    Add user configuration overrides

    Describe the solution you'd like Allow users to POST select custom portions of the configuration to and endpoint and receive back a tokenized URL that merges that config with the base config allowing for custom name, bookmarks, and themes.

    Additional context Viper allows loading and merging configuration values so that part is easy. Just need to figure out how to store the user configs to disk.

    enhancement 
    opened by toboshii 0
  • Add handler interface

    Add handler interface

    Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

    Describe the solution you'd like A clear and concise description of what you want to happen.

    Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

    Additional context Add any other context or screenshots about the feature request here.

    enhancement 
    opened by toboshii 0
  • Hajimari dont find ingress or dont store config

    Hajimari dont find ingress or dont store config

    Describe the bug Hajimari dont find ingress or dont store config (or maybe delete defaultEnable in config file)

    To Reproduce

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hajimari
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app.kubernetes.io/instance: hajimari
          app.kubernetes.io/name: hajimari
      template:
        metadata:
          labels:
            app.kubernetes.io/instance: hajimari
            app.kubernetes.io/name: hajimari
        spec:
          volumes:
            - name: config
              persistentVolumeClaim:
                claimName: hajimari-config
          containers:
            - name: hajimari
              image: ghcr.io/toboshii/hajimari:latest
              ports:
                - name: http
                  containerPort: 3000
                  protocol: TCP
              env:
                - name: TZ
                  value: UTC
              resources: {}
              volumeMounts:
                - name: config
                  mountPath: /config
              livenessProbe:
                tcpSocket:
                  port: 3000
                timeoutSeconds: 1
                periodSeconds: 10
                successThreshold: 1
                failureThreshold: 3
              readinessProbe:
                tcpSocket:
                  port: 3000
                timeoutSeconds: 1
                periodSeconds: 10
                successThreshold: 1
                failureThreshold: 3
              startupProbe:
                tcpSocket:
                  port: 3000
                timeoutSeconds: 1
                periodSeconds: 5
                successThreshold: 1
                failureThreshold: 30
              imagePullPolicy: Always
          restartPolicy: Always
          terminationGracePeriodSeconds: 30
          serviceAccountName: hajimari
          serviceAccount: hajimari
      strategy:
        type: Recreate
    
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: hajimari-config
      namespace: default
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      volumeMode: Filesystem`
    
    apiVersion: v1
    kind: Service
    metadata:
      name: hajimari
      namespace: default
    spec:
      ports:
        - name: http
          protocol: TCP
          port: 3000
          targetPort: http
      selector:
        app.kubernetes.io/instance: hajimari
        app.kubernetes.io/name: hajimari
      type: ClusterIP
    
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: hajimari
      namespace: default
    spec:
      ingressClassName: nginx
      tls:
        - hosts:
            - 
          secretName: 
      rules:
        - host: www.ardasar.com
          http:
            paths:
              - path: /haji(/|$)(.*)
                pathType: Prefix
                backend:
                  service:
                    name: hajimari
                    port:
                      number: 3000
    
    customApps: []
    defaultEnable: true
    groups: []
    

    Expected behavior Hajimari discover ingress on kubernetes cluster

    Additional context RBAC are deployed.

    opened by JuezFenix 0
  • Add favicon

    Add favicon

    I'm liking hajimari so far, but the lacking of a Favicon is killing me. I have a shortcut in the bookmarks bar and also my phone home screen.

    Furthermore, I used the default transparent logo. I Tried with a dark background and rounder corners but was a bit difficult to differentiate the thin lines

    Closes https://github.com/toboshii/hajimari/issues/14

    opened by MrMarble 0
  • Support CRD

    Support CRD

    Is your feature request related to a problem? Please describe. Seems like it only works for type: Ingress. It would be nice to add support for Traefiks IngressRoute for instance.

    Describe the solution you'd like Some way of configuring CRD ingress

    Describe alternatives you've considered Hardcoding the ingresses to the applications list, which seems rather pointless.

    opened by cpoulsen 0
  • Set default theme

    Set default theme

    Being able to add a default Theme via the config (config.yaml) file is necessary. So all new users get one of the beautiful Theme we Set, rather than they be required to change in their browsers individually

    opened by arash-bizcover 0
  • Add status indicators to hajimari apps

    Add status indicators to hajimari apps

    Description

    This PR adds status indicators to the dashboard. There is a passive feature toggle-ish setting currently defaulting to true that can be flipped if desired.

    Type of Change

    Feature: ~~Non-Breaking~~ Change that adds functionality. While the annotation parser defaults to true, this could be considered slightly breaking as it could cause things to not work as expected. It will require some documentation update(s)

    Issues pertaining to this PR

    technically resolves #20

    Other Notes

    • Tested against k3s v1.23.3. Used Vivaldi and Chrome.
    • There may be a method or two that are extraneous as it was for a templating thing I was trying to do that hasn't worked yet.
    • I'm hoping to eventually build on this to segment the indicator based on # of replicas and have the indicators work for each.
    • Indicators do not refresh live. It uses the state it gets when the page loads.

    I'm happy to add more unit tests or make tweaks if you want me to before this is merged. I'm also happy to make tweaks and improvements after provided an issue is defined for it.

    sample_indicators_draft_1

    opened by h3mmy 4
Releases(v0.2.0)
πŸ“” Journal helps you manage multiple journals with ease from the comfort of your terminal, web browser or API client.

Journal helps you manage multiple journals with ease from the comfort of your terminal, web browser or API client. You can import/export journals as horcruxes and set simple customizations for layout, theme, and keybindings.

Paul Ebose 3 Aug 14, 2021
Server and bookmarklet to download files via youtube-dl directly from your browser

gropple A web service and bookmarklet to download videos with a single click. Pre-requisites a passing familiarity with the command line youtube-dl (p

Justin Hawkins 23 Jun 11, 2022
66 is two player game played with playing cards and from now on you can play it from browser with your friends.

altmis-alti 66 is two player game played with playing cards and this project provides multiplayer game space from browser. How to run? Clone the proje

Cem Asma 1 Feb 1, 2022
Preview tar.gz in the browser

Preview tar.gz in the browser

null 0 Dec 14, 2021
Web terminal - A (unsafe) technical demo to export a shell to web browser

Web Terminal A (unsafe) technical demo to export a shell to web browser. This pr

null 50 Jun 7, 2022
This application is used as an example HTTP/SQLite application for Litestream tutorials.

This application is used as an example HTTP/SQLite application for Litestream tutorials. It simply maintains a count of HTTP requests and persists it to a SQLite database.

Ben Johnson 12 Apr 2, 2022
A simple database application that I was asked to implement as part of a job application process

This is a simple database application that I was asked to implement as part of a job application process. They told me I could choose any languages an

null 0 Nov 24, 2021
An open-source project for managing OpenStack resources and OpenStack infrastructure in a Kubernetes cluster

kupenStack Kubernetes-Native OpenStack A Sandbox Project. Have you used OpenStack before? If so, then for you KupenStack is magic ✨ that lets you use

Jatin Parmar 0 Nov 11, 2021
kubehelper : a golang project patches the replicas field of a kubernetes deployment

kubehelper This golang project patches the replicas field of a kubernetes deployment for scaling purposes, this project is mainly just for fun and lea

Noah Dlugoszewski 1 Dec 11, 2021
Openconfig kubernetes operator

Openconfig kubernetes operator This repo covers the demo of generally using a kubernetes operator to reconcile network objects. The thought behind thi

Daniel Hertzberg 12 Mar 8, 2022
sigurlx a web application attack surface mapping tool.

sigurlx a web application attack surface mapping tool, it does ...:

Alex Munene 31 Jul 24, 2021
urlsh is URL shortener application built on Go language.

GOlang URL shortener service with UI, API, Cache, Hits Counter and forwarder using postgres and redis in backend, bulma in frontend

Jitendra Adhikari 114 Jun 20, 2022
GoTTY - Share your terminal as a web application

GoTTY - Share your terminal as a web application GoTTY is a simple command line tool that turns your CLI tools into web applications. Installation Fro

Soren L. Hansen 1.6k Jul 2, 2022
Retro-Floppy UI is a web based application for managing & using a GoTek floppy emulator running the Flash Floppy firmware.

A web user interface for a GoTek running flashfloppy utilising a Raspberry PI 0W as the storage. This allows for remote uploading of files & selecting which disk image is loaded on a retro computer like the BBC Micro or Amiga A1200

Peter Mount 5 Aug 26, 2021
A web application attack surface mapping tool. It takes in a list of urls then performs numerous probes

sigurlscann3r A web application attack surface mapping tool. It takes in a list of urls then performs numerous probes Resources Features Installation

Signed Security 8 Nov 5, 2021
A simple application lifecycle management tool with multiple servers.

A simple application lifecycle management tool with multiple servers.

Wimi Yuan 4 May 22, 2022
Compose sample application Go server with an Nginx proxy and a Postgres database

Compose sample application Go server with an Nginx proxy and a Postgres database Project

null 1 Apr 7, 2022
Simple vanilla Go CRUD application with mongoDB database with its mflix dataset that I use for my thesis about benchmarking REST API and GraphQL.

Go GraphQL Simple vanilla Go CRUD application with mongoDB database with its mflix dataset that I use for my thesis about benchmarking REST API and Gr

Adrian Edy Pratama 0 Oct 15, 2021
An application for generating Microsoft Word resumes from JSON Resume data files

ResumeFodder NOTE: Primary development has moved over to GitLab: https://github.com/andrzejressel/ResumeFodder. If you're reading this on GitHub, then

​Andrzej Ressel 1 Nov 25, 2021