Labs

{{svg-jar "idea"}}This is a testing ground for new or experimental features. They may change, break or inexplicably disappear at any time.

{{#if this.session.user.isOwner}}
Members (BETA)
Enable members
Create registered members and take subscription payments — Find out more
{{gh-feature-flag "members"}}
{{#liquid-if this.feature.labs.members}} {{gh-members-lab-setting settings=this.settings setDefaultContentVisibility=(action "setDefaultContentVisibility") setMembersSubscriptionSettings=(action "setMembersSubscriptionSettings") setBulkEmailSettings=(action "setBulkEmailSettings") }}
{{gh-task-button "Save members settings" task=this.saveSettings successText="Saved" runningText="Saving" class="gh-btn gh-btn-blue gh-btn-icon" }}
{{/liquid-if}}
{{/if}}
Migration options
Import content
Import posts from another Ghost installation
{{gh-file-upload id="importfile" classNames="flex" uploadButtonText=this.uploadButtonText onUpload=(action "onUpload") acceptEncoding=this.importMimeType data-test-file-input="import"}}
{{#if this.importErrors}}
{{#if this.importSuccessful}} Import successful with warnings {{else}} Import failed {{/if}}
{{#each this.importErrors as |error|}}

{{#if error.help}}{{error.help}}: {{/if}}{{error.message}}

{{#if error.context}}
{{error.context}}
{{/if}}
{{/each}}
{{/if}}
Export your content
Download all of your posts and settings in a single, glorious JSON file
Delete all content
Permanently delete all posts and tags from the database, a hard reset
Beta features
Night shift
Swap Ghost admin's colours to a dark background which is easy on the eyes
{{gh-feature-flag "nightShift"}}
{{#gh-uploader extensions=this.jsonExtension uploadUrl="/redirects/json/" paramName="redirects" onUploadSuccess=(perform this.redirectUploadResult true) onUploadFailure=(perform this.redirectUploadResult false) as |uploader| }}
Redirects
Configure redirects for old or moved content, more info in the docs
{{#each uploader.errors as |error|}}
{{or error.context error.message}}
{{/each}}
{{#if uploader.isUploading}} {{uploader.progressBar}} {{else}} Download current redirects {{/if}}
{{gh-file-input multiple=false action=uploader.setFiles accept=this.jsonMimeType data-test-file-input="redirects"}}
{{/gh-uploader}}
{{#gh-uploader extensions=this.yamlExtension uploadUrl="/settings/routes/yaml/" paramName="routes" onUploadSuccess=(perform this.routesUploadResult true) onUploadFailure=(perform this.routesUploadResult false) as |uploader| }}
Routes
Configure dynamic routing by modifying the routes.yaml file
{{#each uploader.errors as |error|}}
{{or error.context error.message}}
{{/each}}
{{#if uploader.isUploading}} {{uploader.progressBar}} {{else}} Download current routes.yaml {{/if}}
{{gh-file-input multiple=false action=uploader.setFiles accept=this.yamlMimeType data-test-file-input="routes"}}
{{/gh-uploader}}
Testing tools
Test email configuration
Send yourself a test email to make sure everything is working
{{gh-task-button "Send" successText="Sent" task=this.sendTestEmail class="gh-btn gh-btn-hover-blue gh-btn-icon"}}
{{#if this.showDeleteAllModal}} {{gh-fullscreen-modal "delete-all" close=(action "toggleDeleteAllModal") modifier="action wide"}} {{/if}}