[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3237":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":18,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":34,"discoverSource":35},3237,"mjml","mjmlio\u002Fmjml","mjmlio","MJML: the only framework that makes responsive-email easy","https:\u002F\u002Fmjml.io",null,"JavaScript",18096,990,160,50,0,2,7,47,43.99,"MIT License",false,"master",true,[26,27,28,5,29,30],"email","email-boilerplate","email-campaigns","responsive","responsive-email","2026-06-12 02:00:47","\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fmjml.io\" target=\"_blank\">\n    \u003Cimg width=\"250\" src=\"https:\u002F\u002Fdocumentation.mjml.io\u002Fimages\u002Flogo.svg\" \u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cb>Developed by\u003C\u002Fb>\n\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fmailjet.com\" target=\"_blank\">\n    \u003Cimg width=\"125\" src=\"https:\u002F\u002Fstatic.mailjet.com\u002Fmjml-website\u002Fgithub\u002Fsinch-mailjet-purple-on-white.png\" style=\"vertical-align:middle\"  \u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmjmlio\u002Fmjml\u002Factions\">\n    \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fmjmlio\u002Fmjml\u002Factions\u002Fworkflows\u002Fmjml-workflow.yml\u002Fbadge.svg\" alt=\"github actions\">\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\n\u003Cp>\n  | \u003Cb>\u003Ca href=\"#introduction\">Introduction\u003C\u002Fa>\u003C\u002Fb>\n  | \u003Cb>\u003Ca href=\"#installation\">Installation\u003C\u002Fa>\u003C\u002Fb>\n  | \u003Cb>\u003Ca href=\"#usage\">Usage\u003C\u002Fa>\u003C\u002Fb> |\n\u003C\u002Fp>\n\n---\n\n# Introduction\n\n**MJML** is a markup language created by [Mailjet](https:\u002F\u002Fwww.mailjet.com\u002F) and designed to reduce the pain of coding a responsive email. Its semantic syntax makes the language easy and straightforward while its rich standard components library shortens your development time and lightens your email codebase. **MJML**’s open-source engine takes care of translating the **MJML** you wrote into responsive HTML.\n\n\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fmjml.io\" target=\"_blank\">\n    \u003Cimg width=\"75%\" src=\"https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F6558790\u002F12450760\u002Fee034178-bf85-11e5-9dda-98d0c8f9f8d6.png\">\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\n# Installation\n\nYou can install **MJML** with NPM to use it with NodeJS or the Command Line Interface. If you're not sure what those are, head over to \u003Ca href=\"#usage\">Usage\u003C\u002Fa> for other ways to use **MJML**.\n\n```bash\nnpm install mjml\n```\n\n# Development\n\nTo work on **MJML**, make changes and create pull requests, download and install [yarn](https:\u002F\u002Fyarnpkg.com\u002Flang\u002Fen\u002Fdocs\u002Finstall\u002F) for easy development.\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fmjmlio\u002Fmjml.git && cd mjml\nyarn\nyarn build\n```\n\nYou can also run `yarn build:watch` to rebuild the package as you code.\n\n# Usage\n\n## Online\n\nDon't want to install anything? Use the free online editor!\n\n\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fmjml.io\u002Ftry-it-live\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F6558790\u002F12195421\u002F58a40618-b5f7-11e5-9ed3-80463874ab14.png\" alt=\"try it live\" width=\"75%\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n## Applications and plugins\n\n**MJML** comes with tools and plugins, check out:\n- [Visual Studio Code plugin](https:\u002F\u002Fgithub.com\u002Fmjmlio\u002Fvscode-mjml) (**MJML** is included). \u003Cbr>Also available at [Visual Studio Code Marketplace](https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=mjmlio.vscode-mjml) and the [Open VSX Registry](https:\u002F\u002Fopen-vsx.org\u002Fextension\u002Fmjmlio\u002Fvscode-mjml) or in the extensions tab of the Visual Studio Code app.\n- [Sublime Text plugin](https:\u002F\u002Fpackagecontrol.io\u002Fpackages\u002FMJML-syntax) (**MJML** needs to be installed separately)\n\nFor more tools, check the [Community](https:\u002F\u002Fmjml.io\u002Fcommunity) page.\n\n## Command line interface\n\n> Compiles the file and outputs the HTML generated in `output.html`\n\n```bash\nmjml input.mjml -o output.html\n```\n\nYou can pass optional `arguments` to the CLI and combine them.\n\n| argument                         | description                                            | default value |\n| -------------------------------- | ------------------------------------------------------ | ------------- |\n| `mjml [input] -o [output]`       | Writes the output to [output]                          |               |\n| `mjml [input] -s`                | Writes the output to `stdout`                          |               |\n| `mjml [input] -s --noStdoutFileComment` | Writes the output to `stdout` without file comment in the first line |               |\n| `mjml -w [input]`                | Watches the changes made to `[input]` (file or folder) |               |\n| `mjml [input] --config.allowIncludes` | Enables `mj-include` processing (`true` or `false`) | `false` |\n| `mjml [input] --config.allowMixedSyntax` | Allows mixing block and CSS variable syntax when `sanitizeStyles` is enabled (`true` or `false`) | `false` |\n| `mjml [input] --config.beautify` | Beautifies the output (`true` or `false`)              | `true`        |\n| `mjml [input] --config.includePath` | Adds allowlisted include root(s), as a string path or JSON array of paths |               |\n| `mjml [input] --config.minify`   | Minifies the output (`true` or `false`)                | `false`       |\n| `mjml [input] --config.minifyOptions` | Options for HTML minifier, use `minifyCss` to control CSS minification | See [mjml-cli documentation](https:\u002F\u002Fgithub.com\u002Fmjmlio\u002Fmjml\u002Fblob\u002Fmaster\u002Fpackages\u002Fmjml-cli\u002FREADME.md) |\n| `mjml [input] --config.juicePreserveTags` | Preserve some tags when inlining CSS | See [mjml-cli documentation](https:\u002F\u002Fgithub.com\u002Fmjmlio\u002Fmjml\u002Fblob\u002Fmaster\u002Fpackages\u002Fmjml-cli\u002FREADME.md) |\n| `mjml [input] --config.mjmlConfigPath` | Path to `.mjmlconfig` file for custom components | current working directory |\n| `mjml [input] --config.sanitizeStyles` | Sanitizes template variables inside CSS before minification (`true` or `false`) | `false` |\n| `mjml [input] --config.useMjmlConfigOptions` | Allows to use the `options` attribute from `.mjmlconfig` file | `false` |\n| `mjml [input] --config.templateSyntax` | Sets custom template delimiters as JSON array (`[{\"prefix\":\"{{\",\"suffix\":\"}}\"}]`) | `[{\"prefix\":\"{{\",\"suffix\":\"}}\"},{\"prefix\":\"[[\",\"suffix\":\"]]\"}]` |\n\nSee [mjml-cli documentation](https:\u002F\u002Fgithub.com\u002Fmjmlio\u002Fmjml\u002Fblob\u002Fmaster\u002Fpackages\u002Fmjml-cli\u002FREADME.md) for more information about config options.\n\n## Inside Node.js\n\n```javascript\nimport mjml2html from 'mjml'\n\n\u002F*\n  Compile an mjml string\n*\u002F\nasync function renderMjml() {\n  const htmlOutput = await mjml2html(`\n    \u003Cmjml>\n      \u003Cmj-body>\n        \u003Cmj-section>\n          \u003Cmj-column>\n            \u003Cmj-text>\n              Hello World!\n            \u003C\u002Fmj-text>\n          \u003C\u002Fmj-column>\n        \u003C\u002Fmj-section>\n      \u003C\u002Fmj-body>\n    \u003C\u002Fmjml>\n  `, options)\n\n  \u002F*\n    Print the responsive HTML generated and MJML errors if any\n  *\u002F\n  console.log(htmlOutput)\n}\n\nrenderMjml()\n```\n\nYou can pass optional `options` as an object to the `mjml2html` function:\n\n| option               | unit               | description                                                                                                                                              | default value                                                                                           |\n| -------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |\n| allowMixedSyntax     | boolean            | Allows mixed block\u002Fvalue\u002Fproperty template syntaxes during CSS sanitization                                                                               | `false`                                                                                                 |\n| beautify             | boolean            | Option to beautify the HTML output                                                                                                                       | `false`                                                                                                 |\n| filePath             | string             | Path of file, used for relative paths in `mj-include` instances                                                                                          | `.`                                                                                                     |\n| fonts                | object             | Default fonts imported in the HTML rendered by MJML                                                                                                      | See in [index.js](https:\u002F\u002Fgithub.com\u002Fmjmlio\u002Fmjml\u002Fblob\u002Fmaster\u002Fpackages\u002Fmjml-core\u002Fsrc\u002Findex.js) |\n| ignoreIncludes       | boolean            | Option to ignore `mj-include` instances                                                                                                                  | `true`                                                                                                  |\n| includePath          | string or string[] | Additional allowlisted include root(s), used when `ignoreIncludes` is `false`                                                                            |                                                                                                         |\n| juicePreserveTags    | object             | Preserve some tags when inlining CSS, see [documentation](https:\u002F\u002Fdocumentation.mjml.io\u002F#inside-node-js) for more info |                                                                                                         |\n| keepComments         | boolean            | Option to keep comments in the HTML output                                                                                                               | `true`                                                                                                  |\n| minify               | boolean            | Option to minify the HTML output                                                                                                                         | `false`                                                                                                 |\n| minifyOptions        | object             | Options for htmlnano minification (including `minifyCss`), see [documentation](https:\u002F\u002Fdocumentation.mjml.io\u002F#inside-node-js) for more info |                                                                                                         |\n| mjmlConfigPath       | string             | The path or directory of the `.mjmlconfig` file (for custom components use)                                                                              | `process.cwd()`                                                                                         |\n| preprocessors        | array of functions | Preprocessors applied to the xml before parsing. Input must be xml, not json. Functions must be `(xml: string) => string`                                | `[]`                                                                                                    |\n| sanitizeStyles       | boolean            | Sanitizes template variables in CSS before minification                                                                                                   | `false`                                                                                                 |\n| templateSyntax       | array of objects   | Custom template delimiters used by sanitization (`[{ prefix, suffix }]`)                                                                                | `[{\"prefix\":\"{{\",\"suffix\":\"}}\"},{\"prefix\":\"[[\",\"suffix\":\"]]\"}]`                       |\n| useMjmlConfigOptions | boolean            | Allows to use the `options` attribute from `.mjmlconfig` file                                                                                            | `false`                                                                                                 |\n| validationLevel      | string             | Available values for the [validator](https:\u002F\u002Fdocumentation.mjml.io\u002F#validating-mjml): `strict`, `soft`, `skip`       | `soft`.                                                                                                 |\n\n## Client-side (in browser)\n\n```javascript\nvar mjml2html = require('mjml-browser')\n\n\u002F*\n  Compile a mjml string\n*\u002F\nmjml2html(`\n  \u003Cmjml>\n    \u003Cmj-body>\n      \u003Cmj-section>\n        \u003Cmj-column>\n          \u003Cmj-text>\n            Hello World!\n          \u003C\u002Fmj-text>\n        \u003C\u002Fmj-column>\n      \u003C\u002Fmj-section>\n    \u003C\u002Fmj-body>\n  \u003C\u002Fmjml>\n`, options).then(function (htmlOutput) {\n  \u002F*\n    Print the responsive HTML generated and MJML errors if any\n  *\u002F\n  console.log(htmlOutput)\n})\n```\n\n## API\n\nA free-to-use **MJML** API is available to make it easy to integrate **MJML** in your application. Head over here to [learn more about the API](https:\u002F\u002Fmjml.io\u002Fapi).\n\n# MJML Slack\n\n**MJML** wouldn't be as cool without its amazing community. Head over the [Community Slack](https:\u002F\u002Fjoin.slack.com\u002Ft\u002Fmjml\u002Fshared_invite\u002Fzt-gqmwfwmr-kPBnfuuB7wof5httaTcXxg) to meet fellow **MJML**'ers.\n","MJML是一个由Mailjet开发的框架，旨在简化响应式电子邮件的设计与开发。它通过提供一套丰富的标准组件库和简洁的语义化语法，使得开发者能够快速创建出结构清晰、易于维护的邮件模板。该框架基于JavaScript构建，并支持通过NodeJS或命令行接口进行安装使用。此外，MJML还提供了在线编辑器及多种IDE插件支持，方便不同需求下的开发工作。非常适合需要频繁制作跨设备兼容性良好电子邮件营销活动的企业或个人使用。","2026-06-11 02:53:03","top_language"]