Coder Social home page Coder Social logo

dannyben / madness Goto Github PK

View Code? Open in Web Editor NEW
108.0 3.0 17.0 3.16 MB

Instant Markdown Server

Home Page: https://madness.dannyb.co

License: MIT License

Ruby 63.88% JavaScript 0.25% SCSS 13.16% Slim 2.54% CSS 2.67% HTML 17.09% Dockerfile 0.41%
markdown-to-html markdown documentation-tool markdown-server gem ruby

madness's Introduction

Madness Logo

Madness - Instant Markdown Server

Gem Version Build Status Maintainability


Madness is a command line server for rendering markdown documents in your browser. It is designed to facilitate easy development of internal markdown-based documentation sites.

Screenshots

Screenshots

Install

Using Ruby:

$ gem install madness

Using Homebrew:

$ brew install brew-gem
$ brew gem install madness

Using Docker:

$ alias madness='docker run --rm -it -v $PWD:/docs -p 3000:3000 dannyben/madness'

Feature Highlights

  • Easy to use.
  • Built-in full text search.
  • Compatible with how markdown files are displayed on GitHub and GitHub pages.
  • Configure with a configuration file or command arguments.
  • Fully customizable theme.
  • Automatic generation of navigation sidebar.
  • Automatic generation of Table of Contents (site-wide and per page).
  • Can optionally show additional file types in the navigation menu (e.g. PDF files).
  • Optional support for [[Short Link]] syntax.
  • Optional basic authentication.
  • Support for extended markdown syntax, such as footnotes and syntax highlighting.

Usage

Go to any directory that contains markdown files and run:

$ madness server

And open http://localhost:3000 in your browser.

For more options, run:

$ madness --help

Directory Conventions

Madness expects to be executed in a documentation directory.

A documentation directory contains only markdown files (*.md) and sub directories that contain more markdown files.

The navigation sidebar will show all the sub directories and files in the same directory as the viewed file.

Example structure:

./
├── README.md
├── File.md
├── Another File.md
├── Folder
│   ├── File.md
│   └── image.png
└── Another Folder
    ├── README.md
    └── File.md

Configuration File

Madness uses sensible defaults, so therefore can be executed without configuring anything. Configuration is mostly done by having a file named .madness.yml in your documentation directory.

For convenience, you can generate a template config file by running:

$ madness config new

which will generate this file, with all the default options:

# .madness.yml

# path to the documentation root
path: .

# server port
port: 3000

# server listen address
bind: 0.0.0.0

# set a server root path, for example:
# base_uri: /docs
base_uri: ~

# set the underlying markdown renderer:
# renderer: redcarpet    # default renderer
# renderer: pandoc       # pandoc renderer, requires pandoc command
renderer: redcarpet

# choose navigation sort order:
# sort_order: dirs_first     # alphabetic directories then alphabetic files
# sort_order: mixed          # alphabetic regardless of type
sort_order: dirs_first

# enable sidebar
sidebar: true

# add H1 title to files that do not have one
auto_h1: true

# append navigation to directory READMEs
auto_nav: true

# replace <!-- TOC --> in any file with its internal table of contents
# set to true to enable it with the default '## Table of Contents' caption,
# or set to any string that will be inserted before it as a caption.
auto_toc: true

# enable syntax highlighter for code snippets
highlighter: true

# enable the copy to clipboard icon for code snippets
copy_code: true

# convert [[Links]] to [Links](Links)
shortlinks: false

# generate a table of contents file with this name, for example:
# toc: Table of Contents
toc: ~

# path to theme folder, for example:
# theme: _theme
theme: ~

# enable a link to the page's source at the bottom of each page by setting
# a URL pattern here. Use '%{path}' anywhere in the string to get the
# URI-encoded path of the page.
# source_link: http://example.com/%{path}
source_link: ~

# if source_link is enabled, you can change the default link label
# source_link_label: Edit Page
source_link_label: Page Source

# if source_link is enabled, you can change its position (top / bottom)
# source_link_pos: top
source_link_pos: bottom

