Website review
This review may include AI-generated content and is not individually verified. Domain, certificate and other facts come from the observed data on this page.
What is Jovo?
Jovo is an open-source framework for building voice and chat apps that run on multiple platforms from one TypeScript codebase. Rather than writing a separate Alexa skill and Google Assistant action, you define your conversation once and let Jovo translate it for each platform.
What it actually does
The site describes it as a "document-object mapper for voice platforms," analogous to Express.js for conversational interfaces. Its API is declarative and component-based, similar to React: you write handlers, compose components, and the framework handles platform-specific output. Installing the CLI (npm install -g @jovotech/cli) scaffolds a project, and jovo run starts a local dev server with a webhook for testing.
Who it suits
- Developers maintaining apps on more than one assistant. The stated origin of the project was exactly this pain: separate Alexa and Google codebases for the same client work.
- TypeScript teams who want a code-first workflow rather than a visual builder.
- Projects targeting mixed surfaces — the page lists Amazon Alexa (skills, APL, ISP), Google Assistant (Actions, Dialogflow), Samsung Bixby, Facebook Messenger, and embeddable web/mobile widgets.
Trade-offs to weigh
A single codebase lowers duplication, but platform-specific features (Alexa's APL or in-skill purchasing, for example) still need platform-aware code, so expect some conditional handling. A code-first framework also assumes engineering capacity; teams without developers may prefer a hosted visual tool. Licensing is Apache 2.0, and the code lives on GitHub as jovotech/jovo-framework.
Next step
If you're deciding between approaches, read the tutorial and user guide at jovo.tech/docs, then scaffold a small two-platform prototype and measure how much code is genuinely shared versus platform-specific. For broader comparisons, the community's own review section and the official Amazon Developer and Google Developers documentation are useful reference points.
How do I migrate an existing Alexa skill or Google Assistant Action to Jovo without rewriting it from scratch?
Jovo is designed to let one TypeScript codebase serve Alexa, Google Assistant, and the web, so the practical migration path is incremental: keep your existing skill/Action live, port its intents and handlers into a Jovo project, and cut over platform by platform rather than rebuilding everything at once. Jovo's own site describes a declarative, component-based handler API (compared to React) with the framework handling platform-specific translation, which is what makes a partial port feasible.
A realistic migration sequence
- Inventory what you have. List your intents, slots, prompts, and any platform-specific features (Alexa APL or ISP, Google Dialogflow agents). Anything deeply tied to one platform's UI or monetization will need a platform-specific branch rather than a shared handler.
- Scaffold and map intents. Create a project with
jovo newand translate your existing interaction model into Jovo's model files. Keep intent and slot names recognizable so the mapping stays auditable. - Port handlers as components. Move each dialogue flow into a handler/component. Shared logic (greetings, fallbacks, slot filling) goes in common components; platform quirks go in platform-specific handlers.
- Run both in parallel. Point a test version of your Alexa skill or Google Action at the Jovo webhook while the original stays live, and compare transcripts on the same utterances.
- Retire the old backend only after the Jovo version passes your regression utterances on each platform.
Where the trade-offs sit
| Situation | Sensible approach |
|---|---|
| Simple intent/response skill | Straight port; most logic becomes shared handlers |
| Heavy use of APL, ISP, or Dialogflow-specific flows | Shared core plus platform-specific handlers; expect real per-platform work |
| Single platform only, no plans to expand | Migration cost may not pay off; weigh against just maintaining what exists |
| Team already on TypeScript/Node | Lowest friction; the framework's model fits naturally |
Concrete example
A pizza-ordering skill with intents like OrderPizza, SelectSize, and CheckStatus maps cleanly: put ordering and status logic in shared components, keep any Alexa-specific visual response in an Alexa-only handler, and add a Google handler that returns a spoken equivalent. The same code then also runs in a web widget.
Next step
Start with your five most-used utterances and port only those flows first. If they behave identically on both platforms, the rest of the skill is mostly repetition. For deeper guidance, the official documentation at Jovo covers the tutorial, user guide, and API reference, and the framework's GitHub repository is the place to check handler patterns and issues.
How does Jovo handle platform-specific differences like SSML, visual responses, and in-skill purchasing across Alexa, Google Assistant, and the web?
Jovo handles platform differences through a declarative, component-based layer that sits between your handlers and each platform's native response format. You write one handler; the framework translates outputs like speech, SSML, visual elements, and purchases into what each target supports—and falls back or omits where it doesn't.
How each difference is typically bridged
| Concern | Alexa | Google Assistant | Web/Mobile | Jovo's role |
|---|---|---|---|---|
| Speech/SSML | SSML with Alexa-specific tags | SSML subset; some tags differ | Browser speech synthesis or audio | Normalizes SSML and strips or substitutes unsupported tags |
| Visual output | APL documents | Rich responses / cards | Your own HTML/UI components | Maps a shared "output" intent to each platform's visual format |
| Purchasing | ISP (in-skill purchasing) | No direct equivalent (varies) | Your own payment flow | Exposes a purchase abstraction; you branch where a platform lacks support |
| Surface capabilities | Device-specific | Screen/speaker variants | Full browser | You query capabilities and conditionally add outputs |
What this means in practice
The framework's model—handlers and composable components, described on the site as similar to React—lets you define platform-agnostic handlers and then add platform-specific overrides only where behavior genuinely diverges. For a reader building one skill for Alexa and a web widget, this means most dialogue logic lives once, while visual responses and purchase prompts are the parts you consciously specialize.
The trade-off: cross-platform abstraction covers common cases well, but edge features (APL layouts, ISP product flows, Google's rich-response variants) still require platform-specific code. Treat the shared layer as the default and platform branches as the exception, and check each platform's capability before assuming an output renders everywhere.
A useful next step is to read the Jovo docs' output and platform sections at Jovo and prototype one handler that emits speech plus a visual response, then run it on two targets to see exactly where translation diverges.
How do I set up a local development workflow with the Jovo CLI, including scaffolding a new project and testing it on a local server?
Install the Jovo CLI globally (npm install -g @jovotech/cli), scaffold a project with jovo new my-project, then run jovo run to start a local dev server (the page shows it on port 3000) and expose a webhook URL you can connect to a voice platform's console for live testing.
Typical local workflow
- Install the CLI once per machine. The global install gives you the
jovocommand anywhere. - Scaffold.
jovo new my-projectgenerates a starter project;cd my-projectto enter it. The page describes the framework as a component-based, React-like API where you define handlers and compose components, so the scaffold is where you'll start editing those handlers. - Run locally.
jovo runstarts the dev server and prints a webhook URL (the page shows awebhook.jovo.cloudaddress). That URL is what you paste into the Alexa or Google Assistant developer console so the platform sends requests to your machine while you iterate. - Test in a client. For voice, use the platform's simulator or a physical device pointed at your webhook; for web and Messenger targets, open the local URL directly since the page lists embeddable web widgets and chat integrations as supported outputs.
A concrete scenario
If you're building one skill for Alexa and one action for Google Assistant, keep a single handler set and let Jovo translate platform-specific responses. Your loop becomes: edit a handler, let the dev server reload, then re-run the same utterance in each platform's simulator to confirm both behave the same — rather than maintaining two codebases, which the page notes was the original motivation for the framework.
Practical next step
Work through the official tutorial and user guide at jovo.tech/docs before wiring a real platform console; they cover the handler/component model that the scaffold assumes. For broader context on how Jovo compares to other conversational frameworks, the community review at Jovo (Jovo vs Voiceflow vs Botpress vs Rasa) is a reasonable starting comparison, and the Alexa developer documentation is the authority for webhook and simulator setup on that platform.
How does Jovo compare to Voiceflow, Botpress, and Rasa for building a conversational app?
Jovo is the most code-centric option of the four. It is an open-source TypeScript framework (Apache 2.0) that treats voice and chat platforms as a document-object mapper: you write handlers and components, and the framework translates them for Alexa, Google Assistant, Bixby, Messenger and the web. Voiceflow, Botpress and Rasa overlap in purpose but differ sharply in how you build and where the app runs.
How they differ in practice
| Tool | Primary building style | Best fit | Main trade-off |
|---|---|---|---|
| Jovo | Code in TypeScript, component/handler API | Developers shipping one codebase to several voice and chat platforms | Requires coding; you own logic, hosting and platform setup |
| Voiceflow | Visual, collaborative design canvas | Teams mixing designers and developers, fast prototyping of flows | Less natural for heavy custom code or complex backend logic |
| Botpress | Visual builder with code extensions | Chat-focused bots with integrations and an admin console | Voice-first Alexa/Google work is not its center of gravity |
| Rasa | Code plus configurable NLU/dialogue models | Teams needing self-hosted NLU and control over models and data | Steeper operational burden; you run and tune the NLU stack |
The practical split is voice versus chat and code versus canvas. If your target is Alexa and Google Assistant from one codebase, Jovo's platform translation is the concrete advantage. If the app is mostly a website or Messenger chatbot with non-technical collaborators editing flows, a visual tool such as Voiceflow or Botpress fits the workflow better. If you need on-premise NLU and full control of training data, Rasa is the usual choice, at the cost of more infrastructure work.
A decision criterion
Start from the platform list and the people who will edit the app after launch. Choose Jovo when developers own the build and multi-platform voice is the goal; choose a visual builder when designers must change flows without touching code; choose Rasa when data residency and custom NLU outweigh convenience. The Jovo documentation at Jovo includes a tutorial and API reference, and its comparison article on voice AI frameworks is a reasonable next read before committing.
What do I need to know about dialogue management and NLU when building a Jovo app, and how do I choose an NLU provider?
In a Jovo app, dialogue management and NLU play separate roles. Dialogue management is the part you own: Jovo describes itself as a document-object mapper for voice platforms, with a declarative, component-based API similar to React, where you define handlers and compose components while the framework translates platform-specific details. NLU is the part that turns user speech or text into an intent and slots before your handlers run — and Jovo lets you plug in a provider rather than locking you to one.
What each piece does in practice
- Handlers and components: You write logic like "if the user wants to order, collect size, then confirm." This is where conversation flow, context, and state live.
- NLU provider: Recognizes intents and entities from utterances. Options range from platform-native NLU (e.g., Alexa's interaction model, Google's Dialogflow) to standalone providers. Jovo's own review content compares cloud and on-device NLU options such as Rasa, Dialogflow, and NLP.js on accuracy, latency, privacy, and integration complexity.
- Platform translation: Because Jovo targets Alexa, Google Assistant, Bixby, Messenger, and web/mobile widgets from one TypeScript codebase, the same handler logic can sit behind different platform NLUs.
Choosing an NLU provider
Decide based on where your app runs and what you can accept:
| Situation | Sensible starting point | Trade-off |
|---|---|---|
| Alexa- or Google-only app | The platform's built-in NLU | Least setup, but ties you to that platform's model and limits cross-platform reuse |
| Multi-platform from day one | A portable NLU layer you control | More configuration, but consistent intent behavior across channels |
| Privacy-sensitive or offline needs | On-device NLU (e.g., NLP.js-style) | No cloud round-trip, but you manage model quality and updates |
| Rapid prototyping with hosted tooling | A cloud NLU such as Dialogflow | Fast to start, adds a cloud dependency and latency |
A concrete scenario: a developer building the same ordering assistant for Alexa and a web widget should keep intent names and slot structures identical across both, so handlers written once behave the same way. If the two platforms use different NLUs, that shared vocabulary is what prevents divergent behavior.
A useful next step
Sketch your conversation as a list of intents and the slots each needs, then check which candidate NLU supports that structure without custom workarounds. Jovo's documentation at Jovo includes a tutorial and user guide that walk through handlers, components, and platform setup, which is the fastest way to see how dialogue logic and NLU connect in code.
User reviews (0)