Glosa alternatives and similar software solutions
Based on the "Social Networks and Forums" category.
Alternatively, view Glosa alternatives based on common mentions on social networks and blogs.
-
Mastodon
Your self-hosted, globally interconnected microblogging community -
Reddit
Social networking and news website where registered community members can submit content. -
Telescope
π A toolkit to quickly build apps with React, GraphQL & Meteor -
HumHub
HumHub is an Open Source Enterprise Social Network. Easy to install, intuitive to use and extendable with countless freely available modules. -
Patchwork
A decentralized messaging and sharing app built on top of Secure Scuttlebutt (SSB). -
Vanilla Forums
Vanilla is a powerfully simple discussion forum you can easily customize to make as unique as your community. -
phpBB
phpBB Development: phpBB is a popular open-source bulletin board written in PHP. This repository also contains the history of version 2. -
Misago
Misago is fully featured modern forum application that is fast, scalable and responsive. -
OSSN
Open Source Social Network (OSSN) is a social networking software written in PHP. It allows you to make a social networking website and helps your members build social relationships, with people who share similar professional or personal interests. It is available in 17 international languages. -
Talkyard
A community discussion platform: Brings together the main features from StackOverflow, Slack, Discourse, Reddit, and Disqus blog comments. -
Simple Machines Forum
Simple Machines Forum β SMF in short β is free and open-source community forum software, delivering professional grade features in a package that allows you to set up your own online community within minutes! -
Hubzilla
Independent general-purpose websites that not only connect with their associated members and viewers, but also connect together. -
Anahita
Anahita is a platform and framework for developing open science and knowledge sharing applications on a social networking foundation. -
Jappix
:speech_balloon: Jappix, a full-featured XMPP web-client (Jappix Desktop, Jappix Mobile & Jappix Mini). -
FluxBB
FluxBB is a fast, light, user-friendly forum application for your website. -
twtxt.net
π twtxt is a Self-Hosted, Twitterβ’-like Decentralised microBlogging platform. No ads, no tracking, your content, your data! -
Satellity
Yet another open source forum written in Golang, React and PostgreSQL. -
BuddyPress
BuddyPress DEVELOPMENT repo. This repository is just a mirror of the development SVN at https://buddypress.svn.wordpress.org/. Please include a link to a pre-existing ticket on https://buddypress.trac.wordpress.org/ with every pull request. -
Human-Connection
Free and open-source social network for active citizenship. -
GNU social
GNU social is social communication software for both public and private communications. -
Gosora
Gosora is an ultra-fast and secure forum software written in Go that balances usability with functionality. -
RedMatrix
Complete decentralised publishing, sharing, and communications system.
Static code analysis for 29 languages.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Glosa or a related project?
Popular Comparisons
README
Glosa: Comments for static sites. Clone of Disqus, but faster, Opensource and sexy.
Amazing reasons to use it
- Opensource.
- Very fast, responses between 5ms and 15ms on average.
- Easy to integrate with static pages.
- PWA Admin for desktop and mobile or terminal to manage comments: Delete, update, find...
- Easy to import from Disqus.
- No database, everything is stored in a JSON.
- Configuration in a simple YAML.
- Captcha system included.
- Receive an email for each new comment.
- Users are notified by email if they are answered.
- Multisite: Single server for multiple websites.
Resources
Template static site (only HTML and Javascript)
Import your comments from Disqus
PWA Admin
Video Demo
Help me continue to improve
Use it now
- How does it work?
- Origin
- Run
- Notification template for email
- API
- Terminal cli
- Deployment
- Create your own JAR
How does it work?
On the one hand we have Glosa who would be our comment server. It feeds in GET and POST requests, and obediently returns JSON. It can only return comments from a url (it sorts comments by url, not ids) or create a new comment (parent or child of another comment). Nothing else. If you want to create a comment previously you will need to ask for the token to confirm that you are not a robot.
Optionally you can receive an email automatically when a new comment is written.
The website, CMS or mobile application, must integrate a logic with Javascript to make the necessary requests and render the comments properly. To make this task easier we have created an example template that you can modify to your needs. You can find the link on this page.
Scenarios
1 web page, share or not a server
3 web pages in different domains or servers
Origin
A Glosa is a Spanish word. It is defined as a note, usually brief, that is written in the margin of a text or even between its lines with the intention of clarifying some idea of it.
The software was born with the intention that the author's static blog would no longer depend on an external company (Disqus), and could have control of its content. To make it as easy as possible to deploy, develop and maintain; he programmed in Clojure. And from the beginning it was clear to him that he didn't need a conventional database, plain text was enough.
Run
1) Make sure you have Java installed.
Debian/Ubuntu
sudo apt install default-jre
Mac OS
brew install java
2) Create a file config.yaml
with the following content. You can also use config.yaml.example
as a base config and change it to fit your needs.
##### General #####
# If it is active it will be accessible to any client
debug: false
# It can be a domain in case of using a proxy: example.com
domain: localhost
port: 4000
# Access for APP
token: mysecret
# It indicates which domain can use it. Debug true so there are no limitations.
domain-cli: "http://example-cli.com/"
##### Notify #####
# Type of notification, currently valid: email
notify: email
subject: New comment
from: [email protected]
admin: [email protected]
# SMTP, only notify: email
smtp-host: smtp.example.com
smtp-user: smtpuser
smtp-password: smtppassword
smtp-port: 25
smtp-tls: true
##### Captcha #####
# Currently valid: time
captcha: time
##### Database #####
# Currently valid: plain
database: plain
3) Download the latest version of Glosa (glosa-{version}-standalone.jar
).
https://github.com/glosa/glosa-server/releases
4) Now you can execute glosa.
java -jar target/glosa-{version}-standalone.jar
Great π. You already have your π₯ own comment server π₯.
That's it, now you just have to test that it works properly.
curl localhost:4000/api/v1/captcha/?url=https://glosa.example/best-SO/'
It will return a random token
{"token":"OABWNONEOOKXRMMWADPF"}
Notification template for email
The first time Glosa is run it will create an HTML template with the name template-email.html
. Edit freely.
API
- Get Comments (Public)
- Last comments (Private)
- Add Comments (Public)
- Update Comment (Private)
- Delete Comment (Private)
- Search Threads (Private)
- Get captcha token (Public)
- Check if he is alive (Public)
- Check if token is valid (Public)
Authorization
Only privates.
You need a token
to be able to interact (You will find it in your config.yaml
). Use a header with Bearer authorization on each request.
Example with mysecret
token.
curl -XDELETE -H "Authorization: Bearer mysecret" -H "Content-type: application/json" ...
Public
No token
is required to interact.
Get Comments
Gets all the comments on one page.
Method: GET
/api/v1/comments/?url={url}
Param | Value | Description |
---|---|---|
url | string | Page where you want to get the comments. |
Example
Get from http://glosa.example/best-SO/
.
curl 'http://localhost:4000/api/v1/comments/?url=https://glosa.example/best-SO/'
Success response
[
{
"id": 4812781236,
"parent": "",
"deep": 0,
"createdAt": 1584266634,
"thread": "https://glosa.example/best-SO/",
"author": "Lexar",
"email": "",
"message": "Do you use Glosa too? It's an amazing technology."
},
{
"id": 4812781237,
"parent": "4812781236",
"deep": 1,
"createdAt": 1584266746,
"thread": "https://glosa.example/best-SO/",
"author": "Lucia",
"email": "[email protected]",
"message": "I love the article."
}
]
Fail response
[]
Last Comments
Get the last 10 comments sorted by date. A pager is available.
Method: POST
/api/v1/comments/latest/{page}
Param | Value | Description |
---|---|---|
page | number | Paginator. |
Example
I get the last 10 comments.
curl 'http://localhost:4000/api/v1/comments/latest/1'
Last comments between 30 and 40.
curl 'http://localhost:4000/api/v1/comments/latest/3'
Success response
[
{
"id": 4812781236,
"parent": "",
"deep": 0,
"createdAt": 1584266634,
"thread": "https://glosa.example/best-SO/",
"author": "Lexar",
"email": "",
"message": "Do you use Glosa too? It's an amazing technology."
},
{
"id": 4812781237,
"parent": "4812781236",
"deep": 1,
"createdAt": 1584266746,
"thread": "https://glosa.example/best-SO/",
"author": "Lucia",
"email": "[email protected]",
"message": "I love the article."
}
...
]
Fail response
[]
Add Comment
Add new comment on one page. Require token generated by the captcha endpoint. After saving the comment the captcha token will no longer be valid. At the same time a notification (email) will be sent to the administrator (in the configuration it is called admin
), in case it is a sub-comment it will also be sent another notification to the parent of the comment if the address is present.
The steps must be.
- Get captcha token.
- Add comment.
Method: POST
/api/v1/comments/
Param | Value | Description |
---|---|---|
parent | number | If it's a sub-comment, the number of the parent comment. Otherwise leave empty. |
author | string | Author's name. |
string | Email that the user will be notified of the responses to his comment. Leave blank if not desired. | |
message | string | Message. It can be HTML or plain. |
token | number | Number of the token generated by the captcha endpoint. |
thread | string | Page where you want to save the comment. |
Example
Save comment from https://glosa.example/best-SO/
.
curl -XPOST -H "Content-type: application/json" -d '{
"parent": "",
"token": "VRJUOBBMTKFQUAFZOKJG",
"author": "Juana",
"email": "[email protected]",
"message": "I like it very much.",
"thread":"https://glosa.example/best-SO/"
}' 'http://localhost:4000/api/v1/comments/'
Success response
{
"added": true
}
Fail response
{
"added": false
}
Get captcha token
Get a token to validate that a new comment can be created. It has only one use. It must also be obtained 20 seconds before use or it will not work.
Method: GET
/api/v1/captcha/?url={url}
Param | Value | Description |
---|---|---|
url | string | Page where you want to save the comment. |
Example
Get token for page https://glosa.example/best-SO/
.
curl 'http://localhost:4000/api/v1/captcha/?url=https://glosa.example/best-SO/'
Success response
{
"token": "ZRFOKXLALKNPOJPYJLVY"
}
Fail response
{
"error": "Need URL"
}
Check if he is alive
Simple answer to check that the service is working.
Method: GET
/api/v1/ping/
Example
curl 'http://localhost:4000/api/v1/ping/'
Success response
{
"ping": "pong"
}
Check if token is valid
Method: POST
/api/v1/token/check/
Param | Value | Description |
---|---|---|
url | string | Page where you want to save the comment. |
Example
curl -XPOST -H "Authorization: Bearer mysecret" 'http://localhost:4000/api/v1/token/check/'
Success response
{
"valid": true
}
Fail response
{
"valid": false
}
Private
Update Comment
Update a comment for ID. Authorization required.
Method: PUT
/api/v1/comments/
Param | Value | Description |
---|---|---|
id | number | Comment ID. |
author | string | Author's name. |
string | Email that the user will be notified of the responses to his comment. Leave blank if not desired. | |
message | string | Message. It can be HTML or plain. |
Example
Update comment with id 1234
.
curl -XPUT -H "Authorization: Bearer mysecret" -H "Content-type: application/json" -d '{
"id": 1234
"author": "Alex",
"email": "[email protected]",
"message": "I love the article."
}' 'http://localhost:4000/api/v1/comments/
Success response
{
"updated": true,
"id": 1234
}
Fail response
{
"updated": false,
"id": 1234
}
Delete Comment
Delete a comment for ID. Authorization required.
Method: DELETE
/api/v1/comments/{id}
Param | Value | Description |
---|---|---|
id | number | Comment ID. |
Example
Delete comment with id 1234
.
curl -XDELETE -H "Authorization: Bearer mysecret" -H "Content-type: application/json" http://localhost:4000/api/v1/comments/1234
Success response
{
"deleted": true,
"id": 1234
}
Fail response
{
"deleted": false,
"id": 1234
}
Search Threads
Search for all urls containing a certain string ignoring uppercase. Authorization required.
Method: POST
/api/v1/threads/search/{query}
Param | Value | Description |
---|---|---|
query | string | String to search. |
Example
Search all threads with tadam
.
curl -XPOST -H "Authorization: Bearer mysecret" 'http://localhost:4000/api/v1/threads/search/tadam'
Success response
[
{
"thread": "https://my.blog/tadam-vs-pedestal/"
},
{
"thread": "https://my.blog/best-web-framework-clojure-tadam"
}
]
Fail response
[]
Terminal cli
To manage some minor features you can use the manager
script which will filter, modify or delete the database. Previously remember to stop Glosa to avoid problems.
You will need to have Node installed on your computer and give it permission to run.
Last comments
./manager last [number of elements]
Example
./manager last 3
Take all comments by thread
./manager get [thread]
Example
./manager get https://glosa.example/best-SO/
Update the text of a comment
./manager update [id] [new message]
Example
./manager update 1234 'I love your article.'
Delete a comment
./manager delete [id]
Example
./manager delete 1234
Deployment
With Nginx it's pretty quick and easy. You can use it as a reverse proxy, since Glosa contains its own web server (Jetty). You can see an example of configuration that can be useful.
Nginx
server {
server_name glosa.domain.com;
access_log /var/log/glosa_access.log;
error_log /var/log/glosa_error.log;
location / {
proxy_pass http://localhost:4000/;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}
Systemctl
To create a service in Linux is done like any application in Java. Below you can see an example.
Create a file in the following path: /etc/systemd/system/glosa.service
Add the content.
[Unit]
Description=Glosa
After=network.target
[Service]
Type=simple
Restart=always
WorkingDirectory=/folder/jar/
ExecStart=java -jar glosa.jar
[Install]
WantedBy=multi-user.target
Finally enable and start the service.
sudo systemctl enable glosa
sudo systemctl start glosa
Create your own JAR
1) Make sure you have openjdk or oracle-jdk installed, clojure and leiningen.
MacOS
brew install openjdk clojure leiningen
Debian/Ubuntu
sudo apt install default-jdk clojure leiningen
2) Clone the repository and enter the generated folder.
git clone https://github.com/glosa/glosa-server.git
cd glosa-server
3) Run the following command to build a jar
file.
lein uberjar
After this two files should be created in target/
. We will use the standalone version: glosa-{version}-standalone.jar
.
Dev tools
It needs to be executed at the root of the project and have Leiningen
installed.
Lint
It checks linguistically and syntaxically if the code is correct.
make lint
Build
Build a JAR ready to distribute.
make build
Deploy
Distributed in Clojars.
make deploy
Thanks to the power of Tadam Framework