mdBook is a utility to create modern online books from Markdown files.

Related tags

Command-line mdBook
Overview

mdBook

Build Status crates.io LICENSE

mdBook is a utility to create modern online books from Markdown files.

What does it look like?

The User Guide for mdBook has been written in Markdown and is using mdBook to generate the online book-like website you can read. The documentation uses the latest version on GitHub and showcases the available features.

Installation

There are multiple ways to install mdBook.

  1. Binaries

    Binaries are available for download here. Make sure to put the path to the binary into your PATH.

  2. From Crates.io

    This requires at least Rust 1.39 and Cargo to be installed. Once you have installed Rust, type the following in the terminal:

    cargo install mdbook
    

    This will download and compile mdBook for you, the only thing left to do is to add the Cargo bin directory to your PATH.

    Note for automatic deployment

    If you are using a script to do automatic deployments using Travis or another CI server, we recommend that you specify a semver version range for mdBook when you install it through your script!

    This will constrain the server to install the latest non-breaking version of mdBook and will prevent your books from failing to build because we released a new version.

    You can also disable default features to speed up compile time.

    Example:

    cargo install mdbook --no-default-features --features output --vers "^0.1.0"
    
  3. From Git

    The version published to crates.io will ever so slightly be behind the version hosted here on GitHub. If you need the latest version you can build the git version of mdBook yourself. Cargo makes this super easy!

    cargo install --git https://github.com/rust-lang/mdBook.git mdbook
    

    Again, make sure to add the Cargo bin directory to your PATH.

  4. For Contributions

    If you want to contribute to mdBook you will have to clone the repository on your local machine:

    git clone https://github.com/rust-lang/mdBook.git
    

    cd into mdBook/ and run

    cargo build
    

    The resulting binary can be found in mdBook/target/debug/ under the name mdBook or mdBook.exe.

Usage

mdBook is primarily used as a command line tool, even though it exposes all its functionality as a Rust crate for integration in other projects.

Here are the main commands you will want to run. For a more exhaustive explanation, check out the User Guide.

  • mdbook init

    The init command will create a directory with the minimal boilerplate to start with. If the parameter is omitted, the current directory will be used.

    book-test/
    ├── book
    └── src
        ├── chapter_1.md
        └── SUMMARY.md
    

    book and src are both directories. src contains the markdown files that will be used to render the output to the book directory.

    Please, take a look at the CLI docs for more information and some neat tricks.

  • mdbook build

    This is the command you will run to render your book, it reads the SUMMARY.md file to understand the structure of your book, takes the markdown files in the source directory as input and outputs static html pages that you can upload to a server.

  • mdbook watch

    When you run this command, mdbook will watch your markdown files to rebuild the book on every change. This avoids having to come back to the terminal to type mdbook build over and over again.

  • mdbook serve

    Does the same thing as mdbook watch but additionally serves the book at http://localhost:3000 (port is changeable) and reloads the browser when a change occurs.

  • mdbook clean

    Delete directory in which generated book is located.

3rd Party Plugins

The way a book is loaded and rendered can be configured by the user via third party plugins. These plugins are just programs which will be invoked during the build process and are split into roughly two categories, preprocessors and renderers.

