For every star on GitHub, we'll donate $2 to clean up our waterways. Star us now!
This is an older, hidden page for Meltano UI. The UI is deprecated. Please see our troubleshooting page for more information.
Meltano is optimized for usage through the meltano
CLI
and direct changes to the meltano.yml
project file.
However, a web-based UI is also available for when you want to quickly check the status and most recent logs of your project’s scheduled pipelines, or if you want to give less technical team members or clients the option to configure their extractors, loaders, and pipelines themselves.
Various settings are available that let you configure the Meltano UI server, enable and disable features, and customize its appearance.
Basic functionality around managing and configuring plugins and monitoring pipelines is available, as is an experimental Analysis feature, but many (newer) features of the CLI do not yet have a UI equivalent.
Missing functionality and other improvements are being tracked in the “Pipeline management and monitoring UI” epic, and new issues and contributions from the community are more than welcome, but the team is not currently prioritizing improvements to the UI because of the heavy focus on the CLI.
Start the Meltano UI web server using meltano ui
:
meltano ui
Unless configured otherwise, the UI will now be available at http://localhost:5000.
If you’d like to use Docker Compose to manage the Meltano UI application lifecycle,
you can add the appropriate docker-compose.yml
file to your project by adding the
docker-compose
file bundle:
# For these examples to work, ensure that
# Docker Compose has been installed
docker-compose --version
# Add Docker Compose files to your project
meltano add files files-docker-compose
# Start the `meltano-ui` service in the background
docker-compose up -d
Unless configured otherwise, the UI will now be available at http://localhost:5000.
For more details and instructions, refer to README contained in the file bundle.
To learn about deploying Meltano UI in production, refer to the “Meltano UI” section of the Deployment in Production guide.
These settings can be used to configure the Meltano UI server.
Meltano UI feature settings and customization settings have their own sections.
ui.bind_host
#
MELTANO_UI_BIND_HOST
meltano ui
CLI option: --bind
0.0.0.0
The host to bind to.
Together with the ui.bind_port
setting, this setting corresponds to
Gunicorn’s bind
setting.
meltano config meltano set ui bind_host 127.0.0.1
export MELTANO_UI_BIND_HOST=127.0.0.1
meltano ui --bind=127.0.0.1
ui.bind_port
#
MELTANO_UI_BIND_PORT
meltano ui
CLI option: --bind-port
5000
The port to bind to.
Together with the ui.bind_host
setting, this setting corresponds to
Gunicorn’s bind
setting.
meltano config meltano set ui bind_port 80
export MELTANO_UI_BIND_PORT=80
meltano ui --bind-port=80
ui.server_name
#
MELTANO_UI_SERVER_NAME
The host and port Meltano UI is available at, e.g. <host>:<port>
.
The port will usually match the ui.bind_port
setting, and can be omitted when the default port for HTTP (80
) or HTTPS (443
) is used.
Unless the ui.session_cookie_domain
setting is set, this setting will be used as the session cookie domain.
If the ui.notification
setting is enabled, this setting will be used to generate external URLs in notification emails.
When set, Meltano UI will only respond to requests whose hostname (Host
header) matches this setting.
If this is undesirable, you can set the ui.session_cookie_domain
setting instead.
This may be the case when Meltano UI is situated behind a load balancer performing health checks without specifying a hostname.
If the ui.authentication
setting is enabled,
meltano ui
will print a
security warning if neither this setting or the ui.session_cookie_domain
setting has been set.
This setting corresponds to Flask’s SERVER_NAME
setting.
meltano config meltano set ui server_name meltano.example.com
export MELTANO_UI_SERVER_NAME=meltano.example.com
meltano ui setup <server_name>
can be
used to generate secrets for the ui.secret_key
and
ui.password_salt
settings, that will be stored in a
your project’s .env
file along with the specified server_name
.
meltano ui setup meltano.example.com
ui.session_cookie_domain
#
MELTANO_UI_SESSION_COOKIE_DOMAIN
The domain match rule that the session cookie will be valid for.
If not set, the cookie will be valid for all subdomains of the configured ui.server_name
.
If the ui.authentication
setting is enabled,
meltano ui
will print a
security warning if neither this setting or the ui.server_name
setting has been set.
This setting corresponds to Flask’s SESSION_COOKIE_DOMAIN
setting.
meltano config meltano set ui session_cookie_domain meltano.example.com
export MELTANO_UI_SESSION_COOKIE_DOMAIN=meltano.example.com
ui.session_cookie_secure
#
MELTANO_UI_SESSION_COOKIE_SECURE
false
Enable the Secure
flag on the session cookie, so that the client will only send it to the server in HTTPS requests.
The application must be served over HTTPS for this to make sense.
This setting corresponds to Flask’s SESSION_COOKIE_SECURE
setting.
meltano config meltano set ui session_cookie_secure true
export MELTANO_UI_SESSION_COOKIE_SECURE=true
ui.secret_key
#
MELTANO_UI_SECRET_KEY
thisisnotapropersecretkey
A secret key that will be used for securely signing the session cookie.
If the ui.authentication
setting is enabled,
meltano ui
will print a
security warning if this setting has not been changed from the default.
This setting corresponds to Flask’s SECRET_KEY
setting.
meltano config meltano set ui secret_key <randomly-generated-secret>
export MELTANO_UI_SECRET_KEY=<randomly-generated-secret>
meltano ui setup <server_name>
can be
used to generate secrets for the this setting and ui.password_salt
,
that will be stored in your project’s .env
file
along with the specified ui.server_name
.
meltano ui setup meltano.example.com
ui.password_salt
#
MELTANO_UI_PASSWORD_SALT
b4c124932584ad6e69f2774a0ae5c138
The HMAC salt to use when hashing passwords.
If the ui.authentication
setting is enabled,
meltano ui
will print a
security warning if this setting has not been changed from the default.
This setting corresponds to Flask-Security’s SECURITY_PASSWORD_SALT
setting.
meltano config meltano set ui password_salt <randomly-generated-secret>
export MELTANO_UI_PASSWORD_SALT=<randomly-generated-secret>
meltano ui setup <server_name>
can be
used to generate secrets for the this setting and ui.secret_key
,
that will be stored in your project’s .env
file
along with the specified ui.server_name
.
meltano ui setup meltano.example.com
ui.workers
#
MELTANO_UI_WORKERS
4
The number of worker processes meltano ui
will use to handle requests.
This setting corresponds to Gunicorn’s workers
setting.
meltano config meltano set ui workers 1
export MELTANO_UI_WORKERS=1
ui.forwarded_allow_ips
#
MELTANO_UI_FORWARDED_ALLOW_IPS
127.0.0.1
Comma-separated front-end (reverse) proxy IPs that are allowed to set secure headers to indicate HTTPS requests.
Set to *
to disable checking of front-end IPs, which can be useful for setups where you don’t know in advance the IP address of front-end, but you still trust the environment.
This setting corresponds to Gunicorn’s forwarded_allow_ips
setting.
meltano config meltano set ui forwarded_allow_ips "*"
export MELTANO_UI_FORWARDED_ALLOW_IPS="*"
These settings can be used to enable certain features of Meltano UI.
Meltano UI server settings and customization settings have their own sectionss
ui.readonly
#
MELTANO_UI_READONLY
false
To block all write actions in the Meltano UI, you can run it in in read-only mode.
If you’re enabling the ui.authentication
setting and would
like to only use read-only mode for anonymous users, enable the ui.anonymous_readonly
setting instead.
This setting differs from the project_readonly
setting in two ways:
meltano config meltano set ui readonly true
export MELTANO_UI_READONLY=true
ui.authentication
#
MELTANO_UI_AUTHENTICATION
false
Use this setting to enable authentication and disallow anonymous usage of your Meltano instance.
Additionally, you will need to:
Ensure your configuration is secure by setting the ui.secret_key
and ui.password_salt
settings, as well as ui.server_name
or ui.session_cookie_domain
, manually or using meltano ui setup <server_name>
.
Create at least one user using meltano user add
.
meltano config meltano set ui authentication true
export MELTANO_UI_AUTHENTICATION=true
ui.anonymous_readonly
#
MELTANO_UI_ANONYMOUS_READONLY
false
When the ui.authentication
setting is enabled,
enabling this setting will allow anonymous users read-only access to Meltano UI.
Once a user is authenticated, write actions will be available again.
This setting is especially useful when setting up a publicly available demo instance of Meltano UI for anonymous users to interact with. These users will not be able to make any changes, but admins will once they sign in.
meltano config meltano set ui anonymous_readonly true
export MELTANO_UI_ANONYMOUS_READONLY=true
ui.notification
#
MELTANO_UI_NOTIFICATION
false
Meltano can send email notifications upon certain events.
Your outgoing mail server can be configured using the mail.*
settings below.
To ease the development and testing, Meltano is preconfigured to use a local MailHog instance to trap all the outgoing emails.
Use the following docker command to start it:
docker run --rm -p 1025:1025 -p 8025:8025 --name mailhog mailhog/mailhog
All emails sent by Meltano should now be available at http://localhost:8025/
meltano config meltano set ui notification true
export MELTANO_UI_NOTIFICATION=true
These settings can be used to customize certain aspects of Meltano UI.
Meltano UI server settings and feature settings have their own sections.
ui.logo_url
#
MELTANO_UI_LOGO_URL
Customize the logo used by Meltano UI in the navigation bar and on the sign-in page (when the ui.authentication
setting is enabled).
meltano config meltano set ui logo_url https://meltano.com/meltano-logo-with-text.svg
export MELTANO_UI_LOGO_URL=https://meltano.com/meltano-logo-with-text.svg
Meltano uses Flask-Mail to send emails. Take a look at the documentation to properly configure your outgoing email server.
mail.server
#
MELTANO_MAIL_SERVER
localhost
meltano config meltano set mail server smtp.example.com
export MELTANO_MAIL_SERVER=smtp.example.com
mail.port
#
MELTANO_MAIL_PORT
1025
meltano config meltano set mail port 25
export MELTANO_MAIL_PORT=25
mail.default_sender
#
MELTANO_MAIL_DEFAULT_SENDER
"Meltano" <bot@meltano.com>
meltano config meltano set mail default_sender '"Example Meltano" <bot@meltano.example.com>'
export MELTANO_MAIL_DEFAULT_SENDER='"Example Meltano" <bot@meltano.example.com>'
mail.use_tls
#
MELTANO_MAIL_USE_TLS
false
meltano config meltano set mail use_tls true
export MELTANO_MAIL_USE_TLS=true
mail.username
#
MELTANO_MAIL_USERNAME
meltano config meltano set mail username meltano
export MELTANO_MAIL_USERNAME=meltano
mail.password
#
MELTANO_MAIL_PASSWORD
meltano config meltano set mail password meltano
export MELTANO_MAIL_PASSWORD=meltano
mail.debug
#
MELTANO_MAIL_DEBUG
false
meltano config meltano set mail debug true
export MELTANO_MAIL_DEBUG=true
mail.sendgrid_unsubscribe_group_id
#
If you are using the SendGrid SMTP API you may optionally set the SendGrid unsubscribe group ID.
MELTANO_MAIL_SENDGRID_UNSUBSCRIBE_GROUP_ID
12751
meltano config meltano set mail sendgrid_unsubscribe_group_id 42
export MELTANO_MAIL_SENDGRID_UNSUBSCRIBE_GROUP_ID=42
Meltano ships with an OAuth Service to handle the OAuth flow in the Extractors’ configuration.
To run this service, you **must** have a registered OAuth application on the [Authorization server](https://www.oauth.com/oauth2-servers/definitions/#the-authorization-server).
Most importantly, the Redirect URI must be set properly so that the OAuth flow can be completed.
This process is specific to each Provider.
The OAuth Service is bundled within Meltano, and is automatically started with meltano ui
and mounted at /-/oauth
for development purposes.
As it is a Flask application, it can also be run as a standalone using:
FLASK_ENV=production FLASK_APP=meltano.oauth python -m flask run --port 9999
oauth_service.url
#
MELTANO_OAUTH_SERVICE_URL
The local OAuth service for development purposes is available at /-/oauth
.
meltano config meltano set oauth_service url https://oauth.svc.meltanodata.com
export MELTANO_OAUTH_SERVICE_URL=https://oauth.svc.meltanodata.com
oauth_service.providers
#
MELTANO_OAUTH_SERVICE_PROVIDERS
all
To enable specific providers, use comma-separated oauth.provider
names from discovery.yml
. To enable all providers, use all
.
meltano config meltano set oauth_service providers facebook,google_adwords
export MELTANO_OAUTH_SERVICE_PROVIDERS=facebook,google_adwords
oauth_service.facebook.client_id
#
OAUTH_FACEBOOK_CLIENT_ID
meltano config meltano set oauth_service facebook client_id <facebook-client-id>
export OAUTH_FACEBOOK_CLIENT_ID=<facebook-client-id>
oauth_service.facebook.client_secret
#
OAUTH_FACEBOOK_CLIENT_SECRET
meltano config meltano set oauth_service facebook client_secret <facebook-client-secret>
export OAUTH_FACEBOOK_CLIENT_SECRET=<facebook-client-secret>
oauth_service.google_adwords.client_id
#
OAUTH_GOOGLE_ADWORDS_CLIENT_ID
meltano config meltano set oauth_service google_adwords client_id <google-adwords-client-id>
export OAUTH_GOOGLE_ADWORDS_CLIENT_ID=<google-adwords-client-id>
oauth_service.google_adwords.client_secret
#
OAUTH_GOOGLE_ADWORDS_CLIENT_SECRET
meltano config meltano set oauth_service google_adwords client_secret <google-adwords-client-secret>
export OAUTH_GOOGLE_ADWORDS_CLIENT_SECRET=<google-adwords-client-secret>
These variables are specific to Flask-OAuthlib and work with OAuth authentication with GitLab.
These settings are used for single-sign-on using an external OAuth provider.
For more information on how to get these from your GitLab application, check out the integration docs from GitLab.
oauth.gitlab.client_id
#
OAUTH_GITLAB_CLIENT_ID
, alias: OAUTH_GITLAB_APPLICATION_ID
meltano config meltano set oauth gitlab client_id <gitlab-client-id>
export OAUTH_GITLAB_CLIENT_ID=<gitlab-client-id>
export OAUTH_GITLAB_APPLICATION_ID=<gitlab-client-id>
oauth.gitlab.client_secret
#
OAUTH_GITLAB_CLIENT_SECRET
, alias: OAUTH_GITLAB_SECRET
meltano config meltano set oauth gitlab client_secret <gitlab-client-secret>
export OAUTH_GITLAB_CLIENT_SECRET=<gitlab-client-secret>
export OAUTH_GITLAB_SECRET=<gitlab-client-secret>
ui
#
meltano ui
: Start the Meltano UI.start
(default) #
Start the Meltano UI.
setup
#
This command is only relevant for production-grade setup.
Generate secrets for the ui.secret_key
and ui.password_salt
settings, that
will be stored in your project’s .env
file along with the
specified value for the ui.server_name
setting.
In production, you will likely want to move these settings to actual environment variables, since .env
is in .gitignore
by default.
Regenerating secrets will cause the following:
Use with caution!
The --bits
flag can be used to specify the size of the secrets, default to 256.
# Format
meltano ui setup [--bits=256] <server_name>
meltano ui setup meltano.example.com
ui
with Environments #
The ui
command does not run relative to a Meltano Environment. The --environment
flag and default_environment
setting in your meltano.yml
file will be ignored if set.
In the event you are contributing to Meltano UI and want to work with all of the frontend tooling (i.e., hot module reloading, etc.), you will need to run the following commands:
# Activate your poetry created virtual environment if needed.
# If you manage your virtualenv activation through other means you can omit this command.
poetry shell
# Create a new Meltano project
meltano init $PROJECT_DIRECTORY
# Change directory into your newly created project
cd $PROJECT_DIRECTORY
# Start the Meltano API and a production build of Meltano UI that you can ignore
meltano ui
# Open a new terminal tab and go to the directory you cloned meltano into
cd $WHEREVER_YOU_CLONED_MELTANO
# Install frontend infrastructure at the root directory
yarn setup
# Start local development environment
yarn serve
The development build of the Meltano UI will now be available at http://localhost:8080/.
A production build of the API will be available at http://localhost:5000/ to support the UI, but you will not need to interact with this directly. However, as mentioned in the API Development section above, users on MacOS may need to specify an alternate bind to port to prevent a port conflict with a MacOS system service also running on port 5000.
If you're developing for the _Embed_ app (embeddable iframe
for reports) you can toggle MELTANO_EMBED
:
# Develop for the embed app export MELTANO_EMBED=1 # Develop for the main app (this is the default) export MELTANO_EMBED=0 # Start local development environment yarn serve
If you need to change the URL of your development environment, you can do this by updating your project’s .env
file with the following configuration:
# The URL where the web app will be located when working locally in development
# since it provides the redirect after authentication.
# Not require for production
export MELTANO_UI_URL = ""
The below level hierarchy defines the back to front depth sorting of UI elements. Use it as a mental model to inform your UI decisions.
Within each aforementioned depth level is an interactive color hierarchy that further organizes content while communicating an order of importance for interactive elements. This interactive color hierarchy subtly influences the user’s attention and nudges their focus.
$interactive-primary
$interactive-secondary
$interactive-navigation
After the primary, secondary, tertiary, or navigation decision is made, the button size decision is informed by:
is-small
modifier if it is within a component that can have multiple instancesThere are three fundamental markup groups in the codebase. All three are technically VueJS single-file components but each have an intended use:
Here is a technical breakdown:
<router-view-layout>
as root with only one child for the main view:
<div class="container view-body">
is-fluid
class additionsrc/views
directory<section>
as root (naturally assumes a parent of <div class="container view-body">
) with one type of child:
<div class="columns">
each with their needed <div class="column">
variationssrc/components/analyze/AnalyzeModels
)src/components/analyze/ResultTable
and src/components/generic/Dropdown
)