Hello,
I am trying to create my own react visualization in Kibana. I've set up the dev environment on a debian 9 vm and create my plugin using the kibana plugin generator.
Because I'm pretty new to this I am trying to start slowly by creating a small plugin that doesn't do much.  So I copied the js files of the markdown_vis plugin and tweek them a bit.
Here are my different files :
in the kibana/plugin/speedguide_portfinder_vis directory
my index.js :
import { resolve } from 'path';
export default function (kibana) {
  return new kibana.Plugin({
    uiExports: {
      visTypes: [
        'plugins/speedguide_portfinder/speedguide_portfinder_vis'
      ],
      interpreter: ['plugins/speedguide_portfinder/speedguide_portfinder_fn'],
      styleSheetPaths: resolve(__dirname, 'public/index.scss'),
    }
  });
};
in the public directory :
speedguide_portfinder_vis.js :
import { SpeedguidePortfinderVisWrapper } from './speedguide_portfinder_vis_controller';
import { VisFactoryProvider } from 'ui/vis/vis_factory';
import { VisTypesRegistryProvider } from 'ui/registry/vis_types';
VisTypesRegistryProvider.register(SpeedguidePortfinderVisProvider);
function SpeedguidePortfinderVisProvider() {
  const VisFactory = Private(VisFactoryProvider);
  // return the visType object, which kibana will use to display and configure new
  // Vis object of this type.
  return VisFactory.createReactVisualization({
    name: 'speedguide_portfinder',
    title: 'Speedguide_portfinder',
    isAccessible: true,
    icon: 'visText',
    description: 'awesome button to research a port on speedguide',
    visConfig: {
      component: SpeedguidePortfinderWrapper,
      defaults: {
        openLinksInNewTab: true,
        port:0
      }
    },
    requestHandler: 'none',
    responseHandler: 'none',
  });
}
export default SpeedguidePortfinderVisProvider;
speedguide_portfinder_fn.js :
import { functionsRegistry } from 'plugins/interpreter/registries';
import { i18n } from '@kbn/i18n';
export const kibanaSpeedguidePortfinder = () => ({
  name: 'speedguidePortfinderVis',
  type: 'render',
  context: {
    types: [],
  },
  help: i18n.translate('SpeedguidePortfinderVis.function.help', {
    defaultMessage: 'Speedguide_portfinder visualization'
  }),
  args: {
    port: {
      type: ['integer'],
      aliases: ['_'],
      required: true,
    },
    openLinksInNewTab: {
      types: ['boolean'],
      default: true,
    }
  },
  fn(context, args) {
    return {
      type: 'render',
      as: 'visualization',
      value: {
        visType: 'speedguide_portfinder',
        visConfig: {
          port: args.port,
          openLinksInNewTab: args.openLinksInNewTab
        },
      }
    };
  }
});
functionsRegistry.register(kibanaSpeedguidePortfinder);
speedguide_portfinder_vis_controller.js :
import React, { Component } from 'react'
class SpeedguidePortfinderVisComponent extends Component {
  componentDidMount() {
    this.props.renderComplete();
  }
  render() {
    return (
      <div>
        <p>The visualization</p>
      </div>
    );
  }
}
export function SpeedguidePortfinderVisWrapper(props) {
  return (
    <SpeedguidePortfinderVisComponent
      openLinksInNewTab={props.visParams.openLinksInNewTab}
      renderComplete={props.renderComplete}
    />
  );
}
index.scss :
@import 'src/legacy/ui/public/styles/styling_constants';
I was able to run kibana successfully however when I try to access the visualisation tab (or even the dashboard or discovery tab) the pages seem broken..
Visualize tab :
Dashboard tab :

Discovery tab :

the Discovery tab has also the circular reference to registry error and both the Discovery and Dashboard tab have the Provide is undefined error.
