A javascript plugin that lets you natively embed reddit posts/comments onto any website
-
No Reddit API key needed!
-
No installation necessary, works perfectly through a CDN
-
Easily customizable color palette
-
Client-side rendered
-
Easy to use
Via npm:
npm install reddit-embed
<link rel="stylesheet" href="node_modules/reddit-embed/css/red.css"/>
<link rel="stylesheet" href="node_modules/reddit-embed/css/light-theme.css"/>
<script src ="node_modules/reddit-embed/dist/bundle.min.js"></script>
Via CDN:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reddit-embed@1.1.2/css/red.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reddit-embed@1.1.2/css/light-theme.css"/>
<script src ="https://cdn.jsdelivr.net/npm/reddit-embed@1.1.2"></script>
If you want to see what a variety of different posts look like when they are embedded I would recommend checking out test_links.md
First your need to find a reddit post you want to embed. Once you have found a post copy the url and add /about.json to the end so it looks something like this:
https://www.reddit.com/r/pics/comments/7pnxv2/meeting_keanu_reeves_at_a_traffic_light/about.json
Then you can just add this markup to your website with your own red-href
, red-title
, red-author
attributes filled in
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reddit-embed@1.1.2/css/red.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reddit-embed@1.1.2/css/light-theme.css"/>
<script src ="https://cdn.jsdelivr.net/npm/reddit-embed@1.1.2"></script>
<script>
window.onload = red.embedAll
</script>
<div class="reddit-embed center" red-author="keanu_reeves"
red-title="Meeting Keanu Reeves at a traffic light"
red-href="https://www.reddit.com/r/pics/comments/7pnxv2/meeting_keanu_reeves_at_a_traffic_light/about.json" ></div>
Note that we have to import light-theme.css because red.css defaults to a dark theme with white text
If you want a similar basic example, with some more detailed documentation go to basic-demo.html
If you want an even more advanced example you can take a look at the source for the GH pages demo
url
: absolute url that points to an about.json file for a reddit postdiv
: javascript DOM element that we want to add content toopts
: optional argument, specifying any options we want to override from the defaults
Sends an xhr request to get the json file from url
And then renders the content received onto div
Loops through reddit-embed divs, and calls red.embed
on them if they have a valid link in their red-href
attribute.
Also note that a red-opts
attribute containing a JSON object of options to override from default is also supported.
Note that this function should only be called after a page's HTML has finished loading
newDefaults
: An object containing all or some of the options specified in the section below
Can be called before a page is finished loading
-
show_loading_animation: true
- Type: Boolean
-
post_title: false
- Type: false or String
- If this value is set to a string then it will override the title of the post
- Can be useful if you want to prevent content jumping
- Can be set through the
red-title
attribute if usingres.embedAll()
-
post_author: false
- Type: false or String
- If this value is set to a string then it will override the name of the post author
- Can be set through the
red-author
attribute if usingres.embedAll()
-
show_post: true
- Type: Boolean
- Overrides all other show_post options if set to false
-
show_post_title: true
- Type: Boolean
-
show_post_header: true
- Type: Boolean
-
show_post_body: true
- Type: Boolean
-
show_comments_section: true
- Type: Boolean
- Overrides all other show_comments_section options if set to false
-
show_comments_section_header: true
- Type: Boolean
-
ignore_sticky_comments: false
- Type: Boolean
- Will skip any stickied comments in the render queue
-
max_depth: -1
- Type: Integer
- Will only render comments with a depth <= max_depth, note that depth is 0 indexed so max_depth=0 will render the top layer of comments
- max_depth is ignored if its < 0
-
open_links_in_new_tab: true
- Type: Boolean
-
padding_per_depth: 24
- Type: Integer
- Horizontal spacing in px between each layer of comments
-
initial_padding: 4
- Type: Integer
- Horizontal spacing in px for first layer of comments
-
improve_spoiler_links: true
- Type: Boolean
- Adds a Visual indicator for spoiler links
Note if you want to quickly try out different options you can use the Settings
button on the GH pages demo
Some css attributes you may want to override are:
/* Max width for reddit-embed div*/
.reddit-embed {
max-width: 800px;
}
.reddit-embed img{
max-height: 840px;
}
.reddit-embed video[poster]{
max-height: 720px;
}
These values were chosen because they closely resemble the size of their respective elements on reddit, but these defaults may not be the best fit for your website
Making your own color palette for Reddit-Embed is as simple as creating a css file
Create a css file similar to css/dark-theme.css or css/light-theme.css by modifying the colors of each css variable
Then import your palette css file after red.css
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reddit-embed/css/red.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reddit-embed/css/light-theme.css"/>
By default red.css uses !important to ovveride any CSS selectors targeting elements within a .reddit-embed div, but if you don't want that behavior you can use unstrict-red.css
Note that the max-width property for .reddit-embed divs can be overriden in red.css
- Make a WordPress plugin that wraps this library
- Add reddit posts to your blog
- Use reddit as the comment platform for your website
- Use it in a browser extension to add reddit comments to other popular websites
-
Native reddit videos don't play any audio
-
Posts with multiple images or videos are not supported
Make sure you have node 12+ and npm 6+ installed in your environment.
Install the build dependecies by running:
npm install
Then use the following command to build bundle.js
and bundle.min.js
npm run build