High performance imageboard with character by character updates
Go TypeScript CSS JavaScript C Makefile Other
Latest commit fcac526 Jan 18, 2017 @bakape client: Fix post model dynamic retrieval
Closes #417
Failed to load latest commit information.
auth auth, client: Switch to Google's ReCaptcha Jan 5, 2017
cache cache: Don't store post data once HTML is generated Dec 25, 2016
client client: Fix post model dynamic retrieval Jan 18, 2017
clientScripts client: Switch to synchronus module loader Jan 4, 2017
common server, client: Redirect connected banned clients Jan 8, 2017
config config: Configurable custom image root Jan 4, 2017
db server, client: Redirect connected banned clients Jan 8, 2017
docs server, client: Redirect connected banned clients Jan 8, 2017
imager imager/assets: Write files to disk in parallel Jan 18, 2017
lang client, templates: Add whatanime.ga image search Jan 8, 2017
legacy legacy: Remove language packs Jan 17, 2017
less less: Fix figcaption text colour on open posts Jan 18, 2017
parser parser: Parse body as string not []byte Dec 12, 2016
scripts script: Restore v0->v1 migration script Jan 8, 2017
server server: Add Cache-Control: immutale to images Jan 8, 2017
templates imager/assets, client/posts: Search by thumbnail for non-images Jan 17, 2017
test Merge branch 'master' into v3-dev Nov 28, 2016
util templates, client/posts: Fix image search file URIs Jan 5, 2017
www Merge branch 'master' into v3-dev Dec 9, 2016
.gitignore imager: Port .tar.gz detection to Rust Dec 24, 2016
.travis.yml travis: Fix Docker builds Dec 20, 2016
CHANGELOG.md v3.2.1 Dec 20, 2016
Dockerfile imager: Port .tar.gz detection to Rust Dec 24, 2016
LICENSE *: The Great Spellcheck Oct 31, 2016
Makefile client/options: Fix custom background loading Jan 4, 2017
README.md README: Remove broken deps badge Dec 28, 2016
gulpfile.js client: Switch to synchronus module loader Jan 4, 2017
main.go *: The Great Spellcheck Oct 31, 2016
main_test.go main: Refactor test Oct 12, 2016
package.json client: Switch to synchronus module loader Jan 4, 2017


GoDoc Build Status

Platforms: Linux, OSX, Win64

License: GNU AGPL


  • Posts and posting
    • Character by character post updates
    • Can edit entire line while writing
    • Hovering quick reply for post authoring
    • Dice roll, coin flip and eightball commands
    • Desktop notifications, post highlighting and "(You)" on quote
    • Post link hover previews, including cross-thread
    • Inline post link expansion
    • Optional relative post timestamps
    • Image spoilering after closing a post
    • Non-temporal and recursive post linking
    • No posts per thread or threads per board limit
    • Forced anonymity display mode
    • Post hiding
    • Option to display only the last 50 posts in a thread
    • Optional automatic deletion of unused threads and boards
    • Automatic HTTP(S) and magnet URL linkification
    • Automatic quoting of selected text, when quoting a post
    • Automatic quoting of multiline pastes, if line starts with >
  • Files and images
    • JPEG, PNG, APNG, WEBM, MP3, MP4, OGG, PDF, ZIP, 7Z, TAR.GZ and TAR.XZ supported
    • Transparent PNG and GIF thumbnails
    • Configurable size limits
    • Inbuilt reverse image search
    • No file is ever thumbnailed or stored twice, reducing server load and disk space usage
    • Any file already present on the server is "uploaded and thumbnailed" instantly
  • Performance
    • Low memory and CPU usage
    • High vertical and easy horizontal scaling
    • No frameworks and optimized code on both client and server
    • File upload processing written in C with GraphicsMagick and ffmpeg
    • On-demand lazy client module loading and rendering
    • Inbuilt custom LRU cache
  • Client UI
    • Works with all modern and most outdated browsers (such as PaleMoon)
    • Read-only functionality preserved with JavaScript disabled
    • Scrolling compensation prevents post updates from moving the viewport
    • Inbuilt DOM update batching to reduce redraws
    • Multiple themes
    • Custom user-uploaded backgrounds
    • Configurable keyboard shortcuts
    • Work mode aka Boss key
    • Customisable top banner board link list
    • Optional animated GIF thumbnails
    • Settings export/import to/from JSON file
  • Board administration
    • User board creation and configuration panels
  • Internationalization
    • Client almost entirely localized in multiple languages
    • More languages can be added by editing simple JSON files
  • Miscellaneous
    • Documented public JSON API and WebSocket protocol
    • Optional R/a/dio Now Playing banner

Runtime dependencies

  • RethinkDB. On Linux RethinkDB does not enable a configuration file by default. If you don't want to configure anything, just copy /etc/rethinkdb/default.conf.sample into /etc/rethinkdb/instances.d/instance1.conf.

Building from source

A reference list of commands can be found in docs/installation.md


  • Go >=1.7
  • Node.js >=5.0
  • Rust
  • GCC or Clang
  • make
  • pkg-config
  • pthread
  • lzma
  • ffmpeg >= 3.0 libraries (libavcodec, libavutil, libavformat) compiled with:
    • libvpx
    • libvorbis
    • libopus
    • libtheora
    • libx264
    • libmp3lame
  • GraphicsMagick compiler with:
    • zlib
    • libpng
    • libjpeg
    • postscript
  • git
  • zip

Linux and OSX

  • Run make


  • Install MSYS2
  • Open MSYS2 shell
  • Install dependencies listed above with the mingw-w64-x86_64- prefix with pacman
  • Navigate to the meguca root directory
  • Run make


  • See ./meguca help for server operation
  • Login into the "admin" account via the infinity symbol in the top banner with the password "password"
  • Change the default password
  • Create a board from the administration panel
  • Configure server from the administration panel


  • See /docs/ for more documentation
  • ./meguca or ./meguca debug run the server in development mode
  • make server and make client build the server and client separately
  • make watch watches the file system for changes and incrementally rebuilds the client
  • make update_deps updates all dependencies
  • make clean removes files from the previous compilation
  • make dist_clean in addition to the above removes uploaded files and their thumbnails

Linux only

  • make creates a Go workspace in the .build subdirectory. If you don't have a proper Go workspace set up, you can simply export GOPATH=$(pwd)/.build to temporarily assign .build as your Go workspace in the current shell. This will allow you to use native go commands such as go test and go build.