{"id":376796,"date":"2023-08-02T22:24:12","date_gmt":"2023-08-02T21:24:12","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=kotlin&#038;p=376796"},"modified":"2025-09-17T14:12:52","modified_gmt":"2025-09-17T13:12:52","slug":"presentamos-kotlin-notebook","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/es\/kotlin\/2023\/08\/presentamos-kotlin-notebook\/","title":{"rendered":"Presentamos Kotlin Notebook"},"content":{"rendered":"<p>\u00a1Ya est\u00e1 disponible la primera versi\u00f3n experimental del complemento Kotlin Notebook para IntelliJ IDEA! En esta publicaci\u00f3n encontrar\u00e1 una visi\u00f3n de la funcionalidad del complemento y sus casos de uso, pero, antes de entrar en detalles, nos gustar\u00eda dejar que el complemento hable por s\u00ed mismo:<\/p>\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Introducing Kotlin Notebook\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/2PLYlDJPelQ?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<div id=\"installButton\" style=\"margin: auto; width: 245px; margin-bottom: 30px;\">\n<script src=\"https:\/\/plugins.jetbrains.com\/assets\/scripts\/mp-widget.js\"><\/script>\n<script>\n  \/\/ Please, replace #yourelement with a real element id on your webpage\n  MarketplaceWidget.setupMarketplaceWidget('install', 16340, \"#installButton\");\n<\/script>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 es el complemento Kotlin Notebook?<\/h2>\n\n\n\n<p>Un notebook es una herramienta interactiva que permite combinar c\u00f3digo, visualizaciones y texto en un \u00fanico documento. En los notebooks, puede escribir y ejecutar fragmentos de c\u00f3digo (celdas), ver los resultados y documentar su toma de decisiones en un mismo lugar. Los notebooks est\u00e1n ampliamente aceptados y son fiables para la creaci\u00f3n r\u00e1pida de prototipos, el an\u00e1lisis y la ciencia de datos. El complemento Kotlin Notebook permite el desarrollo interactivo en IntelliJ IDEA, con lo que se complementa la compatibilidad del lenguaje con el IDE para Kotlin combinado con las vers\u00e1tiles opciones de visualizaci\u00f3n de los navegadores. Entremos de lleno en los detalles t\u00e9cnicos para ver qu\u00e9 puede hacer este complemento y c\u00f3mo funciona.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instalaci\u00f3n<\/h2>\n\n\n\n<p>Para obtener el complemento, solo tiene que instalarlo desde el <strong>Marketplace<\/strong> en la pesta\u00f1a <strong>Settings | Plugins<\/strong> de IntelliJ IDEA Ultimate. Deber\u00eda contar, como m\u00ednimo, con la versi\u00f3n 2023.1.2 de IntelliJ IDEA. Tambi\u00e9n puede instalar el complemento en versiones anteriores, pero ser\u00e1 inestable. Durante el proceso de instalaci\u00f3n, se le sugerir\u00e1 que instale el complemento de Python, cosa que deber\u00eda hacer. No se preocupe, ya que no se instalar\u00e1 Python en su estaci\u00f3n de trabajo. Kotlin Notebook solo tiene algunas dependencias de componentes de interfaz de usuario que se encuentran en el complemento de Python, pero tenemos previsto eliminarlas pronto.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/8MGry1ISTsJ3z4CiJbmL-qNIEnJ3gpG0D9wqWLdvIqo3d9Cou9s2yD9oVoQ_Blcy6fpS9INbcSdCGLk8AG6Xf52tk4MjmHS7W5a2t-_RTIPsIeEaVN-bmOiC19fluhCI9jPm3C-x5UUBmYWXuTMg-mY-1.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Tenga en cuenta que, actualmente, el complemento Kotlin Notebook solo funciona en IntelliJ IDEA Ultimate.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Familiarizaci\u00f3n con Kotlin Notebook<\/strong><\/h2>\n\n\n\n<p>Tras instalar el complemento, podr\u00e1 crear su primer notebook. B\u00e1sicamente, un notebook es un archivo en un disco, por lo que puede crearse en cualquier lugar de la vista <strong>Project<\/strong> con la acci\u00f3n <strong>New | Kotlin Notebook<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/wai7oIn7lFGvKuRfOILwb2jio-DGgxzvbRV33FHI7sV0t8roO-YvTWYvaKro51XxnegZQ6hiNi_2u12nms8iGEwhw7bjuaqWPs9P97tnfwrQARgZCFLmnNmwke7V_j8gA9wOtOh5vyv2D60f1qyYJYQ-1.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Se crear\u00e1 un archivo con una extensi\u00f3n <strong>.ipynb<\/strong>. Si ya est\u00e1 familiarizado con los Jupyter Notebooks, esta extensi\u00f3n deber\u00eda resultarle bastante familiar. Internamente, los Kotlin Notebooks siguen la misma estructura, formato y protocolo, lo que significa que estos archivos se pueden visualizar en GitHub, en los Jupyter Notebooks o en JupyterLab con el <a href=\"https:\/\/github.com\/Kotlin\/kotlin-jupyter\" target=\"_blank\" rel=\"noopener\">kernel de Kotlin<\/a> instalado. Una vez creado, el notebook solo contendr\u00e1 la primera celda vac\u00eda. Las celdas son los principales bloques de construcci\u00f3n de los notebooks y pueden contener c\u00f3digo o texto. Para ejecutar una celda de c\u00f3digo, solo tiene que seleccionarla y hacer clic en el bot\u00f3n <strong>Run<\/strong> o utilizar el acceso directo <strong>May\u00fas + Intro<\/strong>. Se ejecutar\u00e1 el c\u00f3digo y los resultados o errores aparecer\u00e1n debajo de la celda. Tambi\u00e9n puede escribir texto en celdas de Markdown, que admiten muchas opciones de formato, como encabezados, listas, enlaces, LaTeX e im\u00e1genes. Para generar una celda de Markdown y ver el texto formateado, solo tiene que ejecutarla como si de una celda de c\u00f3digo se tratase. Los notebooks ofrecen un flujo de trabajo interactivo e iterativo. Puede ejecutar celdas en cualquier orden, modificar el c\u00f3digo o el texto, declarar y redeclarar variables, y volver a ejecutar las celdas para ver los resultados actualizados. Esto facilita la experimentaci\u00f3n, la creaci\u00f3n de prototipos y la documentaci\u00f3n del trabajo.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/HElZusfrsgfY4Ss87v34GSPfkfvI5N6TMyHJPhBFgPBgekCDvJ8o4SdCpCTmC2BYyXdZlTkf9n81q7srXB1Jy89ZiEtAIEsnAGGxPnqttPg4UX0uQweLMhYlAvGHAEqV8HOrWrY4K0nI40eqL8wkSug-1.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Para experimentar de primera mano las ventajas de utilizar notebooks para explicar y documentar el c\u00f3digo, le animamos a que descargue y explore <a href=\"https:\/\/datalore.jetbrains.com\/view\/notebook\/DMtWM05XWOT2Oi6yxZjVkJ\" target=\"_blank\" rel=\"noreferrer noopener\">este notebook<\/a>. Incluye todos los aspectos de los Kotlin Notebooks recogidos en este art\u00edculo del blog, lo que le permitir\u00e1 poner en pr\u00e1ctica la teor\u00eda.<\/p>\n\n\n\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/datalore.jetbrains.com\/view\/notebook\/DMtWM05XWOT2Oi6yxZjVkJ\" target=\"_blank\" rel=\"noopener\">Notebook de ejemplo<\/a> \u00a1Un notebook es la mejor manera de familiarizarse con estos! ;-)<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Resultados<\/strong><\/h2>\n\n\n\n<p>Una de las principales caracter\u00edsticas de los notebooks es la variedad de tipos de resultados que admiten:<\/p>\n\n\n\n<ul>\n<li><strong>Texto:<\/strong> este es el tipo de resultado m\u00e1s simple e incluye declaraciones impresas, valores de variables o cualquier resultado basado en texto del c\u00f3digo. Si el resultado de una celda no entra en ninguna de las categor\u00edas siguientes, se imprimir\u00e1 como texto mediante el m\u00e9todo <code>toString()<\/code>.<\/li>\n\n\n\n<li><strong>HTML:<\/strong> los Jupyter Notebooks pueden mostrar HTML directamente, lo que permite el formato de texto enriquecido, el uso de tablas o incluso la incrustaci\u00f3n de sitios web.<\/li>\n\n\n\n<li><strong>Im\u00e1genes:<\/strong> las im\u00e1genes est\u00e1ticas pueden mostrarse en formatos como PNG, JPEG y SVG. Tambi\u00e9n admiten resultados del tipo <code>BufferedImage<\/code>. Todas estas im\u00e1genes pueden ser im\u00e1genes de archivos, gr\u00e1ficos generados o cualquier otro medio visual.<\/li>\n\n\n\n<li><strong>Texto enriquecido:<\/strong> las celdas de Markdown producen resultados HTML de texto enriquecido, lo que las hace compatibles con listas, estilos de fuente, bloques de c\u00f3digo, etc.<\/li>\n\n\n\n<li><strong>LaTeX:<\/strong> las f\u00f3rmulas y las ecuaciones matem\u00e1ticas pueden representarse perfectamente con LaTeX, un sistema de composici\u00f3n tipogr\u00e1fica muy utilizado en el mundo acad\u00e9mico.<\/li>\n\n\n\n<li><strong>Errores y rastreo:<\/strong> cuando el c\u00f3digo contiene errores, los notebooks muestran un mensaje de error y un rastreo, lo que facilita la depuraci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Dependencias de los notebooks<\/strong><\/h2>\n\n\n\n<p>Tambi\u00e9n es importante tener en cuenta qu\u00e9 dependencias tendr\u00e1 el notebook. Obviamente, la biblioteca est\u00e1ndar se puede utilizar directamente, pero suele ser insuficiente. Hay varias opciones disponibles:<\/p>\n\n\n\n<ul>\n<li>Puede utilizar las dependencias del proyecto, lo cual le garantiza que el notebook tendr\u00e1 acceso a las mismas clases.<\/li>\n\n\n\n<li>Es posible utilizar clases y otras entidades del propio proyecto dentro del notebook. Sin embargo, en estos casos se comprobar\u00e1 si hay cambios en el proyecto y se volver\u00e1 a compilar si es necesario antes de ejecutar cada celda.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/D9T1xIjCE4Mdys51QmD1aRfRUff5hLu4g2HLihzTbla1LU2TZ3dGzPk_s42ZtRDZrwtDyV9LVMG0kQnDLgR39cI_w0gDgZp-K3l0gEo4t9tIIyyMIh5a31L3gmKiN-ZK56YUiIBbd9-CkdXTtQ1aNTE-1.png\" alt=\"\"\/><\/figure>\n\n\n\n<ul>\n<li>Puede cargar cualquier biblioteca desde el repositorio de Maven especificando sus coordenadas con un fragmento de sintaxis al estilo Gradle en cualquier celda.<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">USE {\n  repositories {\n  maven {\n    url = \"https:\/\/my.secret.repo\/maven\/\"\n    credentials {\n      username = USER\n      password = TOKEN\n    } \n  }\n  dependencies {\n    val ktorVersion = \"2.0.3\"\n    implementation(\"my.secret:artifact:1.0-beta\")\n    implementation(\"io.ktor:ktor-client-core-jvm:$ktorVersion\")\n    implementation(\"io.ktor:ktor-client-apache-jvm:$ktorVersion\")\n  }\n}<\/pre>\n\n\n\n<ul>\n<li>O puede utilizar la versi\u00f3n m\u00e1s corta a trav\u00e9s de la anotaci\u00f3n <code>DependsOn<\/code>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@file:DependsOn(\u201cio.ktor:ktor-client-core-jvm:$ktorVersion\u201c)<\/pre>\n\n\n\n<ul>\n<li>Recordar y localizar las coordenadas de Maven puede ser engorroso. Para simplificar este proceso, presentamos un m\u00e9todo m\u00e1s inteligente y c\u00f3modo para cargar bibliotecas populares. Solo tiene que utilizar el comando m\u00e1gico <code>%use<\/code> seguido del nombre de una o varias bibliotecas.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/a8DtL8btAh5gNc2YjMeFuDij8lthwAF16WL2QapFjdvq3vnKHww3FJvs61ebCzY0qcBYR8Pr3LD5I4nQ2UP8uVRYVDY7sYvrr_11FxdsRMkY8q9fVdyqm8ujqd3c3jAbY5zaJ6I8yWqAHhL5mZDoObc-1.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Al ejecutar la declaraci\u00f3n <code>%use<\/code>, no solo se descargan las dependencias de la biblioteca, sino que tambi\u00e9n se a\u00f1aden importaciones predeterminadas al notebook. Adem\u00e1s, registra renderizadores para los tipos de la biblioteca e incluye otras funcionalidades, recogidas en la siguiente secci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Integraci\u00f3n de bibliotecas<\/strong><\/h2>\n\n\n\n<p>Los Kotlin Notebooks ofrecen muchas opciones de integraci\u00f3n de bibliotecas. Para los usuarios, aprovecharlas es tan sencillo como a\u00f1adir una \u00fanica l\u00ednea de c\u00f3digo:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">%use libraryName<\/pre>\n\n\n\n<p>Para los autores de las bibliotecas, este mismo comando sirve como trampol\u00edn, lo que les permite:<\/p>\n\n\n\n<ul>\n<li>Descargar binarios de bibliotecas desde cualquier repositorio de Maven.<\/li>\n\n\n\n<li>Incluir importaciones iniciales.<\/li>\n\n\n\n<li>Ejecutar c\u00f3digo durante la inicializaci\u00f3n.<\/li>\n\n\n\n<li>Ejecutar c\u00f3digo antes y despu\u00e9s de la ejecuci\u00f3n de cada celda.<\/li>\n\n\n\n<li>Procesar previamente el c\u00f3digo de cada celda.<\/li>\n\n\n\n<li>Invocar un callback al crear variables de ciertos tipos.<\/li>\n\n\n\n<li>Crear generadores personalizados para una serie de tipos definidos en la biblioteca.<\/li>\n\n\n\n<li>Y mucho m\u00e1s.<\/li>\n<\/ul>\n\n\n\n<p>En conjunto, esto brinda posibilidades casi infinitas para crear una experiencia de usuario interactiva. Teniendo en cuenta los tipos est\u00e1ticos y AOT de Kotlin, la capacidad de generaci\u00f3n autom\u00e1tica de c\u00f3digo sobre la marcha ofrece un nivel m\u00e1s de flexibilidad y posibilidad de expansi\u00f3n. Puede consultar la documentaci\u00f3n completa <a href=\"https:\/\/github.com\/Kotlin\/kotlin-jupyter\/blob\/master\/docs\/libraries.md\" target=\"_blank\" rel=\"noopener\">aqu\u00ed<\/a>. Animamos a todos los autores de bibliotecas a compartir sus integraciones en el <a href=\"https:\/\/github.com\/Kotlin\/kotlin-jupyter-libraries\" target=\"_blank\" rel=\"noopener\">registro<\/a> com\u00fan para que todos los usuarios de Kotlin Notebook puedan acceder a ellas. Nos complace especialmente ver que algunas bibliotecas (como <a href=\"https:\/\/youtu.be\/wT31FB5t-UU\" target=\"_blank\" rel=\"noopener\">WebTau<\/a>, <a href=\"https:\/\/roboquant.org\" target=\"_blank\" rel=\"noopener\">Roboquant<\/a>, <a href=\"https:\/\/github.com\/breandan\/galoisenne\" target=\"_blank\" rel=\"noopener\">Kaliningraph<\/a> y otras) ya se est\u00e1n beneficiando de este enfoque.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Compartir<\/strong><\/h3>\n\n\n\n<p>Es habitual querer compartir los notebooks con otras personas, tanto de dentro como de fuera del equipo. Dado que los Kotlin Notebooks se adhieren al formato universal de Jupyter, pueden distribuirse f\u00e1cilmente utilizando cualquier visor web de notebooks. De hecho, GitHub tiene la capacidad de generarlos de forma nativa. Adem\u00e1s, JetBrains cuenta con la plataforma <a href=\"https:\/\/datalore.jetbrains.com\" target=\"_blank\" rel=\"noopener\">Datalore<\/a>, que es totalmente compatible con los Kotlin Notebooks. Datalore no solo ofrece posibilidades a la hora de compartir: tambi\u00e9n permite ejecutar y editar notebooks e incluye funcionalidades avanzadas, como informes interactivos, adem\u00e1s de la opci\u00f3n de programar ejecuciones de notebooks para m\u00e1s comodidad y flexibilidad.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>En resumen<\/strong><\/h3>\n\n\n\n<p>\u00a1La primera versi\u00f3n experimental del complemento Kotlin Notebook est\u00e1 lista para que la pruebe en su proyecto en IntelliJ IDEA Ultimate!<\/p>\n\n\n\n<div id=\"installButton1\" style=\"margin: auto; width:245px; margin-bottom: 30px;\">\n<script src=\"https:\/\/plugins.jetbrains.com\/assets\/scripts\/mp-widget.js\"><\/script>\n<script>\n  \/\/ Please, replace #yourelement with a real element id on your webpage\n  MarketplaceWidget.setupMarketplaceWidget('install', 16340, \"#installButton1\");\n<\/script>\n<\/div>\n\n\n\n<p>Aqu\u00ed tiene un notebook de ejemplo que puede descargar para aprender los fundamentos de los Kotlin Notebooks:<\/p>\n\n\n\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/datalore.jetbrains.com\/view\/notebook\/DMtWM05XWOT2Oi6yxZjVkJ\" target=\"_blank\" rel=\"noopener\">Explorar un notebook de ejemplo<\/a><\/div>\n<\/div>\n\n\n\n<p>Si es autor de una biblioteca, tenga en cuenta que puede <a href=\"https:\/\/github.com\/Kotlin\/kotlin-jupyter\/blob\/master\/docs\/libraries.md\" target=\"_blank\" rel=\"noopener\">a\u00f1adir una integraci\u00f3n<\/a> con los Kotlin Notebooks. Si encuentra alg\u00fan problema o error, h\u00e1ganoslo saber rellenando un ticket <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/KTNB\" target=\"_blank\" rel=\"noopener\">en el sistema de seguimiento de incidencias del proyecto<\/a>. Adem\u00e1s, nos encantar\u00eda escuchar sus comentarios en el canal <a href=\"https:\/\/kotlinlang.slack.com\/archives\/C05333T208Y\" target=\"_blank\" rel=\"noopener\">#notebook<\/a> de Kotlin en Slack.<\/p>\n\n\n\n<p> <em>\u00a1Que disfrute con los Kotlin Notebooks!<\/em> <\/p>\n\n\n\n<p><em>Art\u00edculo original en ingl\u00e9s de:<\/em><\/p>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1086,"featured_media":369223,"comment_status":"closed","ping_status":"closed","template":"","categories":[952,826,4759,907],"tags":[],"cross-post-tag":[6284],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin\/376796"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/comments?post=376796"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin\/376796\/revisions"}],"predecessor-version":[{"id":624148,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin\/376796\/revisions\/624148"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media\/369223"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media?parent=376796"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/categories?post=376796"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/tags?post=376796"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/cross-post-tag?post=376796"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}