Mihonator/DocumentationIn development

For providers

Make the client yours

Mihonator response headers for service names, icons, and payment links, with a reference for proposed palette and layout settings.
On this page

Service controls and customization. The service and payment headers configure the current Profiles screen. The mihonator-* sections describe the broader interface design contract. Quota and refresh metadata are covered in provider setup.

Send these as HTTP response headers alongside the YAML subscription. They are not fields in the YAML body. Header names are case-insensitive. Use curl -i 'https://sub.example.com/DEMO_TOKEN' to inspect a response; curl’s -H option adds a header to the outgoing request.

Learn with the interactive walkthrough
22 headers

Service and payment controls

These headers are read by the current app. Refresh a profile to update its service corner; omitted values clear the previous metadata.

profile-service-name

text | base64:UTF-8

Service name beside the icon on the Profiles screen. Independent of the editable subscription profile name.

profile-service-name
profile-service-name: Demo VPN

A missing name falls back to the selected profile’s name. Long names are shortened to fit. Use base64: followed by standard Base64 of the UTF-8 value for non-ASCII text.

profile-service-icon

image URL | data URL | emoji

Service icon, tinted with the app’s accent. Supply a transparent image URL, image data URL, or emoji.

profile-service-icon
profile-service-icon: https://baresoft.net/images/mihonator/service/ufo.svg

Supports SVG, PNG, JPEG, GIF and bundled Twemoji. The alpha channel becomes an accent-colored mask, so use transparent artwork; source colors are ignored. Missing or unavailable images use the default globe. Inline image payloads are limited to 2 MiB.

profile-service-url

absolute web URL | app URI

Website or app deeplink opened by the service icon and name.

profile-service-url
profile-service-url: https://provider.example/account

The name and icon open this link only when tapped. App schemes require an installed handler. Local-file and executable/script schemes are rejected; the URI path, query and escaping are preserved.

profile-payment-url

absolute web URL | app URI

Payment or renewal destination. Its presence adds the round payment button under the service icon.

profile-payment-url
profile-payment-url: demovpn://subscription/renew

This is a separate destination from the service URL. The button appears whenever a valid payment link is present; it does not depend on remaining traffic or expiry. Omitting the header removes it after a successful refresh.

profile-payment-icon

image URL | data URL | emoji

Image or emoji for the round payment button, tinted with the app’s accent.

profile-payment-icon
profile-payment-icon: https://baresoft.net/images/mihonator/service/coin.svg

Uses the same formats and accent tint as the service icon. Missing or unavailable artwork falls back to a payment coin. The icon has no effect without a valid profile-payment-url. Emoji values can use base64: UTF-8 encoding.

Palette

Try eight explicit colors in the home screen preview, or review the earlier single-accent format. Both headers are design proposals for app integration.

mihonator-palette

role=RRGGBB; role=RRGGBB; …

Proposed full palette with eight named colors: background, surface, text, muted, accent, success, warning, error. Every role updates the website preview; app support is not implemented yet.

mihonator-palette
mihonator-palette: background=0D0D14; surface=181825; text=CDD6F4; muted=A6ADC8; accent=74C7EC; success=A6E3A1; warning=F9E2AF; error=F38BA8

Draft contract: include all eight roles exactly once, separated by semicolons. Values are opaque six-digit HEX colors without #. Preset names are editor shortcuts, not transmitted values. Black background is background=000000. Borders and selected surfaces are derived from the base roles. Keep mihonator-hex separate; it cannot encode this full palette.

mihonator-hex

RRGGBB[:variant][:pureblack]

Theme color, optional variant, optional pure black. Variants: tonalSpot, fidelity, monochrome, neutral, vibrant, expressive, content, rainbow, fruitSalad.

mihonator-hex
mihonator-hex: 2F7A74:neutral

Use six hexadecimal digits without #. The variant and pureblack modifier are optional. Example: 74C7EC:tonalSpot:pureblack. Individual variant or pureblack values are also part of the contract.

Service identity

Set the name, mark, and background that subscribers recognize.

Name shown on the service widget.

mihonator-servicename
mihonator-servicename: Baresoft

Pairs with the serviceInfo widget and the service heading in the compact home. Use a short, recognizable service name.

HTTPS image URL

PNG or SVG URL for the service widget.

mihonator-servicelogo
mihonator-servicelogo: https://baresoft.net/favicon.png

Use a publicly reachable PNG or SVG logo. Its URL must remain accessible when the subscription is refreshed.

mihonator-background

HTTPS image URL[,opacity]

Background image URL. Optional opacity 1-100 after a comma.

mihonator-background
mihonator-background: https://baresoft.net/images/hero.jpg,30

