Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
SNAC(1) 		     General Commands Manual			 SNAC(1)

NAME
     snac -- A simple, minimalistic ActivityPub instance

SYNOPSIS
     snac command basedir [option ...]

DESCRIPTION
     The  snac daemon processes messages from other servers in the Fediverse us-
     ing the ActivityPub protocol.

     This is the user manual and expects an already running  snac  installation.
     For the administration manual, see snac(8).  For file and data formats, see
     snac(5).

   Web Interface
     The web interface provided by snac is split in three data streams: the pub-
     lic  timeline, the private timeline and the instance timeline. There are no
     other feeds like the federated firehoses provided by other similar  Activi-
     tyPub implementations like Mastodon or Pleroma.

     The  public  timeline,  also called the local timeline, is what an external
     visitor sees about the activity of a snac user: that is, only the	list  of
     public  notes,  boosts  and  likes the user generates or participates into.
     This is, obviously, read-only, and not very  remarkable,  unless  the  user
     publishes messages of staggering genius. A set of history links, grouped by
     month, will also be available at the bottom of the page.

     The private timeline, or simply the timeline, is the private, password-pro-
     tected  area of a snac server where the user really interacts with the rest
     of the Fediverse.

     The top area of the timeline provides a big text area to  write  notes  for
     the public (i.e. for the user followers). As this is the second most impor-
     tant  activity on the Fediverse, this is located in the most prominent area
     of the user page. You can enter plain text, @user@host mentions  and  other
     things. See the snac(5) manual for more information on the allowed markup.

     Other  fields  immediately  below the big text one allow some control about
     the post to be sent:

	   Sensitive content
		   If you set this checkbox, your post will  be  marked  with  a
		   content warning. The immediately following, optional text box
		   allows  you	to write a description about why your content is
		   so sensitive.

	   Visibility
		   From these radio button set you can select the scope  of  the
		   new	post.  The available options are: Public, Unlisted, Fol-
		   lowers-only and Direct Message (sent only  to  accounts  men-
		   tioned in the post body).

	   Reply to (URL)
		   If  you fill this optional text field with the URL of another
		   one's post, your text will be considered as a  reply  to  it,
		   not a standalone one.

	   Draft   If you set this checkbox, your text will not be sent when you
		   push  the  Post  button, but stored for later modification in
		   the "Drafts" section.

	   Language
		   A dropdown to select which language your post will be written
		   in. This control only appears after you configure the set  of
		   languages you expect to use in the User Settings (see below).

	   Scheduled post...
		   This  dropdown  menu  allows  setting a date and time for the
		   post publication.

	   Attachments...
		   This dropdown menu allows uploading	media  attachments  (im-
		   ages, audio, video, etc.) to your post.

	   Poll...
		   this  dropdown  menu gives access to the voting options, that
		   will make your post a poll. You can set  the  options  to  be
		   voted, if it's a multiple choice poll and the due date.

     More options are hidden under dropdown menus. They are the following:

	   Follow (by URL or user@host)
		   Fill  the  input  area with a user 'actor' URL or a user@host
		   Fediverse identifier to follow.

	   Boost (by URL)
		   Fill the input area with the URL of a Fediverse  note  to  be
		   boosted.

	   Like (by URL)
		   Fill  the  input  area with the URL of a Fediverse note to be
		   liked.

	   User setup...
		   This option opens the user setup dialog.

	   Followed hashtags...
		   Enter here the list of hashtags you want to follow,	one  per
		   line,  with or without the # symbol. Since version 2.78, URLs
		   to RSS feeds of ActivityPub objects are  also  allowed  (like
		   e.g. https://mastodon.social/tags/bloomscrolling).

	   Blocked hashtags...
		   Enter  here	the  list of hashtags you want to block, one per
		   line, with or without the # symbol.

	   Muted words...
		   Enter here a list of words to be silenced. If a post includes
		   any of this words, it's hidden behind a dropdown.

     The user setup dialog allows some user information to be changed,	specifi-
     cally:

	   User name
		   Your  user  name,  or not really that. People like to include
		   emojis, flags and strange symbols for some reason.

	   Avatar URL
		   The URL of a picture to be used as your avatar  in  timelines
		   around the world.

	   Bio	   Enter  here	a  bunch of self-indulgent blurb about yourself.
		   The same markup options available for text notes apply here.

	   Always show sensitive content
		   By default, snac hides content marked as sensitive  by  their
		   publishers.	 If  you check this option, sensitive content is
		   always shown.

	   Email address for notifications
		   If this field is not empty, an email message will be sent  to
		   this address whenever a post written by you is liked, boosted
		   or replied to.

	   Telegram notifications
		   To  enable  notifications via Telegram, fill the two provided
		   fields (Bot API key and Chat id). You need to create  both  a
		   Telegram  channel  and  a bot for this; the process is rather
		   cumbersome but it's documented everywhere. The Bot API key is
		   a long string of alphanumeric characters and the chat id is a
		   big, negative number.

	   ntfy notifications
		   To enable notifications via ntfy (both self-hosted  or  stan-
		   dard  ntfy.sh  server),  fill  the  two provided fields (ntfy
		   server/topic and, if protected, the token).	You need to  re-
		   fer	to  the https://ntfy.sh web site for more information on
		   this process.

	   Notify webhook
		   If this is set to an URL, an HTTP POST will	be  sent  to  it
		   whenever a new notification happens (see the 'Webhook for no-
		   tifications' section below for more information).

	   Maximum days to keep posts
		   This  numeric  value specifies the number of days to pass be-
		   fore posts (yours and others') will	be  purged.  This  value
		   overrides what the administrator defined in the global server
		   settings  only if it's lesser (i.e. you cannot keep posts for
		   longer than what the admin desires). A value of  0  (the  de-
		   fault)  means  that	the global server settings will apply to
		   the posts in your timeline. Also, if  the  administrator  has
		   configured  it, purged local posts generate a Delete activity
		   that is sent everywhere.

	   Drop direct messages from people you don't follow
		   Just what it says in the tin. This is  to  mitigate	spammers
		   coming  from Fediverse instances with lax / open registration
		   processes. Please take note that this  also	avoids	possibly
		   legitimate people trying to contact you.

	   This account is a bot
		   Set	this  checkbox	if this account behaves like a bot (i.e.
		   posts are automatically generated).

	   Auto-boost all mentions to this account
		   If this toggle is set,  all	mentions  to  this  account  are
		   boosted to all followers. This can be used to create groups.

	   This account is private
		   If this toggle is set, posts are not published via the public
		   web interface, only via the ActivityPub protocol.

	   Collapse top threads by default
		   If  this toggle is set, the private timeline will always show
		   conversations collapsed by default. This allows easier  navi-
		   gation through long threads.

	   Follow requests must be approved
		   If  this toggle is set, follow requests are not automatically
		   accepted, but notified and stored for later	review.  Pending
		   follow  requests  will  be shown in the people page to be ap-
		   proved or discarded.

	   Publish follower and following metrics
		   If this toggle is set, the number of followers and  following
		   accounts  are  made public (this is only the number; the spe-
		   cific lists of accounts are never published).

	   Web interface language
		   If the administrator has installed any language file, it  can
		   be selected here.

	   Time zone
		   The	time  zone  the user is on (default: UTC). Only used for
		   scheduled posts.

	   Languages you usually post in
		   Fill this string with the ISO 639 Language Codes  you  expect
		   to  write  your  posts  in,	space-separated  (example: en fr
		   pt_BR).

	   Password
		   Write the same string in these  two	fields	to  change  your
		   password. Don't write anything if you don't want to do this.

     The  rest of the page contains your timeline in reverse chronological order
     (i.e., newest interactions first).  snac shows the conversations as  nested
     trees, unlike other Fediverse software; every time you contribute something
     to  a  conversation,  the full thread is bumped up, so new interactions are
     shown always at the top of the page while the forgotten  ones  languish  at
     the bottom.

     Private  notes  (a.k.a.  direct messages) are also shown in the timeline as
     normal messages, but marked with a cute lock to mark  them  as  non-public.
     Replies  to  direct  messages  are  also  private	and  cannot be liked nor
     boosted.

     For each entry in the timeline, a set of reasonable actions in the form  of
     buttons will be shown. These can be:

	   Reply...
		   Unveils  a text area to write your intelligent and acute com-
		   ment to an uninformed fellow. This note is sent to the origi-
		   nal author as well as to your followers. The note can include
		   mentions in the @user@format; these people will  also  become
		   recipients  of  the message. If you reply to a boost or like,
		   you are really replying to the note, not to	the  admirer  of
		   it.

	   Emoji react...
		   Unveils a text area that allows a user to react with an emoji
		   by typing its identifier, that should match one of the emojis
		   defined  in	the  emojis.json  file. By now, only those emoji
		   identifiers surrounded by colons can be used.

	   Like    Click this if you admire this post. The poster and your  fol-
		   lowers will be informed.

	   Boost   Click  this	if  you  want to propagate this post to all your
		   followers. The original author will also be informed.

	   Bookmark
		   Click this to bookmark a post.

	   Follow  Click here if you want to start receiving all the shenanigans
		   the original author of the post will write in the future.

	   Unfollow
		   Click here if you are fed up of this fellow's activities.

	   Delete  Click here to send this post to the bin. If it's an	activity
		   written  by	you, the appropriate message is sent to the rest
		   of involved parts telling them that you no longer  want  your
		   thing  in  their servers (not all implementations really obey
		   this kind of requirements, though).

	   MUTE    This is the most important button in snac and  the  Fediverse
		   in general. Click it if you don't want to read crap from this
		   user again in the foreseeable future.

	   Hide    If a conversation is getting long and annoying but not enough
		   to MUTE its author forever, click this button to avoid seeing
		   the post and its children anymore.

	   Edit    Posts  written  by  you on snac version 2.19 and later can be
		   edited and resent to their recipients.

   Command-line options
     The command-line tool provide the following commands:

	   init [basedir]
		   Initializes the data storage. This is an interactive command;
		   necessary information will be prompted for. The  basedir  di-
		   rectory must not exist.

	   upgrade basedir
		   Upgrades  the  data	storage  after installing a new version.
		   Only necessary if snac complains and demands it.

	   httpd basedir
		   Starts the daemon.

	   purge basedir
		   Purges old data from the timeline of all users.

	   adduser basedir [uid]
		   Adds a new user to the server. This is  an  interactive  com-
		   mand; necessary information will be prompted for.

	   deluser basedir uid
		   Deletes a user, unfollowing all accounts first.

	   resetpwd basedir uid
		   Resets a user's password to a new, random one.

	   update basedir uid
		   Sends a user's updated profile to following instances.

	   queue basedir uid
		   Processes the output queue of the specified user, sending all
		   enqueued messages and re-enqueing the failing ones. This com-
		   mand must not be executed if the server is running.

	   follow basedir uid actor
		   Sends a Follow message for the specified actor URL.

	   request basedir uid url
		   Requests an object and dumps it to stdout. This is a very low
		   level command that is not very useful to you.

	   announce basedir uid url
		   Announces (boosts) a post via its URL.

	   note   basedir   uid   text	 [file	 file	...  [-r  inReplyTo  [-d
		   YYYYmmddHHMMSS]]]
		   Enqueues a Create + Note message to	all  followers.  If  the
		   text  argument is -e, the external editor defined by the EDI-
		   TOR environment variable will be invoked to	prepare  a  mes-
		   sage;  if  it's - (a lonely hyphen), the post content will be
		   read from stdin.  The rest  of  command  line  arguments  are
		   treated  as	media files to be attached to the post. The LANG
		   environment variable (if defined) is used as  the  post  lan-
		   guage.  An  optional URL to a Fediverse post, prefixed by -r,
		   can be specified for this note to be a reply to. If a date in
		   YYYYmmddHHMMSS format is followed by -d, the note  is  sched-
		   uled for that moment instead of immediately posted (this date
		   must  be  in the same timezone the user has configured in the
		   web UI).

	   note_unlisted basedir uid text  [file  file	...  [-r  inReplyTo  [-d
		   YYYYmmddHHMMSS]]]
		   Like  the  previous one, but creates an "unlisted" (or "quiet
		   public") post.

	   note_mention basedir uid  text  [file  file	...  [-r  inReplyTo  [-d
		   YYYYmmddHHMMSS]]]
		   Like  the  previous one, but creates a post only for accounts
		   mentioned in the post body.

	   block basedir instance_url
		   Blocks a full instance, given its URL  or  domain  name.  All
		   subsequent incoming activities with identifiers from that in-
		   stance  will  be  immediately blocked without further inspec-
		   tion.

	   unblock basedir instance_url
		   Unblocks a previously blocked instance.

	   verify_links basedir uid
		   Verifies all links or account handles stored as metadata  for
		   the given user.  This verification is done by downloading the
		   link  content  and searching for a link back to the snac user
		   url that also contains a rel="me" attribute. These links  are
		   specially  marked  as  verified in the user's public timeline
		   and also via the Mastodon API.

	   export_csv basedir uid
		   Exports some account data as Mastodon-compatible  CSV  files.
		   After  executing  this  command,  the following files will be
		   written to the export/ subdirectory inside  the  user  direc-
		   tory:  bookmarks.csv,  blocked_accounts.csv,  lists.csv,  and
		   following_accounts.csv.

	   export_posts basedir uid
		   Exports all posts written by the user to the file outbox.json
		   inside the export/ subdirectory inside  the	user  directory.
		   The format is compatible with the one generated by the equiv-
		   alent option in Mastodon.

	   alias basedir uid @account@remotehost
		   Sets  an account as an alias of this one. This is a necessary
		   step to migrate an account to a remote Mastodon instance (see
		   snac(8), section 'Migrating from snac to Mastodon').

	   migrate basedir uid
		   Starts a migration from this account to the	one  set  as  an
		   alias   (see   snac(8),   section  'Migrating  from	snac  to
		   Mastodon').

	   import_csv basedir uid
		   Imports CSV data files from a Mastodon export.  This  command
		   expects  the  following files to be inside the import/ subdi-
		   rectory of a user's directory inside the server  base  direc-
		   tory:  bookmarks.csv,  blocked_accounts.csv,  lists.csv,  and
		   following_accounts.csv.

	   state basedir
		   Dumps the current state of the server and  its  threads.  For
		   example:

			 server: comam.es (snac/2.45-dev)
			 uptime: 0:03:09:52
			 job fifo size (cur): 45
			 job fifo size (peak): 1532
			 thread #0 state: input
			 thread #1 state: input
			 thread #2 state: waiting
			 thread #3 state: waiting
			 thread #4 state: output
			 thread #5 state: output
			 thread #6 state: output
			 thread #7 state: waiting

		   The	job  fifo size values show the current and peak sizes of
		   the in-memory job queue. The thread	state  can  be:  waiting
		   (idle  waiting  for	a  job	to be assigned), input or output
		   (processing I/O packets) or stopped (not running, only to  be
		   seen while starting or stopping the server).

	   import_list basedir uid file
		   Imports  a  Mastodon  list  in  CSV	format. The file must be
		   stored inside the import/ subdirectory of a user's  directory
		   inside the server base directory.  This option can be used to
		   import "Mastodon Follow Packs".

	   import_block_list basedir uid file
		   Imports a Mastodon list of accounts to be blocked in CSV for-
		   mat.  The file must be stored inside the import/ subdirectory
		   of a user's directory inside the server base directory.

	   lists basedir uid
		   Prints the name of the user created lists.

	   list_members basedir uid name
		   Prints the list of actors in the named list.

	   list_create basedir uid name
		   Creates a new list.

	   list_remove basedir uid name
		   Removes an existing list.

	   list_add basedir uid name account
		   Adds an account (by its @name@host handle or actor URL) to  a
		   list.

	   list_del basedir uid name actor_url
		   Deletes an actor (by its actor URL) from a list.

	   top_ten basedir uid [N]
		   Returns  the ids of the top ten (or top N) most popular posts
		   (considering the sum of likes and boosts).

   Migrating an account to/from Mastodon
     See snac(8) for details.

   Using Mastodon-compatible apps
     Since version 2.27, snac includes support for the Mastodon API, so you  can
     use  Mastodon-compatible mobile and desktop applications to access your ac-
     count. Given a correctly configured server, the  usage  of  these	programs
     should be straightforward.  Please take note that they will show your time-
     line  in a 'Mastodon fashion' (i.e., as a plain list of posts), so you will
     lose the fancy, nested thread post display with the most active threads  at
     the top that the web interface of snac provides.

   Implementing post bots
     snac makes very easy to post messages in a non-interactive manner. This ex-
     ample posts a string:

	   uptime | snac note $SNAC_BASEDIR $SNAC_USER -

     You can setup a line like this from a crontab(5) or similar. Take note that
     you need a) command-line access to the same machine that hosts the snac in-
     stance, and b) write permissions to the storage directories and files.

     You  can  also post non-interactively using the Mastodon API and a command-
     line http tool like curl(1) or similar. This has the advantage that you can
     do it remotely from any host, anywhere; the only thing you need is  an  API
     Token. This is an example:

	   curl -X POST https://$SNAC_HOST/api/v1/statuses \
	   --header "Authorization: Bearer ${TOKEN}" -d "status=$(uptime)"

     You can obtain an API Token by connecting to the following URL:

	   https://$SNAC_HOST/oauth/x-snac-get-token

   Webhook for notifications
     Since version 2.78, users can set the URL to a webhook that will receive an
     HTTP POST with every notification (in JSON format). This can be used to im-
     plement some automation whenever a new activity happens, like autorepliers,
     chatbots, interactive textual games or whatever. The examples/ subdirectory
     contains  a  tiny Python program that implements an auto-follower for every
     new follow. The JSON notification object includes the following data:

	   id	   a unique notification identifier

	   actor   the origin actor id

	   target  the target actor id

	   date    the notification date

	   msg	   the full ActivityPub action JSON object

	   objid   the object identifier (extracted from msg, may be null)

	   type    the action type (extracted from msg)

	   utype   the action subtype (extracted from msg, may be null)

	   uid	   the user identifier (account name)

	   basedir
		   the server base directory

	   baseurl
		   the server base URL

	   account
		   the origin actor object

	   reply   the activity this post is a reply to (may not exist)

ENVIRONMENT
     SNAC_BASEDIR
	     This optional environment variable can be set to the base directory
	     of your installation; if set, you don't have to add the base direc-
	     tory as an argument to command-line operations. This may prove use-
	     ful if you only have one snac instance in	your  system  (which  is
	     probably your case).

     DEBUG   Overrides the debugging level from the server 'dbglevel' configura-
	     tion  variable.  Set it to an integer value. The higher, the deeper
	     in meaningless verbiage you'll find yourself into.

     EDITOR  The user-preferred interactive text editor to prepare notes.

     LANG    The language of the post when sending notes from the command line.

SEE ALSO
     snac(5), snac(8)

AUTHORS
     grunfink @grunfink@comam.es

LICENSE
     See the LICENSE file for details.

CAVEATS
     Use the Fediverse sparingly. Don't fear the MUTE button.

BUGS
     Probably many. Some issues may be even documented in the TODO.md file.

FreeBSD ports 15.quarterly	   $Mdocdate$				 SNAC(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=snac&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help