Ponlo en tu web.
Una etiqueta <script> y otra <marciano-flame>, sin instalar nada. O npm install si trabajas con React, Vue, Svelte o Astro.
En 30 segundos
Copia esto en tu página y recarga. Funciona en cualquier web: HTML a mano, Webflow, Shopify, un CMS…
index.html<!-- 1. Una vez por página, antes de </body> -->
<script src="https://cdn.jsdelivr.net/npm/@hostarys/marciano@1/dist/vendor/marciano-flame.min.js" defer></script>
<!-- 2. Donde quieras que aparezca -->
<marciano-flame color="hostarys" glow></marciano-flame>El script sale de npm a través de jsDelivr, fijado a la versión mayor (@1: recibe mejoras y arreglos, nunca cambios incompatibles). También vale unpkg (unpkg.com/@hostarys/marciano@1/dist/vendor/marciano-flame.min.js) o la copia de esta web, marciano.hostarys.com/v1/marciano-flame.min.js (versión 1.1.0). Para depurar, quita el .min. ¿Prefieres alojarlo tú? Descarga marciano-flame.js.
Dale personalidad
Elige expresión, accesorios, temporada o brillo con atributos. Todos están en Props y API, y puedes probarlos en el playground.
<marciano-flame
color="hostarys"
mood="happy"
accessory="crown"
season="auto"
glow></marciano-flame><script>
customElements.whenDefined("marciano-flame").then(() => {
const m = document.querySelector("marciano-flame");
m.say("¡Hola!"); // bocadillo
m.queue("surprised", "hearts"); // añadir a la cola
m.play("wink"); // interrumpir y reproducir ya
});
</script>npm · React / Next.js
El paquete @hostarys/marciano es público en npm: trae el componente React con props tipadas, el de Vue y el web component.
Instala
Terminal npm install @hostarys/marciano # o pnpm add @hostarys/marciano yarn add @hostarys/marciano bun add @hostarys/marcianoÚsalo
Marcianoya es un Client Component: impórtalo tal cual en un Server Component del App Router.app/page.tsx// app/page.tsx (Server Component, sin "use client") import { Marciano } from "@hostarys/marciano"; export default function Page() { return <Marciano color="hostarys" glow accessory="crown" size={180} />; }En vivo
Controlarlo con useMarciano()
El hook devuelve [ref, controles]. Los controles esperan solos a que el componente termine de cargar, así que puedes llamarlos incluso en el primer useEffect.
components/marciano-saluda.tsx"use client";
import { Marciano, useMarciano } from "@hostarys/marciano";
export function MarcianoSaluda() {
const [ref, marciano] = useMarciano();
return (
<div>
<Marciano ref={ref} color="hostarys" glow size={150} />
<button onClick={() => marciano.play("hearts")}>Enamorar</button>
<button onClick={() => marciano.say("¡Hola!")}>Saludar</button>
<button onClick={() => marciano.queue("surprised", "happy")}>Cola</button>
</div>
);
}Con shadcn/ui
¿Tu proyecto usa shadcn/ui? Marciano tiene su propio registro: la CLI instala @hostarys/marciano y te deja en components/marciano.tsx un envoltorio con los valores de la marca (color Hostarys, brillo, 160 px) que puedes ajustar a tu gusto. Acepta las mismas props, y exporta también useMarciano.
npx shadcn@latest add https://marciano.hostarys.com/r/marciano.json
# o: pnpm dlx shadcn@latest add … · bunx shadcn@latest add …app/page.tsx// components/marciano.tsx lo crea shadcn (puedes editarlo: es tu código)
import { Marciano } from "@/components/marciano";
export default function Page() {
return <Marciano mood="happy" season="auto" />;
}El registro es público: /r/marciano.json (elemento) y /r/registry.json (índice).
Vue 3
Importa desde @hostarys/marciano/vue (mismo paquete). El plugin registra el componente <Marciano> global y carga el web component.
main.ts// main.ts
import { createApp } from "vue";
import { MarcianoPlugin } from "@hostarys/marciano/vue";
import App from "./App.vue";
createApp(App).use(MarcianoPlugin).mount("#app");App.vue<!-- App.vue -->
<script setup lang="ts">
import { ref } from "vue";
const m = ref();
const onMood = (e: CustomEvent) => console.log(e.detail.mood);
</script>
<template>
<Marciano ref="m" color="hostarys" glow :size="180" @moodchange="onMood" />
<button @click="m.play('hearts')">Enamorar</button>
</template>¿Prefieres la etiqueta cruda <marciano-flame> en tus plantillas? Dile a Vue que es un custom element:
vite.config.ts// vite.config.ts — solo si usas la etiqueta <marciano-flame> directamente
import vue from "@vitejs/plugin-vue";
export default {
plugins: [vue({
template: { compilerOptions: { isCustomElement: tag => tag === "marciano-flame" } },
})],
};Svelte 5
Importa Marciano desde @hostarys/marciano/svelte (mismo paquete, Svelte 5 o superior). Las props son las de React en camelCase, los eventos llegan como onpoke, onmoodchange… y con bind:this tienes sus métodos.
npm install @hostarys/marciano+page.svelte<!-- +page.svelte (Svelte 5 / SvelteKit) -->
<script lang="ts">
import { Marciano, type MarcianoExports } from "@hostarys/marciano/svelte";
let m: MarcianoExports;
let toques = $state(0);
</script>
<Marciano bind:this={m} color="hostarys" glow size={180} accessory={["crown"]}
onpoke={e => (toques = e.detail.count)}
onmoodchange={e => console.log(e.detail.mood)} />
<button onclick={() => m.play("hearts")}>Enamorar</button>
<p>Toques seguidos: {toques}</p>Funciona con SvelteKit y SSR: en el servidor pinta la etiqueta con sus atributos y el componente se carga en el navegador. Los métodos (play, queue, say, enter, exit…) esperan solos a que esté listo; getElement() devuelve el <marciano-flame>. ¿Prefieres la etiqueta cruda? También vale el web component del apartado siguiente.
Astro y JavaScript
Con cualquier otro framework (o en Svelte, sin el componente), usa el web component: import "@hostarys/marciano/element" registra <marciano-flame> y ya puedes escribirlo en tus plantillas. Es seguro en el servidor (SSR): en Node no hace nada.
index.astro---
// src/pages/index.astro
---
<marciano-flame color="hostarys" glow></marciano-flame>
<script>
import "@hostarys/marciano/element";
</script>Marciano.svelte<!-- Marciano.svelte: la etiqueta cruda, sin el componente -->
<script>
import "@hostarys/marciano/element"; // registra <marciano-flame>
</script>
<marciano-flame color="hostarys" mood="happy" glow></marciano-flame>main.js// main.js (Vite, webpack, esbuild…): registra <marciano-flame>
import "@hostarys/marciano/element";
import { MOODS } from "@hostarys/marciano/core"; // listas y utilidades, sin React
const m = document.createElement("marciano-flame");
m.setAttribute("color", "hostarys");
m.setAttribute("season", "auto");
document.body.append(m);
m.play(MOODS[Math.floor(Math.random() * MOODS.length)]);
// ¿Prefieres el script clásico? Viene en el paquete:
// node_modules/@hostarys/marciano/dist/vendor/marciano-flame.min.js
// (en Vite: import flameUrl from "@hostarys/marciano/marciano-flame.min.js?url")Los atributos, métodos (play, queue, say…) y eventos son los mismos en todas partes: están en Props y API.
WordPress
Instala el plugin y usa el shortcode en cualquier página, entrada o bloque «Shortcode». El script solo se carga donde aparece Marciano.
Descarga el plugin
Súbelo en Plugins › Añadir nuevo › Subir plugin y actívalo.
Descargar plugin (zip)Escribe el shortcode
Shortcode [marciano color="hostarys" mood="happy" glow accessory="crown" say="Hola"]
Todos los atributos y ejemplos en la referencia del shortcode.
Licencia y marca
El código es MIT: úsalo, modifícalo y redistribúyelo. El personaje Marciano (nombre, dibujo, expresiones y apariencia) y la marca Hostarys (nombre y logotipos) son de Hostarys y no entran en la licencia MIT.
Puedes, sin pedir permiso
- Instalar el paquete y mostrar a Marciano en tu web o aplicación, tal cual, con sus opciones (expresiones, colores, accesorios, tamaños).
- Usarlo en proyectos personales, de clientes o comerciales, mientras no parezca que Hostarys te patrocina o te avala.
No puedes
- Modificar el dibujo para crear un personaje derivado o presentarlo como mascota de otra marca.
- Vender a Marciano como producto (stickers, merchandising, plantillas, NFT…) o registrar su nombre o su imagen.
- Usar el nombre o los logotipos de Hostarys en tu marca, tu dominio o tu producto.
Los textos completos van dentro del paquete (LICENSE y TRADEMARKS.md, también en npmjs.com). ¿Otro uso, o una duda? Escríbenos a hola@hostarys.com.