Opacity is an integer from 1 to 100. Keep foreground labels legible over the image. Omit the header to leave the background unspecified.

Home screen and proxies

Choose the home layout, the order of widgets, and how proxy groups appear.

mihonator-newboard

true | false

true uses the compact home layout with service mark, traffic card, and connect control.

mihonator-newboard
mihonator-newboard: true

The compact home presents the service identity, subscription details, selected server, and connection control. Purchase buttons use this layout. Widget-grid editing is hidden in this mode.

mihonator-widgets

comma-separated widget names

Ordered home widgets: announce, networkSpeed, outboundModeV2, trafficUsage, networkDetection, tunButton, vpnButton, systemProxyButton, intranetIp, memoryInfo, metainfo, changeServerButton, serviceInfo.

mihonator-widgets
mihonator-widgets: announce,metainfo,outboundModeV2,networkDetection

Order is significant: the widget layout follows the supplied sequence. This list applies to the widget layout, not the compact home selected by mihonator-newboard.

mihonator-serverinfo

proxy group name

Proxy group shown on the change-server control.

mihonator-serverinfo
mihonator-serverinfo: Proxy

The value must match a group in the subscription YAML. Use it to direct the change-server control to the intended selector.

mihonator-view

key:value; key:value

Proxy page layout. Keys: type (list or tab), sort (none, delay, name), layout (loose, standard, tight), icon (none or icon), card (expand, shrink, min, oneline).

mihonator-view
mihonator-view: type:list; sort:delay; layout:tight; icon:icon; card:shrink

type selects list or tab. sort accepts none, delay, or name. layout accepts loose, standard, or tight. icon accepts none or icon. card accepts expand, shrink, min, or oneline.

Purchase links

Bring subscribers back to your checkout when a plan or quota needs attention.

mihonator-buyplan

HTTPS checkout URL

Subscription renewal URL. The compact home shows the button when fewer than 3 days remain, including an expired subscription.

mihonator-buyplan
mihonator-buyplan: https://provider.example/plans

Requires mihonator-newboard: true and an expiry value from subscription-userinfo. Opens the provider’s URL. At exactly 3 days remaining, the trigger has not been reached.

mihonator-buytraffic

HTTPS checkout URL

Extra-traffic purchase URL. The compact home shows the button when less than 10 percent of the quota remains.

mihonator-buytraffic
mihonator-buytraffic: https://provider.example/traffic

Requires mihonator-newboard: true and a known positive total quota. Remaining traffic is total minus upload and download. At exactly 10% remaining, the trigger has not been reached. If both purchase conditions apply, display both buttons.

Behavior and updates

Define when settings apply, which controls are available, and how a subscription moves between domains.

mihonator-custom

add | update

add applies style only on first import. update applies style on every refresh.

mihonator-custom
mihonator-custom: update

add applies the subscription style on first import. update reapplies it on refresh. The contract allows local user overrides to take precedence over provider settings; it does not define a forced-override mechanism.

true locks the home layout so the user cannot rearrange widgets.

mihonator-denywidgets
mihonator-denywidgets: true

Controls whether the widget layout can be rearranged. It is a UI preference, not an access-control or device-management policy.

false hides outbound-mode controls in the tray, proxy page, and widgets.

mihonator-globalmode
mihonator-globalmode: false

false hides outbound-mode controls. This affects the interface; it does not replace the routing rules in the YAML configuration.

mihonator-settings

comma-separated flags

Comma list of flags. A missing flag stays off: minimize, autorun, shadowstart, autostart, autoupdate, openlogs, closeconnections.

mihonator-settings
mihonator-settings: minimize, autorun, shadowstart, autostart

When this header is supplied, its list is explicit: omitted flags are off. autoupdate refers to app update checks; profile-update-interval is the separate subscription refresh setting.

true forces mixed-port 0 on Android.

mihonator-androidsecure
mihonator-androidsecure: true

Applies on Android only. It disables the local mixed proxy port while leaving the VPN tunnel as the connection path.

Rewrites the subscription host on the next update. Path and query stay the same.

mihonator-newdomain
mihonator-newdomain: sub.baresoft.net

Supply only the new host, without a scheme, path, or query. The next refresh replaces the host while preserving the subscription path and query parameters.

The YAML parameter

mihonator-override

This setting belongs inside the GLOBAL proxy group. A value of true preserves the provider’s curated member list in global mode.

YAML example
proxy-groups:
  - name: GLOBAL
    type: select
    mihonator-override: true
    proxies:
      - DIRECT

The example uses DIRECT as a minimal member. Replace it with the group members defined by your service.