diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js
index 1f63de25..c1213fa9 100644
--- a/src/components/post_status_form/post_status_form.js
+++ b/src/components/post_status_form/post_status_form.js
@@ -94,6 +94,18 @@ const PostStatusForm = {
     },
     customEmoji () {
       return this.$store.state.config.customEmoji || []
+    },
+    statusLength () {
+      return this.newStatus.status.length
+    },
+    statusLengthLimit () {
+      return this.$store.state.config.textlimit
+    },
+    hasStatusLengthLimit () {
+      return this.statusLengthLimit > 0
+    },
+    charactersLeft () {
+      return this.statusLengthLimit - this.statusLength
     }
   },
   methods: {
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue
index 8e436428..a759bb53 100644
--- a/src/components/post_status_form/post_status_form.vue
+++ b/src/components/post_status_form/post_status_form.vue
@@ -18,6 +18,9 @@
       </div>
       <div class='form-bottom'>
         <media-upload @uploading="disableSubmit" @uploaded="addMediaFile" @upload-failed="enableSubmit" :drop-files="dropFiles"></media-upload>
+
+        <p v-if="hasStatusLengthLimit" class="base04">{{ charactersLeft }}</p>
+
         <button v-if="posting" disabled class="btn btn-default base05 base02-background">{{$t('post_status.posting')}}</button>
         <button v-else :disabled="submitDisabled" type="submit" class="btn btn-default base05 base02-background">{{$t('general.submit')}}</button>
       </div>
@@ -67,6 +70,12 @@
          button {
              width: 10em;
          }
+
+         p {
+           margin: 0.35em;
+           padding: 0.35em;
+           display: flex;
+         }
      }
      .error {
        border-radius: 5px;
diff --git a/src/main.js b/src/main.js
index a14ca7c8..7fb9a047 100644
--- a/src/main.js
+++ b/src/main.js
@@ -75,15 +75,23 @@ const i18n = new VueI18n({
   messages
 })
 
+window.fetch('/api/statusnet/config.json')
+  .then((res) => res.json())
+  .then((data) => {
+    const {name, closed: registrationClosed, textlimit} = data.site
+
+    store.dispatch('setOption', { name: 'name', value: name })
+    store.dispatch('setOption', { name: 'registrationOpen', value: (registrationClosed === '0') })
+    store.dispatch('setOption', { name: 'textlimit', value: parseInt(textlimit) })
+  })
+
 window.fetch('/static/config.json')
   .then((res) => res.json())
   .then((data) => {
-    const {name, theme, background, logo, registrationOpen} = data
-    store.dispatch('setOption', { name: 'name', value: name })
+    const {theme, background, logo} = data
     store.dispatch('setOption', { name: 'theme', value: theme })
     store.dispatch('setOption', { name: 'background', value: background })
     store.dispatch('setOption', { name: 'logo', value: logo })
-    store.dispatch('setOption', { name: 'registrationOpen', value: registrationOpen })
     if (data['chatDisabled']) {
       store.dispatch('disableChat')
     }
diff --git a/static/config.json b/static/config.json
index 880efca8..8e4b21ca 100644
--- a/static/config.json
+++ b/static/config.json
@@ -1,9 +1,7 @@
 {
-  "name": "Pleroma FE",
   "theme": "pleroma-dark",
   "background": "/static/bg.jpg",
   "logo": "/static/logo.png",
-  "registrationOpen": false,
   "defaultPath": "/main/all",
   "chatDisabled": false
 }