[HN Gopher] Show HN: Mdx - Execute your Markdown code blocks, no...
___________________________________________________________________
Show HN: Mdx - Execute your Markdown code blocks, now in Go
Hey HN! I recently came across makedown here on HN and loved the
concept. Wanting to learn Go, I thought this could be a great
starter project - so I started working on my own Go implementation,
which I'm calling mdx (https://github.com/dim0x69/mdx). Key
Features: - Define dependencies between commands - Supports
shebangs - Ability to pass arguments to code blocks Would love
feedback and thoughts! Ref. makedown:
https://github.com/tzador/makedown. Thanks for the idea! :)
Author : dim0x69
Score : 104 points
Date : 2024-10-26 05:34 UTC (17 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| lagniappe wrote:
| This is really cool, I was just thinking recently about something
| like that. What do you plan to add to it next? What do you think
| of Go?
| nicoburns wrote:
| You might want to reconsider the name. MDX is already a well-
| known technology that combines markdown with JSX
| https://github.com/mdx-js/mdx/
| zoover2020 wrote:
| Came here to say this, confusion ensued.
| edsammy wrote:
| marko or godown would be fun
| no_wizard wrote:
| Marko too is taken https://markojs.com/
| jrajav wrote:
| It also sees very wide use, it's not just a proof of concept -
| most who've used any recent major version of Storybook (84k
| stars) would know about it:
| https://storybook.js.org/docs/writing-docs/mdx
| ValentineC wrote:
| Not just Storybook, but most modern JavaScript-based static
| site generators, for example:
|
| - Astro: https://docs.astro.build/en/guides/integrations-
| guide/mdx/
|
| - Docusaurus: https://docusaurus.io/docs/markdown-
| features/react
|
| - Eleventy: https://www.11ty.dev/docs/languages/mdx/
|
| - NextJS: https://nextjs.org/docs/pages/building-your-
| application/conf...
| dcmatt wrote:
| Also Multidimensional expressions, popular in OLAP cubes.
| https://en.wikipedia.org/wiki/MultiDimensional_eXpressions
| wdavidw wrote:
| It is similar to how CoffeeScript literate works.
| eterps wrote:
| Could use some more (or better?) examples of how this can be
| useful.
| glyphacki wrote:
| I can think of code examples in the documentation. At least you
| make sure the code is executed or even check the output of the
| examples.
| DJBunnies wrote:
| If only we had a mechanism for demonstrating correct and
| incorrect ways to use a particular software.
|
| We could expect failure conditions or assert correct
| outcomes.
|
| It could become a little library of examples that change over
| time, as the software changes, granting us peace of mind that
| everything still works.
| codetrotter wrote:
| I do something similar.
|
| In some of my projects I have little snippets of cli commands
| in the main README.
|
| When I open the project in JetBrains IDE and I open the README
| of my project there, I can click on each code block to run it.
|
| This way I can for example start up dependencies like say a
| little python3 web server to serve static files from one of the
| subdirs, simply by clicking on it in the readme. Instead of
| copy-pasting from the readme, and even instead of Ctrl+R in a
| terminal window and finding the correct commands for a project
| from history.
|
| It almost reminds me a little bit of Plan9 and their Acme
| editor, where they were blurring the lines between text and
| commands. In Acme you can type a piece of text and then middle-
| button click I think it was to run the text as a command.
| Having executable blocks of code interspersed in a markdown
| document feels a little bit like that although in a different,
| more limited manner.
| codetrotter wrote:
| Also to add, for a while in the past before I found that the
| IDE I use could execute code blocks I made a little program
| that would take each code block in a markdown document and
| run them one after the other, and it would look to see if a
| "text" fence followed right after the code fence. In that
| case it would write the output of that command into the text
| fence. If there was no text fence, it would run the command
| without inserting any of its input into the document.
|
| It was like a super rudimentary Jupyter Notebook system of my
| own making.
|
| Eventually I switched away from my own run-and-insert system.
| jpillora wrote:
| See also https://github.com/jpillora/md-tmpl
| luckman212 wrote:
| For Obsidian users, I'm a fan of the Execute Code[0] plugin which
| allows exexution of codeblocks straight from your notes.
|
| [0]: https://github.com/twibiral/obsidian-execute-code
| luckman212 wrote:
| I spelled 'execution' wrong. Ugh. Careful running those
| codeblocks :)
| Galanwe wrote:
| Cool, at last we can now `curl | mdx` Github readmes instead of
| copy pasting `curl | bash` from them!
| lioeters wrote:
| That's both exhilarating and terrifying at the same time.
| Please don't tempt me. At least it's better than:
| chatgpt -m "I'm feeling lucky" | sudo bash
| aziis98 wrote:
| Note: If one writes a cell with "you can install this with
| `curl | mdx`" this ends up in an infinite loop xD.
| oezi wrote:
| Similar in Ruby/shameless pluck:
|
| https://github.com/coezbek/baker
|
| I call this a Project-Setup-as-Code tool.
|
| Supports backticks for shell and triple backticks for executing
| Ruby code.
|
| If blocks are successfully executed they are marked as done
| (using markdown [x] checkboxes). So you can incrementally run a
| file without executing stuff twice.
| javajosh wrote:
| I wrote something similar, but for the web. I call it "Literate
| Markdown" (https://simpatico.io/lit.md) and you write markdown
| and your html/css/js/md code blocks are both exposed as text and
| as code blocks for execution in the browser. The format expects
| to a) be transformed and exposed by a special server
| (https://simpatico.io/reflector.md) and b) rendered in a browser.
| This code also includes a simple test harness that, for example,
| turns the favicon green/red depending on if exceptions are thrown
| in your code (https://simpatico.io/testable.js) I also wrote an
| acceptance test that loads most of the interesting parts of the
| site in iframes and combines their test output
| (https://simpatico.io/acceptance). That page also has notes for
| using headless chrome to run the tests. Also, the server (lazily)
| caches all transforms with file watcher invalidation, disallows
| 3rd party cookies, and starts up instantly.
|
| The central use case is to have a fun and fast way to play with
| browser code, using your favorite editor, and literate
| programming techniques. All while being open source, local first,
| and minimalist.
|
| The repo (https://github.com/javajosh/simpatico/) is not yet
| npm/npx compatible so you have to fork and run. This is a local
| first, minimalist project that has ~2 small dependencies, which
| themselves have no deps, so publishing was not a priority.
|
| Eventually I'd like to automate an md-> js process, such that the
| md is the canonical source for javascript and the final js is a
| build product. I'd also like to clean up the code and publish to
| npm, but sadly someone is squatting on the @simpatico handle and
| npm won't do anything. :(
| theK wrote:
| Cool idea. Stuff like this reminds me why I like the vim
| ecosystem so much. At least since the introduction of terminal
| buffers, most people I know that use vim for serious code work
| have a form of "send text under cursor to shell"
| dingnuts wrote:
| Helix and Emacs have that built in by the way
| dingnuts wrote:
| ah, someone has reimplemented another feature of Org Mode.
|
| Well, this will mean Org files exported to Markdown can remain
| executable just like they were in Emacs, so maybe this makes Org
| Babel more valuable as well, for those of us that prefer a
| structured markup language for notes and literate programming
|
| And thanks to pandoc it's not hard to go back and forth
| oezi wrote:
| Are you referring to this?
|
| https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-...
| dingnuts wrote:
| Yes, the feature is called org-babel and it lets you write
| and execute polyglot literate programs.
| alwayslikethis wrote:
| org babel supports way more languages. Elisp (obviously),
| python, C, C++, Java, you name it
| VyseofArcadia wrote:
| Those who do not understand Emacs are doomed to reinvent it,
| poorly.
|
| With apologies to Henry Spencer.
| oezi wrote:
| Casting off the shackles of Lisp! There are worse mistakes.
| bluesnews wrote:
| This idea isn't just from one source but that doesn't mean
| another implementation isn't worthy.
|
| We did similar at a company I worked for 15 yrs ago
| Bromeo wrote:
| Yup, looks like org-babel is at least 15 years old.
| https://github.com/taruti/org-babel/tree/master
|
| I don't think it ever had huge adoption across whole teams, but
| I hope if there are new implementations that they take away a
| number of lessons you can gather from 15 years of org-babel.
| starkparker wrote:
| cf. rundown https://github.com/elseano/rundown
| oezi wrote:
| Can you compare to https://github.com/bashup/mdsh ?
| pomdtr wrote:
| I would prefer an api base on codeblocks meta string and json
| attributes.
|
| ```sh name="build" deps=["install"]
|
| npm run build
|
| ```
|
| This would be displayed just fine in github, as it is valid gfm.
| drunken_thor wrote:
| This is a great tool for writing technical documentation sites.
| It will allow you to run tests on your code samples, ensuring
| that they are up to date and working with the most recent library
| release. We were in progress of doing this with Shopify.dev
| before I left.
| admc wrote:
| I'd like to commend you on building something and putting it out
| in there in the world, keep doing that! Also the idea of running
| commands and code from Markdown is obviously awesome. I think
| you'll find that the folks you get to use this will want a ton
| more features, like project wide config, interactive stdin, .ENV
| tooling, passing of variables between inputs and a lot more.
| That's why we built runme.dev, the kernel is built in Go, please
| come join our community and contribute.
| huac wrote:
| reminds me a lot of rmarkdown - which allows you to run many
| languages in a similar fashion https://rmarkdown.rstudio.com/
| kitd wrote:
| Congratulations! Nice work.
|
| If you like this, another similar tool, though one specifically
| geared towards builds, is xc.
|
| https://xcfile.dev/
___________________________________________________________________
(page generated 2024-10-26 23:03 UTC)