# open the server URL in the browser
open: false

# provide user:password for basic authentication, for example:
# auth: admin:s3cr3t
auth: false

# if auth is enabled, specify auth realm name
auth_zone: Restricted Documentation

# show files with these extensions in the navigation and search, for example:
# expose_extensions: pdf,docx,xlsx,txt
expose_extensions: ~

# exclude directories that match these regular expressions
# note that this is an array
exclude: ['^[a-z_\-0-9]+$']

Features

Cover Pages

Cover pages are specially named markdown files that serve as the introduction to the contents of a specific directory.

The server will consider any of the following files as cover pages (prioritized):

  • A markdown file with the same name as the directory (adjacent to it).
  • index.md
  • README.md

For example, for a directory named "API Documentation":

  • /API Documentation.md
  • /API Documentation/index.md
  • /API Documentation/README.md

Search

Madness comes with a full text search page.

Images and Static Files

You can put images and other asset files anywhere in your documentation folder.

When linking to other pages or images in your documentation folder, simply use the URL relative to the markdown file.

For example, if you have a folder named subfolder that contains a README.md and a nice-picture.png, showing it in your README is done by this markdown:

![alt text](nice-picture.png)

If you wish to link to images or pages in a different folder, simply specify the path relative to the homepage:

![alt text](/images/nice-picture.png)

Automatic H1

If your markdown document does not start with a level 1 heading, it will be automatically added based on the file name.

Shortlinks

When the shortlinks option is enabled, you may use a shorthand syntax for specifying internal links, where [[Anything]] will be converted to [Anything](Anything), which will then be rendered as an internal link to a file or a directory in the same directory as the file itself.

Table of Contents Generation

Site-wide

To generate a Table of Contents file for the entire site (for the directories and files), run madness --toc FILENAME

In-page

If you have long markdown documents, and you wish to add an inline Table of Contents for them, simply add an HTML comment <!-- TOC --> where you want the Table of Contents to be generated. The inserted list will only consider H2 and H3 headings.

Note that for this feature to work, your markdown document must use the #-based heading syntax.

The 'Table of Contents' heading can be customized in the configuration file.

Hidden Directories

Directories that are made only of lowercase letters, underscoes, dash and/or numbers (/^[a-z_\-0-9]+$/) will not be displayed in the navigation. In other words, directories must have at least one uppercase letter or a space to be recognized as a documentation directory.

This can be configured by using the exclude configuration option:

# do not ignore any directory
exclude: ~

# ignore only specific directories
exclude: [assets, public]

# ignore using regular expressions
exclude: ['^public$', 'assets']

Controlling Sort Order

To control the sort order of the automatically generated navigation elements, simply prefix your files and directories with digits followed by a dot and a space, just like you would create an ordered list in Markdown. The numbers will be omitted when they are displayed.

./
├── 1. Some file or folder
└── 2. Another file or folder

Note that by default, directories will appear above files. If you wish to change this, set sort_order: mixed in your configuration file.

Displaying Additional File Types

If you wish the navigation and search features to also show other documents and files (for example, PDF files), you may configure the expose_extensions option in the configuration file to contain a comma delimited list of extensions:

expose_extensions: pdf,docx,xlsx,txt

The default value of this option is null (or ~, which is null in YAML).

Basic Authentication

To add basic authentication, use the --auth user:password command line argument or the equivalent auth configuration option.

If you wish to avoid storing the basic authentication credentials in the configuration file, you may use ERB tags to load the credentials from environment variables:

auth: <%= ENV['BASIC_AUTH'] %>

Customizing Theme

There are three ways to change how Madness looks.

Option 1: CSS Overrides

Any CSS file found in the ./css directory of your documentation root will be loaded after the main CSS.

You can use the following command to create a css/colors.css file, which lets you override all colors.

$ madness theme colors

Option 2: Override the entire CSS

If your documentation root contains a file named css/main.css it will be loaded instead of the built-in madness CSS.

You can get the built-in CSS file by running the following command.

$ madness theme css

Option 3: Change CSS and HTML (Slim)

In order to have complete control over the CSS and generated HTML, you can override the views and styles. Views are provided as Slim templates, and CSS is provided as SCSS.

You can get these files by running the following command.

$ madness theme full my_theme

Where my_theme is the folder that will be created.

To use the created theme, simply run Madness with the --theme my_theme option (which can also be configured in the configuration file).

$ madness server --theme my_theme

Note that the generated theme contains the SCSS files in the styles subfolder, and the rendered CSS files in the public/css subfolder.

If you wish to use the SCSS files, you will need to render them yourself to the location of your theme styles (e.g. public/css) - you can use any tool to do so, or if you do not have a preference, use SassTool.

Docker Image

Madness server is also available as a docker image.

This command will start the server on localhost:3000, with the current directory as the markdown documentation folder

$ docker run --rm -it -v $PWD:/docs -p 3000:3000 dannyben/madness server

You may create an alias for convenience:

$ alias madness='docker run --rm -it -v $PWD:/docs -p 3000:3000 dannyben/madness'
$ madness --help

or use docker compose:

# docker-compose.yml
services:
  web:
    image: dannyben/madness
    volumes: [".:/docs"]
    ports: ["3000:3000"]
    command: server

For more information about the docker image, see:

madness's People

Contributors

dannyben avatar dependabot-support avatar depfu[bot] avatar dimitriylol avatar dst78 avatar fwolfst avatar r3cgm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

madness's Issues

.madness.yml not being read?

I've let madness create a config file with madness create config. The resulting .madness.yml file is in the document root folder where all my .md files are.
Now I change port: 3000 to port: 3001 in the .yml file and restart madness, but the server still starts on port 3000.

Am I missing something or is the .yml file not actually read?

HTML ids are generated without diacritics and links do not work

For example markdown link:

