Skip to main content
2 of 4
Added more mod-related rules. Removed commend deletion. Removed acceptance. Left in indication for which answer is accepted.

Here it is as a user script. I couldn't find a user style extension for my browser, but I'm already running Tampermonkey.

// ==UserScript==
// @name StackExchange read-only mode
// @namespace https://github.com/PurpleMagick/
// @version 1.3
// @license MIT
// @author VLAZ
// @description Disables interactions such as posting or leaving any feedback on posts. Only leaves read-only features. If you browse the sites logged in, you would be able to save posts for later. Leaves flagging intact but removes close reasons. Does not disable keyboard shortcuts.
// @match https://*.stackexchange.com/*
// @match https://*.stackoverflow.com/*
// @match https://*.askubuntu.com/*
// @match https://*.superuser.com/*
// @match https://*.serverfault.com/*
// @match https://*.mathoverflow.net/*
// @match https://*.stackapps.com/*
// @grant GM_addStyle
// ==/UserScript==
GM_addStyle(`
    .js-vote-down-btn,
    .js-vote-up-btn,
    .js-edit-post,
    .js-post-notice-edit-post,
    .js-suggest-edit-post,
    #edit-tags,
    
    .js-add-link.comments-link,
    .js-comment-flag,
    .js-comment-up,
    .js-comment-edit,
    .js-comment-delete,
    
    #post-editor,
    #submit-button,
    a[href$='/questions/ask'],
    
    #review-button .s-activity-indicator,
    .review-dialog ul, 
    .review-dialog h3, 
    .review-dialog a[href$="/review"], 
    .js-actions-sidebar,
    
    .js-accept-answer-btn[aria-pressed="false"],
    
    .bounty-link,
    #btnProtectLoggedIn,
    
    a[href*='/edit-tag-wiki/'],
    
    .js-join-community,
    
    .js-admin-dashboard-button,
    .js-mod-inbox-button,
    .js-mod-menu-button,
    .js-mod-message-menu,
    .js-post-flag-bar,
    .js-comment-flag-options,
    .js-resolve-action,
    .js-post-flag-options,
    
    .js-flag-post-link,
    .js-close-question-link,
    .js-delete-post,
    #popup-flag-post ul li:not(:nth-child(1)):not(:nth-child(2)):not(:last-child),
    #popup-close-question li
    {
        display: none !important;
    }
    
    .js-accept-answer-btn[aria-pressed="true"]
    {
        pointer-events: none;
    }
`)