YOURLS goodies: forums, nightly builds and hook list.

There are a few things I’ve discreetly mentioned over the past weeks, either on Twitter (follow me!) or through the project wiki pages, that are well worth an official blog post: forums, nightly builds and hook list.

1. Forums!

Some time ago, I’ve setup a few YOURLS forums. There are currently 3 forums:

  1. General discussion: show off your cool public interface or personalized YOURLS index page with stats and stuff, discuss anything, bounce ideas.
  2. Plugins: anything related to plugins. Introduce yours and ask for feedback, suggest plugin ideas.
  3. Help Wanted!: if you have a problem and need someone to lend a hand, try here. The project issue tracker is not suitable for personal support requests (its goals are to report defects or suggest feature requests, not troubleshoot your own unique personal .htaccess issue), but this forum is. Maybe some freelancers will even get a couple paid gigs here too?

If these forums do meet a need and become active, I may ask a few volunteers to help moderate it in the future.

2. Nightly builds!

There are now YOURLS nightly builds generated, well, every night. This is aimed at users who want to update their install (either to code plugins or to fix bugs without waiting for an official package) and don’t know how to update YOURLS with SVN.

For the record, unless stated otherwise the current trunk version of YOURLS is safe to run on a live site. For instance, I run it on and also my personal URL shortener,, and things have always been fine.

Remember: when coding plugins, it’s recommended to use the latest available, that is either running trunk or installing a nightly build. Which leads to me third point:

3. Hook list!

YOURLS plugin coders will be pleased to know that there is now an exhaustive and always up to date list of YOURLS actions and filters. This list is generated every night against the current trunk version, thanks to the help of a smart user who crafted a neat perl script.

Short URL to this post:

Hot: APC Cache plugin for YOURLS

I’m particularly excited by this one: Ian Barber got his hand dirty and wrote the first release of an APC Cache plugin for YOURLS.

In case that’s Greek to you, APC stands for Alternative PHP Cache and is a PHP extension that provides an opcode cache for PHP: it caches data and compiled code in memory. From the readme:

This plugin is designed to remove a lot of the database traffic from YOURLS, primarily the write load from doing the logging and click tracking. We have attempted to strike a balance between keeping most information, but spilling it in some cases in the name of higher performance.

If you have a server capable of running APC, especially if you’re running a popular URL shortener, please give the plugin a try and send Ian some feedback!

Short URL to this post:

Preventing abuse of your public YOURLS install

A lot of you, beloved users, are using YOURLS to set up public shorteners. Sooner or later you all face the same problem: abuse by spammers, sometimes until your hosting provider shuts down your site. Hopefully, thanks to the plugin API, being abused by spammers is not inevitable destiny and plugins can address that issue.

I know at least 2 plugins on this topic:

If you made a plugin on this topic, be sure to let me know (remember: DON’T MODIFY core, make a plugin instead!!)

Short URL to this post:

YOURLS Plugin Example: Conditional Toolbar

Today a YOURLS users expressed an interesting request:

Hello, I’d like to show a toolbar for, say, http://sho.rt/b when I enter the address http://sho.rt/t/b.
Is there any fast modification I can make on the toolbar sample to make this work?

Of course there is :) Thanks to the plugin API within YOURLS, this is easily feasible, and this would also be an interesting plugin poking with various areas of YOURLS code, so I thought it deserved a little blog post about it.
Continue reading

Short URL to this post:

Happy New Year and a Plugin

Happy New Year, fellow YOURLS users. May this year bring all sorts of shortened URLs to you and your family!

I’m done writing my upcoming book about WordPress plugins (Professional WordPress Plugin Development) so I’m back on being able to dedicate some free time to YOURLS again. Ain’t that good news? :)

Also, I’ve added a new plugin to the Wiki Docs: this one lets you Ignore Bots from your stats and click counts.

Short URL to this post:

YOURLS 1.5 Released

I’m delighted to announce the availability of the YOURLS 1.5 “Ronnie James Dio” release.

\m/ Dio \m/

First, in the tradition of an Open Source CMS I particularly love and steal code from, I decided to baptize YOURLS release after the name of a musician, so I elected to pick someone I truly heart and who has been often with me when coding recently. But this post isn’t about me being a metalhead, right? So, back to YOURLS. What’s new?

Plugins. OMG PLUGINS!!1

The big new feature in YOURLS is a very cool plugin API. Plugins are simple PHP files that extend or modify features of YOURLS. Plugins are uberly cool because you can change how things work without modifying core files, and this way update YOURLS without losing your changes. Plugins are rather simple to write, and the package comes with a few sample plugins that you can use as examples to build your own. If you happen to also know that Open Source CMS I love, you’ll see that things are very similar.

Lots of cool stuff!

This release introduces other cool features or improvements:

  • You can move your config.php in the new /user directory where plugins live. This way, when you want to update YOURLS, simply delete everything except your /user folder and upload fresh files.
  • Shortening links is now more convenient than ever. There are 4 different bookmarklets, and the very handy “Prefix-n-shorten” feature allows you to simply type your site URL before any URL (like sho.rt/http://very-long-url-to-shrink/bleh).
  • Page titles are now saved when you shorten a long URL

Check the almost detailed changelog, or the very detailed commit log for more. Or, you know what? Simply check what’s new in the admin area of your YOURLS setup :)

But it still sucks :(

All things are not perfect yet and there will be a few bugs to axe. In particular, you may experience a few kinks when YOURLS will be fetching the title of a remote page with funky characters.

Also, this release is still using a, hmmm, “rather poor”? yeah, seems polite enough, rather poor DB structure that is more or less what I implemented when I began coding on YOURLS and when I didn’t plan for success or fun features. This DB schema will be just fine for most installs and use, but it’s not scalable and is difficult to make evolve.

So, the next release may be a quick 1.5.1 in a couple of weeks if I get enough feedback to fix a few things I left in 1.5, and then I’ll start working on the major rethinking of the DB structure (and a sure fun updater script) that is a pre-requisite to implement a load of other exciting features.

Another thing I need to improve is the community side. Version 1.4.3 have been downloaded more than 15,000 times so I guess there are a few thousands users now. Issues on the project are fine to report bugs or suggest features, but it’s too limited for the growing number of people seeking advice or help. I also want a simple way for people to share their plugins, so I’ll probably set up some kind of forum soon.

Shorten up!

Thank you for using YOURLS. I hope you’ll enjoy it as much as I enjoyed making it and improving it thanks to the invaluable feedback I got from a few users. Have fun!

Short URL to this post:

Future Database Structure

Even though the 1.5 version is not ready yet, I also have in mind the next release, 1.6, which will introduce a much needed DB rethinking. Currently the DB schema is very weak and inefficient, making it difficult to introduce new features and having lots of redundant data. Another effect of the “never thought this project would get that big” syndrome.

What I have currently in mind is this schema:
DB schema v2

Comments welcome on the wiki page to keep things in one place.

Short URL to this post: