Embed SDK
The viewer runs inside an iframe and the SDK proxies every method over postMessage. Method names, options and events mirror ExpoFP's FloorPlan API so existing integrations port with a find-and-replace.
Install
<!-- Script tag (global Tessera) -->
<script src="https://YOUR-HOST/sdk/tessera.js"></script>
<!-- or as an ES module -->
<script type="module">
import { load, FloorPlan } from "https://YOUR-HOST/sdk/tessera.esm.js";
const fp = await load({ $ref: "https://YOUR-HOST/e/grip-connect-2026" });
</script>
<!-- or declaratively -->
<div data-tessera-event="grip-connect-2026" data-base-url="https://YOUR-HOST" style="height:600px"></div>Options
| Option | Meaning |
|---|---|
| element | Container element or selector. Defaults to #floorplan, else a full-screen div. |
| eventId | Event slug or id. |
| baseUrl | Origin of the Tessera server (defaults to where the SDK was loaded from). |
| params | Initial ViewerParams: booth, exhibitor, category, level, route, from/to/accessible, search, lang, kiosk, plan, position, view, theme, hide, tab… |
| noOverlay / offHistory / ignoreQuery | Map only; don't touch history; don't read the host URL. |
| kiosk, language, consent, theme | Kiosk mode, UI language, analytics consent ('ask' | 'granted' | 'denied'), theme. |
| onInit(fp) | API is live. Equivalent of ExpoFP's onInit / onFpConfigured. |
| on<Event>(payload) | One handler per event: onInit, onReady, onFpConfigured, onBoothClick, onExhibitorClick, onDetails, onDirection, onRouteCleared, onBookmarkClick, onBookmarksChanged, onVisitedClick, onCategoryClick, onFloorActivated, onCurrentPositionChanged, onMarkerClick, onExhibitorCustomButtonClick, onGetCoordsClick, onSearch, onShare, onReserveClick, onError, onLeaveEvent, onSessionClick, onCameraChanged, onStateChanged. |
| onEvent(name, payload) | Catch-all. |
Methods
Every method returns a Promise. Calls made before ready are queued.
| Method | Description |
|---|---|
selectBooth() | Select booth(s) by label, id or externalId (string or array). Empty string clears. |
selectExhibitor() | Select exhibitor(s) by id, slug or externalId. |
selectRoute() | selectRoute(from, to, accessible?) or selectRoute([a, b, c]) with up to 8 waypoints. |
clearRoute() | Clear the current route (alias deselectRoute). |
getOptimizedRoutes() | Best visiting order through the given booth labels. |
selectCurrentPosition() | Place the blue dot at plan coordinates (metres) and optionally centre. |
clearCurrentPosition() | |
setBookmarks() | Replace bookmarked exhibitor/booth ids. |
getBookmarks() | |
setMarkers() | Draw custom markers [{ id, x, y, levelId?, label?, color?, icon? }]. |
clearMarkers() | |
updateLayerVisibility() | Show/hide a layer: booths, labels, pois, zones, walls, paths, basemap. |
getCenterCoordinates() | |
applyParameters() | Apply a ViewerParams object or a query string (deep links). |
exhibitorsList() | |
boothsList() | |
categoriesList() | |
sessionsList() | |
selectCategory() | |
clearCategory() | |
getVisibility() | Chrome visibility flags. |
setVisibility() | { controls, levels, header, overlay, searchButtons }. |
findLocation() | Centre on the user's GPS position (georeferenced plans). |
zoomIn() | |
zoomOut() | |
switchView() | |
fitBounds() | Frame the whole level (or given bounds). |
getBoothRect() | Plan-space rectangle + centre of a booth. |
convertToGeo() | Plan (x, y) → [lng, lat]. |
convertFromGeo() | [lng, lat] → plan (x, y). |
highlightExhibitors() | Highlight exhibitors' booths. |
highlightBooths() | Highlight booths by label without selecting. |
clearHighlights() | |
search() | Run the fuzzy search; returns ranked results. |
getFloors() | Levels. |
activateFloor() | Switch level by id, short name or index. |
showSearch() | |
hideSearch() | |
setLanguage() | Switch UI language (alias changeLanguage). |
getLanguage() | |
setKiosk() | Toggle kiosk mode. |
getState() | Selection, route, level, filters, bookmarks. |
getVersion() | |
flyTo() | |
setTheme() | light | dark. |
openExhibitor() | |
closePanel() | |
select() | Open whatever matches: booth → exhibitor → category → session. |
selectAccessibleRoute() | Same as selectRoute restricted to accessible edges and lifts. |
deselectRoute() | |
openPlanner() | Open the multi-stop planner, optionally pre-filled. |
showList() | Open a panel: bookmarks | exhibitors | sessions | categories | language | visited. |
deselectCurrentPosition() | Remove the blue dot. |
isGpsTrackingEnabled() | |
setGpsTrackingEnabled() | Toggle continuous GPS tracking. |
setEntitiesBookmarks() | Typed bookmark seeding ({ type, id|name|externalId, bookmarked }). |
setEntitiesVisited() | Mark exhibitors/sessions visited. |
selectMarker() | |
drawCircles() | Draw circles [{ x, y, radius, color? }]. |
clearCircles() | |
setCamera() | { x, y | lat, lng, levelId, zoom, bearing, pitch, durationMs }. |
getCamera() | Current camera. |
zoomTo() | Fit the camera to booths/exhibitors without selecting. |
getBounds() | |
getGeoConfig() | Georeference of the current level. |
changeLanguage() | |
reset() | Clear selection/route/filters and refit. |
getBoothsGeometry() | All booth polygons per level (like ExpoFP's booths.json). |
getRoute() | Current route (RouteResult) or null. |
Events
init, ready, fpConfigured, boothClick, exhibitorClick, details, direction, routeCleared, bookmarkClick, bookmarksChanged, visitedClick, categoryClick, floorActivated, currentPositionChanged, markerClick, exhibitorCustomButtonClick, getCoordsClick, search, share, reserveClick, error, leaveEvent, sessionClick, cameraChanged, stateChangedPayloads: boothClick → { booth, exhibitors }; details → { type, id, name, externalId, boothLabels }; direction → RouteResult or null; floorActivated → level; currentPositionChanged → { x, y, levelId, lngLat }; exhibitorCustomButtonClick → { exhibitor, url }.
Deep links
/e/{slug}?booth=A101
/e/{slug}?exhibitor=nimbus-cloud
/e/{slug}?route=A101,T05&accessible=1
/e/{slug}?category=<id>&level=L2&lang=de
/e/{slug}?kiosk=1&position=90,105 (kiosk with a fixed "you are here")
/e/{slug}?hide=header,controls&noOverlay=1&embed=1
/e/{slug}/book or /e/{slug}?mode=booking (exhibitor booking view: availability, prices, Reserve / Buy)
/e/{slug}?preview=1 (organisers only: the unpublished draft, with an attendee / booking switch)Playground
Events and results appear here.