# Marko Documentation (tags-api) * [gist/mlrawlings/c12c976522344d41d47bcf8b46990101](https://gist.github.com/mlrawlings/c12c976522344d41d47bcf8b46990101) * [marko-js/marko#874](https://github.com/marko-js/marko/issues/874) Cross-pollination with URLs across diataxis boundaries # `/docs` entry page Should have a brief explanation of the top-level sections so people can understand what we're even doing with the diataxis thing "If you're ${levelOfExperience}, start here" Landing pages for each top-level section should probably explain _what_ it's about and who it's for, even if only in its `meta[name=description]` # Tutorials > I'm going to use markojs in production but as a beginner, I faced with following topics. > > - How to enable SASS in lassojs? > - Instead to promote static sites only (marko-cli) we should also show the benefit of dynamic sites. How looks a basic app with a layout (header, footer, body), css preprocessor, prebuilds, deployment, babel, autoprefixer ? > - How to prebuild static assets with lassojs? > - When is content delivered to the browser? Even an empty class will mark everything as client and server code. This isn't obvious. > - Who is using markojs in production? How much is it used at ebay? > - I faced with many outdated or read-only repositories with signal a bad state of the ecosystem. Many issues has to be cleaned up. > - What are the plans for [future Marko versions]? How can we participate? > > ---[marko-js/marko#874 comment 466802495](https://github.com/marko-js/marko/issues/874#issuecomment-466802495) * Intro * Get Started * Try Online * CodeSandbox? (we should only provide one path, if this is a tutorial) * `marko serve` * Anatomy of a Marko Tag * Tag Name (start + end tags) * Vars * Params * Attributes * Pseudo-attributes * Nested body content * Variables & Text Interpolation * Escaping * Styling & CSS * `<style>`, `style {}`, `style=""`, `style={}` * `<tag#id.class.other-class>` shorthands * `class=""`, `class=[]`, `class={}` * Using CSS preprocessors * State & values * `<let>` * Snapshot of the initial value * Mutable references, immutable values * `<const>` * Immutable references, computed values * Observing time, self-referencing reducer pattern * [rxmarbles.com/#scan](https://rxmarbles.com/#scan) * Loops & conditions * `<for>` (`[of]`, `[in]`) * Keys? * `<if>`, `<else>` * Effects * `<lifecycle>` * `<effect>` * DOM refs (`key`?) * Components * Discovery * `/components/` * import Component from '<component>' * Inline components (`<tag>`) * Communication with Children * Attributes * Arguments? * Communication with Parent * Events * Parameters * Return Values * Communication with Siblings/Cousins * Lifting state up * Using custom body content to make the tree shallower * `<context>` * Third-Party components * Usage * Link to Publishing Guide * Body content ("nested content") * Existing `renderBody` page, with better examples * Type (markup, text, script) (fix the parser) * Parameters * Promises * `<async>`/`await` * Fetching data * Streaming SSR * Errors * `<try>`/`<@catch>` (and rethrowing from `<@catch>`) * Recovering from errors (especially while streaming) * Testing * `@marko/testing-library` * `@marko/fixture-snapshots` * `@marko/jest` * Migrations * `marko migrate` ## Advanced Tutorials > @dylanpiercey: I think all of these [existing] sections are written as tutorial-like: > > Conditionals and lists > Custom tags > State > Styles > Events > Body content * Color picker * TodoMVC? * HackerNews? * Writing a Utility Component * MediaQuery/Online/etc. * Zero to hero (Intro to webdev with Marko) 1. Basic HTML 1. Adding `<style>` 1. Pages 1. Stylesheets 1. JavaScript 1. HTTP Server 1. Installing Node.js 1. `npm install serve` 1. Leaving off `.html` 1. Live Reloading 1. Deploying * Vercel? Cloudflare workers? * Marko Build 1. Marko Serve * Marko is a near superset of HTML - rename your files * `npx laren "./**/*.html" "(f) => f.replace('.html', '.marko')"` * Live Reloading 1. Sharing code using components 1. State 1. Using npm modules 1. Persistent Data * Airtable? Google sheets? Firebase? Something else? # How-to Guides * Integrating with embeds/analytics/other libraries/miscellaneous DOM mutators * onMount * key + this.getEl * Troubleshooting streaming * Layouts (aka page components) * How to avoid `state` in components containing `<html>` or `<body>` * Integrating into an existing Node.js project * Integrating into an existing non-Node project (like what, Java?) * Making Marko work with Content-Security Policies * Publishing components * `marko.json` * Best practices * Storybook? * Writing a migrator * Writing a translator * Choosing between `<let>` and `<const>` * Streaming with Node’s HTTP/2 * https://github.com/marko-js/marko/issues/1273 * Using Marko with HTML consumers stricter than browsers - https://github.com/marko-js/marko/issues/1432#issuecomment-668698247 * Optimizing performance * Optimizing client-side JS size * NODE_ENV * Pass in promises * Streaming performance * Profiling (flame-graphs) * server-side * client-side * `<cached-fragment>` * Reducing hydration data? * sortable `<table>`, without shipping JS to hydrate all the individual cells * Using Web Components * [marko-js/marko#862: Docs for using custom elements with Marko](https://github.com/marko-js/marko/issues/862) * Consuming in Marko * Registering with `html-elements.json` * Using Marko in a web component * Exporting * Wrapping imperative apis * Fixing form resubmission dialogs: [the `POST`→redirect→`GET` pattern](https://en.wikipedia.org/wiki/Post/Redirect/Get) # Explanations Concepts in-depth/deep-dives - Animations - Accessibility - scoped `id`s - out-of-order rendering - controlled component pitfalls - Use-cases for `<await>` - blocking streams, like search results - out-of-order streaming with small timeouts, like recommended products - that one `<datalist>` example for search suggestions? - optional rendering? - error-handling: mark stream as damaged vs. "whatever it's fine" * Single-file vs. multi-file components * Split components * How compilation works * Parser * Tags can change parse mode * Building the AST * Babel patches * Migrate * Transform * Translate * Generate * How streaming works * Deep dive into async writer * `<html-chunk>`/`<html-chunk-slot>` * How hydration works * valav * How DOM updates work * Signals * Async computations ("evergreen blog posts"? integrations with specific technologies? Search engine bait? Troubleshooting HTTP Streams, problems we know people have) FAQ? Help? Check Before You StackOverflow? Troubleshooting? # API Reference Have the examples in the API reference have an output pane (but only a link to edit it, because otherwise the perf hit would be excruciating) * [Browser support](https://github.com/marko-js/marko/issues/785)? * Syntax * Glossary * Tag - `<tagName attributeName=attributeValue></tagName>` - Like HTML, **tags** are made of [tag name]s, [start tags], [end tags], and [attributes]. You can [nest content] between the start and end tags, or close the tag immediately. * Dynamic tag * Self-closing tag * Attribute * Attribute name * Attribute value * Boolean attribute * Pseudo-attribute * Attribute tag * Text content * Dynamic text/HTML content * HTML Character references and JS escapes * Comments * Element * Concise Mode * Exceptions to “Marko is a superset of HTML” * Unquoted attribute values * Probably don’t use Marko to make HTML emails * Javascript strings vs HTML strings * `<input pattern>` * Escaping * Tag namespaces (technically XML, not HTML) * `<fb:login-button>` * Probably don’t use Marko to generate RSS/Atom/etc. * Attribute namespaces * `<use xlink:href>` * Comments and `<html-comment>` * `<!--#include -->` (SSI) * Concise mode * TypeScript * Single-file components & multi-file components (“vs.” would be in Guides) * `marko-tag.json` & `marko.json` (“vs.” would be in Guides) * Core tags * Class components * `<component>`? * `<tag>`? * Widgets? * `<widget>`? * Rendering APIs * Compiler - API - AST Nodes & Builder - Compile Context - `marko.json`/`marko-tag.json` * Taglibs * Bundler integrations * Webpack * Rollup * Vite # Marko For 𝑋 Developers * For React devs * [🏚 gist/mlrawlings/921bfcd60b8cc4e1d5ec3964949403ec](https://gist.github.com/mlrawlings/921bfcd60b8cc4e1d5ec3964949403ec) * For Vue devs * For Angular devs * For Marko 3/4/5 devs * For Solid devs 🤨 * For PHP devs # Showcases/Example Apps More involved codebases that demonstrate how Marko works, but without guided handholding - [7 GUIs](https://eugenkiss.github.io/7guis/tasks/) - Programmable Faucet from Clipper - `vercel/ecommerce` ⑂ `marko/ecommerce-but-fast` # Community * Team & Contributors * Core Team * International criminal Michael Rawlings * The Big D. Pierce * That guy with the skull avatar * 2 MIA guys we allegedly have coming up * Emeritus * [_Our Founder_](https://cdn.contexttravel.com/image/upload/c_fill,q_60,w_2400/v1572375264/production/product_image/image__1572375264.jpg) Patrick Steele-Idem * Philip Gates-Idem * Austin Kelleher * Martin Aberer * Ryan “Solid” Solid * All Contributors * (pull from github) (how are they sorted?) * Who uses Marko? * `awesome-marko` list of projects (this has been proposed before) * eBay * 🏚 [docs.google.com/document/d/1a9xrGwwT0zoLc9jO0J7ueGLtnAEdLFef2Fg6nbli2-8](https://docs.google.com/document/d/1a9xrGwwT0zoLc9jO0J7ueGLtnAEdLFef2Fg6nbli2-8) * Not Kroger * Not RedBubble * Contributing * RFC/Proposal process * Example processes: * [supercollider/rfcs](https://github.com/supercollider/rfcs) * [rust-lang/rfcs: RFCs for changes to Rust](https://github.com/rust-lang/rfcs) * [swift-evolution/process.md](https://github.com/apple/swift-evolution/blob/master/process.md) * Statuses * Accepted * Provisional (basic idea accepted, but details pending) * Rejected * Withdrawn (by the author, or from inactivity/disinterest) * Core Team meetings * Livestream * Everyone is invited * Speaker resources (Giving a talk on Marko? We can help!) * Logos/presskit * Slide templates * Speaking Tips * Order Marko swag * Schedule a practice talk * Articles * [**The Future of Marko - Oct. 2017**](https://tech.ebayinc.com/engineering/the-future-of-marko/) \ On joining the JS Foundation (now the OpenJS Foundation) * [**Why is Marko Fast? - May 2017**](https://hackernoon.com/why-is-marko-fast-a20796cb8ae3) \ Optimization strategies used by Marko * [**Server-Side Rendering Shootout - Jan. 2017**](https://hackernoon.com/server-side-rendering-shootout-with-marko-preact-rax-react-and-vue-25e1ae17800f) \ Comparing SSR performance across frameworks * [**Rediscovering Progressive HTML Rendering with Marko - Dec. 2014**](https://tech.ebayinc.com/engineering/async-fragments-rediscovering-progressive-html-rendering-with-marko/) \ Benefits of making early flushing a first-class citizen * StackOverflow (`#marko` tag, ask a question, …?) * [Discord](https://discord.gg/marko) * GitHub * Roadmap