Preprocessors are used to transform a book before it is sent to a renderer. One example would be to replace all occurrences of {{#include some_file.ext}} with the contents of that file. Some existing preprocessors are:

  • index - a built-in preprocessor (enabled by default) which will transform all README.md chapters to index.md so foo/README.md can be accessed via the url foo/ when published to a browser
  • links - a built-in preprocessor (enabled by default) for expanding the {{# playground}} and {{# include}} helpers in a chapter.
  • katex - a preprocessor rendering LaTex equations to HTML.

Renderers are given the final book so they can do something with it. This is typically used for, as the name suggests, rendering the document in a particular format, however there's nothing stopping a renderer from doing static analysis of a book in order to validate links or run tests. Some existing renderers are:

  • html - the built-in renderer which will generate a HTML version of the book
  • markdown - the built-in renderer (disabled by default) which will run preprocessors then output the resulting Markdown. Useful for debugging preprocessors.
  • linkcheck - a backend which will check that all links are valid
  • epub - an experimental EPUB generator

Note for Developers: Feel free to send us a PR if you've developed your own plugin and want it mentioned here.

A preprocessor or renderer is enabled by installing the appropriate program and then mentioning it in the book's book.toml file.

$ cargo install mdbook-linkcheck
$ edit book.toml && cat book.toml
[book]
title = "My Awesome Book"
authors = ["Michael-F-Bryan"]

[output.html]

[output.linkcheck]  # enable the "mdbook-linkcheck" renderer

$ mdbook build
2018-10-20 13:57:51 [INFO] (mdbook::book): Book building has started
2018-10-20 13:57:51 [INFO] (mdbook::book): Running the html backend
2018-10-20 13:57:53 [INFO] (mdbook::book): Running the linkcheck backend

For more information on the plugin system, consult the User Guide.

As a library

Aside from the command line interface, this crate can also be used as a library. This means that you could integrate it in an existing project, like a web-app for example. Since the command line interface is just a wrapper around the library functionality, when you use this crate as a library you have full access to all the functionality of the command line interface with an easy to use API and more!

See the User Guide and the API docs for more information.

Contributions

Contributions are highly appreciated and encouraged! Don't hesitate to participate to discussions in the issues, propose new features and ask for help.

If you are just starting out with Rust, there are a series of issues that are tagged E-Easy and we will gladly mentor you so that you can successfully go through the process of fixing a bug or adding a new feature! Let us know if you need any help.

For more info about contributing, check out our contribution guide which helps you go through the build and contribution process!

There is also a rendered version of the latest API docs available, for those hacking on master.

License

All the code in this repository is released under the Mozilla Public License v2.0, for more information take a look at the LICENSE file.

Comments
  • Have a search bar

    Have a search bar

    Having a search bar would be very very useful. rustbyexample has one for example. I'm not sure how it would be implemented. I'm sure this has long been wanted by the rust book.

    Being able to search for programming keywords would actually make it very unusual and better than most too (outside the scope of a regular search bar though)

    T-Enhancement S-Wishlist 
    opened by mdinger 53
  • Project Maintenance Discussion

    Project Maintenance Discussion

    Since last year, due to other projects, interests and scholar obligations, I have less and less time to maintain this project. I initially started this project to familiar myself with Rust and I think I achieved that goal. I now have different interests where I want to invest some time in. Therefore, I don't have the bandwidth anymore to maintain this project. In the last months, a lot of people have shown interest in this project and have contributed. I appreciate that a lot! But at this point, I feel like I can't devote enough time to review issues and PRs within a time frame that I still consider to be respectful to the persons that contribute.

    I don't want to block progress and leave contributors hanging, so I think it is time that I pass over the role of main maintainer to one or more interested persons.

    @steveklabnik @budziq @frewsxcv @Michael-F-Bryan

    M-Discussion 
    opened by azerupi 46
  • run rustfmt on the repository #398(Updated)

    run rustfmt on the repository #398(Updated)

    Repository was formatted using rustfmt-nightly. The max_width needed to be increased to remove errors of width being more than the default 120. Some error still persist like: error: left behind trailing whitespace ---> /mdBook/src/utils/mod.rs:178

    and with the fix of code snippets being destroyed from doc comments.

    opened by prertik 45
  • Book representation

    Book representation

    This PR adds a new internal representation for the book, plus functionality for loading that book using the Summary we got when parsing SUMMARY.md.

    It is part of a larger issue (#359) which is working towards refactoring the Book structure and decouple it from the other bits like rendering and configuration.

    opened by Michael-F-Bryan 41
  • Remove Google surveillance

    Remove Google surveillance

    By default, mdbook includes tracking code from Google. See: https://github.com/rust-lang-nursery/mdBook/search?utf8=%E2%9C%93&q=google&type=

    Can we please remove this so that books generated by mdbook do not expose the people who read them to surveillance by Google/Alphabet, Inc.

    The toot that brought it to my attention: https://mastodon.host/@BartG95/101222458295737848 (after I hosted a render of The DAT Protocol book on my own site. (Thereby unknowingly exposing people to tracking from my personal site.)

    Related issue on The DAT Protocol book’s issue tracker: https://github.com/datprotocol/book/issues/20

    A-CDN 
    opened by aral 34
  • misc mobile safari issues in private browsing

    misc mobile safari issues in private browsing

    Many code snippets, which are supposed to run in the playground, simply do not work and render the "hidden" parts of their code, causing newbies like me great confusion.

    # #![allow(unused_variables)]
    #
    #fn main() {
    

    as found in enums.html, etc

    When using private browsing on mobile safari (iphone) local storage is not available so: localStorage.setItem('theme', theme); throws an error. I think modernizr might have a check for this? ([https://github.com/Modernizr/Modernizr/blob/master/feature-detects/storage/localstorage.js](modernizr localstorage.js)

    Also the hamburger menu does not click, which is probably because the localstorage thing.

    T-Papercut E-Help-wanted A-Mobile 
    opened by msporleder 29
  • YAML for summary

    YAML for summary

    I'd like to open a discussion on using a YAML list for the summary file, and an optional YAML header in the Markdown chapters.

    I realize that this would effectively kill your work on parsing the Markdown summary, but this would pay off for more complex TOC structures, while still being easy to write for the simple case.

    The thing is that things start to get complicated when you have to start to try and satisfy the EPUB and MOBI specifications.

    I am not suggesting TOML because it is not good at representing these kind of nested hasmap types.

    In the simplest case the list items are the source path, and you can parse the title from the first heading. In this case the Cover, Title Page and Contents pages for the ebook formats can take sensible defaults.

    - part-1.md
      - nameless-labyrinth.md
      - glacial-surface.md
      - countless-windows.md
        - closed-shutters.md
    - part-2.md
      - semblance-of-equilibrium.md
    

    For the ebooks the <guide> tag is mandatory in OEBPS/content.opf:

     <guide>
        <reference href='chapters/cover.xhtml' title="Cover" type='cover' />
        <reference href='chapters/titlepage.xhtml' title="Title Page" type='title-page' />
        <reference href='chapters/toc.xhtml' title="Contents" type='toc' />
    </guide>
    

    And YAML really pays off when you have to manipulate chapter properties, or to indicate for the ebook <guide> what's what. Say, when your book has a special titlepage design or the 'Cover' is called 'Capa' (pt) or 'Borító' (hu).

    - { title: "Cover", path: "cover.xhtml", type: cover, linear: no }
    - { title: "Title Page", path: "titlepage.xhtml", type: title-page }
    - { title: "Contents", path: "toc.xhtml", type: toc }
    - part-1.md
      - { title: "The Nameless Stone Labyrinth", path: "nameless-labyrinth.md" }
      - nameless-labyrinth.md
      - glacial-surface.md
      - countless-windows.md
        - closed-shutters.md
    - part-2.md
      - semblance-of-equilibrium.md
    

    There is an example TOC here.

    M-Discussion S-Experiment A-Configuration 
    opened by gambhiro 25
  • mdBook forbids

    mdBook forbids "empty chapters" since 0.1.0

    Until version 0.0.28, it was possible to have a SUMMARY.md like this:

    # Summary
    
    - [Real chapter](./real.md)
    - [Empty chapter]()
    

    While the "real chapter" was rendered and given a link in the summary on the left-hand side, the "empty chapter" was just given an entry in the summary without a link.

    This behaviour was very helpful in lots of cases, e.g.

    • when the book was not yet complete or
    • to give the summary additional structure.

    Since version 0.1.0, empty chapters are not longer supported. They result in the following error:

    $ mdbook build
    2018-01-24 16:08:20 [ERROR] (mdbook::utils): Error: Summary parsing failed
    2018-01-24 16:08:20 [ERROR] (mdbook::utils): Caused By: There was an error parsing the numbered chapters
    2018-01-24 16:08:20 [ERROR] (mdbook::utils): Caused By: Error at line 4, column 16: You can't have an empty link.
    

    Is the new behaviour intended? If yes, is it possible to revert that decision since the old behaviour has practical benefits?

    opened by teiesti 24
  • [for review] multi-language mdbook

    [for review] multi-language mdbook

    See a demo: Alice's Adventures in Wonderland, in three languages with mdbook. Chapter excerpts for testing. Markdown sources here.

    Use the gambhiro/mdbook/multilang branch for compiling or reading the code.

    This PR is for reviewing and discussing a large refactoring which involves:

    • #5 (multi-lingual support)
    • #146 (book representation)
    • #149 (separate renderer design)
    • #96 (TOML format for config)
    • #178 (custom.css)

    This PR incorporates PR #147 (new book struct), as I started by merging that and working from there.

    This also prepares the ground for #88 (ebooks), which after this can be implemented as another renderer.

    Does everything still work?

    Let's compose a list of user-level features that I can test and debug:

    • [x] the Rust Book should build
    • [x] CLI commands
    • [x] single-language book
    • [x] multi-language book
    • any more?

    Rust book

    Move src/img to assets/img for the images to be copied. Paths in the Markdown source don't have to change.

    CLI commands

    init

    • [x] SUMMARY.md is parsed and missing chapter files are created
    • [x] .gitignore is created on confirmation

    build

    • [x] the html builds
    • [x] custom template is used if found in assets/_html-template
    • [x] book assets are copied if found in assets

    watch

    • [x] making a change in a chapter rebuilds the book

    serve

    • [x] book is served on :3000
    • [x] making a change in a chapter updates the page in the browser

    test

    • [x] chapter files are tested with rustdoc

    Single language book

    See src/tests/book-minimal

    Works as expected as far as I can tell.

    Multi-language book

    See src/tests/book-wonderland-multilang

    Works as expected as far as I can tell.

    Features

    Renderer

    Renderer is a trait expecting two functions, .build() and .render():

    pub trait Renderer {
    
        /// When the output format is determined (by a CLI argument for example),
        /// call `.build()` of the selected Renderer implementation.
        ///
        /// Constructs an `MDBook` struct given the path of the book project,
        /// preparing the project and calling `render()`, doing what is necessary
        /// for the particular output format.
        ///
        /// This involves parsing config options from `book.toml` and parsing the
        /// `SUMMARY.md` of each translation to a nested `Vec<TocItem>`.
        ///
        /// Finally it calls `render()` to process the chapters and static assets.
        fn build(&self, project_root: &PathBuf) -> Result<(), Box<Error>>;
    
        /// Responsible for rendering the chapters and copying static assets.
        fn render(&self, book_project: &MDBook) -> Result<(), Box<Error>>;
    
    }
    

    The general idea is that a data structure (MDBook) is constructed by parsing the book's files, and this is given to the renderer's .render() function which does whatever it needs to do with it to produce its output format.

    .build() is responsible for calling the necessary functions to construct MDBook, and .render() is responsible for writing the output based on that MDBook.

    So MDBook is not responsible to rendering or writing anything, but it should represent all the information that the renderer might need to write all its output files.

    MDBook has a .render_intent attribute that is a descriptive enum which internal functions can inspect if they need to make decisions based on what output format has been selected.

    pub struct MDBook {
        ...
        /// Informs other functions which renderer has been selected, either by
        /// default or CLI argument.
        render_intent: RenderIntent,
        ...
    }
    
    pub enum RenderIntent {
        HtmlHandlebars,
    }
    

    Static assets

    The application's static assets are embedded in the binary from data/ using includedir.

    The book's static assets are expected in assets/. Everything will be copied to the book's output folder, except for folders which start with underscore (i.e. user might have _sass or _html-template and so on).

    chapter TOML headers

    TOML headers can be added at the beginning of a chapter file, these will be parsed into the attributes of the Chapter struct. See babel.md.

    +++
    title = "The Library of Babel"
    author = "Jorge Luis Borges"
    translator = "James E. Irby"
    +++
    
    # Babel
    
    The universe (which others call the Library) is composed of an indefinite and
    perhaps infinite number of hexagonal galleries, with vast air shafts between,
    surrounded by very low railings. From any of the hexagons one can see,
    interminably, the upper and lower floors.
    

    Multi-language books

    See src/tests/book-wonderland-multilang

    translation cross-linking

    Automatic chapter-to-chapter linking is implemented with incrementally trying harder to find a translation, but never refusing to build the book. I.e. something should always happen, whatever the author does, and more and more should happen as they keep working on their content.

    • links to the top-level index pages of the translations are displayed above the TOC in the sidebar
    • chapter translations are displayed in the title bar when the application can find a translation, otherwise it displays a grayed-out text of the language code

    Buidling on the ideas described in #5, finding a translation works step by step this way:

    • [x] taking the manual links are given in the TOML header (see alice/rabbit-hole)
    • [x] finding a match by a specific chapter.translation_id string given in the TOML header (see alice/long-tale)
    • [x] finding a match by chapter.src_path (see alice/tears)
    • [x] finding a match by section number, if the TOC is structurally the same, checking by counting the number of sections

    This covers the following scenarios:

    If the translator copy-pastes the SUMMARY.md of the original, changing only the titles, translations will be identified by the .src_path.

    If they rename the file names too, so that the URLs also are in the target language, but the TOC keeps the same sectioning structure, translations will be identified by section numbers.

    If they change the sectioning structure too, they can insert a chapter.translation_id string in the original and the translation. Any string, not necessarily an UUID. This would maintain cross-links when the original changes file name.

    If nothing else, they can provide the translation link directly in the TOML header. This breaks when the target file changes file name.

    It has to be kept in mind that translations are projects on their own, and can even present the same material in a different structure than the original. The original and its translation are likely to be at different stages at various times. In addition, people have different workflows, they don't necessarily work in a one-two-three disciplined way either.

    book.toml

    The main language is recognized as the first given in the TOML. Otherwise it has to be marked with is_main_book = true.

    The language code will always be the translation key, the language name can be set optionally.

    [[translations.en]]
    title = "Alice's Adventures in Wonderland"
    author = "Lewis Carroll"
    
    [[translations.fr]]
    title = "Alice au pays des merveilles"
    author = "Lewis Carroll"
    language_name = "Français"
    
    [[translations.hu]]
    title = "Alice Csodaországban"
    author = "Lewis Carroll"
    

    folder layout

    book-wonderland-multilang
    ├── book.toml
    ├── assets
    │  └── images
    │     ├── Queen.jpg
    │     ├── Rabbit.png
    │     ├── Tail.png
    │     └── Tears.png
    └── src
       ├── en
       │  ├── SUMMARY.md
       │  ├── long-tale.md
       │  ├── rabbit-hole.md
       │  ├── tears.md
       │  └── titlepage.md
       ├── fr
       │  ├── SUMMARY.md
       │  ├── cocasse.md
       │  ├── larmes.md
       │  ├── terrier.md
       │  └── titre.md
       └── hu
          ├── SUMMARY.md
          ├── cimoldal.md
          ├── konnyto.md
          ├── nyuszi.md
          └── tarka-farka.md
    

    Documentation

    • [x] update documentation in the code
    • [x] update documentation in book-example

    Structs

    structs

    Catching up

    The last common commit with master was 8a178e3, I will have to catch up with the updates since then.

    • [x] catch up with updates
    • [x] resolve conflicts with master
    opened by gambhiro 23
  • WIP: Make available offline using Service Worker

    WIP: Make available offline using Service Worker

    This PR introduces a Service Worker in order to dynamically cache the assets (only what the page requests, so respecting all the flags) and statically precache the chapters. The end result is that the resulting book would be available offline in supported browsers - Chrome (desktop and Android), Opera and Firefox (desktop and Android), for now, Edge and Safari later. As a bonus, if the book is used while offline, Google Analytics events are also cached and sent out when the user is back online.

    Things intentionally left unaddressed (waiting for feedback):

    • user notification/configuration - I personally think caching should be done in the background, with a small toast notification informing the user that the book is available offline.

    A small caveat is that the book is not available offline after the first-page load, but only after the second one. This is because on first load we precache the chapters, but the assets will be cached only when they are requested the second time.

    Alongside supporting offline usage, this will also introduce a massive performance boost on second visits, since there is no need to hit the network for any of the assets.

    The Service Worker is not installed during development (same procedure as for Google Analytics).

    If you want to test this:

    • Add offline-support = true to the [output.html] section
    • Disable the check for localhost at the end of book.js

    Closes #546.

    opened by sorin-davidoi 22
  • Add theme support for favicon

    Add theme support for favicon

    ~~This PR adds support for an optional config option:~~ ~~"favicon": "path/image.png"~~ ~~Users can specify their own favicon and mdBook will copy it and set up the html for it.~~

    This PR adds support for indicating a custom favicon.png via the theme folder.

    opened by jessestricker 21
  • Add documentation on how to add a highlight.js for additional syntax highlighting support

    Add documentation on how to add a highlight.js for additional syntax highlighting support

    This adds a few lines on how a custom version of highlight.js can be obtained and made available to mdbook. With that information available, all issues about adding support for a specific language should be safe to be closed because mdbook in its default setup probably does not need to support every possible language.

    I have seen that there are ongoing efforts to move away from highlight.js but I guess this information may nevertheless be useful in the meantime.

    opened by DrTobe 0
  • Add prefetch to next link

    Add prefetch to next link

    https://github.com/rust-lang/mdBook/blob/41a6f0d43e1a2d9543877eacb4cd2a017f9fe8da/src/theme/index.hbs#L213

    I was navigating through some books with short pages like https://google.github.io/comprehensive-rust/control-flow/break-continue.html, was trying to go through pages and pages through next button ]] using vimium extension, I find it a bit slow, maybe prefetching would help and loading the user waiting time for the next page? Like <a rel="next prefetch" ...>.

    I think maybe the previous don't need it since the chance of reading the previous page over the next pages is lesser, and books are usually not expected to read in the reversed order.

    opened by pickfire 0
  • Full text search does not handle `::` well

    Full text search does not handle `::` well

    If I have an API of the form MyType::my_special_func in a book, searching for my_special_func does not return any matches.

    I must search for MyType::my_special_func instead. It seems like :: is considered part of the text.

    It would be much better to treat :: as non-text characters and allow searching for both MyType and my_special_func.

    opened by schungx 0
  • gitignore in parent hierarchy of book

    gitignore in parent hierarchy of book

    I ran into a hang issue when running 'mdbook serve', where after touching any .md source file, the mdbook process will spin 100% CPU.

    I think I have diagnosed it to a blank .gitignore file located a few parent directories above the book source tree (and no .gitignore file within the book tree).

    The mdbook docs say this:

    Note: Only the .gitignore from the book root directory is used. 
    Global $HOME/.gitignore or .gitignore files in parent directories are not used.
    

    However, I believe this code in watch.rs checks all parent hierarchies of the book for a .gitignore file (ie the ancestors() call)

    fn find_gitignore(book_root: &Path) -> Option<PathBuf> {
        book_root
            .ancestors()
            .map(|p| p.join(".gitignore"))
            .find(|p| p.exists())
    }
    

    I'm not a rustacean, but is something like this a correct fix?

    fn find_gitignore(book_root: &Path) -> Option<PathBuf> {
       let gitignore = book_root.join(".gitignore");
       gitignore.exists().then_some(gitignore)
    }
    
    opened by quackenbush 0
  • Add `open` command

    Add `open` command

    Addresses https://github.com/rust-lang/mdBook/issues/1969.

    This is intended to allow the user to browse the documents with the same convenience as mdbook build --open, but without building a book redundantly when it's already built. And without hijacking the terminal like mdbook watch and mdbook serve.

    This is a rough first iteration. I have likely missed some details (I'm new to the codebase).

    opened by amab8901 0
  • `mdbook watch` hijacks the terminal

    `mdbook watch` hijacks the terminal

    When I run mdbook build --open, then it lets me browse the documentation without having to keep the terminal busy/occupied. Just browse the docs and keep doing other stuff in the terminal.

    But when I run mdbook watch --open, then the terminal becomes unavailable while the docs are open. If I run ctrl+C in the terminal, it will automatically close the documentation.

    Please modify mdbook watch so that it can serve the documents without hijacking the terminal.

    opened by amab8901 0
Releases(v0.4.25)
Owner
The Rust Programming Language
The Rust Programming Language
Translation support for mdbook. The plugins here give you a structured way to maintain a translated book.

Gettext Translation Support for mdbook The plugins here makes it easy to translate documentation written in mdbook into multiple languages. Support fo

Google 19 Apr 5, 2023
An mdBook backend to output Typst markup, pdf, png, or svg

mdbook-typst mdbook-typst is a backend for mdBook. The backend converts the book to Typst markup and can output any format Typst can (currently pdf, p

Christian Legnitto 18 Dec 16, 2023
An open source artifact manager. Written in Rust back end and an Vue front end to create a fast and modern experience

nitro_repo Nitro Repo is an open source free artifact manager. Written with a Rust back end and a Vue front end to create a fast and modern experience

Wyatt Jacob Herkamp 30 Dec 14, 2022
Introducing Inlyne, a GPU powered yet browsless tool to help you quickly view markdown files in the blink of an eye.

Inlyne - a GPU powered, browserless, markdown + html viewer inlyne README.md --theme dark/light About Markdown files are a wonderful tool to get forma

null 308 Jan 1, 2023
scan markdown files and execute `console` blocks

exec-commands − scan markdown files and execute console blocks exec-commands is a utility to update command-line-tool examples embedded in markdown fi

Hajime Suzuki 3 Nov 27, 2022
This is a tool to evaluate or export code from Markdown files.

Evaluate Markdown This is a tool to evaluate or export code from Markdown files. Why? Because I like writing Markdown files with code snippets (it's g

Balazs Nadasdi 5 Apr 25, 2023
A little tool to create region-free openingTitle.arc files for New Super Mario Bros. Wii, or to convert them from one region to another

smallworld ...though the mountains divide and the oceans are wide... smallworld is a little tool that can create region-free openingTitle.arc files fo

NSMBW Community 7 Feb 6, 2023
Create `.gitignore` files using one or more templates from TopTal, GitHub or your own collection

gitnr A cross-platform CLI utility to create .gitignore files using templates. Use templates from the GitHub & TopTal collections Use local files and

reemus.dev 25 Sep 2, 2023
CLI client for the Jagiellonian University's BaCa online judge

baca-cli CLI client for the Jagiellonian University's BaCa online judge Installation The latest release can be downloaded here. Windows users can use

Hubert Jaremko 20 Nov 14, 2022
An uncluttered blackboard, ideal for simple sketches during online meetings

lavagna It's a blackboard, not a lasagna. Lavagna is a "no frills" blackboard, ideal for simple sketches during online meetings. You have just a black

Alessandro Pezzato 6 Dec 15, 2022
Calculate a player's skill level using Elo, DWZ, Ingo, TrueSkill, Glicko and Glicko-2 algorithms known from their usage in chess and online games.

skillratings Skillratings allows you to calculate the player's skill instantly in 1v1 matches or after tournaments/rating periods with a list of resul

null 10 Dec 30, 2022
An online judge system written in Rust.

MROJ - Making a Rust Oneline Judge Background This repo was initially a homework of Tsinghua University Programing and Training Course, but I found it

hjsjhn 6 Nov 29, 2022
Mafa is a command-line tool that helps people interact with online websites in a terminal(tty).

Table of Contents A Small Demo Installation Prerequisite Option 1: Cargo install (recommended) Option 2: Build from source Option 3: Prebuilt binaries

Michael Lee 6 Jul 10, 2023
an online arcade tic-tac-toe written in rust

Leptos Starter Template This is a template for use with the Leptos web framework and the cargo-leptos tool. Creating your template repo If you don't h

byCrookie 2 Jul 16, 2023
Mafa is a command-line tool that helps people interact with online websites in a terminal(tty).

A Small Demo Installation Prerequisite Option 1: Cargo install (recommended) Option 2: Build from source Option 3: Prebuilt binaries Mafa is for me? W

Michael Lee 6 Jul 23, 2023
Rust implementation of TARA archive format, used in Tanki Online.

Tanki Online archive format Rust implementation of .tara archive format, developed by Alternativa Platform, used in Tanki Online. License Licensed und

Araumi TO 7 Aug 13, 2023
Core lightning (CLN) plugin to watch channel health, gossip health and ping amboss for online status

vitality Core lightning (CLN) plugin to watch channel health, gossip health and ping amboss for online status Installation Building Usage Telegram Opt

null 4 Oct 6, 2023
fixred is a command line utility to fix outdated links in files with redirect URLs.

fixred fixred is a command line utility to fix outdated links in files with redirect URLs. Installation fixred is installed via cargo package manager.

Linda_pp 35 Aug 6, 2022
This utility traverses through your filesystem looking for open-source dependencies that are seeking donations by parsing README.md and FUNDING.yml files

This utility traverses through your filesystem looking for open-source dependencies that are seeking donations by parsing README.md and FUNDING.yml files

Mufeed VH 38 Dec 30, 2022