Google Map - Custom Markers

Demo to preview the plugin:

Introduction

Create amazing maps for your Bubble.io app! Do you need more features and customization options than the default Google Maps plugin? Then you try our enhanced version for Bubble.io!
This plugin extends the functionality of the Google Maps plugin and adds these features:
  • Custom markers: You can customize the appearance of each marker by using your own images, icons, or SVGs. You can also use dynamic data fields to change the marker icons based on your app logic.
  • Routes: You can draw routes on your map between two or more locations, using different modes of transportation, such as driving, walking, bicycling, or transit. You can also show the distance and duration of each route segment.
  • Clusters: You can group nearby markers into clusters to improve the performance and readability of your map. You can also customize the cluster icons, labels, and colors. With the Google Maps Enhanced Plugin for Bubble.io, you can create powerful and beautiful maps for your app, such as:
  • Location-based services, such as social networks, marketplaces, or delivery apps
  • Travel and tourism apps, such as hotel booking, car rental, or flight tracking.
  • Data visualization and analysis apps, such as heat maps, choropleth maps, or geospatial charts
  • * To use this plugin, you need a Google Maps API key and a Google Places API key.
Image without caption

How to setup

  1. Add the Map Element to Your Page
      • In the Bubble editor, go to the visual elements tab.
      • Drag the CS Google Map element onto your page.
        • Element → CS Google Map.
          Element → CS Google Map.
  1. Configure the Map
    1. In the property panel of the CS Google Map element, you can set:
      • Center [lat, lng] – Initial center of the map.
      • Initial Zoom – Zoom level when the map loads.
      • Map Type – Choose between Roadmap, Satellite, Hybrid, or Terrain.
      • Enable or disable zooming, dragging, controls (fullscreen, zoom, streetview, etc.).
      • Upload a custom marker icon, define marker size, or use custom CSS styles.
  1. Add Markers Dynamically via Workflow
    1. Use this workflow action:
      • Action: Add Marker(s) A CS Google Map
      Available Fields:
      • Element → Select your map element (e.g. CSGoogleMap A).
      • Marker → Add a single marker by providing a JSON object with:
        • lat
        • lng
        • title (optional)
        • icon (optional – custom icon URL)
        • id (optional – to uniquely identify the marker)
      • Markers → Add multiple markers by providing a list of marker objects (e.g., from a database or custom state).
        • Workflow action → Add Markers.
          Workflow action → Add Markers.
  1. Respond to Marker Clicks
    1. Create a workflow with this event:
      • Event: A CS Google Map Marker Clicked
        • Workflow event → CS Google Map Marker Clicked.
          Workflow event → CS Google Map Marker Clicked.
      This allows you to get the clicked marker's data (like ID, title, lat/lng) and trigger workflows — such as showing a popup or updating a custom state.
  1. Draw a Route on the Map
    1. Use this workflow action:
      • Action: Draw A Route A CS Google Map
      Element: Select the CS Google Map element (e.g. CSGoogleMap A).
      Raute Type: A unique identifier for the route. Use a static text or dynamic value (e.g. "route1" or Current cell's ID) to manage the route later (for removal, updates, etc).
      Route Source: Provide the origin, destination, and optional waypoints as a JSON object or dynamic expression.
      Workflow action → Draw a Route.
      Workflow action → Draw a Route.
  1. Other Useful Features
  • Group markers into clusters: Group Markers In Cluster
  • Recenter and zoom: Set Zoom/Center
  • Remove markers or routes: Remove Marker, Remove A Route, Remove All Routes
  • Real-time tracking: Start Track Location / Stop Track Location

Plugin Element Properties

CS Google Map

Element properties → CS Google Map.
Element properties → CS Google Map.
Fields:
Title
Description
Type
Center
A geographical address
Geographic Address (optional)
Center [lat, lng]
Geographical coordinates [Lat, Lng]. This option will be used if “Center” field is empty.
Text (optional)
Map Type
In the context of a software plugin or API, “Map Type” refers to the specific style or representation of a map, such as satellite, terrain, or hybrid views. Available options: Roadmap, Hybrid, Satellite, Terrain
Dropdown (optional)
Allow zoomig and dragging
This feature enables users to zoom in and out as well as drag the content within the software plugin or API interface.
Checkbox (yes/no)
Disable zooming on scroll
Prevent the ability to zoom in or out using the scroll wheel or touchpad gestures within the software plugin or API.
Checkbox (yes/no)
Initial zoom
Zoom level can be set in range of 0 - 23 where 0 is the lowest zoom lvl
Number (optional)
Maximum Zoom
Maximum zoom level. Zoom level can be set in range of 0 - 23 where 0 is the lowest zoom lvl
Number (optional)
Custom marker icon
A image of jpg/png types
Image (optional)
Custom Marker Size
Custom marker size. Size x Size. Could be adjusted by personal need range is from 0 to infinity
Number (optional)
======== ROUTES ========
Route Type
A bubble type that will be used as a route for “Draw a Route” action. This type should have a field for start/end points as “geographical address”.
App Type (optional)
======== MARKERS ========
Marker Type
Bubble type that will be used as marker
App Type (optional)
Marker Source
A list of bubble things
Item representing Marker Type (optional)
Address Field
Marker address field
Field of Marker Type, represent Geographic Address (optional)
Address Field [lat, lng]
Geographical coordinates [Lat, Lng]. This option will be used if “Address Field” field is empty.
Field of Marker Type, represent Text, image or file (optional)
Icon Field
Custom marker icon field
Field of Marker Type, represent Text, image or file (optional)
Title Field
Marker title field
Field of Marker Type, represent Text, image or file (optional)
Label Field
Label for simple markers, useful when you want to show a number on a marker
Field of Marker Type, represent Text, image or file (optional)
Information Window
Information window on marker click
Field of Marker Type, represent Text, image or file (optional)
Size Field
Marker size field
Field of Marker Type, represent Number (optional)
Show information window on click
Show marker’s information window on click
Checkbox (yes/no)
* You need to have a “Radius” and “Color” fields on marker type if you want to draw a disc around a marker
Radius
This field represents circle radius in meters around the marker (Type number)
Field of Marker Type, represent Number (optional)
Color
This field represents the circle color around the marker (Type hex or rgba)
Field of Marker Type, represent Text, image or file (optional)
##### CUSTOMIZATION #####
Use custom markers
When enabled uses styles below
Checkbox (yes/no)
Marker border styles
Marker border styles refer to the various visual options available for customizing the border of markers, such as solid, dashed, or dotted lines, in a software plugin or API.
Text (optional)
Marker icon styles
“Marker icon styles” refer to the visual appearance and design characteristics of icons used to represent markers on a map in a software plugin or API.
Text (optional)
Custom Marker Border Styles
If you use custom styles for this marker
Field of Marker Type, represent Text, image or file (optional)
Custom Marker Icon Styles
If you use custom styles for this marker icon
Field of Marker Type, represent Text, image or file (optional)
##### UI CUSTOMIZATION #####
Fullscreen control
Enable fullscreen control button
Checkbox (yes/no)
Streetview control
Enable streetview control button
Checkbox (yes/no)
Maptype control
Enable maptype control button
Checkbox (yes/no)
Zoom control
Enable zoom control buttons
Checkbox (yes/no)
Custom Style - https://snazzymaps.com
Define a custom style for the map. More info see on https://snazzymaps.com Also keep in mind, you cannot use custom styles if you are using a “Google Map ID” in plugins tab, because using a google map id the styles then are managed in the google cloud console.
Text (optional)
### Jittering ### slightly offset the markers by a small random amount to avoid stacking
Enable Jittering
“Enabling jittering” in a software plugin or API introduces random variations to data or visuals to reduce aliasing artifacts.
Checkbox (yes/no)
Offset value
Formula: (Lat/Lng) + (Math.random() - 0.5) * (Offset Value)
Number
Info Window Style
Markers info window customization
Text (optional)

Element Actions

Change Markers

Workflow action → Change markers.
Workflow action → Change markers.
Title
Description
Type
Markers
A list of markers already rendered on map (you can get it from “Rendered Markers” state)
Item representing Marker Type
Icon Field
Markers icon
Image (optional)
Title
Markers title
Text (optional)
Information Window
Information window on marker click
Text (optional)
Size (px)
Markers size. Default 50x50 pixels
Number (optional)
Label
Marker label (it is used to show a letter or a number inside the standard markers)
Text (optional)

Group Markers in Cluster

Workfloe action → Group markers in cluster.
Workfloe action → Group markers in cluster.
Title
Description
Type
Markers
A list of markers to be grouped
Item representing Marker Type
Sum labels
When set to “yes” number represented as cluster label will be the sum of labels of markers that the cluster covers.
Checkbox (yes/no)
### SMALL CLUSTERS ###
Small cluster count
“Small cluster count” refers to the number of clusters or groups within a dataset that are below a predetermined size threshold.
Number
Label color
“Label color” refers to the customizable color assigned to a label or tag within a software plugin or API interface.
Color
Small cluster color
“Small cluster color” refers to a specific color within a limited set of colors used for clustering data points in a software plugin or API.
Color
Small cluster size
“Small cluster size” refers to a configuration in which a limited number of interconnected nodes or servers are used in a software plugin or API deployment.
Number
### MEDIUM CLUSTERS ###
Medium cluster count
“Medium cluster count” refers to the number of clusters or groups of data points in a dataset that fall within a moderate range, typically defined by a specific parameter or threshold in clustering algorithms.
Number
Label color
“Label color refers” to the specified color assigned to a label element in a software plugin or API for visual differentiation or categorization.
Color
Medium cluster color
“Medium cluster color” refers to a specific shade within a color palette used in the software plugin or API.
Color
Medium cluster size
“Medium cluster size” refers to a configuration setting in a software plugin or API that specifies a moderate number of interconnected nodes or instances within a cluster.
Number
### LARGE CLUSTERS ###
Label color
“Label color” refers to the customizable color assigned to a label or tag in a software plugin or API for visual organization and categorization.
Color
Large cluster color
In software plugins or APIs, “large cluster color” refers to a set of colors used to represent data points or elements within a large cluster in a visual display.
Color
Large cluster size
Large cluster size refers to the number of nodes or servers grouped together in a software system to handle data processing and storage at scale.
Number
### SPECIAL CLUSTER ###
Contains marker
“Contains marker” indicates that a specific element or value is present within the data structure or content being referenced in the software plugin or API.
Item representing Marker Type (optional)
Contains markers
“Contains markers” refers to a feature within a software plugin or API that stores specific points of interest or references within a dataset or codebase.
Item representing Marker Type (optional)
Label color
“Label color” refers to the customizable color assigned to a label within a software plugin or API for visual identification and organization purposes.
Color
Cluster color
“Cluster color” refers to grouping similar colors together in an image processing algorithm or tool.
Color
Cluster size
“Cluster size” refers to the number of data points or elements grouped together within a cluster in a software plugin or API.
Number

Change Marker

Workflow action → Change a marker.
Workflow action → Change a marker.
Title
Description
Type
Marker
A rendered marker from map (you can get it from “Rendered Markers”, “Current Marker” states)
Item representing Marker Type
Icon
Marker icon
Image (optional)
Title
Marker title
Text (optional)
Information Window
Information window on marker click
Text (optional)
Size (px)
Set marker size. Default 50x50 pixels
Number (optional)
Label
Marker label (it is used to show a letter or a number inside the standard markers)
Text (optional)

[Iterator] Run Next

Workflow action → [Iterator] Run Next
Workflow action → [Iterator] Run Next
Title
Description
Type
Reset iterator
If checked iterator will reset and start from initial marker again
Checkbox (yes/no)

Draw a Route

Workflow action → Draw a route.
Workflow action → Draw a route.
Title
Description
Type
Raute Type
The type should be the same as type selected in the element instance of the plugin
App Type
Route Source
An object of selected route type
Item representing Route Type
Start
Start point, should be a geographical address
Field of Raute Type, represent Geographic Address
End
End point, should be a geographical address
Field of Raute Type, represent Geographic Address
##### CUSTOMIZATIONS #####
Suppress route markers
Draw start/end markers or not
Checkbox (yes/no) (optional)
Route color
Route color
Color (optional)
Route opacity
Route opacity 0-1
Number (optional)
Route width
Route width. Default 5
Number (optional)
Travel mode
Travel mode to calculate the best route Available options: DRIVING, WALKING, BICYCLING, TRANSIT, TWO_WHEELER
Dropdown (optional)
Auto Zoom & Center
You can set it to “yes” to prevent Google Maps from automatically centering and zooming to fit a route when it’s drawn.
Checkbox (yes/no)

Set Zoom/Center

Workflow action → Set Zoom/Center.
Workflow action → Set Zoom/Center.
Title
Description
Type
Center
A new center as geographical address
Geographic Address (optional)
Center [lat, lng]
Geographical coordinates [Lat, Lng]. This option will be used if “Center” field is empty.
Text (optional)
Zoom
Set a new zoom level
Number (optional)

Remove a Route

Workflow action → Remove a Route.
Workflow action → Remove a Route.
Title
Description
Type
Route
Choose a route to be removed. All drawn routes are available in “Routes” state of the element
Item representing Route Type

Remove all Routes

Workflow action → Remove all Route.
Workflow action → Remove all Route.

Draw a Route by Lat/Long

Workflow action → Draw routes by lat/long.
Workflow action → Draw routes by lat/long.
Title
Description
Type
Route Type
In the context of a software plugin or API, “Route Type” refers to a classification or category of a specific route within a routing system, such as a public, private, or secure route.
App Type
Route Source
An object of selected route type in the plugin element
Item representing Route Type
Start Point
Start point, should be a number list. Ex: [lat, lng]
Field of Route Type, represent Number(list)
End Point
End point, should be a number list. Ex: [lat, lng]
Field of Route Type, represent Number(list)
##### CUSTOMIZATIONS #####
Suppress route markers
Draw start/end markers or not
Checkbox (yes/no) (optional)
Route color
Route color
Color (optional)
Route opacity
Route opacity 0-1
Number (optional)
Route width
Route width. Default 5
Number (optional)
Travel mode
Travel mode to calculate the best route Available options: DRIVING, WALKING, BICYCLING, TRANSIT, TWO_WHEELER
Dropdown (optional)
Auto Zoom & Center
You can set it to “yes” to prevent Google Maps from automatically centering and zooming to fit a route when it’s drawn.
Checkbox (yes/no)

Start Track Location

Start geolocation watch position
Workflow action → Start Track Location.
Workflow action → Start Track Location.
Title
Description
Type
Keep map centered
If is set to “yes”, after location change the map will be centered on current location
Checkbox (yes/no)
Enable high accuracy
If set to “yes” it can help improve the precision, though it might increase battery usage.
Checkbox (yes/no)
Frequency
Position tracking frequency in milliseconds. Default 1000
Number

Stop Track Location

Stop geolocation watch position
Workflow action → Stop Track Location.
Workflow action → Stop Track Location.

Add Marker(s)

Add a marker to the map
Workflow action → Add Marker(s).
Workflow action → Add Marker(s).
Title
Description
Type
Marker
Marker type selected in the map element
Item representing Marker Type (optional)
Markers
Marker type selected in the map element
Item representing Marker Type (optional)

Remove Marker

Workflow action → Remove Marker.
Workflow action → Remove Marker.
Title
Description
Type
Marker
Marker type selected in the map element
Item representing Marker Type

Exposed states

Title
Description
Type
Rendered Markers
Rendered markers
List of Text
Current Marker
Last clicked marker
Text
[Iterator] Marker
Iterator marker
Text
[Iterator] Markers
Iterator markers remained
List of Text
Problem Markers
Returns a problematic list of markers
List of Text
Routes
Returns rendered routes
List of Text
Drawing Route
State of drawing route
Checkbox (yes/no)
Center
Center of the map
Geographic Address
Current Location
Current location if tracking is enabled
Geographic Address
Is Tracking
Current status of tracking
Checkbox (yes/no)
Click Coordinates
Clicked location coordinates
Geographic Address
Click Environment
Clicked environment
Text

Element Events

Title
Description
Markers Rendered
Triggered when all markers are rendered
Marker Clicked
Triggered when a marker is clicked
[Iterator] Marker Ready
Triggered when next marker is ready
Route Drawn
Triggered when a route is drawn
Route Removed
Triggered when a route is removed
All Routes Removed
Triggered after all routes were removed
Map Dragged
Triggered when map has been dragged
Zoom Changed
Triggered when map zoom changed
Location Changed
Triggered when geolocation changed
Ready
Triggered when map ready
[Iterator] Finished
Triggered when iterator finished
Map Clicked
Triggered when map clicked
Image without caption

Changelogs