[2.4. Úprava plastové krabičky pro elektroniku](#24-úprava-plastové-krabičky-pro-elektroniku)

leading to a heading within the same webpage:

## 2.4. Úprava plastové krabičky pro elektroniku

correctly generates link:

<li><a href="[#24-%C3%BAprava-plastov%C3%A9-krabi%C4%8Dky-pro-elektroniku](localhost:8667/Test-page#24-%C3%BAprava-plastov%C3%A9-krabi%C4%8Dky-pro-elektroniku)">2.4. Úprava plastové krabičky pro elektroniku</a></li>

but in the heading id diacritics are missing:

<h2><a id='24-prava-plastov-krabiky-pro-elektroniku'></a>2.4. Úprava plastové krabičky pro elektroniku</h2>

therefore the link from above leads to nowhere.

Github generates id looking like this:

<h2><a id="24-úprava-plastové-krabičky-pro-elektroniku"</a>2.4. Úprava plastové krabičky pro elektroniku</h2>

which seems to work fine.

Mobile Search

I'd would be great to have a search field available for mobile users. Currently they have to switch to the Desktop View in order to search.

Settings cannot take effect

The port and bind cannot take effect from .madness.yml

(base) user docs % madness -v
1.1.0
(base) user docs % madness config show
                path:  .
                port:  3001  <-
                bind:  127.0.0.1  <-
            base_uri:  ~
             sidebar:  true
             auto_h1:  ~
            auto_nav:  ~
            auto_toc:  true
         highlighter:  true
           copy_code:  true
          shortlinks:  ~
                 toc:  ~
               theme:  ~
                open:  ~
                auth:  ~
           auth_zone:  Restricted Documentation
   expose_extensions:  ~
             exclude:  ["^[a-z_\\-0-9]+$"]

Values in blue loaded from .madness.yml
(base) user docs % madness server
▌ starting server
▌ env    : production
▌ listen : 0.0.0.0:3000  <-
▌ path   : /Users/user/docs
▌ config : .madness.yml

== Sinatra (v3.0.4) has taken the stage on 3000 for development with backup from Puma
Puma starting in single mode...
* Puma version: 6.1.1 (ruby 3.2.0-p0) ("The Way Up")
*  Min threads: 0
*  Max threads: 5
*  Environment: development
*          PID: 21842
* Listening on http://0.0.0.0:3000  <-
Use Ctrl-C to stop
^C- Gracefully stopping, waiting for requests to finish
=== puma shutdown: 2023-03-09 22:43:36 +0800 ===
- Goodbye!
== Sinatra has ended his set (crowd applauds)

Add ability to customize theme

It would be nice if we can allow theme customization, like so:

  1. By default, we use the default theme
  2. If there is a ~/.madness/theme folder - we will use it instead
  3. If the configuration file (or CLI) specify theme: some/folder - we will use this instead

Also, we could probably do something like $ madness theme-init in the CLI, and it will copy the default theme to the current directory, as a baseline.

Show directory content on top like github even if files are not md

Hi,
this maybe out of scope for you but just in case you are interested I'll ask.

I really like your idea to easily serve a local folder and transform it into a nice web interface.
Since I structure each project content in a directory but not always use github to store it I was looking for an easy way to put a docker compose file in the directory and have the user start a webserver locally to have a web browsing experience of the project directory similar to GitHub.

In short was looking for a solution exactly like yours plus the current directory file browser on top (see below snapshot).
Would that be possible or do you know any other project doing something like that?

thanks

image

Consider removing theme options from the CLI

Consider removing options like --no-sidebar and --no-auto-nav from the command line.

The rationale: When creating custom themes, these options don't always make sense, while other theme options might be desired.

Perhaps instead of these, allow:

  1. Specifying any arbitrary option in the config file
  2. Allow --config FILE in the CLI, so we can still run madness with different options by using different commands.

Add TOC generator

Maybe something like $ madness --toc which will generate a single markdown file somewhere.

Search

Consider adding search

Add automatic rendering for GraphViz dot

Consider adding something like this:

  1. A system folder named _dot
  2. In it, any file with a .dot extension (also in subfolders) can be rendered in real time as an image
  3. These images can be accessed by the server as _dot/any_folder/whatever.png

Docker version 1.1.3 fails to start missing gem

Hi.

Updated to latest 1.1.3 docker version and it fails to start:
`Sinatra could not start, the "rackup" gem was not found!

Add it to your bundle with:

bundle add rackup

or install it with:

gem install rackup`

Is anything missing on my end?

Auto show only file in a folder

When browsing to a folder with one file only, and no README - maybe show it directly instead of showing the index with the only link.

feature: optionally start a browser when executing madness

What do you think about a flag to open a browser with the given URL when starting up madness?

Personally, I would find it nice if executing madness by default tries to open a browser session to visit the started sinatra app. (On a side note: another default that I personally would change is the host, where 0.0.0.0 is public, where I'd prefer 127.0.0.1, the localhost).

I have an implementation at hand (very dirty, it just forks the Server. ... call and then opens the hard-coded http://localhost:3000 via xdg-open, which might not work on other systems, but it works like a charm on mine :) ).

Display non-md files

Not sure if this is a feature you'd consider, but I've looked at about 20 different markdown servers, and nothing beats this. I don't know ruby, so I'm looking to have madness server display links to PDFs, text files, and image files. Obviously, the only thing displayed is .md files, but I use something called https://foambubble.github.io/ as my Evernote and madness to serve the content. I have some pdfs, text files, and image files that are part of my mainly markdown notebooks, and when using madness to browse my notes, I don't see these. Would it be technically difficult to do something like this? If the link isn't to an md, wouldn't the browser render that filetype with whatever application is specified to open it?

Allow to automatically add a link from every page to the corresponding source file

I am thinking about using Madness to render internal documentation stored in a Git repository. One thing I am missing at the moment is an easy way to go from the rendered page in Madness to the Markdown source code on my Git server.

For example when I am on the "Old Galactic Republic" page in Madness I would like to see a "Source" link to:
https://github.com/DannyBen/madness/blob/master/sample/Old%20Galactic%20Republic/README.md?plain=1

I have multiple use cases for this:

  • Make it clear which file needs to be modified in order to change the current page
  • Looking at the file history
  • Doing a blame

I could imagine providing a pattern with a placeholder in .madness.yml that specifies how to create links from the relative path of served files:

# enable adding links to Markdown source files
source_link: true

# link to source in a GitHub repo 
source_link_pattern: https://github.com/DannyBen/madness/blob/master/sample/#{path}?plain=1

# link to source in a BitBucket repo
source_link_pattern: https://example.com/projects/DEMO/repos/demo/browse/#{path}?useDefaultHandler=true

The link itself could be put somewhere on the top of the page (similar to Wikipedia).

I simulated this behavior at the moment by manually adding the link on top of some of my Markdown files:

[View Source](https://github.com/DannyBen/madness/blob/master/sample/Old%20Galactic%20Republic/README.md?plain=1)

# Title

<!-- TOC -->

...

Allow to optionally decouple file and directory names from display names

Problem

As of today, Markdown Madness always displays directory and file names 1:1.

This is a good default for simplicity, getting started with a new deployment and to avoid lockin to a specific tool.

However this also has some disadvantages:

  • One may want to show characters that are discouraged by filesystems (such as spaces, :, /) or URLs (such as spaces, :, /, ?, #)
  • One may want to use capitalization which can cause issues when dealing with case-insensitive filesystems on Windows

In my tests I first optimized directory and file names for final display in Markdown Madness:

Some project title (directory)
  Some document title.md (file)

This will be displayed nicely as "Some project title / Some document title".

However both directory name Some project title and file name Some document title.md are discouraged due to whitespace and capitalization, and feel strange when working with the command line or looking at my Git repository. Also the URL has to escape the whitspace: http://localhost:3000/Some%20project%20title/Some%20document%20title

I would prefer to name all directories and files lower case and without discouraged characters:

some_project_title
  some_document_title.md

This however would today be displayed as "some_project_title / some_document_title". Maybe this would be fine, but it feels like code and not like natural language usually shown in documentation. In my optinion URL would be nicer without spaces as well: http://localhost:3000/some_project_title/some_document_title

Proposed solution

Optionally allow to change display names of directories and files either generically by convention or explicitly per resource.

Change display name by convention

Convention could be the following:

  1. Capitalize the first letter
  2. Replace all _ with spaces

In my example this would be enought to display filesystem structure

some_project_title
  some_document_title.md

as "Some project title / Some document title".

This display name convention could be enabled via .madness.yml, e.g.:

display_name_convention: true

Change display name by explicit override

Lets say we want to display:

http_request
  post.md

By convention this would be shown as "Http request / Post". But lets assume instead we would like to show "HTTP request / POST". We could allow to override display names of specific files and directories by defining additional metadata.

For changing diplay name of a directory we introduce a file .madness_meta.yml:

http_request
  .madness_meta.yml
  post.md

.madness_meta.yml can be as simple as:

title: HTTP request

For changing display name of a file we allow to set title via HTML comment similar to <!--TOC-->. E.g. in post.md:

<!--title:POST-->

# POST requests

This adds complexity but ideally for the authors most files and directories do not require any explicit override and already work fine just by applying the convention.

Explicit overrides could be enabled via .madness.yml, e.g.:

display_name_overrides: true

Allow accessing markdown files using .md extension in the URL

Currently only when you request a file without to add the ".md" extension, this is correctly interpreted as a markdown file but if you add the ".md" part in the url it is returned the file directly without interpret the markdown syntax.

I think that this feature should be nice to be able to have relative file references from one document to other in the same style that you could do on github for example:

* [Compilation:](./Setup/Compilation.md)

Add config for not ignoring lowercase folders

HI, came across your package yesterday when I was looking for a way to serve local files (MD) on a server. I was wondering why only some folders were visible and I'm wondering if it's possible to put a toggle for this in the .madness.yml to tell it not to ignore lowercase folders. All folder structures I have tend to be lowercase by default.

Originally posted by @danwwilson in #42 (comment)

madness behind a proxy

I configured a madness service behind a proxy with additional route /doc (http://proxy/doc)

madness redicted the request back to / (also missing my proxy route)

curl -v http://localhost/doc/index.md
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET /doc/index.md HTTP/1.1
> Host: localhost
> User-Agent: curl/7.53.0
> Accept: */*
> 
< HTTP/1.1 302 Found 
< Server: nginx/1.10.2
< Date: Thu, 16 Mar 2017 18:18:04 GMT
< Content-Type: text/html;charset=utf-8
< Content-Length: 0
< Connection: keep-alive
< Location: http://localhost/index
< X-Xss-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN

it is possibility to configure a proxy-route into madness?

Escape characters in a table

Hi.

I tried to use a table where an entry contains a password set with ` and contains symbols, when one of the symbols of the password is a | , even it have been escaped with \ it is not taken into account and | changes to the next column.

I have attached an image of the code.
pastebin

Is it possible to set somehow a piece of text in a way that is not parsed for markdown?

Add anchors to captions

It would be nice if captions receive anchors, so that internal TOC links can work.

Need to see if the current renderer we use supports this out of the box.

Provide a way to define navigation order

This can probably done with ease by giving special treatment to folders and files that start with numbers followed by a dot. We can probably just hide these numbers from the link label.

Add ability to export as a single HTML or PDF

Option 1:

  • Add $ madness --combine flag that will generate a single Markdown file somewhere. This can then be viewed and "printed to PDF". When doing so, we will add a page break tag before each page.
  • This option assumes there is no need to provide "export to PDF" option, since most systems can simply print to PDF these days.
  • This will work well with #44

Option 2:

Add ability to export:

  • Everything
  • A folder
  • A single file

And save as:

  • A single HTML or PDF
  • Multiple HTMLs or PDFs

Consider re-adding GraphViz / UML support

The GraphViz dot integration was removed in #39

The self-proposed approach would be to do one of these:

  1. Extract all diagram handling to a new gem. This will require adding plugin functionality to madness.
  2. Convert the current dot handling code to a more generic, configurable handler with some magic like { from: 'dot', to: 'png', with: 'command to run' }
  3. Enable the diagramming only in the docker version. An attempt at this was made, but due to Vagrant file watching issues, it is not working well (at least not in a Vagrant-based environment).

Howto set an "alias" in Windows Powershell?

Hi.

First of all nice Work and it is very hulpfull.

The Topic:

$ alias madness='docker run --rm -it -v $PWD:/docs -p 3000:3000 dannyben/madness'

I use Windows 10 and have WSL2 configured in my Docker-Desktop.

My goal is to have a Theme/CSS File to make or use a Dark-Theme.

A have no "alias" command in Powershell or the CMD.

Do I miss something or is it not possible to use Powershell?

BTW: I just started to use Docker at all, and my Linux skills are way below avarage. :)

I tried to use the main.css File, but it doesn´t work.

I manually exported a default Theme, but it wasn´t applied when I used the "docker run " command.
I think I have a wrong Syntax to pass the Theme into the Container.

Could please someone explain a "Noob" how to get a Theme in Docker-Desktop via a Powershell?

thx in advance and I love You all... Wow, I just realized how my exitment for Docker and "Madness", made me "mad" lol

c.u. and greetings from Hamburg, Germany.

Support for Obsidian-style [[links]] and information about backlinks

Nice to see a simple project that serves markdown files as html <3

I'm looking for something like this, with two additions. If you're not familiar with Obsidian and "Zettelkasten" style smart notes, this might make little sense...

  • Support for the link syntax used by Obsidian and other smart-note applications: [[Link To .md file]] is used explicitly to link to other .md files in the same directory (or subdirectory). [reddit.com](https://reddit.com] style links are still used for non-internal links.
  • Support for backlink information. It would be awesome to have a list of other .md files listed that does link back to the current .md file I'm looking at. This could be a panel on the right side.

Would you be generally interested in this?

I'm not a ruby dev but I did have a brief look at your code - sadly I couldn't find any markdown parsing. Are you offloading that to another library?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.