Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Emacs major mode for managing Jekyll blogs
easy-jekyll is an Emacs major mode for managing Jekyll blogs, giving you commands to create, preview, publish, and deploy posts without leaving the editor.
easy-jekyll is an Emacs major mode that wraps the Jekyll static site generator into a dedicated buffer-based workflow. It takes a local Jekyll project directory as input and produces new posts with front matter, locally previewed sites, and published deployments to servers or static hosting services. The package requires Emacs 25.1 or higher and Jekyll 3.5.1 or higher, and is installed from MELPA with M-x package-install easy-jekyll.
M-x easy-jekyll-newpost prompts for a filename; ending in .md generates a Markdown file and ending in .textile generates a Textile file, both with automatic front matter.easy-jekyll-bloglist to define any number of Jekyll blogs with independent settings, then switch between them using the < and > keys in easy-jekyll-mode.M-x easy-jekyll-preview runs Jekyll and opens the site in your browser; repeating the command reuses the same Jekyll process, and the process auto-terminates after 300 seconds by default.easy-jekyll-publish (via rsync), to Amazon S3 with easy-jekyll-amazon-s3-deploy, to Google Cloud Storage with easy-jekyll-google-cloud-storage-deploy, to GitHub Pages via an executable deploy.sh with easy-jekyll-github-deploy, or to Firebase with easy-jekyll-firebase-deploy.M-x easy-jekyll-publish-clever inspects the current blog's configuration and automatically runs the matching deploy command, so you can press one key regardless of target.M-x easy-jekyll-ag searches your posts using consult-ripgrep, counsel-ag, or helm-ag (in that priority order), with the option to force helm-ag or counsel-ag via easy-jekyll-helm-ag and easy-jekyll-counsel-ag.easy-jekyll-image inserts a Markdown image link from the configured image directory (default "images"); easy-jekyll-put-image moves a local picture into that directory and links it; easy-jekyll-pull-image downloads an image from a copied URL and inserts the link.M in easy-jekyll-mode opens Magit for the blog repository, letting you commit and push changes without switching buffers.easy-jekyll-bloglist to keep per-blog configuration for servers, domains, and deployment targets, and switch instantly with keybindings.n, preview it with p, and publish to your server with P — the file is named in the minibuffer and front matter is generated automatically.; to select a blog, / to select a post directory, and ./, to move between directories.easy-jekyll-pull-image to grab an image from the internet into your images directory, then get the Markdown link inserted automatically.easy-jekyll-publish-timer, or use easy-jekyll-publish-clever to pick the right deploy target for each blog.After installing the package, set easy-jekyll-basedir to the directory containing your Jekyll source and configure the target (SSH domain, S3 bucket, GitHub Pages, etc.). Running M-x easy-jekyll opens a mode buffer where each post is listed; key commands like n, p, and P call the underlying Jekyll CLI, rsync, and cloud deployment tools. The package also supports timer-based publishing and a deploy.sh hook for GitHub Pages.
Install from MELPA with M-x package-install easy-jekyll. You need Emacs 25.1 or higher and Jekyll 3.5.1 or higher, and the jekyll command must be on Emacs's PATH — the page recommends exec-path-from-shell if PATH is not inherited.
Yes, define easy-jekyll-bloglist as a list of alists, each containing keys like easy-jekyll-basedir, easy-jekyll-url, easy-jekyll-sshdomain, easy-jekyll-root, and optional bucket names. Switch between blogs with < and > in easy-jekyll-mode.
Yes, add a deploy.sh script in your blog directory and run M-x easy-jekyll-github-deploy; the script typically checks out the gh-pages branch and pushes. Since the script runs without a password prompt if you set up SSH with keychain, you can automate it fully.
Markdown (.md) is the default, and Textile (.textile) is also supported by entering that extension when creating a post. You can change the default extension by setting easy-jekyll-default-ext, and change the Markdown extension with easy-jekyll-markdown-extension.
The default image directory is images. Set easy-jekyll-image-directory to a different string, such as "img", to have image helpers look there and generate links pointing to that directory.
