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.
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-8Service name beside the icon on the Profiles screen. Independent of the editable subscription profile 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 | emojiService icon, tinted with the app’s accent. Supply a transparent image URL, image data URL, or emoji.
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 URIWebsite or app deeplink opened by the service icon and name.
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 URIPayment or renewal destination. Its presence adds the round payment button under the service icon.
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 | emojiImage or emoji for the round payment button, tinted with the app’s accent.
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: 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: 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: Baresoft Pairs with the serviceInfo widget and the service heading in the compact home. Use a short, recognizable service name.
mihonator-servicelogo
HTTPS image URLPNG or SVG URL for the service widget.
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: 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 | falsetrue uses the compact home layout with service mark, traffic card, and connect control.
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 namesOrdered home widgets: announce, networkSpeed, outboundModeV2, trafficUsage, networkDetection, tunButton, vpnButton, systemProxyButton, intranetIp, memoryInfo, metainfo, changeServerButton, serviceInfo.
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 nameProxy group shown on the change-server control.
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:valueProxy 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: 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 URLSubscription renewal URL. The compact home shows the button when fewer than 3 days remain, including an expired subscription.
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 URLExtra-traffic purchase URL. The compact home shows the button when less than 10 percent of the quota remains.
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 | updateadd applies style only on first import. update applies style on every refresh.
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.
mihonator-denywidgets
true | falsetrue locks the home layout so the user cannot rearrange widgets.
mihonator-denywidgets: true Controls whether the widget layout can be rearranged. It is a UI preference, not an access-control or device-management policy.
mihonator-globalmode
true | falsefalse hides outbound-mode controls in the tray, proxy page, and widgets.
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 flagsComma list of flags. A missing flag stays off: minimize, autorun, shadowstart, autostart, autoupdate, openlogs, closeconnections.
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.
mihonator-androidsecure
true | falsetrue forces mixed-port 0 on Android.
mihonator-androidsecure: true Applies on Android only. It disables the local mixed proxy port while leaving the VPN tunnel as the connection path.
mihonator-newdomain
hostnameRewrites the subscription host on the next update. Path and query stay the same.
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.
No matching header. Try “palette”, “traffic”, or “widgets”, or .
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.
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.